API reference standard-order.schema.json

StandardOrder

One restaurant order in Blizzfull's interchange format. The API returns orders in this shape, the point of sale saves them in it, and marketplace orders arrive in it.

JSON Schema apiv2.blizzfull.com/schema/standard-order.schema.json Copy on this site

About

Conventions:

  • Money is integer cents (USD) unless a field says otherwise. coupons[] is the one exception: it is internal engine state, in dollars.
  • Tax rates are percentages: 8.25 means 8.25%.
  • Times are ISO 8601 strings. Blizzfull's own orders use UTC with a +00:00 offset; some marketplace orders omit the offset (UTC is implied). An unset time is 0000-00-00T00:00:00+00:00.
  • Identifiers are pairs: internal is Blizzfull's, external is the point of sale's or marketplace's.
  • New fields may be added at any time. Ignore fields you don't recognise.

Used by POST /orders (response), GET /orders/{orderId}/getWithRestaurantStd (response)

StandardOrder

The document object

  • idIdentifierRequired

    The order. internal is the Blizzfull order number as a numeric string ("2303306"), or "ex-<n>" for a marketplace order Blizzfull relayed. external is the marketplace's order ID, if any.

  • statusstringRequired

    Where the order is. OPEN: being built, not yet sent to the kitchen. SUBMITTED: placed, waiting for the restaurant. ACCEPTED: the restaurant confirmed it. FULFILLED: closed out. CANCELED: voided.

    One of
    "OPEN" "SUBMITTED" "ACCEPTED" "CANCELED" "FULFILLED"
  • The marketplace's own status word, unchanged (for example in_progress). Empty for Blizzfull orders.

  • A marketplace order's reporting outcome, kept apart from status (a marketplace failure still closes as FULFILLED). UNKNOWN for Blizzfull orders.

    One of
    "ACTIVE" "COMPLETED" "CANCELED" "FAILED" "UNKNOWN"
  • Always USD.

    One of
    "USD"
  • notestring

    The customer's instructions for the whole order. Empty when there are none.

  • When the order was started.

  • When the order was placed.

  • When the restaurant accepted it. Unset until then.

  • When the order last changed.

  • When the order will be ready. For Blizzfull orders this equals deliveryTime and the estimated ready time.

  • When a delivery order is due. Equals pickupTime for Blizzfull orders.

  • The time the customer asked for when isFuture is true; otherwise the estimated ready time.

  • typestring | nullRequired

    How the order is fulfilled. PICKUP covers take-out and curbside.

    One of
    "PICKUP" "DELIVERY" "DINE-IN" null
  • The marketplace's own fulfilment type. A marketplace courier delivery arrives as type: PICKUP (the courier picks it up) with sourceType: DELIVERY. UNKNOWN for Blizzfull orders.

    One of
    "PICKUP" "DELIVERY" "DINE-IN" "UNKNOWN"
  • isExternalboolean

    True for a marketplace order Blizzfull relayed rather than took.

  • isTestboolean

    True for a test order. Test orders never move real money.

  • taxRatestring | number

    The order's tax rate as a percentage. Blizzfull orders send a decimal string with four places ("8.2500" is 8.25%); marketplace orders send a number. Older marketplace orders may hold a fraction (0.1076).

    Examples
    "8.2500" 10.259
  • isFutureboolean

    True when the customer scheduled the order for a later time (see fulfillmentTime). Stays true after that time passes.

  • tablestring

    The dine-in table. Empty for other orders.

  • guestCountinteger

    The number of people in a dine-in party. 0 means not recorded.

    Range
    0 to 255
  • When a dine-in party was seated, in Unix seconds (not ISO 8601). 0 means not recorded.

    Range
    At least 0
  • curbsideboolean

    True when the customer asked to be served at the curb.

  • The curbside vehicle, as "color make type". Empty otherwise.

  • True when a delivery should be left at the door.

  • hasAlcoholboolean

    True when the order contains alcohol, so ID must be checked on hand-off.

  • Where the order was placed. For Blizzfull orders: web, app, kiosk, pos or phone (a phone-ordering partner). For marketplace orders: the marketplace's name.

    Examples
    "web" "pos" "phone"

    The self-order kiosk is a paid add-on.

  • The loyalty program the points belong to. Currently always blizzfull.

  • processingViastring | null

    How the order's payments are processed. manual: recorded, not processed (unpaid, cash at the register, pay later). cash: cash ordered online. aggregation / blizzfull-pay: cards processed by Blizzfull. restaurant-gateway: the restaurant's own card processor. restaurant-gateway-cp: a card reader at the counter. Empty on a few older orders; null for marketplace orders.

    One of
    "manual" "aggregation" "cash" "restaurant-gateway" "restaurant-gateway-cp" "blizzfull-pay" "" null
  • dailyOrderNumberinteger | null

    The short number called out at the counter, restarting daily. Null when the restaurant doesn't use daily numbers.

  • The restaurant location the order belongs to.

  • The person the order is for.

  • itemsItem[]Required

    The order lines, in the order they were added.

  • Order-level coupons and discounts. Their sum need not equal totals.discount: a manual discount from the register has no entry here, and an applied coupon worth $0 still does.

  • Item-level discounts, one per discounted line (also listed on the line itself under items[].discounts).

  • couponsobject[]

    Internal state of Blizzfull's coupon engine, in dollars. Not a stable contract: use discounts, itemDiscounts and totals instead.

  • Restaurant fees on the order (a service or bag fee), and fees that are themselves taxes. A fee attached to one payment (a card fee) is listed on that payment instead, under transactions[].extraCharges.

  • Where and how a delivery order goes. Null for other orders.

  • totalsTotalsRequired

    The order's money, in cents. total = subtotal - discount + deliveryFee + tax + tip + extraCharge.

  • The service that relayed a marketplace order. Null for Blizzfull orders.

  • Every payment on the order, whatever its status: approved, authorized (held), voided and refunded ones included. Empty when nothing has been paid.

