.png)
Exact Online Integration Guide
Connect Exact Online’s division-specific REST/OData resources with enterprise applications through authenticated Martini workflows and APIs.
Exact Online integration options at a glance
Exact Online’s primary integration model is its OAuth 2.0-protected REST API, which exposes OData-style resources across functional domains such as CRM and Financial. Requests are generally division-specific and can use resource-dependent filtering, selection, ordering, and pagination. Selected resources also provide synchronization-oriented or bulk capabilities, while document and attachment resources support applicable file scenarios. A general all-object webhook model is not confirmed, so scheduled polling and documented incremental synchronization are the safer patterns. Martini can manage credentials and division configuration, consume these APIs, batch and transform data, apply business rules, persist checkpoints, and expose controlled APIs for downstream systems.
| Integration point | Supported by Exact Online? | Common use cases | How Martini supports it |
|---|---|---|---|
| REST/OData APIs | Yes | Primary access to Accounts, Contacts, Items, SalesInvoices, SalesItemLines, GLAccounts, and other domain resources. Requests normally include a versioned path, functional domain, division, and resource. | Martini can consume Exact Online REST/OData resources, manage request configuration, paginate responses, transform payloads, and expose a downstream Martini API. |
| Authentication | Yes | OAuth 2.0 authorization-code access uses a developer application, client ID, client secret, redirect URI, tokens, scopes, and a selected division. | Martini can store secrets and environment-specific division settings, refresh access tokens, and use authenticated API calls in workflows. |
| Incremental synchronization | Yes | Selected Exact Online domains and objects provide synchronization-oriented resources or change information for retrieving data after a prior checkpoint. | Martini can persist checkpoints, retrieve changes, protect against reprocessing, and handle supported inactive or deleted-record indicators. |
| Bulk / batch APIs | Limited | Bulk-oriented resources exist for selected operations or resources, but coverage and limits must be verified for each object. | Martini can call supported bulk resources or implement bounded batching with pagination, checkpoints, and retry handling when bulk coverage is unavailable. |
| File / attachment APIs | Limited | Document and attachment-related resources support applicable invoice and business-file scenarios, with operations and binary behavior varying by resource. | Martini can orchestrate document metadata and content transfers where the Exact Online resource supports them, while preserving related business identifiers. |
| Scheduled synchronization | Yes | Scheduled polling is the recommended fallback when a general Exact Online webhook or event model is not confirmed. | Martini scheduler-triggered workflows can poll resources, process pages, persist checkpoints, and resume after transient failures. |
| Webhooks / outbound callbacks | Not confirmed | A general all-object webhook mechanism was not confirmed, so push notifications for Accounts, Items, or invoices should not be assumed. | Martini can receive a callback only when a separately verified Exact Online feature exists; otherwise it can use scheduled or incremental synchronization. |
| Database / analytics access | Not confirmed | Direct Exact Online database access should not be assumed. Integrations should use the documented APIs or an officially supported export or reporting mechanism. | Martini can load API-derived data into supported target databases or reporting pipelines without depending on undocumented vendor database access. |
How Exact Online exposes data and business events
Exact Online REST/OData APIs
Exact Online’s primary public integration model uses versioned REST/OData resources organized by functional domain and division. Resource-dependent query options can support filtering, selection, ordering, and paging, but each resource’s behavior must be verified.
Martini implementation pattern
Martini implementation pattern: a workflow obtains an OAuth 2.0 access token, builds the division-specific resource request, retrieves pages, maps the response into a canonical model, applies business rules, and writes the result to the target or exposes it through a Martini API.
Implementation sequence
Incremental synchronization
Selected Exact Online resources provide synchronization-oriented APIs or change information that can retrieve data after an earlier synchronization point. Availability and semantics vary by object and division.
Martini implementation pattern
Martini implementation pattern: a scheduled workflow reads the persisted checkpoint, requests supported changes, processes each page, commits successful target writes, and advances the checkpoint only after the relevant batch is durable.
Implementation sequence
Bulk and batch resources
Exact Online provides bulk-oriented resources for selected operations, but bulk coverage is not universal. The exact object and operation must be confirmed before implementation.
Martini implementation pattern
Martini implementation pattern: the workflow selects a supported bulk operation where available; otherwise it divides paged data into bounded batches, controls concurrency, retries transient failures, and records item-level outcomes.
Implementation sequence
Documents and attachments
Exact Online exposes document and attachment-related resources for supported business objects. Binary content, metadata, and supported operations vary by resource.
Martini implementation pattern
Martini implementation pattern: Martini retrieves or submits document metadata and content through the documented resource, associates files with the source business identifier, and records transfer status without assuming uniform binary behavior across resources.
Implementation sequence
Scheduled synchronization
A general all-object Exact Online webhook mechanism was not confirmed. Scheduled polling is therefore the reliable general-purpose approach for discovering changes where synchronization resources are available.
Martini implementation pattern
Martini implementation pattern: a scheduler starts a workflow for each configured division and resource, applies bounded paging and rate-aware execution, and records checkpoints, errors, and reconciliation metrics.
Implementation sequence
Common Exact Online integration patterns
Pattern 1: Synchronize customers to a CRM
When to use this pattern
Use this pattern when Exact Online is the finance-owned source for Accounts and Contacts, or when customer ownership is explicitly shared with a CRM. It supports scheduled or incremental processing and protects against duplicates and inactive-record inconsistencies.
Integration direction
Example Mapping
| Exact Online Field | Canonical Field | Target Field |
|---|---|---|
| Account.ID | customer.externalId | Salesforce Account.ExactOnlineId |
| Account.Name | customer.name | Salesforce Account.Name |
| Contact.Email | contact.email | Salesforce Contact.Email |
| Account.Status | customer.status | Salesforce Account.Status |
Martini implementation pattern
A scheduled Martini workflow reads a division-specific checkpoint, retrieves changed Accounts and Contacts, validates relationships and required fields, resolves existing CRM records by external ID, and upserts the results. Business rules determine ownership and inactive handling; transient API failures are retried and failed items are retained for reprocessing.
Martini capabilities used
- workflows
- API consumption
- OAuth 2.0 configuration
- data mapping
- business rules
- checkpoint persistence
- error handling
Pattern 2: Publish sales invoices
When to use this pattern
Use this pattern when SalesInvoices and SalesItemLines must be delivered to a customer portal, document-management application, reporting model, or another finance platform. Invoice lifecycle status must be respected rather than treating creation as final posting.
Integration direction
Example Mapping
| Exact Online Field | Canonical Field | Target Field |
|---|---|---|
| SalesInvoices.InvoiceNumber | invoice.documentNumber | Portal Invoice Number |
| SalesInvoices.Currency | invoice.currency | Portal Currency |
| SalesInvoices.Status | invoice.processingStatus | Portal Status |
| SalesItemLines.Item | invoiceLine.itemId | Portal Line Item ID |
Martini implementation pattern
Martini polls the invoice resource or a supported synchronization resource, retrieves the associated lines, maps tax, currency, customer, and status fields, and publishes a normalized invoice payload. Deterministic invoice identifiers prevent duplicate delivery, while validation failures are separated from retryable transport errors.
Martini capabilities used
- scheduled workflows
- REST API consumption
- data mapping
- JSON handling
- validation
- duplicate detection
- retry handling
Pattern 3: Process commerce orders into Exact Online
When to use this pattern
Use this pattern when Shopify or Magento orders need to create or update applicable Exact Online Accounts, Items, and financial sales resources. It is useful where customer matching, item resolution, tax treatment, and duplicate order handling must be centralized.
Integration direction
Example Mapping
| Exact Online Field | Canonical Field | Target Field |
|---|---|---|
| order.id | order.externalId | Exact Online source reference |
| customer.email | customer.email | Accounts.Email |
| line_items[].sku | orderLine.itemCode | Items.Code |
| tax_lines[].price | tax.amount | Exact Online tax value |
Martini implementation pattern
Martini receives or retrieves the commerce order, validates required customer and item references, resolves or creates matching Accounts, applies tax and payment mappings, and submits the appropriate Exact Online resources. The workflow uses deterministic duplicate checks, bounded retries, and an exception path for unresolved Items or invalid financial data.
Martini capabilities used
- API consumption
- workflow orchestration
- data mapping
- business rules
- validation
- duplicate detection
- error handling
Pattern 4: Load Exact Online finance data into a reporting platform
When to use this pattern
Use this pattern when GLAccounts, invoice data, Accounts, Items, and payment-related resources must be extracted into a warehouse or reporting platform. It supports scheduled or incremental loads with reconciliation and late-change handling.
Integration direction
Example Mapping
| Exact Online Field | Canonical Field | Target Field |
|---|---|---|
| GLAccounts.ID | ledgerAccount.externalId | Power BI LedgerAccountId |
| SalesInvoices.InvoiceDate | invoice.date | Power BI InvoiceDate |
| SalesInvoices.Amount | invoice.totalAmount | Power BI TotalAmount |
| Accounts.ID | customer.externalId | Power BI CustomerId |
Martini implementation pattern
Martini runs division-aware extraction workflows, uses resource-specific incremental fields where available, transforms API responses into reporting structures, and loads the target through the selected ingestion design. It preserves source timestamps and identifiers, reconciles record counts and totals, and retries only transient failures.
Martini capabilities used
- scheduled workflows
- incremental synchronization
- API consumption
- data transformation
- checkpoint persistence
- reconciliation
- monitoring
Applications commonly integrated with Exact Online
Exact Online can be integrated with adjacent business applications when customer, commerce, financial, reporting, or operational data must cross system boundaries. The appropriate direction and ownership model depend on the division, resource coverage, and business process.
| Application | Scenario | Direction | Martini Pattern |
|---|---|---|---|
| Salesforce | Synchronize finance-owned Accounts and Contacts with CRM customer information and selected product or financial data. | Exact Online → Martini → Salesforce | A scheduled Martini workflow retrieves changed Accounts and Contacts, applies external-ID matching and ownership rules, then upserts Salesforce data with validation, retry handling, and audit checkpoints. |
| Shopify | Transfer commerce orders, customers, products, and financial sales information into Exact Online. | Shopify → Martini → Exact Online | Martini receives or retrieves Shopify order data, resolves Accounts and Items, maps tax and payment values, and creates or updates the applicable Exact Online resources with duplicate-order protection. |
| Magento | Post e-commerce sales and customer information to Exact Online while synchronizing catalog or accounting identifiers where required. | Magento → Martini → Exact Online | A Martini workflow consumes Magento data, normalizes customer and item identifiers, validates financial fields, and submits controlled Exact Online API requests with bounded retries. |
| HubSpot | Align Accounts and Contacts with finance-owned customer records and support revenue-related reporting. | Exact Online → Martini → HubSpot | Martini polls Exact Online synchronization resources where available, maps customer and contact data to HubSpot, and applies duplicate detection and inactive-account rules before upsert. |
| Microsoft Power BI | Provide invoice, customer, item, and financial data for reporting and management analysis. | Exact Online → Martini → Microsoft Power BI | Scheduled Martini workflows extract Exact Online resources by division, transform them into a reporting model or delivery payload, and load the selected Power BI ingestion design while preserving source identifiers and timestamps. |
| NetSuite | Coordinate customer, item, invoice, and financial master data where Exact Online and NetSuite coexist across entities or regions. | Exact Online → Martini → NetSuite | Martini routes entity-specific data between the systems, applies ownership and reconciliation rules, and records source and target identifiers to prevent duplicate financial postings. |
| Jira | Associate operational work and exceptions with customers, projects, invoices, or finance-related reference data. | Exact Online → Martini → Jira | Martini publishes selected Exact Online reference and invoice information to Jira and can route issue status or exception details back through controlled workflows. |
How to build a Exact Online integration in Martini
Objective
Configure the Exact Online developer application, OAuth 2.0 settings, division identifier, scopes, and environment-specific secrets without embedding credentials in workflow logic.
Instructions in Martini
- Configure the OAuth 2.0 authorization-code settings
- Store the client secret and refresh token in Martini secrets
- Set the Exact Online division as environment configuration
- Verify access to the required functional domains and resources
Objective
Select scheduled polling or an incremental synchronization approach because a general Exact Online webhook model is not confirmed.
Instructions in Martini
- Use a scheduler for recurring synchronization
- Load the last successful checkpoint
- Use a separately verified callback only when the required Exact Online feature is confirmed
- Set bounded execution and concurrency limits
Objective
Call the relevant division-specific REST/OData resource and retrieve complete collections using supported pagination or synchronization parameters.
Instructions in Martini
- Build the versioned domain and resource path
- Apply only query options supported by the resource
- Follow continuation or paging information
- Capture source identifiers, timestamps, and response status
Objective
Coordinate retrieval, enrichment, validation, target writes, checkpointing, and exception handling as a maintainable Martini workflow.
Instructions in Martini
- Separate extraction, transformation, and target-write stages
- Use controlled loops for pages or batches
- Persist intermediate processing state when required
- Route validation failures separately from transient API failures
Objective
Convert Exact Online objects into a canonical or target-specific model while preserving division, document, financial, and relationship identifiers.
Instructions in Martini
- Map Accounts, Contacts, Items, SalesInvoices, SalesItemLines, and GLAccounts explicitly
- Normalize nullable and nested fields
- Preserve currency, tax, payment-term, and processing-status information
- Transform JSON structures into the target contract
Objective
Enforce business ownership, lifecycle, duplicate, fiscal-period, and data-quality rules before committing changes.
Instructions in Martini
- Resolve external IDs before creating target objects
- Validate required customer, item, tax, and ledger references
- Do not treat invoice creation as final posting without status confirmation
- Apply inactive, deleted, or merged-record handling where supported
Common Exact Online data objects used in integrations
| Object | Typical Use | Common target systems | Martini handling |
|---|---|---|---|
| Accounts | Organizations represented as customers or suppliers and used as the commercial party for transactions. | Salesforce, HubSpot, Shopify, Magento, NetSuite | Martini retrieves or receives Accounts through REST/OData resources, normalizes identifiers and addresses, applies duplicate and ownership rules, and upserts the target. |
| Contacts | People associated with Accounts and used for customer communication or CRM synchronization. | Salesforce, HubSpot, Jira | Martini maps contact relationships and communication fields, validates Account references, and handles inactive or changed contacts according to the synchronization policy. |
| Items | Products or services used in sales and purchasing processes. | Shopify, Magento, NetSuite, reporting platforms | Martini maps item identifiers, descriptions, status, and applicable commercial attributes, with resource-specific validation before writing downstream. |
| SalesInvoices | Sales invoice headers containing document, customer, status, currency, tax, and processing information. | Customer portals, document-management applications, NetSuite, data warehouses | Martini preserves invoice identifiers and status, applies lifecycle rules, prevents duplicate delivery, and coordinates header processing with SalesItemLines. |
| SalesItemLines | Line-level products or services associated with SalesInvoices. | Customer portals, reporting platforms, NetSuite, data warehouses | Martini joins lines to invoice headers, maps Items and amounts, validates tax and currency details, and emits a normalized invoice structure. |
| GLAccounts | General ledger accounts used to classify and report financial postings. | Data warehouses, Microsoft Power BI, NetSuite | Martini extracts GLAccounts by division, preserves source identifiers and effective source metadata, and transforms them into reporting or cross-system accounting models. |
Authentication and security considerations
OAuth 2.0 access
Exact Online uses OAuth 2.0 authorization-code access through a developer application. Integrations typically require a client ID, client secret, redirect URI, scopes, access token, refresh token, and selected division.
Secrets and configuration
Martini can keep client secrets, refresh tokens, division identifiers, and environment-specific API settings in secure configuration rather than embedding them in workflow logic.
Division and permissions
Exact Online requests are generally division-specific and must use permissions appropriate to the requested resources. Limit scopes and access to the divisions and business domains required by the integration.
Operational considerations for Exact Online integrations
Pagination and checkpoints
Collection responses may require paging, and query support varies by resource. Persist checkpoints and source identifiers so interrupted runs can resume without reprocessing completed data.
Rate limits and retries
Confirm quotas and throttling for the relevant Exact Online subscription. Use bounded concurrency and exponential backoff for transient failures, while avoiding blind retries for validation or authorization errors.
Financial lifecycle and idempotency
Preserve invoice status, document numbers, currency, tax, payment terms, fiscal-period information, and division identifiers. Use deterministic duplicate checks because successful creation does not necessarily mean final posting.
Schema and testing
Resource availability and fields can vary by country, edition, division, and API version. Test representative Accounts, Items, invoices, lines, and ledger data, and monitor changes to resource behavior and deprecation notices.
Why use Martini instead of scripts or point-to-point integrations?
Orchestration beyond scripts
Martini separates API consumption, scheduling, transformation, validation, target writes, checkpointing, and error handling into maintainable workflows rather than isolated scripts.
Reusable integration assets
Teams can centralize Exact Online OAuth configuration, division-aware request patterns, canonical mappings, business rules, and controlled APIs for reuse across CRM, commerce, finance, and reporting processes.
Operational control
Martini provides workflow-based handling for pagination, bounded batching, retries, reconciliation, and monitoring. This reduces point-to-point coupling while retaining the flexibility to use custom logic where resource-specific behavior requires it.
Frequently asked questions
Exact Online is primarily integrated through its OAuth 2.0-protected REST/OData APIs. Enterprise workflows can retrieve or update division-specific resources such as Accounts, Items, SalesInvoices, SalesItemLines, and GLAccounts, using scheduled polling or documented incremental synchronization. Selected bulk and document resources can support specialized scenarios.
Yes. Martini can integrate with Exact Online by consuming its REST/OData APIs, managing OAuth 2.0 credentials and division configuration, orchestrating scheduled or incremental workflows, transforming data, and exposing controlled APIs for downstream applications.
No. A dedicated Exact Online connector is not required. Martini can use Exact Online’s confirmed native REST/OData APIs, OAuth 2.0 authentication, synchronization resources, and selected bulk or document resources.
Lonti does not charge an additional per-connector or per-vendor fee to integrate Exact Online. Integrations are subject to the provisioned capacity of the Martini environment. Separate costs may apply from Exact Online, cloud infrastructure, or other third-party systems depending on subscription, usage, and deployment model.
REST/OData is the current primary method. Use resource-specific incremental synchronization where documented, selected bulk resources where supported, and document or attachment resources for applicable file scenarios. GraphQL and a current recommended SOAP model were not confirmed.
A general all-object Exact Online webhook or outbound-callback model was not confirmed. Do not assume that Accounts, Items, or invoice changes can be pushed. Scheduled polling and documented synchronization resources are the safer general patterns unless a specific callback feature is verified.
Martini can run division-aware scheduled or incremental workflows, persist synchronization checkpoints, page through resources, and map actual Exact Online objects into canonical or target models. It can preserve external IDs, document numbers, currencies, tax information, timestamps, and processing status while applying validation and ownership rules.
Martini can separate validation and authorization failures from transient transport or throttling failures, retry eligible failures with backoff, and use bounded concurrency. Persisted external IDs, deterministic duplicate checks, checkpoints, audit data, and reconciliation results help prevent duplicate writes and support safe reprocessing.
Related Martini documentation
Workflows
Transformation
Connect Exact Online with Martini
Use Martini to build reliable Exact Online integrations around REST/OData APIs, OAuth 2.0, division-aware workflows, data synchronization, transformation, and operational controls.