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",
- "email": "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
}
}
], - "menu_overrides": [
- {
- "provider_menu_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,
- "is_tax_exempt": 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
}
]
}
}
], - "menu_overrides": [
- {
- "provider_menu_id": "string",
- "override": {
- "name": "string",
- "description": "string",
- "is_active": true,
- "price_amount": 0,
- "dsp_price_amount_overrides": [
- {
- "dsp": "doordash",
- "price_amount": 0
}
]
}
}
], - "allergens": [
- "eggs"
]
}
], - "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
}
]
}
}
], - "menu_overrides": [
- {
- "provider_menu_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
}
}
], - "menu_overrides": [
- {
- "provider_menu_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_overrides": [
- {
- "provider_menu_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",
- "should_adjust_for_prep_time": true,
- "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,
- "location_overrides": [
- {
- "provider_location_id": "string",
- "override": {
- "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",
- "prep_time_minutes": 0,
- "connection_status": "online"
}
]
}
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",
- "customer_email": "string",
- "customer_name": "string",
- "customer_phone": "string",
- "customer_phone_code": "string",
- "idempotency_key": "string",
- "source_order_id": "string",
- "customers": [
- {
- "id": "string",
- "name": "string",
- "phone": "string",
- "phone_code": "string",
- "email": "string"
}
], - "line_items": [
- {
- "provider_id": "string",
- "item_family_provider_id": "string",
- "name": "string",
- "quantity": 0,
- "price_amount": 0,
- "price_currency": "string",
- "modifiers": [
- {
- "provider_id": "string",
- "modifier_group_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",
- "customer_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
}
}
Location Connection (Stream –> POS via OAuth)
You will have to build this endpoint into your system. Stream uses this to notify about location connections. This will be triggered when the location has been ingested successfully and Stream is ready to send order events. This requires a config flag to enable the endpoint.
header Parameters
Authorization required | string The OAuth Bearer token for the merchant. Format will be |
Request Body schema: application/json
Location connection data
location_id required | string The provider location ID |
Responses
Request samples
- Payload
{- "location_id": "loc_abc123"
}
Location Connection (Stream –> POS via OAuth)
You will have to build this endpoint into your system. Stream uses this to notify about location disconnections. This will be triggered when a location is deleted, and Stream will no longer send order events. This requires a config flag to enable the endpoint.
header Parameters
Authorization required | string The OAuth Bearer token for the merchant. Format will be |
Request Body schema: application/json
Location connection data
location_id required | string The provider location ID |
Responses
Request samples
- Payload
{- "location_id": "loc_abc123"
}
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"
}
}