Example: the 201 response of POST /orders (Place an order)
{
  "id": {
    "internal": "2303306",
    "external": null
  },
  "status": "SUBMITTED",
  "type": "PICKUP",
  "sourcePlatform": "phone",
  "isFuture": true,
  "pickupTime": "2026-10-29T02:30:00+00:00",
  "fulfillmentTime": "2026-10-29T02:30:00+00:00",
  "taxRate": "8.2500",
  "processingVia": "manual",
  "merchant": {
    "name": "Example Wings",
    "id": {
      "internal": "1234",
      "external": null
    },
    "timezone": "America/Los_Angeles"
  },
  "customer": {
    "id": "776304",
    "name": "Dana Rivera",
    "phone": "+16615550177",
    "phoneExt": ""
  },
  "items": [
    {
      "quantity": 1,
      "orderItemID": 1,
      "id": {
        "internal": 166519,
        "external": null
      },
      "name": "Hungry Combo",
      "note": "Sauce on the side",
      "unitPrice": 1650,
      "totalPrice": 1650,
      "taxRate": 8.25,
      "optionSelections": [
        {
          "optionGroupId": "216385",
          "selections": [
            {
              "optionItemId": "441415",
              "selected": 1
            }
          ]
        },
        {
          "optionGroupId": "216386",
          "selections": [
            {
              "optionItemId": "441417",
              "selected": 1
            }
          ]
        }
      ]
    }
  ],
  "totals": {
    "subtotal": 1650,
    "tip": 0,
    "extraCharge": 0,
    "deliveryFee": 0,
    "tax": 136,
    "dspWithheldTax": 0,
    "total": 1786,
    "discount": 0,
    "paid": 0,
    "balanceOwed": 1786
  },
  "transactions": []
}

Timestamp

string

ISO 8601 date and time. Blizzfull orders use UTC with a +00:00 offset; some marketplace orders omit the offset (UTC implied). 0000-00-00T00:00:00+00:00 means not set: treat it as null.

Examples
"2026-10-28T19:30:00+00:00" "0000-00-00T00:00:00+00:00"
Pattern
^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(Z|[+-]\d{2}:\d{2})?$

Used by StandardOrder.createdTime, StandardOrder.orderedTime, StandardOrder.acceptedTime, StandardOrder.modifiedTime, StandardOrder.pickupTime, StandardOrder.deliveryTime, StandardOrder.fulfillmentTime

Identifier

object

The same thing's ID in two systems. internal is Blizzfull's; external is the point of sale's or marketplace's.

