Order Pricing
Overview
This document explains how to interpret the pricing and calculation fields provided in order data.
Order Amount Fields
| Field | Description |
|---|---|
| Subtotal | Amount of all items in the order prior to tax and/or discounts |
| Taxes | Amount of taxes charged to the customer and paid to the merchant |
| Taxes Withheld by DSP | Amount of taxes charged to the customer and paid to the DSP |
| Restaurant Tip | Amount of tip provided to the store |
| Driver Tip | Amount of tip provided to the driver |
| Delivery Fee | Amount 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
bundlesarray describes each bundle (id,name,quantity,price_amount). - A line item's
bundle_idreferences the matchingidin thebundlesarray. - 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 thebundlesarray 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
}
]
}