Epicor Kinetic and Adobe Commerce integration
Epicor Kinetic runs procurement and finance. Adobe Commerce runs e-commerce and order fulfillment. Connecting the two keeps your purchase orders, vendor invoices, and GL allocations aligned across both systems. New purchase orders created in Epicor are reflected in Adobe Commerce as orders, and vendor invoices in Epicor post to Adobe as invoice records matched to the original orders. ml-connector handles the different authentication flows on each side and moves the data on a schedule you control.
What moves between them
Purchase orders and vendor data flow from Epicor into Adobe Commerce. Epicor purchase orders are polled on a regular schedule and mapped to Adobe Commerce orders with vendor details attached. Vendor master data from Epicor populates Adobe Commerce company and supplier records. AP invoices from Epicor are matched to the corresponding Adobe Commerce orders by purchase order number and appear as invoice records in Adobe, with GL account coding preserved from Epicor. The direction is primarily Epicor to Adobe; Adobe order placement can trigger a webhook back to Epicor if configured to create purchase requisitions.
How ml-connector handles it
ml-connector stores both credential sets encrypted and implements Epicor Bearer token refresh on each call, since tokens expire in roughly one hour. On the Adobe side it validates webhook signatures using the shared secret, and refreshes the OAuth 2.0 token before expiry on SaaS deployments. Epicor has no webhooks, so ml-connector polls the Epicor OData endpoint with $filter on UpdatedOn date fields to discover purchase orders and invoices changed since the last sync, using offset pagination with $top=100 and $skip=0. Vendor master data is synced bidirectionally so Adobe customer and company records match Epicor vendor references, preventing GL allocation mismatches. Epicor's two-step write pattern (GetNewXxx followed by UpdateMaster) is handled transparently, and GL account lines use the UpdateMaster path to avoid a known bug in /APInvExpTGLCs. Adobe Commerce does not expose GL accounts as an API resource, so ml-connector applies Epicor GL codes as custom fields on order line items for downstream finance reconciliation. Company segment is mandatory in Epicor API URLs and must be provided per customer configuration. Every record carries a full audit trail and can be replayed if a downstream call fails.
A real-world example
A mid-sized distributor runs Epicor Kinetic for procurement, inventory, and finance, and uses Adobe Commerce for their B2B customer portal and order management. Before the integration, purchase orders created in Epicor required manual data entry into Adobe so customers could see accurate inventory and delivery schedules, and vendor invoices received in Epicor had to be manually matched and reconciled to customer orders in Adobe. The finance team spent hours each week chasing mismatches between the two systems. With Epicor and Adobe Commerce connected, each new purchase order flows automatically into Adobe with vendor and GL coding intact, customers see real-time order status tied to Epicor inventory, and vendor invoices post directly as invoice records linked to the original orders. Reconciliation is automated, and the manual re-keying is gone.
What you can do
- Poll Epicor purchase orders and map them to Adobe Commerce orders with vendor master data and GL account coding preserved.
- Sync Epicor vendor records to Adobe Commerce company and supplier records so allocations land on valid finance dimensions.
- Authenticate Epicor with Bearer token refresh (tokens expire in one hour) and Adobe with OAuth 1.0a (PaaS) or OAuth 2.0 (SaaS).
- Validate Adobe webhook signatures with HMAC SHA256 and handle synchronous webhook delivery from order placement and invoice events.
- Query Epicor with OData filters on date fields to discover changed records since last sync, using offset pagination and the two-step write pattern for complex objects.
Questions
- How does the integration handle Epicor's one-hour token expiry and lack of webhooks?
- ml-connector refreshes the Epicor Bearer token on each API call, since tokens expire in approximately one hour and Epicor has no native outbound webhooks. Because Epicor is pull-only, ml-connector polls the OData endpoint with $filter on UpdatedOn date fields to discover purchase orders and invoices changed since the last sync, using offset pagination. The schedule is configurable to match your procurement cycle.
- Does Adobe Commerce expose GL accounts, and how does cost allocation work?
- Adobe Commerce does not expose GL accounts as an API resource, so ml-connector preserves Epicor GL codes as custom fields on order line items for downstream finance reconciliation. The integration maps Epicor vendor GL dimensions to Adobe company and supplier records, so finance teams can allocate costs correctly when invoices arrive.
- What authentication and security measures does the integration use?
- ml-connector stores both credential sets encrypted and handles Epicor Bearer token refresh transparently. For Adobe, it validates webhook signatures using HMAC SHA256 with the shared secret, and refreshes OAuth 2.0 tokens before expiry on SaaS deployments. All credentials are stored encrypted and no plain-text tokens appear in logs.
Related integrations
More Epicor Kinetic integrations
Other systems that connect to Adobe Commerce
Connect Epicor Kinetic and Adobe Commerce
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started