Accounting integrations

Enable your users to synchronize accounts payable and receivable data with popular accounting solutions.

Overview

🚧

This feature is currently in closed beta version, subject to change, and is only available upon customer requests. If you are an eligible partner of Monite and would like to get access to the Accounting Integration API, please contact your Account Manager at Monite.

Many small and medium-sized businesses use various accounting solutions to store their financial data and prepare it for submission to tax authorities. With Monite, you can connect your users' data to their preferred accounting software and pull necessary financial data for import into your interface, as well as push data in case they need to do any post-accounting work outside of your application.

To support integration with accounting systems, Monite leverages the technology of its strategic partner, Codat, which supports a wide range of accounting systems and connections. Therefore, to enable this functionality, you will also need to make a separate agreement with Codat. Please contact your Account Manager at Monite to assist in this process.

Supported accounting systems

Each entity can connect to one of the following accounting systems:

  • Clear Books
  • Dynamics 365 Business Central
  • Exact (Netherlands)
  • Exact (UK)
  • FreeAgent
  • FreshBooks
  • KashFlow
  • MYOB AccountRight and Essentials
  • Oracle NetSuite
  • Pandle
  • QuickBooks Desktop
  • QuickBooks Online
  • QuickBooks Online Sandbox
  • Sage 200cloud
  • Sage 50 (UK)
  • Sage Business Cloud Accounting
  • Sage Intacct
  • Sandbox
  • Wave
  • Xero
  • Zoho Books

📘

New supported accounting systems will be added in future releases of our platform. If you have any specific requests, please contact our Support Team.

📘

An entity can connect all their data to only one of the accounting systems. If they want to connect it to another accounting system, they have to disconnect the currently connected system before.

Requirements and considerations

  • As a prerequisite, a Monite partner must map all the businesses from their side with corresponding entities on the Monite side. For more information, refer to Entities.
  • A Monite partner should make a separate arrangement with Codat to enable their services via Monite API. To learn more about this and get Monite assistance, please contact your Account Manager at Monite.
  • Each entity that wants to connect to an external accounting system (like Xero or QuickBooks) should create an account with that system and securely store login credentials, as these credentials will be needed in the future to authorize its access to their data, which is stored within a corresponding accounting system.

How the integration works

As a first step, you need to establish a connection to the accounting software of an entity and collect entity credentials to enable this connection.

Once the connection has been configured, all the financial data of this entity is automatically synchronized every hour. In addition, you can pull and push data at any time when needed, based on customer requests.

What data is synchronized

Currently, Monite pull and push limitations depend on capabilities provided by Codat. To review the latest list of resources that can be pulled and pushed in different accounting systems and regions, please visit the corresponding page in Codat documentation: Data coverage at Codat.

Data pull limitations

  • In accounting systems, the currency is set at an entity level, while in Monite, each product can have a price in its own currency. Therefore, when pulling data from accounting systems, Monite uses the currency set at the entity level and sets it for each product.
  • Unlike Monite, Codat does not provide a separate collection of customizable measure units at the entity level. To overcome this limitation, Monite generates some stub measure units when pulling data via Codat, and entity users can always adjust this data later, if needed.

Connect to an accounting system

1. Generate a partner access token

To authenticate your API calls with Monite, you need to generate a new partner-level token. To do this, call POST /auth/token with the following parameters:

curl -X POST 'https://api.sandbox.monite.com/v1/auth/token' \
     -H 'X-Monite-Version: 2023-03-14' \
     -H 'Content-Type: application/json' \
     -d '{
        "grant_type": "client_credentials",
        "client_id": "28c10852-7e78-43cf-abfb-efeed7734963",
        "client_secret": "615b3cfa-646b-41d9-b768-521f79315ac5"
     }'

The successful response contains the token and its validity time (in seconds):

{
  "access_token": "eyJ0eXAiOiJKV1QiLCJhb...",
  "token_type": "Bearer",
  "expires_in": 1800
}

2. Check currently configured connections

Before configuring new accounting connections for this entity, we recommend that you ensure that no other existing accounting connections are active for this entity at the moment. For that, call GET /accounting_connections with the X-Monite-Entity-Id header containing the entity ID:

curl 'https://api.sandbox.monite.com/v1/accounting_connections' \
  -H 'X-Monite-Version: 2023-03-14' \
  -H 'X-Monite-Entity-Id: ENTITY_ID' \
  -H 'Authorization: YOUR_PARTNER_TOKEN'

