ml-connector
QADToast

QAD and Toast integration

QAD runs manufacturing and finance. Toast runs the restaurant: point of sale, payments, and labor. Connecting the two moves each day's sales, tax, discount, tip, and payment totals from Toast into QAD's general ledger without re-keying register reports. Toast revenue centers and sales categories map to QAD GL accounts and cost centers, so sales land on the right ledger lines by location and product class. ml-connector handles the very different APIs on each side and pulls Toast data by business date to match what Toast Web reports show.

How QAD works

QAD Adaptive ERP exposes suppliers, purchase orders, supplier invoices, GL accounts, cost centers, items, and goods receipts through REST business document APIs, documented in Swagger inside each customer instance. The cloud product authenticates with a JWT session or OAuth2 bearer token against a tenant-specific URL, so there is no shared hostname. Older on-premise sites run QAD Enterprise Edition with the QXtend SOAP framework instead. QAD has no public webhook system for cloud connectors, so finance records are read by polling.

How Toast works

Toast exposes orders, checks, payments, employees, shifts, time entries, and configuration objects such as revenue centers, sales categories, tax rates, and discounts through its Platform REST APIs. Every call uses an OAuth2 client-credentials bearer token plus a Toast-Restaurant-External-ID header that names one restaurant location. Toast has no chart of accounts, no AP bills, and no vendors or purchase orders, so it is a source of sales and labor data rather than a finance system. Toast pushes order webhooks signed with HMAC-SHA256, but has no webhook for payments, labor, or GL events, so those are read by polling.

What moves between them

The flow runs from Toast into QAD. ml-connector reads Toast orders, checks, and payments for each business date and posts the day's gross sales, tax, discounts, service charges, tips, and payment tenders into QAD as general ledger journal entries. Revenue centers map to QAD cost centers and sales categories map to QAD GL accounts, so each location and product class lands on the right ledger line. Refunds and voids are read by their own business-date queries and netted out. Toast has no AP, purchase orders, or chart of accounts, so ml-connector never writes financial entries back to Toast; the movement is one direction, Toast to QAD.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the Toast side it exchanges the client ID and secret for a bearer token, caches that token until near expiry to stay under the separate authentication rate limit, and sends the Toast-Restaurant-External-ID header for the location being read. On the QAD side it accepts the full tenant URL per customer, since QAD publishes no shared base address, and refreshes the QAD token when a call returns 401. Sync is keyed on Toast business date, not wall-clock time, because a sale after midnight can belong to the prior business day under the restaurant's closeout hour, and that is what matches Toast Web reports. Order webhooks are accepted where enabled and verified against the Toast-Signature HMAC-SHA256 header, with a nightly ordersBulk poll by business date as the reconciliation safety net since Toast does not guarantee webhook delivery and does not push payments or labor. Voided orders, voided checks, and fundraising items are filtered before posting, and gratuity service charges are separated from non-gratuity ones so tips report correctly. Toast returns HTTP 429 with a Retry-After header when a rate limit is hit, so ml-connector backs off and retries. Every record carries a full audit trail and can be replayed if a downstream QAD post fails.

A real-world example

A regional restaurant group with about a dozen locations runs Toast at every site and keeps its books and cost accounting in QAD Adaptive ERP at the corporate office. Before the integration, each general manager exported daily sales and tip reports from Toast and a staff accountant re-entered the totals into QAD by hand, which delayed the daily revenue picture and produced posting errors when busy nights were rushed. With QAD and Toast connected, each location's orders and payments flow into QAD by business date, allocated to the cost center for that site and the GL accounts for food, liquor, and other sales categories. The corporate team sees same-day revenue in the ledger, and the manual re-keying step across every location is gone.

What you can do

  • Post each day's Toast sales, tax, discount, and tip totals into the QAD general ledger by business date.
  • Map Toast revenue centers to QAD cost centers and sales categories to QAD GL accounts so sales land on valid lines.
  • Net out Toast refunds and voids, and filter voided orders and fundraising items before posting to QAD.
  • Authenticate Toast with OAuth2 client credentials and the per-location restaurant GUID, and QAD with its tenant-specific token.
  • Accept Toast order webhooks where enabled and back them with a nightly business-date poll, with retries and a full audit trail on every record.

Questions

Which direction does data move between QAD and Toast?
Data moves from Toast into QAD only. Toast sales, payments, tips, and refunds post into the QAD general ledger as journal entries. Toast has no chart of accounts, accounts payable, or purchase orders, so ml-connector does not write financial entries back into Toast.
Does Toast push data in real time, or does ml-connector poll?
Both. Toast pushes order webhooks signed with HMAC-SHA256, which ml-connector verifies against the Toast-Signature header. Toast has no webhook for payments or labor and does not guarantee webhook delivery, so ml-connector also runs a nightly ordersBulk poll by business date as a reconciliation safety net.
Why does the sync use business date instead of clock time?
Each Toast restaurant has a configurable closeout hour, so a sale after midnight can belong to the prior business day. ml-connector reads Toast orders and payments by business date so the totals posted to QAD match what Toast Web reports show. Querying by raw timestamps would split a single business day across two ledger dates.

Related integrations

Connect QAD and Toast

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

Get started