Become a Stream POS (0.1)
Download OpenAPI specification:Download
This is a spec for integrating with Stream as a POS. We are prescribing an OAuth System for Location/Catalog Configuration alongside Order Management. Please send any feedback or questions to partner@streamorders.com.
Authorize Endpoint
You will have to build this route into your system. It should render or redirect to a web form that will prompt users to begin oAuth login. Once complete, the web form will redirect them back to us with their authorization code
query Parameters
client_id required | string |
response_type required | string Value: "code" |
redirect_uri required | string |
Responses
Request Token (Stream –> POS)
You will have to build this endpoint into your system. This is where Stream will send the authorization code we receive after the merchant authorizes us.
Request Body schema: application/json
client_id required | string The client ID to be provided to Stream for identifying us. |
client_secret required | string The client secret to be provided to Stream for security. |
code required | string The authorization code received from successful authorization. |
grant_type required | string Default: "authorization_code" |
redirect_uri required | string The redirect url for authorization. |
Responses
Request samples
- Payload
{- "client_id": "string",
- "client_secret": "string",
- "code": "string",
- "grant_type": "authorization_code",
- "redirect_uri": "string"
}
Response samples
- 201
{- "access_token": "string",
- "refresh_token": "string",
- "expire_time": 0,
- "refresh_token_expire_time": 0,
- "id": "string",
- "sso_details": {
- "email": "string",
- "full_name": "string",
- "phone_number": "string"
}
}
Get Catalog (Stream –> POS via OAuth)
You will have to build this endpoint into your system. This is where Stream will query the entire catalog attached to the OAuth token.
header Parameters
X-Provider-Merchant-Id | string The ID of the provider integration for the requested catalog. Only for Global Catalog |
X-Provider-Location-Id | string The ID of the provider location for the requested catalog |
Authorization | string The OAuth Bearer token for the merchant. Format will be |
Responses
Response samples
- 200
{- "tax_rate": 0,
- "category": [
- {
- "provider_id": "string",
- "name": "string",
- "item_family_ids": [
- "string"
], - "category_ids": [
- "string"
], - "location_overrides": [
- {
- "provider_location_id": "string",
- "override": {
- "name": "string",
- "description": "string",
- "is_active": true
}
}
]
}
], - "item_family": [
- {
- "modifier_group_rules": {
- "modifier_group_id": {
- "amount_of_modifiers_free": 1,
- "default_modifier_quantities": {
- "modifier_id": 1
}
}
}, - "provider_id": "string",
- "name": "string",
- "description": "string",
- "images": [
- {
- "provider_url": "string"
}
], - "is_active": true,
- "price_amount": 0,
- "price_currency": "string",
- "dsp_price_amount_overrides": [
- {
- "dsp": "doordash",
- "price_amount": 0
}
], - "is_alcohol": true,
- "container_deposit": 0,
- "upc": "string",
- "sku": "string",
- "item_ids": [
- "string"
], - "tax_ids": [
- "string"
], - "use_default_tax_rates": true,
- "modifier_group_ids": [
- "string"
], - "location_memberships": [
- "string"
], - "location_overrides": [
- {
- "provider_location_id": "string",
- "override": {
- "name": "string",
- "description": "string",
- "is_active": true,
- "price_amount": 0,
- "dsp_price_amount_overrides": [
- {
- "dsp": "doordash",
- "price_amount": 0
}
]
}
}
]
}
], - "item": [
- {
- "modifier_overrides": {
- "modifier_id": {
- "price_amount": 100,
- "price_currency": "usd"
}
}, - "provider_id": "string",
- "name": "string",
- "is_active": true,
- "price_amount": 0,
- "price_currency": "string",
- "dsp_price_amount_overrides": [
- {
- "dsp": "doordash",
- "price_amount": 0
}
], - "container_deposit": 0,
- "upc": "string",
- "sku": "string",
- "location_overrides": [
- {
- "provider_location_id": "string",
- "override": {
- "name": "string",
- "description": "string",
- "is_active": true,
- "price_amount": 0,
- "dsp_price_amount_overrides": [
- {
- "dsp": "doordash",
- "price_amount": 0
}
]
}
}
], - "stock_count": 0
}
], - "modifier_group": [
- {
- "provider_id": "string",
- "name": "string",
- "is_active": true,
- "modifier_ids": [
- "string"
], - "rules": {
- "selection_type": "single",
- "default_modifier_quantities": {
- "modifier_id": 0
}, - "minimum_unique_modifiers_allowed": 0,
- "maximum_unique_modifiers_allowed": 0,
- "amount_of_modifiers_free": 0
}, - "location_overrides": [
- {
- "provider_location_id": "string",
- "override": {
- "name": "string",
- "description": "string",
- "is_active": true
}
}
]
}
], - "modifier": [
- {
- "provider_id": "string",
- "name": "string",
- "is_active": true,
- "price_amount": 0,
- "price_currency": "string",
- "dsp_price_amount_overrides": [
- {
- "dsp": "doordash",
- "price_amount": 0
}
], - "container_deposit": 0,
- "modifier_group_ids": [
- "string"
], - "modifier_group_rules": {
- "modifier_group_id": {
- "selection_type": "single",
- "default_modifier_quantities": {
- "modifier_id": 0
}, - "minimum_unique_modifiers_allowed": 0,
- "maximum_unique_modifiers_allowed": 0,
- "amount_of_modifiers_free": 0
}
}, - "location_overrides": [
- {
- "provider_location_id": "string",
- "override": {
- "name": "string",
- "description": "string",
- "is_active": true,
- "price_amount": 0,
- "dsp_price_amount_overrides": [
- {
- "dsp": "doordash",
- "price_amount": 0
}
]
}
}
]
}
], - "menu": [
- {
- "provider_id": "string",
- "name": "string",
- "schedule": {
- "monday": [
- "string"
], - "tuesday": [
- "string"
], - "wednesday": [
- "string"
], - "thursday": [
- "string"
], - "friday": [
- "string"
], - "saturday": [
- "string"
], - "sunday": [
- "string"
]
}, - "category_ids": [
- "string"
], - "location_memberships": [
- "string"
]
}
], - "tax": [
- {
- "provider_id": "string",
- "name": "string",
- "rate": 0,
- "is_active": true,
- "is_default": true,
- "is_inclusive": true
}
]
}
Get Locations (Stream –> POS via OAuth)
You will have to build this endpoint into your system. Stream uses this to present the user with a selection of all locations attached to the OAuth token.
header Parameters
Authorization required | string The OAuth Bearer token for the merchant. Format will be |
Responses
Response samples
- 200
{- "locations": [
- {
- "provider_id": "string",
- "name": "string",
- "address": {
- "address_line_1": "string",
- "address_line_2": "string",
- "city": "string",
- "state": "string",
- "postal_code": "string",
- "country": "string"
}, - "timezone": "string"
}
]
}
Handle Order Event (Stream -> POS via OAuth)
You will have to build this endpoint into your system. This is how Stream will notify your system with order updates.
header Parameters
Authorization | string The OAuth Bearer token for the merchant. Format will be |
Request Body schema: application/json
type required | string Value: "order.created" |
required | object (NewOrderEventData) |
Responses
Request samples
- Payload
{- "type": "order.created",
- "object": {
- "fulfillment_type": "curbside",
- "source": "uber",
- "brand": "uber",
- "idempotency_key": "string",
- "source_order_id": "string",
- "customer_name": "string",
- "customer_phone": "string",
- "customer_phone_code": "string",
- "customer_email": "string",
- "line_items": [
- {
- "provider_id": "string",
- "name": "string",
- "quantity": 0,
- "price_amount": 0,
- "price_currency": "string",
- "modifiers": [
- {
- "provider_id": "string",
- "name": "string",
- "quantity": 0,
- "price_amount": 0,
- "price_currency": "string",
- "modifiers": [
- { }
], - "container_deposit": 0
}
], - "special_instructions": "string",
- "container_deposit": 0,
- "discount_id": "string"
}
], - "special_instructions": "string",
- "should_include_utensils": true,
- "is_future_order": true,
- "placed_at": 0,
- "requested_for": 0,
- "subtotal": 0,
- "tax": 0,
- "location_id": "string",
- "tax_withheld_by_dsp": 0,
- "service_charge": 0,
- "driver_tip": 0,
- "delivery_address": {
- "address_line_1": "string",
- "address_line_2": "string",
- "city": "string",
- "state": "string",
- "postal_code": "string",
- "country": "string"
}, - "delivery_fee": 0,
- "fulfillment_instructions": "string",
- "restaurant_tip": 0,
- "discounts": [
- {
- "provider_id": "string",
- "amount": 0,
- "items": [
- {
- "provider_id": "string"
}
]
}
], - "unpaid": true
}
}
Response samples
- 201
- 400
{- "order": {
- "provider_id": "string",
- "prep_time_minutes": 30
}
}
Handle Webhook Event (POS -> Stream via Webhook Secret)
You will call this endpoint from your system, This is how you will notify Stream with updates.
header Parameters
Stream-Webhook-Signature | string The HMAC-SHA256 signature of the request body, using the webhook secret as the key. |
Request Body schema: application/json
type required | string Default: "location.catalog.updated" |
required | object (LocationCatalogEventObject) |
Responses
Request samples
- Payload
{- "type": "location.catalog.updated",
- "object": {
- "location_id": "string"
}
}