ml-connector
Epicor KineticAdyen

Epicor Kinetic and Adyen integration

Epicor Kinetic runs your manufacturing, distribution, and finance. Adyen processes your card and alternative payments. Connecting the two means every Adyen settlement lands in the Epicor Kinetic general ledger without re-keying from a downloaded report. ml-connector reads Adyen's reconciliation reports and payment events, then posts the gross receipts, refunds, and processor fees into Epicor against the GL accounts you choose. Because Adyen has no invoice or vendor records of its own, the integration is built around the records Adyen does expose: payments, refunds, payouts, disputes, and settlement reports.

How Epicor Kinetic works

Epicor Kinetic exposes vendors, AP invoices, purchase orders, AP payments, GL accounts, customers, and parts through its Open REST API, an OData v4 surface served as JSON over HTTPS from a tenant-specific URL that includes the instance and Company segment. It authenticates with Basic auth plus an API Key header, or with OAuth2 client credentials against the Epicor Identity Provider on cloud deployments, where the API Key is still required alongside the bearer token. Epicor Kinetic has no native outbound webhooks, so changed records are read by polling a service with an OData $filter on a modified-date field using $top and $skip paging. Complex writes such as AP invoices use the UpdateMaster call rather than individual line endpoints.

How Adyen works

Adyen exposes payments, captures, refunds, payouts and transfers, disputes, and reconciliation reports through versioned REST APIs, each on its own base URL, with a merchant-specific live URL prefix that must be supplied for production calls. Authentication is an API key sent in the X-API-Key header, or Basic auth, scoped to a company or merchant account. Adyen has full webhook support with HMAC-SHA256 signatures and pushes a REPORT_AVAILABLE event when a new settlement or reconciliation report is ready to download from a signed URL. Adyen has no vendor, invoice, purchase order, or GL account objects, so reconciliation reports and the pspReference are the canonical source for accounting.

What moves between them

The flow runs from Adyen into Epicor Kinetic. When Adyen fires a REPORT_AVAILABLE webhook, ml-connector downloads the settlement or reconciliation report from the signed URL, parses each line, and posts the gross receipts, refunds, chargebacks, and processor fees into Epicor as AP invoices or GL journals against the accounts you map. Payment, capture, and refund events flow the same direction so cash movements are recorded as they clear, and a scheduled poll backfills anything a webhook missed. Every posted entry carries the Adyen pspReference as its external reference so an Epicor line can be traced back to the originating transaction. Epicor is the system of record for the ledger; ml-connector does not write payment instructions or vendors back to Adyen, because Adyen has no such objects.

How ml-connector handles it

ml-connector stores both credential sets encrypted and sends the Adyen X-API-Key with the merchant's live URL prefix on every call, while authenticating to Epicor with Basic auth plus the API Key header, or with an OAuth2 bearer token from the Epicor Identity Provider that still carries the API Key. Every Epicor v2 URL includes the instance and Company segment, which is validated at connection time because a missing Company returns a 404 or the wrong tenant silently. Incoming Adyen webhooks are verified by recomputing the HMAC-SHA256 signature before any posting happens, and because Adyen can deliver the same notification more than once, the pspReference is used to deduplicate so a transaction is never booked twice. Settlement report lines are mapped to Epicor GL accounts by merchant account and fee type, and amounts are converted from Adyen minor units into the currency and decimal Epicor expects. AP invoice and GL writes go through Epicor's UpdateMaster call rather than the individual line endpoints, which avoids the known empty-GL-account bug, and the same InvoiceNum and VendorNum is reused so Epicor's own uniqueness check rejects a duplicate on retry. Because Epicor has no webhooks, it is polled on a schedule with an OData $filter on the modified date as the catch-up safety net, and the Epicor bearer token is refreshed when a call returns 401. Adyen rate limits return a too-many-requests error, so ml-connector backs off and retries, and every record carries a full audit trail and can be replayed if an Epicor post fails.

A real-world example

A mid-sized direct-to-consumer manufacturer runs Epicor Kinetic for production, inventory, and finance, and takes card and wallet payments through Adyen across its web store and a few outlet locations. Before the integration, an accountant logged into the Adyen Customer Area each morning, downloaded the prior day's settlement report, and hand-entered the gross sales, refunds, and processor fees into Epicor, then spent month-end close trying to tie the bank deposit back to thousands of individual transactions. With Epicor Kinetic and Adyen connected, each settlement report posts into the Epicor ledger automatically, split into receipts, refunds, and fees against the right accounts, with the Adyen pspReference on every line. Bank reconciliation becomes a match against entries that are already in the ledger, and the manual download-and-key step is gone.

What you can do

  • Post Adyen settlement and reconciliation report lines into the Epicor Kinetic general ledger, split into receipts, refunds, and processor fees.
  • Record Adyen payment, capture, and refund events as Epicor AP invoices or GL journals as they clear.
  • Tag every Epicor entry with the Adyen pspReference so each line traces back to the originating transaction.
  • Verify the Adyen webhook HMAC-SHA256 signature and deduplicate on pspReference before anything posts to the ledger.
  • Bridge Adyen's API key and live URL prefix with Epicor Basic auth plus API Key or OAuth2, with retries and a full audit trail.

Questions

Which direction does data move between Epicor Kinetic and Adyen?
Data moves from Adyen into Epicor Kinetic. Settlement reports and payment, capture, and refund events flow from Adyen and post into the Epicor general ledger as AP invoices or journal entries. ml-connector does not write payment instructions or vendors back to Adyen, because Adyen is a payments platform and has no such records.
How does the integration get accounting data out of Adyen if it has no invoices or GL?
Adyen exposes settlement and reconciliation reports, which are the canonical source for accounting. When Adyen fires a REPORT_AVAILABLE webhook, ml-connector downloads the report from its signed URL, parses each line, and maps the receipts, refunds, and fees to the Epicor GL accounts you choose. The Adyen pspReference is carried onto each Epicor entry as the external transaction reference.
How are the two different authentication schemes and Epicor's lack of webhooks handled?
ml-connector stores both credential sets encrypted. It sends the Adyen API key in the X-API-Key header with the merchant's live URL prefix, and authenticates to Epicor with Basic auth plus the API Key header or an OAuth2 bearer token from the Epicor Identity Provider. Because Epicor has no outbound webhooks, it is polled on a schedule using an OData filter on the modified date, while Adyen events arrive by HMAC-verified webhook.

Related integrations

Connect Epicor Kinetic and Adyen

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

Get started