---
title: "Delivery Setup for Exact Online"
description: "This guide explains how to configure the Exact Online integration on our platform using the information provided by the customer."
canonical: "https://docs.cm.com/marketplace/crm-integrations/exact-online-crm/delivery-setup-for-exact-online"
---

# Delivery Setup for Exact Online

> This guide explains how to configure the Exact Online integration on our platform using the information provided by the customer.

Source: https://docs.cm.com/marketplace/crm-integrations/exact-online-crm/delivery-setup-for-exact-online

This guide explains how to configure the Exact Online integration on our platform using the information provided by the customer.

### **1. Prerequisites**

Make sure you have the following details from the customer:

- **Client ID** of the customer's Exact Online app registration.
- **Client Secret** of the same app registration.
- **Division**: the code of the Exact Online administration to connect.
- Confirmation that the app was registered with the Redirect URI `https://www.cm.com/app/marketplace/oauth/callback`.
- Confirmation that a dedicated read-only integration user exists (see [Customer Setup for Exact Online](https://docs.cm.com/marketplace/crm-integrations/exact-online-crm/customer-setup-for-exact-online)).

---

### **2. Configure the Exact Online Integration**

#### **Steps to Configure API Access:**

1. Log in to Marketplace.
2. Navigate to the **Integrations->CRM** section.
3. Find the **Exact Online CRM**, click on **Create Integration** and give an appropriate Integration Name.
4. Enter the following details provided by the customer:
   - **Client ID**: Paste the Client ID.
   - **Client Secret**: Paste the Client Secret.
   - **Division**: Paste the division (administration) code.
5. Click **Save**.

The Client ID and Division are stored as configuration; the Client Secret is stored as a credential. Never put the secret in the configuration fields, tickets or chat.

---

### **3. Authorize the Connection**

The OAuth authorization must be completed by the customer while logged in to Exact Online as the **dedicated integration user**. The access token inherits the rights of the user who authorizes.

1. Ask the customer to log out of any administrator or personal Exact Online session and log in as the dedicated user.
2. The customer clicks **Authorize** on the Exact Online integration in the Marketplace (or opens the authorization link we share).
3. The customer is redirected to Exact Online, reviews the requested access and clicks **Approve**.
4. The customer is returned to the Marketplace and a success notification is shown. The access and refresh tokens are now stored on the integration.

> **Note**: If the authorization ends with a `401` or redirect error, the Redirect URI in the customer's app registration does not exactly match `https://www.cm.com/app/marketplace/oauth/callback`.

---

### **4. Webhooks (Automatic)**

No manual webhook configuration is needed. As soon as the integration has a valid token and a **Division** is configured, the Marketplace registers Exact Online webhook subscriptions for:

- **Accounts**: customer created or changed.
- **SalesOrders**: sales order created or changed.

When the integration is deleted, the Marketplace removes these webhook subscriptions again.

> **Note for Delivery Team**: If the Division was empty during authorization, add it and click **Save** again; this triggers the webhook registration.

---

### **5. Token Refresh (Automatic)**

Exact Online access tokens are valid for 10 minutes and each refresh token can be used **only once**. The Marketplace refreshes the token automatically about every 10 minutes and stores the new refresh token every time. Temporary Exact Online outages are retried automatically.

**Note for Delivery Team**:

- Never call the Exact Online token endpoint with the customer's credentials from another tool (Postman, scripts, other platforms). This uses up the refresh token and breaks the connection.
- If the refresh chain stops (for example after the customer revoked the app or regenerated the secret), the customer must update the Client Secret if changed and **authorize again**.

---

### **6. Send the Data to CDP**

Configure the CDP side as described in the general guide:

- [Configure Marketplace Integration with CDP](https://docs.cm.com/marketplace/crm-integrations/configure-marketplace-integration-with-cdp)

---

### **Api Endpoints of Exact Online**

The webhook notification only contains the key of the changed record. The integration then reads the full record from the official Exact Online REST API:

| Purpose | Endpoint |
| - | - |
| Token (authorization code and refresh) | `POST /api/oauth2/token` |
| Customer details | `GET /api/v1/{division}/crm/Accounts` |
| Sales order header | `GET /api/v1/{division}/salesorder/SalesOrders` |
| Sales order lines | `GET /api/v1/{division}/salesorder/SalesOrderLines` |
| Webhook subscriptions | `/api/v1/{division}/webhooks/WebhookSubscriptions` |

Official documentation: [Exact Online REST API resources](https://start.exactonline.nl/docs/HlpRestAPIResources.aspx).

> **Limits**: Exact Online allows about 60 API calls per minute per division and returns at most 60 records per page.

---

### **7. Current Limitations**

- Only records created or changed **after** the connection is active are sent; there is no historical backfill.
- The generic CRM lookup endpoints (**customers**, **orders**, **orderDetails**) used by MSC and HALO are **not yet supported** for Exact Online. Make sure the customer is aware of this.

---

### **8. Troubleshooting**

| Symptom | Likely cause | Action |
| - | - | - |
| `401` during authorization | Redirect URI mismatch | Customer fixes the Redirect URI in the app registration and authorizes again. |
| Token refresh fails with `invalid_grant` | Refresh token already used, app revoked or secret regenerated | Update the Client Secret if changed; customer authorizes again. |
| No data arriving | Division missing or wrong, or webhooks not registered | Check the Division, click **Save** again to re-register webhooks, and test with a new or changed account. |
| `403` when reading records | The authorizing user lacks rights | Customer checks the rights of the dedicated user (View Accounts, View Sales orders, View Item details) and authorizes again. |
