ml-connector
Infor CloudSuiteToast

Infor CloudSuite and Toast integration

Infor CloudSuite runs your finance and supply chain. Toast runs your restaurant operations, POS, and payments. Connecting the two keeps your general ledger current with daily sales, avoids re-keying from Toast register reports into CloudSuite invoices, and gives finance visibility into order fulfillment, discounts, and service charges the moment customers pay. ml-connector handles Toast's multi-location complexity and its webhook signature verification, and it maps each restaurant location to the correct CloudSuite customer and GL posting account.

How Infor CloudSuite works

Toast exposes sales orders, payments, labor, and menu configuration through REST APIs at https://ws-api.toasttab.com, authenticated with OAuth 2.0 client credentials. Every request requires a Toast-Restaurant-External-ID header for each location, since Toast deployments often span multiple restaurants. Toast supports both webhooks for order and menu changes and polling for payments and reconciliation. Webhooks carry HMAC-SHA256 signatures that can be verified client-side. Historical orders can be fetched by business date, which is configurable per restaurant with a closeoutHour setting; a sale at 1 AM belongs to the previous business date if the restaurant closes at 3 AM.

How Toast works

Infor CloudSuite is accessed through the ION API Gateway at a customer-specific base URL constructed from the tenant ID and region, and requires OAuth 2.0 with a service account registered in each customer's ION Desk. CloudSuite exposes suppliers, customers, purchase orders, invoices, payments, GL accounts, and items through business object APIs that vary by product line; M3 uses REST with cursor-based pagination and requires a CONO company parameter, while SyteLine uses IDO entities and legacy SOAP. Token lifetime is configurable per tenant, typically 1-24 hours. CloudSuite has no native webhooks; document flows require ION Desk admin configuration and are not programmable via API, so polling is the standard pattern.

What moves between them

Sales orders and payments move from Toast into Infor CloudSuite once per business day. ml-connector fetches all Toast orders for a business date using GET /ordersBulk with the restaurant's business date accounting for its closeoutHour, reads associated payments, filters out voided and fundraising items, and posts the net sales and any service charges as customer invoices into CloudSuite mapped to the restaurant's configured customer and GL revenue accounts. Refunds and discounts are tracked separately for reconciliation. Payment methods from Toast map to CloudSuite payment types.

How ml-connector handles it

ml-connector stores the OAuth credentials for both systems encrypted. On the Toast side it caches the access token to avoid hitting auth rate limits, and it handles the Toast-Restaurant-External-ID header per location since Toast customers often operate multiple sites. It verifies webhook signatures using HMAC-SHA256 when Toast sends order or menu updates, and it maintains a per-location business date pointer to handle Toast's configurable restaurant closeout hours correctly; a sale at 1 AM is fetched under the prior business date if the restaurant's closeoutHour is set to 3 AM. On the CloudSuite side it constructs the ION API Gateway base URL from the customer's .ionapi credentials and exchanges the OAuth token for a per-customer bearer token, refreshing proactively before the configured expiry. It maps Toast voided orders and checks to skip them before posting. When CloudSuite returns 429 rate limit responses it backs off and retries with exponential jitter. Every order-to-invoice and payment record carries a full audit trail and can be replayed if CloudSuite experiences downtime during a nightly sync.

A real-world example

A mid-sized restaurant group operates five Toast-managed locations across three cities. Previously, each night the accounting team exported sales registers from Toast, manually reconciled order totals, and re-entered daily sales into their Infor CloudSuite ERP as customer invoices. Because Toast calculates service charges and discounts client-side and CloudSuite required hand-keyed GL allocations, discrepancies between the register and the ledger were common, and month-end close took two days of chasing differences. With Toast connected to CloudSuite, each night's sales automatically post as invoices to the correct GL revenue accounts, service charges and discounts flow through unchanged, and the ledger reconciles without manual intervention. The group now closes the books one day faster, and inventory and receivables are immediately current.

What you can do

  • Fetch Toast sales orders and payments nightly by business date, accounting for each restaurant's configurable closeout hour.
  • Post Toast orders into Infor CloudSuite as customer invoices mapped to the correct revenue GL accounts per location.
  • Verify Toast webhook signatures using HMAC-SHA256 and skip voided orders and fundraising items before posting.
  • Handle multi-location Toast deployments with separate restaurant identifiers and map each to its CloudSuite customer and GL accounts.
  • Manage OAuth token lifecycle for both systems, cache Toast tokens to avoid rate limits, and refresh CloudSuite tokens proactively before expiry.

Questions

How does ml-connector handle Toast restaurants with different closeout hours?
Toast allows each restaurant to configure a closeoutHour, which determines when a business day ends. A sale at 1 AM on June 12 belongs to June 11 if the restaurant's closeoutHour is 3 AM. ml-connector tracks the business date per location and queries Toast with the correct date range, ensuring sales are posted to CloudSuite under the right accounting period.
What happens if ml-connector receives a Toast webhook for an order update?
ml-connector verifies the webhook signature using HMAC-SHA256 if Toast has registered the integration. It then checks whether the order has already been posted to CloudSuite to avoid duplicates, and if it is new, it maps the order to the correct Toast restaurant location, filters voided and fundraising items, and posts the net sales and payments into CloudSuite.
How does the integration handle multi-location Toast deployments?
Toast requires a separate Restaurant-External-ID header for each location. ml-connector stores a mapping from each Toast restaurant ID to its corresponding Infor CloudSuite customer and GL revenue accounts, and it uses the correct restaurant ID on each API call. All locations sync on the same nightly schedule, and each restaurant's closeout hour is respected independently.

Related integrations

Connect Infor CloudSuite and Toast

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

Get started