ml-connector
IFS CloudToast

IFS Cloud and Toast integration

IFS Cloud runs enterprise finance and supply chain. Toast runs restaurant operations, POS, and labor. Connecting the two keeps your financial records current as orders and payments flow through Toast. New sales orders and payment documents post into IFS Cloud's general ledger automatically, aligned to cost centers and GL accounts by location. Payment reconciliation becomes part of the nightly batch instead of a manual daily task.

How IFS Cloud works

IFS Cloud exposes purchase orders, sales orders, supplier invoices, journal entries, GL accounts, GL vouchers, and accounting dimensions through OData v4 REST API at https://<tenant>.ifs.cloud/main/ifsapplications/projection/v1/<ProjectionName>.svc/<EntitySet>. Authentication uses OAuth 2.0 Client Credentials (token endpoint at https://<tenant>.ifs.cloud/auth/realms/<SystemID>/protocol/openid-connect/token). IFS Cloud has no standard webhook subscription API, so data is read by polling OData with modified-date filters. Mutation operations require OData ETag headers for optimistic concurrency control.

How Toast works

Toast exposes orders, checks, payments, menu items, employees, and shifts through REST API at https://ws-api.toasttab.com (environment-specific hostname provided on partner onboarding). Authentication uses OAuth 2.0 Client Credentials (POST /authentication/v1/authentication/login) with bearer token. Every request requires Authorization header and Toast-Restaurant-External-ID header. Toast supports both webhooks (for order and menu changes) and polling; webhooks carry HMAC-SHA256 signatures for verification, but payment and labor data require polling. Rate limit is 20 requests per second; menu API is 1 request per second per location.

What moves between them

Sales orders, payments, and GL postings flow from Toast into IFS Cloud. After each business day, ml-connector reads Toast orders and payments via the ordersBulk polling endpoint or order_updated webhooks, then posts those transactions into IFS Cloud as sales orders and GL journal entries (vouchers) mapped to the configured company code and GL accounts. Multi-location restaurants require separate Toast-Restaurant-External-ID per location; ml-connector maps each location to its own IFS company code or cost center. Voided orders and checks are excluded from GL posting. Menu items and Toast configuration remain read-only in IFS.

How ml-connector handles it

ml-connector stores both OAuth credential sets encrypted and refreshes bearer tokens before expiry on each system. On the Toast side, it retrieves all accessible restaurant locations via GET /partners/v1/restaurants and caches the mapping between location ID and Restaurant-External-ID to enforce multi-location isolation. It polls Toast ordersBulk with businessDate parameter matching each restaurant's configurable closeoutHour (so a 1 AM sale belongs to the prior business date if closeout is 3 AM). Payment records are always polled since Toast webhooks do not cover them. On the IFS side, ml-connector reads the target GL accounts and company codes at setup time, then constructs OData POST requests for VoucherSet (journal entries) with the correct ETag concurrency headers. When a mutation fails with a 412 conflict (ETag mismatch), it retries with a fresh read of the target record. Toast voided orders are filtered (voided==true) before posting. Service charges flagged as gratuity are excluded from net sales GL posting.

A real-world example

A multi-location restaurant group operates 8 Toast POS locations across a metro area and runs IFS Cloud for corporate accounting and supply chain. Before the integration, the finance team pulled daily sales reports from Toast, manually coded each location's net sales and payment splits by payment method into IFS Cloud journal entries, and spent 1-2 hours per day chasing discrepancies between Toast totals and IFS GL balances. With Toast and IFS Cloud connected, each business day's orders and payments post automatically into the correct GL accounts for each location, reconciled by Toast's restaurant ID. The daily manual entry step is eliminated, month-end close starts with GL accounts already in balance, and payment reconciliation is a single query instead of eight separate manual audits.

What you can do

  • Post Toast orders and payments into IFS Cloud as sales orders and GL journal entries, coded to the correct company code and cost center per location.
  • Exclude voided orders, checks, and gratuity-flagged service charges from GL posting so only net sales post.
  • Orchestrate multi-location restaurants by mapping each Toast location ID to the correct IFS company code and GL accounts.
  • Handle OData ETag concurrency on IFS Cloud mutations and retry on 412 Conflict without data loss.
  • Poll Toast ordersBulk and payments on a nightly schedule tied to each location's business date closeout time.

Questions

How does ml-connector handle Toast multi-location restaurants?
Toast requires a separate Restaurant-External-ID for each location. ml-connector retrieves all accessible restaurant locations via GET /partners/v1/restaurants, caches the mapping between location ID and External-ID, and routes each location's orders and payments to the IFS company code you configure for that location. Each location is orchestrated independently so that location-specific sales and payments post to location-specific GL accounts.
Why does ml-connector need to poll Toast payments if Toast supports webhooks?
Toast webhooks cover order and menu changes, but not payments or labor data. ml-connector uses the ordersBulk polling endpoint for comprehensive reconciliation of all payments and orders, triggered each business night. This ensures no payment is missed even if a webhook fails to deliver.
What happens if an IFS Cloud journal entry mutation fails with an ETag conflict?
OData ETag headers enforce optimistic concurrency on IFS Cloud mutations. If a write returns 412 Conflict (the record changed between read and write), ml-connector reads the current record fresh, captures the new ETag, and retries the mutation. This is automatic and transparent, so no data is lost even if another process updates the same GL account.

Related integrations

Connect IFS Cloud and Toast

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

Get started