If there are no other active connections set up for this entity, then you receive a 200 OK response with an empty data object:

{
  "data": []
}

3. Establish a connection to an accounting system

To establish a new accounting connection that allows an entity to synchronize all its accounting data with a third-party accounting system, call POST /accounting_connections. In this request, pass the entity ID in the X-Monite-Entity-Id header and specify the software type in the platform parameter:

curl -X POST 'https://api.sandbox.monite.com/v1/accounting_connections' \
     -H 'X-Monite-Version: 2023-03-14' \
     -H 'X-Monite-Entity-Id: ENTITY_ID' \
     -H 'Authorization: Bearer YOUR_PARTNER_TOKEN' \
     -d '{
      "platform": "xero"
     }'

The successful 201 Created response contains the information about the newly created connection:

{
    "id": "bb0b61e3-2295-4212-8a96-df60dd3528ab",
    "created_at": "2023-02-16T07:38:01.631172+00:00",
    "updated_at": "2023-02-16T07:38:01.631192+00:00",
    "status": "pending_auth",
    "platform": "xero",
    "connection_url": "https://link-api.codat.io/companies/42ed7770-51ea-45e5-9e4a-160er3db539d/connections/70eb9b71-7126-4d5f-b088-de7b86c84bc5/start",
    "last_pull": "2023-02-16T07:38:01.631218+00:00",
    "errors": null
}

Initially, the status of this connection is set to pending_auth, which indicates that an entity user should authorize this connection at a web page indicated in the connection_url parameter.

Make sure you store the id of this connection, as you will need it to retrieve the connection status and details in the future via GET /accounting_connections/{id}.

4. Entity user authorizes their connection

Next, redirect your entity user to the web page indicated in the connection_url parameter of the accounting connection.

On this page, an entity user must provide their login credentials with that accounting system and give authorization for Monite to access their data via Codat.

The URL of this authorization page looks like this:

https://link-api.codat.io/companies/SOME_ID/connections/SOME_ID/start

The next steps vary depending on the accounting system, and below we give you an example of how this flow might look like for Xero:

  1. Log in to Xero (if not already).
  2. The following screen is displayed.
    Select the organization account whose data you want to synchronize, and click Allow access:
  1. On the next screen, verify the selected organization and click Confirm:
  1. On the next screen, click Next:
  1. Click Finish:

Pull data from the accounting system

Once the accounting connection is established, you can pull the data from the third-party platform. To initiate pulling data, call POST /accounting_connections/{id}/data_pulls.

It is possible to specify the pull for only receivables or line items by providing the resource_type query parameter:

curl -X POST 'https://api.sandbox.monite.com/v1/accounting_connections/{id}/data_pulls?resource_type=line_items' \
     -H 'X-Monite-Version: 2023-03-14' \
     -H 'X-Monite-Entity-Id: ENTITY_ID' \
     -H 'Authorization: Bearer YOUR_PARTNER_TOKEN'

The successful response indicates the pull was executed successfully and contains the accounting connection details:

{
  "data": [
    {
      "id": "bb0b61e3-2295-4212-8a96-df60dd3528ab",
      "connection_id": "3fa85f64-5717-4562-b3fc-2c963f76afa6",
      "resource_type": "receivables",
      "status": "queued",
      "requested_at": "2023-02-16T07:38:01.631172+00:00",
      "errors": null
    }
  ]
}

Disconnect the accounting system

To disconnect an already established accounting connection, call POST /accounting_connections/{id}/disconnect:

curl -X POST 'https://api.sandbox.monite.com/v1/accounting_connections/{id}/disconnect' \
     -H 'X-Monite-Version: 2023-03-14' \
     -H 'X-Monite-Entity-Id: ENTITY_ID' \
     -H 'Authorization: Bearer YOUR_PARTNER_TOKEN'

The successful 200 OK response contains the information about the recently disconnected connection:

{
  "id": "3fa85f64-5717-4562-b3fc-2c963f76afa6",
  "status": "disconnected",
  "platform": "xero",
  "created_at": "2023-04-02T13:11:53.250Z",
  "updated_at": "2023-04-02T13:11:53.250Z",
  "last_pull": "2023-04-02T13:11:53.250Z",
  "errors": null
}

Troubleshooting

If you experience any issues and need our assistance with this integration, please feel free to contact our Support Team at any time.