ml-connector
Epicor KineticAvidXchange

Epicor Kinetic and AvidXchange integration

Epicor Kinetic runs manufacturing, procurement, and finance, and holds the vendor master, chart of accounts, and AP ledger. AvidXchange runs invoice capture, coding, approval routing, and payment execution. Connecting the two means vendors and GL codes flow into AvidXchange for coding, open invoices and their PO references move over for approval and payment, and the check, ACH, or virtual card detail comes back into Epicor Kinetic without re-keying. ml-connector handles the different APIs on each side and moves the data on a schedule you control. Payment execution and approval routing stay inside AvidXchange, while the chart of accounts stays authoritative in Epicor Kinetic.

How Epicor Kinetic works

Epicor Kinetic exposes vendors, AP invoices, purchase orders, AP payments, GL accounts, and customers through its Open REST API, an OData v4 surface where every business object lives at a tenant-specific URL that includes the company segment. It authenticates with Basic credentials or OAuth2 client credentials against Epicor IdP, and in either case a separate API key header is required to pass service-layer security. Epicor has no native outbound webhooks, so records are read by polling with an OData filter on a modified-date field, paging through results with the $top and $skip parameters. Complex writes such as AP invoices use the UpdateMaster call so the header and GL lines post in one operation.

How AvidXchange works

AvidXchange exposes vendors, invoices and bills, purchase orders for matching, payments, and GL codes through the AvidConnect API over REST and JSON. Authentication uses an AvidSuite company token and user token generated in the admin portal and passed as request headers, or partner-tier client credentials for embedded ERP integrations. AvidXchange has no confirmed public webhooks, so it operates on a scheduled pull and batch model: vendors, GL codes, and invoice batches are pushed to AvidXchange, and payment status is pulled back out. GL codes are read-only inside AvidXchange because the accounting system is the source of truth, and approval routing and payment execution stay inside AvidSuite.

What moves between them

The flow is bidirectional but anchored on Epicor Kinetic as the system of record. ml-connector pushes the Epicor vendor master and GL accounts into AvidXchange so AP staff can code invoices against valid payees and accounts. Open AP invoices, with their line-level GL coding, PO references for matching, and invoice images, move from Epicor Kinetic into AvidXchange for approval and payment. After AvidPay executes a payment, the settled check number, ACH trace, or virtual card detail is read back into Epicor Kinetic and posted as an AP payment against the matching vendor and invoice. Vendors must exist in AvidXchange before any invoice can be coded, so that sync runs first, and GL codes are read-only in AvidXchange, so the chart of accounts is never written back from payment into Epicor.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the Epicor side it sends Basic credentials or refreshes an OAuth2 bearer token when a call returns 401, and it always attaches the API key header, since Epicor returns 401 without it even when the token is valid. It accepts the full tenant URL, company, and instance per customer, since Epicor publishes no shared base address, and validates that the company segment is present because a missing segment silently returns wrong-tenant data. On the AvidXchange side it sends the company and user token headers against the tenant base URL. Because neither system pushes events, both are read by polling: Epicor invoices are pulled with an OData filter on modified date and $skip paging, and AvidXchange payment status is polled after each batch submission. Vendors and GL codes are mapped and synced first, so every invoice line lands on a payee and account that already exist in AvidXchange. Invoices are written into Epicor through UpdateMaster so the header and GL lines post together, avoiding the known empty-account bug on the individual line endpoint. Neither side offers an idempotency key, so ml-connector dedupes on the InvoiceNum and VendorNum pair, which Epicor also enforces as unique, and tracks AvidXchange batch IDs so a batch is never resubmitted. Approval routing and the payment method, whether check, ACH, or virtual card, are decided inside AvidXchange and the AvidPay Network, so ml-connector reads the result rather than setting it. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A mid-sized building products distributor with roughly 250 employees runs Epicor Kinetic for purchasing, inventory, and finance, and adopts AvidXchange to get paper and emailed supplier invoices off the AP team's desks. Before the integration, a clerk keyed each approved invoice into Epicor by hand and then re-entered every payment after the check run, so invoices sat for days, GL coding was inconsistent, and the AP ledger rarely matched what had actually been paid. With Epicor Kinetic and AvidXchange connected, vendors and GL codes are kept in step, open invoices flow into AvidXchange already matched to their purchase orders for approval, and the settled payment detail posts back into Epicor automatically. The keying steps are gone, invoices clear faster, and the payables ledger reconciles against what AvidPay sent.

What you can do

  • Push the Epicor Kinetic vendor master and GL accounts into AvidXchange so invoices code against valid payees and accounts.
  • Submit open Epicor AP invoices with their PO references and images into AvidXchange for approval and payment.
  • Post settled AvidXchange check, ACH, and virtual card detail back into Epicor Kinetic as AP payments.
  • Bridge Epicor Basic or OAuth2 auth plus the required API key header to the AvidSuite company and user tokens.
  • Poll both systems on a schedule with InvoiceNum and VendorNum dedup, retries, and a full audit trail on every record.

Questions

Which direction does data move between Epicor Kinetic and AvidXchange?
It moves both ways, with Epicor Kinetic as the system of record. Vendors, GL codes, and open AP invoices flow from Epicor into AvidXchange for coding, approval, and payment, while settled payment detail flows back from AvidXchange into Epicor as AP payments. GL codes are read-only in AvidXchange, so the chart of accounts stays authoritative in Epicor and is never overwritten from the payment side.
Neither system has webhooks, so how does the sync stay current?
Both Epicor Kinetic and AvidXchange are pull-only. ml-connector polls Epicor with an OData filter on a modified-date field to pick up new and changed invoices, and polls AvidXchange payment status after each batch submission. You set the cadence, and a scheduled pass catches anything between runs.
Does ml-connector control how a supplier gets paid in AvidXchange?
No. Approval routing and the payment method, whether check, ACH, or virtual card, are decided inside AvidSuite and the AvidPay Network based on each supplier's preference. ml-connector submits the invoice and then reads back the approved status and the settled payment detail, so Epicor reflects what AvidXchange actually did rather than dictating it.

Related integrations

Connect Epicor Kinetic and AvidXchange

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

Get started