ml-connector
SAP Business OneToast

SAP Business One and Toast integration

SAP Business One runs the financials and inventory for your restaurant holding company. Toast runs the point-of-sale, payments, and labor for each location. Connecting the two keeps your general ledger and accounts receivable in sync with every transaction that flows through the tills. Each business day's orders and payments post automatically into Business One's sales and cash accounts, mapped to the correct revenue center and customer, so month-end close starts with the numbers already right and your accountant can stop re-keying Toast sales registers by hand.

How SAP Business One works

SAP Business One exposes business partners, invoices, purchase orders, journal entries, chart of accounts, profit centers, and items through OData v4 REST at a customer-specific Service Layer URL (https://<customer-server>:<port>/b1s/v2/). Authentication uses a session token via POST /Login, which returns a B1SESSION cookie with a 30-minute inactivity timeout. Webhooks are supported in v10.0 FP 2602 and later if the Webhook Messenger Service is activated, but polling via GET with UpdateDate filters is the recommended default. Because Business One is deployed on-premise, each customer provides their own base URL; there is no shared global endpoint.

How Toast works

Toast exposes orders, checks, payments, menu items, employees, and shifts through REST APIs at https://ws-api.toasttab.com (production) with OAuth2 client credentials authentication. Every API request requires an Authorization header with a bearer token and a Toast-Restaurant-External-ID header with the restaurant GUID. Toast supports both webhooks for order and menu updates (via HMAC-SHA256 signature verification) and polling; webhooks are not guaranteed, so a nightly reconciliation poll is essential. Historical orders are read-only; write operations are limited to specific endpoints such as employees and certain order updates.

What moves between them

The integration reads Toast orders and payments on a business-date schedule (YYYYMMDD) that accounts for each restaurant's configurable closeoutHour, ensuring sales at 1 AM belong to the correct date. Orders and payments flow from Toast into SAP Business One's general ledger as sales journal entries (net of voids, fundraising items, and service charges per Toast constraints) and cash or accounts-receivable postings. Revenue centers and customers are mapped first so each line item references valid Business One dimensions. Voided orders, checks, and payments are filtered out, and service charges classified as gratuity are excluded from net sales. The reconciliation poll runs nightly as a safety net even if webhooks are enabled.

How ml-connector handles it

ml-connector stores Toast OAuth2 credentials and Business One session parameters encrypted. On startup it exchanges Toast credentials for a bearer token (reusing cached tokens to avoid rate limit exhaustion) and creates a Business One session via the customer-provided Service Layer URL. For each business date it polls Toast's ordersBulk endpoint with the businessDate parameter, filters voided and fundraising items, aggregates net sales and payments by revenue center and customer, and posts the resulting journal entries and payment records into Business One's ChartOfAccounts and IncomingPayments entities. It validates revenue-center and customer mappings before posting so invalid dimensions are caught before they land in the ledger. Business One's 30-minute session timeout requires session reuse rather than per-request authentication. Toast's rate limits (20 req/sec, 1 req/sec for menu, 5 req/sec for historical orders) are honored via backoff and jitter. Every record carries a full audit trail and can be replayed if a downstream Business One POST fails. Toast multi-location setups require separate Toast-Restaurant-External-ID per location; the integration retrieves all accessible locations via GET /partners/v1/restaurants.

A real-world example

A restaurant holding company operates 12 locations under the same SAP Business One instance, each running Toast POS. Before the integration, the central finance team extracted sales and payment reports from each Toast location at the end of each business day, consolidated them into a spreadsheet, and manually re-entered the totals into Business One's sales journal by revenue center. Month-end close required chasing variance reports to find which locations had been entered wrong. With Toast and Business One connected, each location's orders and payments post automatically into the correct revenue center and customer account at end of day. Reconciliation is instant because the ledger reflects reality, the multi-location setup requires no additional manual consolidation, and the finance team can start close procedures with the sales numbers locked in.

What you can do

  • Post Toast net sales and payment records into SAP Business One's general ledger by business date, filtered for voided items, fundraising items, and gratuity service charges.
  • Map each Toast order to the correct SAP revenue center and customer account so sales land on valid dimensions.
  • Reconcile each business date nightly via polling even if Toast webhooks are enabled, ensuring no transactions are missed.
  • Authenticate Toast via OAuth2 with token caching and Business One via session-based authentication with session reuse to honor rate limits.
  • Retrieve all multi-location Toast restaurants via the partner API and sync each location to its own Business One mapping.

Questions

How does the integration handle Toast's business-date closeoutHour requirement?
Toast's closeoutHour determines which calendar date a sale belongs to; a sale at 1 AM June 12 may belong to June 11 if closeoutHour is 3 AM. ml-connector stores the closeoutHour per restaurant and polls orders using the business date, not calendar date, so every order lands in the correct Business One accounting period.
Why does ml-connector poll Toast if webhooks are available?
Toast webhooks are not guaranteed delivery, so ml-connector uses a nightly reconciliation poll as a safety net even when webhooks are enabled. This ensures no orders or payments slip through due to webhook failures.
How does the integration avoid reposting voided or fraudulent orders into SAP Business One?
ml-connector filters Toast orders before posting: voided orders, checks, and payments are excluded, and items marked as fundraising are stripped from net sales. Service charges flagged as gratuity are also excluded from revenue postings so tip reporting and net sales remain accurate.

Related integrations

Connect SAP Business One and Toast

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

Get started