ml-connector
Exact OnlineJira

Exact Online and Jira integration

Exact Online runs accounting, purchasing, and projects. Jira tracks tasks, bugs, and work for software teams. Connecting the two keeps project costs, invoices, and purchase commitments visible inside Jira so teams see the financial impact of their work, and cost allocations from Jira worklogs flow back to Exact Online projects. ml-connector bridges two very different platforms: Exact Online's multi-region OData REST API with short token lifetimes and division-based routing, and Jira's issue-centric webhook model with 30-day expiry windows.

How Exact Online works

Exact Online is a cloud ERP platform covering accounting, purchasing, sales, inventory, HR, and project management for SMEs. It exposes data through OAuth 2.0 REST with OData v3 query syntax (filter, select, orderby, top, skip) across region-specific base URLs for Netherlands, Belgium, UK, Germany, France, Spain, and USA. Access tokens live for 10 minutes and refresh tokens for 30 days (rotating on each refresh). Webhooks are available for a broad set of resources including Accounts, SalesOrders, PurchaseOrders, PurchaseInvoices, GLAccounts, Projects, and TimeTransactions, delivered via HTTP POST with HMAC-SHA256 validation. Division IDs are required for all API calls and must be fetched from the /current/Me endpoint. Related entities cannot be expanded in a single request, so fetching projects with their line items requires separate calls. Authorization codes expire after 3 minutes and are single-use only.

How Jira works

Jira is Atlassian's issue and project tracking platform for software teams. It exposes data through REST APIs for Issues, Projects, Users, Comments, Worklogs, Sprints, and other workflow objects, authenticated via OAuth 2.0 or Basic auth with email and API token. Webhooks can be registered for events including issue_created, issue_updated, issue_deleted, comment_created, worklog_created, and 20+ others. Webhooks must be refreshed before 30-day expiry or they stop firing. Webhook signatures are validated via HMAC-SHA256 in the X-Hub-Signature header. Jira has no native invoice, purchase order, GL account, or vendor entities, so all project cost and purchasing data is mapped to custom fields on Issues. Atlassian Document Format (ADF) is used for issue descriptions in the v3 API instead of plain text.

What moves between them

The main flow is from Exact Online into Jira. Purchase orders and invoices from Exact Online are mapped to Jira issue custom fields, and cost data is appended to issue comments or custom fields so teams see the purchasing context. Exact Online projects and their costs are synced into Jira projects. Worklogs created in Jira are read by ml-connector and posted as time transactions back to Exact Online projects. GL accounts and cost centers from Exact Online are synced to Jira so custom field dropdowns reflect valid accounting dimensions. Changes to projects or purchase orders in Exact Online trigger webhooks that update the corresponding Jira issues.

How ml-connector handles it

ml-connector stores both credential sets encrypted and manages Exact Online's short token lifetime by refreshing the access token when a call returns 401. It fetches the division ID from the /current/Me endpoint on first auth and caches it for the customer. On the Jira side, it registers webhooks and tracks their 30-day expiry, refreshing them via PUT before they expire so events do not get dropped. For each customer, ml-connector maps the region-specific Exact Online base URL (Netherlands, Belgium, UK, Germany, France, Spain, or USA) to the correct endpoint. Purchase orders and invoices are fetched from Exact Online via OData query and mapped to Jira issue custom fields; because Exact Online does not support $expand, line items are fetched in separate requests and assembled before posting to Jira. Webhook payloads from Exact Online include only the entity key and action type, so ml-connector immediately fetches the full record via REST. Worklogs from Jira are read via webhook and posted as time transactions to the matching Exact Online project, with cost center and GL account validation on each post. Exact Online webhooks are validated using HMAC-SHA256 computed over the Content node with the webhook secret from the App Center. Refresh tokens must be used at least once every 30 days or the user must re-authorize, so ml-connector tracks refresh token age and alerts when renewal is approaching.

A real-world example

A mid-sized software consulting firm uses Exact Online for billing, project accounting, and vendor management, and uses Jira to track development work, QA, and support tickets across multiple client projects. Before the integration, project managers spent time each week pulling purchase orders and invoice totals from Exact Online and pasting them into Jira issue comments to remind teams of budget constraints. Time entries in Jira were exported to a spreadsheet and re-entered into Exact Online projects to track labor costs. With Exact Online and Jira connected, purchase orders and invoice summaries are attached to issues automatically when linked, and time logged in Jira flows directly to Exact Online as project time transactions. Budget and cost visibility are embedded in daily work, and month-end project accounting closes without manual re-entry.

What you can do

  • Sync purchase orders and invoices from Exact Online to Jira issues, mapped to custom fields so teams see project cost context.
  • Post Jira worklogs as time transactions back to Exact Online projects, with automatic cost center and GL account validation.
  • Validate Exact Online GL accounts and cost centers against Jira custom field dropdowns so posting always lands on valid accounting dimensions.
  • Refresh Exact Online access tokens (10-minute lifetime) and Jira webhooks (30-day expiry) automatically, with alerts when token renewal is approaching.
  • Handle multiple Exact Online regions (Netherlands, Belgium, UK, Germany, France, Spain, USA) with division ID routing, and validate webhook signatures via HMAC-SHA256.

Questions

Which direction does data move between Exact Online and Jira?
The main flow is from Exact Online into Jira. Purchase orders, invoices, and project costs are synced to issue custom fields so teams see financial context. Worklogs created in Jira are read by ml-connector and posted as time transactions back to Exact Online projects with automatic cost center validation. GL accounts and cost centers are synced bidirectionally so accounting dimensions are consistent.
How does ml-connector handle Exact Online's 10-minute access token and 30-day refresh token?
ml-connector stores credentials encrypted and tracks token expiry. When an API call returns 401, it refreshes the access token immediately. It also monitors refresh token age and alerts when renewal is approaching, since refresh tokens must be used at least once every 30 days or the user must re-authorize. Division IDs are fetched once from the /current/Me endpoint and cached per customer.
What happens when Exact Online and Jira webhooks expire?
Exact Online webhooks are registered per topic per division and validated using HMAC-SHA256. Jira webhooks expire after 30 days and must be refreshed before that window closes. ml-connector tracks both webhook types and refreshes Jira webhooks via PUT before expiry. If a webhook stops firing, ml-connector falls back to polling the source system until the webhook is restored.

Related integrations

Connect Exact Online and Jira

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started