Used by StandardOrder.id, Merchant.id, Item.id, Modifier.id, ModifierGroup.id, Category.id, Size.id, Discount.id, ExtraCharge.id, Aggregator.id, Transaction.id

  • internalstring | integer | null

    Blizzfull's ID. Orders, merchants, sizes and payments use numeric strings; menu items use integers.

  • externalstring | null

    The other system's ID, or null.

Merchant

object

The restaurant location the order belongs to.

Used by StandardOrder.merchant

  • namestringRequired

    The restaurant's name.

  • idIdentifierRequired

    internal is the Blizzfull restaurant ID, a numeric string.

  • timezonestringRequired

    The restaurant's IANA time zone.

    Example
    "America/Los_Angeles"
  • ghostLocationIDstring | null

    The virtual brand (ghost kitchen) a marketplace order was placed with. Null otherwise.

  • ghostLocationNamestring | null

    That virtual brand's name. Null otherwise.

Customer

object

The person the order is for.

Used by StandardOrder.customer

  • idstring

    The customer's Blizzfull account, as a numeric string. "5" is the shared guest account (no account). Empty when the order has no customer.

  • namestring

    The name to call out: the name given on the order, else the account's name, email or phone, else Customer.

  • phonestring | boolean

    The order's callback number in E.164 form (+16615550177), or false when there is no usable number. Marketplace orders pass the marketplace's number through unchanged.

    Examples
    "+16615550177" false
  • phoneExtstring

    A phone extension. Usually empty.

  • phoneOptInboolean

    Reserved. Currently always false.

  • emailstring

    The account's email. Accounts created from a phone number carry a placeholder (6615550177@#), and guest orders show the guest account's address, so don't treat this as a deliverable address.

  • emailOptInboolean

    Reserved. Currently always false.

Item

object

One order line: a menu item at a quantity, with its size and options.

Used by StandardOrder.items

  • quantityintegerRequired

    How many.

    Range
    At least 1
  • orderItemIDinteger | null

    The line's number within this order (1, 2, 3…), not a global ID. Null on marketplace orders.

  • checkNamestring

    The guest's check the line belongs to, as Guest N. Empty for the shared check.

  • The guest or seat number. 0 is the shared check.

    Range
    0 to 255
  • idIdentifierRequired

    internal is the menu item ID (an integer). 0 is a custom item not on the menu; 1 is a reward with no menu item behind it. Marketplace orders send strings.

  • namestringRequired

    The line's display name, with the size name already prefixed when there is one.

  • The name in a second language, on receipts that ask for one. Otherwise empty or absent.

  • notestring

    Special instructions for this line.

  • The line's menu category. Filled on receipts and point-of-sale tickets; empty in API order responses.

  • tagsstring[]

    Kitchen routing tags (and cat-<shortName>). Filled on receipts and point-of-sale tickets; empty in API order responses.

  • unitPriceinteger

    totalPrice divided by quantity, rounded to the cent, so it may not multiply back exactly. totalPrice is authoritative.

  • totalPriceintegerRequired

    The line total in cents: the item with its size and options, times quantity, before item discounts.

  • customPriceinteger | null

    A line total the cashier typed over the menu price, in cents. Null when the menu price stands.

  • taxRatenumber

    The line's tax rate as a percentage. 0 for tax-exempt lines.

  • discountinteger

    The line's item-level discount in cents.

  • The size chosen. An empty array ([]) when the item has no sizes. Marketplace orders may carry a Size object with null IDs instead.

  • The line's item-level discounts.

  • The options on the line, ready to print. For the exact choices (with IDs), use optionSelections.

  • Exactly which options were chosen, by ID. This is the authoritative record of a line's customization, and the shape you send when you create an order. Null when nothing was chosen beyond the defaults, and on receipts.

  • pointsUsedinteger

    Loyalty points spent on this line.

    Range
    At least 0
  • The loyalty reward this line redeems. 0 when it isn't a reward.

  • giftCardboolean

    True when the line sells gift-card value.

  • A signed reference used to activate a physical gift card, never the card number. Empty otherwise.

OptionGroupSelection

object

The choices made in one option group of an item.

Used by Item.optionSelections, POST /orders (request)

OptionItemSelection

object

One option's state. List only what differs from the menu's defaults: an option that is on by default stays on unless you send selected: 0.

