Epicor Kinetic and Brex integration
Epicor Kinetic runs manufacturing, distribution, and finance. Brex runs corporate cards, expenses, and bill pay. Connecting the two brings coded card and cash spend into the Epicor general ledger and AP without re-keying. After Brex finishes coding a transaction, the expense lands in Epicor against the right account and cost segments, and the Brex vendor directory stays aligned with Epicor vendors. ml-connector handles the very different APIs on each side and moves the data on the cadence you set.
What moves between them
The main flow runs from Brex into Epicor Kinetic. Once Brex marks an accounting record ready for export, ml-connector reads the coded card or cash transaction and posts it into Epicor Kinetic as an AP invoice line or GL entry, mapped to the matching Epicor GL account and cost segments, then marks the Brex record exported so it is not posted twice. Vendor records are aligned so the Brex payables directory and Epicor vendors stay in step. Reference data such as GL accounts and dimension fields is matched first so every posted line references an account that already exists in Epicor. Epicor card spend is treated as the system of record for finance, so ml-connector does not write ledger balances back into Brex.
How ml-connector handles it
ml-connector stores both credential sets encrypted, sends the Brex bearer token on every request, and presents the Epicor Kinetic tenant URL, company segment, and API key together with the Basic or OAuth2 identity, since the API key alone does not authenticate. Brex sends a record-ready-for-export webhook signed with Svix, so each delivery is verified using the webhook id, timestamp, and signature before the record is fetched, and a scheduled poll backfills anything a webhook missed. Because Epicor Kinetic has no webhooks, it is always read by polling an OData date filter. Brex GL account ids and dimension fields are mapped to Epicor account segments and cost dimensions first, and merchant names are fuzzy-matched to Epicor vendors because Brex merchant names rarely match exactly. AP invoice writes use the GetNew then UpdateMaster pattern so required defaults and GL lines commit in one call. Brex rate limits return HTTP 429, so ml-connector backs off and retries, and it watches the Brex token, which expires after ninety days of inactivity, so a lapse does not become an outage. Every record carries a full audit trail and can be replayed if an Epicor post fails.
A real-world example
A mid-sized industrial distributor with about three hundred staff runs Epicor Kinetic for purchasing, inventory, and finance, and issues Brex corporate cards to its buyers and field technicians. Before the integration, the accounting team exported card statements from Brex each week and hand-entered the coded expenses into Epicor AP, then spent the first days of month-end close reconciling card spend against the GL accounts it was supposed to hit. With Epicor Kinetic and Brex connected, each transaction Brex finishes coding posts into Epicor automatically, allocated to the right account and cost segment, and the vendor list stays aligned across both systems. Month-end close starts with card spend already booked, and the weekly re-keying step is gone.
What you can do
- Post coded Brex card and cash transactions into Epicor Kinetic AP invoices or GL entries after Brex marks each record ready for export.
- Keep the Brex vendor directory aligned with Epicor Kinetic vendors, using fuzzy matching on merchant names.
- Map Brex GL account ids and custom dimension fields to Epicor Kinetic account segments and cost dimensions.
- Authenticate Brex with its bearer token and Epicor Kinetic with its tenant URL, company segment, and API key.
- Verify Brex Svix-signed webhooks, then poll Epicor on a schedule with retries and a full audit trail on every record.
Questions
- Which direction does data move between Epicor Kinetic and Brex?
- The main flow is Brex into Epicor Kinetic. Coded card and cash transactions move from Brex into Epicor as AP invoice lines or GL entries, and vendor records are aligned so both directories match. Epicor stays the system of record for finance, so ml-connector does not write ledger balances back into Brex.
- How does the integration know when a Brex transaction is ready to post?
- Brex sends a record-ready-for-export webhook, signed with Svix, once it finishes coding a transaction. ml-connector verifies the signature, fetches the coded accounting record, posts it into Epicor, and marks the Brex record exported. A scheduled poll backfills any record a webhook missed.
- How does the integration handle Epicor Kinetic auth and its lack of webhooks?
- Epicor Kinetic needs the tenant URL with the company segment, a Basic or OAuth2 identity, and an API key header, all of which ml-connector presents together. Because Epicor has no native webhooks, it is read by polling an OData date filter on a schedule rather than waiting for a push.
Related integrations
More Epicor Kinetic integrations
Other systems that connect to Brex
Connect Epicor Kinetic and Brex
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started