Skip to content
API referenceMoney and time

Money and time

Amounts are whole numbers, never decimals; quantities are thousandths; days are the restaurant’s own. The same units run through every endpoint and are named the same way in every field.

Units

Moneyminor units
Integer minor units of currency (cents for USD).

total: 5564 is $55.64 when minor_digits is 2.

Amountminor units, 1 or more
A positive amount in minor units.

What a request sends when an amount cannot be zero.

BasisPointsbasis points, _bp
A rate in basis points: 750 is 7.5%.

vat_rate_bp: 700 is 7%.

Millimilli-units, _milli
Thousandths of the material's unit: 1.5 kg is 1500.

quantity_milli: 2500 is 2.5 kg of a material kept in kg.

CurrencyISO 4217
The restaurant's ISO 4217 currency.

currency: "USD", on every answer.

MinorDigits0–3
Digits after the point in currency: USD 2, JPY 0.

minor_digits: 2, on every answer.

TimestampISO 8601
An instant, ISO 8601 in UTC.

created_at: "2026-09-29T23:41:12.000Z".

DayKeyYYYY-MM-DD
A business day in the restaurant's time zone, YYYY-MM-DD.

opened_from=2026-09-29.

MonthKeyYYYY-MM
A calendar month, YYYY-MM.

month=2026-09.

Money

  • Every amount is in the restaurant’s currency, in its minor units, and every answer says which: currency and minor_digits. Divide by 10 to the power of minor_digits to show one; never round through a float.
  • A tip is staff money on top of the bill. It is never in an order’s total or paid_amount, and never a sale; tip_amount says what an order’s payments hold in tips. The service charge is not a tip: it stays on the bill, taxed.
  • Tax is named with the restaurant’s own tax label (tax_label on get-restaurant: “Sales tax” in the US). The fields that carry it keep the name vat.
  • A key never oversees a cash drawer: cash moves only through its maker’s own open drawer, as it would at the register.

Instants and days

  • An instant is ISO 8601 in UTC. Show it in the restaurant’s timezone (get-restaurant), never the server’s.
  • A day is a business day in the restaurant’s time zone, cut where its business day starts, never at the server’s midnight. day_starts_at_minute: When its business day starts, in minutes after midnight (240 is 4:00 AM): a check at 1:30 AM belongs to the day before.
  • Sales count an order on the day it was opened; money counts on the day it moved. The two do not match, on purpose, and each report’s notes say how it counted.

Orders from other systems

channel: Where the order came from: table_buddy for the POS and this API, else the outside system that brought it in. Its values: table_buddy, online, toast, doordash, uber_eats, grubhub. A new system adds a value: handle one you do not know. external_code is what that system prints on the check (“57”), and null for the POS and this API.

A check another system recorded arrives closed, keeps that system’s bill, and can hold two amounts that are 0 on every order the POS or this API made:

non_sale_amountMoney taken on the bill that is not a sale — a gift card sold, a house account paid, a donation. It is in total and paid_amount; sales are total − non_sale_amount.
other_tenderedPart of the bill settled by tenders that move no money — a gift card redeemed, a house-account charge. It is not in paid_amount; still owed is total − paid_amount − other_tendered.

What another system keeps

A check another system recorded — a Toast check — is that system’s truth, and so are a linked menu item’s name and price: they change there, and the next sync brings the change here. A recorded check arrives closed, and a change to it through this API is answered 409 refused in the engine’s own words, which say what to do instead: Add a round to an order answers Order #{number} is closed. Start a new order. See Errors.