Used by OptionGroupSelection.selections

  • optionItemIdstring | integerRequired

    The option's id, from the menu feed (options[].items[].id).

  • selectedinteger | stringRequired

    0 turns the option off. 1 or more turns it on: the count for a stepper group, or the level for a variable-amount group (1 light, 2 regular, 3 extra). Usually an integer; a few older orders hold a numeric string.

  • includedboolean

    True when the option is one of the group's free (included) choices. Present only when true.

  • Choices inside the nested groups this option opens (choosing Burger opens Cooking temperature). Options nest two levels at most.

SubOptionGroupSelection

object

The choices made in a nested group.

Used by OptionItemSelection.subOptionSelections

SubOptionItemSelection

object

One option's state in a nested group. It cannot open further groups.

Used by SubOptionGroupSelection.selections

  • optionItemIdstring | integerRequired

    The option's id in the nested group.

  • selectedinteger | stringRequired

    0 off; 1 or more on (see OptionItemSelection.selected).

  • includedboolean

    True when the option is one of the group's free choices.

Modifier

object

One option on a line, as it prints.

Used by Item.modifiers, Modifier.modifiers

  • quantityinteger | string

    The selection value per unit of the item (see OptionItemSelection.selected).

  • The option's ID when known. Matched to the option by position, so it can be wrong for items with default options; rely on optionSelections for IDs.

  • namestring

    Ready to print, prefixes included (No Onions, Extra Ranch, 2x Ranch). Don't add the quantity again.

  • The name in a second language, on receipts that ask for one.

  • notestring

    Reserved. Currently always empty.

  • The option group the choice belongs to.

  • The part of a multi-part item the option belongs to, such as 1st Half of a pizza. Its name is the item's name when the item has one part.

  • unitPriceinteger

    The option's price in cents. 0 on Blizzfull orders, whose option prices are inside the line's totalPrice; marketplace orders fill it.

  • totalPriceinteger

    unitPrice times quantity, in cents. 0 on Blizzfull orders.

  • taxRatenumber

    The option's tax rate as a percentage.

  • Options chosen inside a nested group. One level deep.

ModifierGroup

object

A named group with an ID.

Used by Modifier.group, Modifier.food_group

  • namestring

    The group's name, when known. Empty in API order responses.

  • internal is the group's linkageID on the item (a string), or null when unknown.

Category

object

The line's menu category. Filled on receipts and point-of-sale tickets; empty in API order responses.

Used by Item.category

  • namestring
  • shortNamestring

    The category's short name, used to route tickets to printers.

  • The same thing's ID in two systems. internal is Blizzfull's; external is the point of sale's or marketplace's.

Size

object

The size variant chosen.

Used by Item.size

  • namestring
    Example
    "Medium 12\""
  • internal is the size ID, a numeric string, or null.

  • priceinteger

    Reserved. Currently always 0: the size's price is inside the line's totalPrice.

Discount

object

A coupon or discount and what it took off, in cents.

Used by StandardOrder.discounts, StandardOrder.itemDiscounts, Item.discounts

  • namestring
  • amountinteger

    What it took off, in cents. Positive.

  • internal is the coupon ID (a numeric string) when it is a Blizzfull coupon.

  • descriptionstring | null
  • itemIDinteger | null

    Reserved. Currently always null.

  • pointsUsedinteger | string

    Loyalty points spent on the discount. Usually an integer.

ExtraCharge

object

A restaurant fee, or a fee that is itself a tax.

Used by StandardOrder.extraCharges

  • namestring
  • internal is the fee's name.

  • amountinteger

    The fee in cents.

  • isTaxboolean

    True when the fee is a tax (and counts as tax on receipts).

  • taxRatenumber

    The percentage the fee is taxed at; 0 when it isn't taxed.

  • Reserved. Currently always 0; amount is already in cents.

  • taxedboolean

    True when tax is charged on the fee.

Totals

object

The order's money, in cents. total = subtotal - discount + deliveryFee + tax + tip + extraCharge.

Used by StandardOrder.totals, Transaction.totals

  • subtotalintegerRequired

    The lines' total after item-level discounts.

  • tipinteger

    Tips, including tips added after payment.

  • All fees, including those attached to a payment.

  • taxintegerRequired
  • The part of tax a delivery marketplace collected and remits itself. Already included in tax. 0 for Blizzfull orders.

  • totalintegerRequired

    What the order costs.

  • discountinteger | null

    Order-level discounts only (item-level ones are already out of subtotal). Some marketplace orders send null for none.

  • paidintegerRequired

    What has been paid. 0 for cash ordered online, which is collected on hand-off.

  • balanceOwedintegerRequired

    What is still owed. 0 when paid in full or canceled; negative when overpaid.

