ml-connector
Exact OnlineStedi

Exact Online and Stedi integration

Exact Online runs your ERP across accounting, sales, and procurement. Stedi translates JSON to X12 EDI and routes files to trading partners. Connecting the two sends your purchase orders and vendor invoices as standard EDI messages to your supply chain partners without manual re-keying or format conversion. Inbound shipment notices from partners flow back into Exact as goods receipts, keeping your inventory in step with real delivery.

How Exact Online works

Exact Online exposes accounts, purchase orders, purchase invoice lines, GL accounts, cost centers, items, and goods deliveries through REST API with OData v3 query parameters (filter, select, orderby, top, skip). Each customer instance requires a division ID, obtained from the /api/v1/current/Me endpoint. Authentication uses OAuth 2.0 Authorization Code Grant with 10-minute access tokens and 30-day rotating refresh tokens, requiring app registration in the Exact Online App Center. Exact Online supports webhooks for purchase orders, invoices, and goods deliveries, delivering HMAC-SHA256-signed payloads that include only the entity key and action; full entity data must be fetched separately via REST API.

How Stedi works

Stedi is an EDI translation platform exposing purchase order, invoice, and advance shipment notice entities through REST API with JSON bodies. Base URL is https://core.us.stedi.com/2023-08-01. Authentication uses API keys in the Authorization header with no expiry. Stedi translates JSON to X12 EDI files (850 for purchase orders, 810 for invoices, 856 for shipment notices) and routes them via SFTP, FTPS, or AS2 to trading partners. Inbound EDI files parse back to JSON and trigger webhooks on transaction.processed.v2 events with up to 4 retries at 90-second intervals. Stedi is a translation platform only; it does not store vendors or GL accounts.

What moves between them

The main flow runs from Exact Online into Stedi. When a purchase order or vendor invoice is created or updated in Exact, the webhook triggers; ml-connector fetches the full record, maps line cost centers to Stedi dimensions, translates to X12 format (850 for orders, 810 for invoices), and posts to Stedi for routing via SFTP to the partner. Inbound 856 advance shipment notices from partners are parsed by Stedi, webhook to ml-connector, and posted back into Exact as goods receipt lines with quantities and item references. Reference data such as items and suppliers is read from Exact and used to map Stedi transactions back to the correct cost centers and GL accounts.

How ml-connector handles it

ml-connector stores the Exact OAuth token encrypted, refreshes it when requests return 401 before the 10-minute window expires, and fetches the division ID once per customer. For each Exact webhook, it fetches the full purchase order or invoice via REST, extracts line items, cost centers, and GL accounts, constructs the X12 message structure (ISA/GS envelope, detail line segments, SE trailer), and posts to Stedi with an Idempotency-Key header for deduplication. On the inbound side, ml-connector accepts Stedi webhooks on 856 shipment notices, parses the partner reference and quantities, and posts goods receipt lines back into Exact against the matching purchase order. Because Stedi does not store vendors, ml-connector maintains a mapping table between Stedi partner identifiers and Exact supplier account codes. Retry logic on Stedi payloads respects the 4-retry, 90-second backoff policy, and every transaction carries a full audit trail of EDI structure, mapping decisions, and delivery status.

A real-world example

A mid-sized wholesale distributor runs Exact Online for inventory and procurement across regional warehouses, and ships orders to manufacturing partners in Europe and North America. Before the integration, the procurement team exported purchase orders from Exact as CSV, manually converted them to X12 EDI, and uploaded files via SFTP to each partner. Inbound shipment notices came back as EDI files; they were parsed by hand and re-entered into Exact as goods receipt lines, creating typos and delays in inventory updates. With Exact Online and Stedi connected, every purchase order flows automatically from Exact to Stedi, translates to X12, and routes via SFTP in real time. Shipment notices return as webhooks, parse to JSON, and post as goods receipts with zero manual work. Warehouse staff now sees real inventory the same day shipments are received.

What you can do

  • Translate Exact Online purchase orders to X12 850 format and send via SFTP to suppliers without manual EDI formatting.
  • Convert vendor invoices from Exact to 810 invoices and route through Stedi to trading partners on your procurement schedule.
  • Receive X12 856 advance shipment notices from suppliers, parse them via Stedi, and post as goods receipt lines back into Exact.
  • Map Exact cost centers and GL accounts to Stedi EDI dimensions so supply chain transactions land on the correct financial records.
  • Manage OAuth token refresh, webhook signature validation, and full audit trails of every order, invoice, and shipment message.

Questions

How does ml-connector handle the different authentication models between Exact Online and Stedi?
ml-connector stores both credential sets encrypted. For Exact, it manages the OAuth 2.0 token lifecycle, refreshing before the 10-minute expiry window closes and using the rotating 30-day refresh token to maintain connection. For Stedi, it presents the API key on every request. Both are cached per customer so Exact division ID and Stedi partner identifiers are fetched once and reused.
What happens when Exact webhooks fire for purchase orders and invoices?
Exact webhooks contain only the entity key and action (create/update/delete). ml-connector fetches the full record via REST API, extracts cost centers, GL accounts, and line items, constructs the X12 message (850 for orders, 810 for invoices), and posts to Stedi with an Idempotency-Key header for deduplication. Stedi then routes the EDI file via SFTP to the configured partner.
How does the integration handle inbound 856 shipment notices from suppliers?
Stedi parses inbound EDI files from SFTP into JSON and webhooks ml-connector on the transaction.processed.v2 event. ml-connector extracts the partner reference and line quantities, maps the Stedi partner ID to the Exact supplier account code, and posts goods receipt lines into Exact against the matching purchase order. If the webhook fails, Stedi retries up to 4 times at 90-second intervals.

Related integrations

Connect Exact Online and Stedi

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

Get started