Skip to main content

Order Pricing

Overview

This document explains how to interpret the pricing and calculation fields provided in order data.

Order Amount Fields

FieldDescription
SubtotalAmount of all items in the order prior to tax and/or discounts
TaxesAmount of taxes charged to the customer and paid to the merchant
Taxes Withheld by DSPAmount of taxes charged to the customer and paid to the DSP
Restaurant TipAmount of tip provided to the store
Driver TipAmount of tip provided to the driver
Delivery FeeAmount of fees provided to the delivery courier

Currency Format

All pricing values are provided in the lowest denomination of the currency specified for the store.

For example:

  • USD: Values are in cents (e.g., 2500 = $25.00)
  • EUR: Values are in cents (e.g., 2500 = €25.00)

Order Markup Values

The default behavior for item markups is to submit the order into the POS at the price it was ordered on the DSP, inclusive of markup.

To receive order markup total as a distinct line item, please reach out to Partner API support to enable this for your integration.

Markup Line Item Example

If enabled, markup will be provided as a separate line item where the markup total across all items on the order is shown:

{
"line_items": [
{
"name": "Burger",
"quantity": 1,
"price_amount": 1200,
"price_currency": "usd",
"modifiers": []
},
{
"name": "Uber Markup",
"quantity": 1,
"price_amount": 250,
"price_currency": "usd",
"modifiers": []
}
]
}

In this example, the markup total is $2.50.

Order Discounts

When a promotion is configured on the ordering channel, we will attach this information to the order to allow for accurate reporting within the POS. The discounts array will contain details about the discounts applied to the order, but discount amounts are NOT subtracted from item level prices or order subtotal.

Discount information can be provided in two forms: order-level and item-level.

Order-Level Discounts

When you have an order-level discount, the items field will be omitted from the discount record:

{
"discounts": [
{
"provider_id": "discount_id",
"amount": 250
}
]
}

Item-Level Discounts

When you have an item-level discount, the items array will reference the applicable items for the discount:

{
"discounts": [
{
"provider_id": "discount_id",
"amount": 250,
"items": [
{
"provider_id": "variation_id"
}
]
}
]
}

Bundles

A bundle is a set of items sold together (for example, a combo meal). Stream sends bundles to the POS as their individual line items rather than a single bundled item, so an order's pricing and item totals are unaffected by bundling.

To let you identify which items in an order belong to a bundle — for reporting or other purposes — Stream surfaces bundle information on the order payload. This information is optional to consume; existing behavior for non-bundle orders is unchanged.

  • Each line item that belongs to a bundle carries a bundle_id.
  • The order-level bundles array describes each bundle (id, name, quantity, price_amount).
  • A line item's bundle_id references the matching id in the bundles array.
  • When an order contains more than one bundle, each bundle has a distinct id, so items can be attributed to the correct bundle.
  • Items that are not part of a bundle omit bundle_id, and the bundles array is only present when the order contains at least one bundle.

In the example below, the first two items belong to the bundle_1 bundle and the third item is a regular, non-bundle item:

{
"line_items": [
{
"provider_id": "burger_id",
"name": "Burger",
"quantity": 1,
"price_amount": 800,
"price_currency": "usd",
"modifiers": [],
"bundle_id": "bundle_1"
},
{
"provider_id": "fries_id",
"name": "Fries",
"quantity": 1,
"price_amount": 400,
"price_currency": "usd",
"modifiers": [],
"bundle_id": "bundle_1"
},
{
"provider_id": "soda_id",
"name": "Soda",
"quantity": 1,
"price_amount": 200,
"price_currency": "usd",
"modifiers": []
}
],
"bundles": [
{
"id": "bundle_1",
"name": "Combo Meal",
"quantity": 1,
"price_amount": 1099
}
]
}