ml-connector
Epicor KineticToast

Epicor Kinetic and Toast integration

Epicor Kinetic runs manufacturing and distribution finance. Toast runs restaurant operations: orders, payments, labor, and inventory. Connecting the two keeps your ERP's general ledger up to date with sales and labor from Toast without manual re-keying. Net sales and labor costs from each Toast location post into Epicor Kinetic on a daily schedule, allocated to the correct GL accounts and cost centers. Toast revenue categories and service charges are mapped to Epicor GL dimensions so reporting and reconciliation stay in sync.

How Epicor Kinetic works

Epicor Kinetic is a cloud and on-premises ERP platform exposing vendors, purchase orders, invoices, GL accounts, cost centers, and other business objects through REST endpoints with OData v4 query support. Authentication uses Basic Auth, API Key headers, OAuth2 client credentials (cloud only), or a token exchange service (on-premises). The cloud API endpoint is https://<tenant>.epicorsaas.com/<instance>/api/v2/odata/<Company>/. Epicor Kinetic has no native webhooks, so all data retrieval is by polling with OData $filter clauses on timestamp fields to fetch only changed records since the last sync.

How Toast works

Toast is a cloud restaurant management platform that exposes sales orders, checks, payments, employees, shifts, menu items, and revenue categories through REST APIs. Authentication uses OAuth2 client credentials exchanged for a bearer token, plus a Toast-Restaurant-External-ID header on every request. Toast supports both webhooks for real-time order and menu events and polling via a daily business-date reconciliation call. Rate limits are 20 requests per second (10K per 15 minutes), with stricter limits on menu APIs (1 per second per location). Business dates are configurable per restaurant's close-out hour, so Toast data must be aligned to each location's accounting day boundary.

What moves between them

Sales orders, checks, and payments flow from Toast into Epicor Kinetic daily. After each restaurant's close-out time, ml-connector retrieves all orders and payments for that business date, filters voided records, and posts the net sales and itemized costs into Epicor's general ledger. Toast menu items and revenue categories are mapped to Epicor GL accounts ahead of time, so sales are posted to the correct dimension. Labor hours and shift data also flow from Toast into Epicor cost centers. Toast menu configuration and restaurant data are read-only in this direction; Epicor is the source of truth for all GL dimensions.

How ml-connector handles it

ml-connector stores both credential sets encrypted and caches the Toast OAuth2 bearer token to avoid rate-limit exhaustion on repeated re-authentication. It accepts the Epicor instance URL and company segment (required in v2 API URLs), and the Toast restaurant external ID, per customer. Because both systems require polling (Epicor has no webhooks; Toast payment and labor events are not webhookable), ml-connector runs a daily reconciliation on a schedule aligned to each Toast restaurant's configurable close-out hour, fetching all orders and payments for that business date. Toast voided records are filtered before posting to GL. Toast rate limits (20 per second, stricter for menus, and pagination constraints) are respected with backoff and retry logic. Toast revenue categories and service charges are mapped to pre-configured Epicor GL accounts and cost centers in advance. The Epicor API requires Bearer tokens to be refreshed every ~1 hour, and complex GL posting operations follow Epicor's two-step pattern (GetNew call followed by UpdateMaster). Every record carries a full audit trail and can be replayed if a downstream post fails.

A real-world example

A regional restaurant group with 12 locations runs Toast for all point-of-sale and labor operations, and Epicor Kinetic for accounting and financial reporting. Before the integration, each location manager exported Toast sales and labor reports at end-of-day, and the accounting team spent two hours daily re-entering aggregate sales and labor costs into Epicor, with frequent errors from manual entry and discrepancies between Toast and the GL. With Toast and Epicor Kinetic connected, each restaurant's close-out triggers an automated daily post to Epicor with all sales, itemized by category, and labor costs allocated to cost centers by location. The accounting team has a complete, accurate GL with no re-keying, and end-of-day close time drops from two hours to fifteen minutes.

What you can do

  • Post Toast daily net sales into Epicor Kinetic's general ledger, allocated to GL accounts mapped from Toast revenue categories.
  • Sync Toast labor hours and costs into Epicor cost centers by restaurant location.
  • Filter voided Toast orders and payments before posting to GL to keep only valid transactions.
  • Handle Toast's configurable close-out hour and multi-location restaurant IDs so sales post to the correct business date in Epicor.
  • Manage OAuth2 token caching and Epicor Bearer token refresh cycles to avoid rate limits and session timeouts.

Questions

How does ml-connector handle the different close-out times across multiple Toast restaurants?
Toast allows each restaurant to configure its closeoutHour, which determines whether a sale belongs to the current or previous business date. ml-connector respects this per-location setting when fetching orders and payments, so a sale at 1 AM June 12 correctly belongs to June 11 if that location's closeoutHour is 3 AM. The reconciliation run aligns to the latest close-out time across all locations to ensure no sales are missed.
Why does ml-connector filter voided Toast records before posting to Epicor?
Toast returns voided orders, checks, and payments in its API responses (voided==true flag), but posting voided transactions to the GL would corrupt your financial records. ml-connector filters out all voided records and posts only valid sales and payments, keeping Epicor's GL clean and audit-ready.
Do Toast menu items and revenue categories need to be configured in Epicor before the integration runs?
Yes. Toast revenue categories (defined in Toast's menu and sales settings) must be mapped to Epicor GL accounts and cost centers ahead of time. This mapping is configured once per customer and stays constant. When Toast orders post to Epicor, each itemized sale is routed to the mapped GL account, so the GL is always organized by your chart of accounts structure.

Related integrations

Connect Epicor Kinetic and Toast

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

Get started