Delivery

object

Where a delivery order goes, and who is taking it.

Used by StandardOrder.delivery

  • addressstring

    Street address.

  • unitstring

    Apartment, suite or unit. Empty when none.

  • citystring
  • statestring

    Two-letter state code.

  • zipstring
  • fullstring

    The whole address on one line, as "address unit city, state zip".

  • countrystring

    Two-letter country code. US for Blizzfull orders.

  • The delivery service taking the order, or null when the restaurant delivers it.

  • A point, in decimal degrees.

  • notesstring

    Delivery instructions. Usually empty here: instructions are in the order's note.

  • distancestring | number

    Distance from the restaurant, as a decimal string ("4.9").

Courier

object

The delivery service or driver.

Used by Delivery.courier

  • namestring

    Often the service's name (Doordash, Uber) rather than a person's.

  • phonestring | boolean

    The courier's phone in E.164 form, or false when there is none.

  • phoneExtstring
  • emailstring

    Reserved. Currently always empty.

  • statusstring

    Where the courier is. Empty when unknown.

    One of
    "WAITING" "ACCEPTED" "TRANSIT_TO_MERCHANT" "TRANSIT_TO_CUSTOMER" "DELIVERED" "CANCELLED" ""
  • geoGeocode | null

    Reserved. Currently always null.

  • A live tracking page, when the service provides one.

Geocode

object

A point, in decimal degrees.

Used by Delivery.geo, Courier.geo

Aggregator

object

The service that relayed a marketplace order.

Used by StandardOrder.aggregator

  • namestring
    Example
    "Stream"
  • internal identifies the integration; external is the source order's ID.

Transaction

object

One payment. Amounts are cents and stay positive for refunds: action and status say what happened.

Used by StandardOrder.transactions

  • typestring

    The tender. CARD is any card payment; MANUAL is one recorded without a processor.

    One of
    "CASH" "CARD" "PAYPAL" "GIFTCARD" "MANUAL" "OTHER"
  • amountinteger

    The amount, in cents, tip included.

  • taxinteger

    The tax this payment covered.

  • tipinteger

    The tip in this payment.

  • cashTipboolean

    True when the tip was paid in cash.

  • deliveryinteger

    The delivery fee this payment covered.

  • discountsinteger

    The discounts applied to this payment.

  • The processor, lowercased (finix, braintree, paypal, cash, manual…).

    Examples
    "finix" "cash"
  • The wallet the card came through.

    One of
    "none" "applepay" "googlepay"
  • True when the card can be charged again for what the order still owes.

  • cardBrandstring | null

    The card network, or null.

    Examples
    "visa" "mastercard" "amex" "discover"
  • last4string | null

    The card's last four digits, or null.

  • internal is the payment ID, a numeric string.

  • statusstring | null

    AUTHORIZED: held on the card, not yet captured. APPROVED: taken. VOIDED / REFUNDED: reversed.

    One of
    "APPROVED" "AUTHORIZED" "VOIDED" "REFUNDED" null
  • actionstring

    Whether the payment took money or returned it.

    One of
    "sale" "refund"
  • descriptionstring | null

    A note from the source, such as Stream transaction.

  • itemsobject[]

    When a payment covers particular lines (a split check), which lines.

    • The line's orderItemID.

    • amountinteger | null

      The part of the line paid, in cents; null means all of it.

  • itemSplitDataobject | null

    For an item or guest split, {version: 1, allocations: [{orderItemID, amount}]}. Null otherwise.

  • pointsEarnedstring | integer

    Loyalty points the payment earned. A numeric string on Blizzfull orders.

  • receiptDataobject | array | null

    Lines printed on the card receipt. Keys starting with _ are not for the customer.

  • This payment's money broken down like the order's. Null on marketplace orders.

  • extraChargesobject[]

    Fees attached to this payment, such as a card fee.

A mom-and-pop should never lose to a chain on anything.

With Blizzfull, it doesn’t have to.

API reference

2,500+ restaurants served24/7 support(213) 529-3956