OAuth 2.0 client credentials token management.
Tote Online Ordering API (1.0.0)
REST API for 3rd party developers building online ordering integrations with Tote POS convenience stores and fuel stations.
The Tote Online Ordering API enables partners to:
- Authenticate via OAuth 2.0 client credentials
- Browse store locations and business hours
- Retrieve full menus with nested modifier groups
- Create and manage shopping carts
- Submit orders with split payment support
- Track order fulfillment status
- Subscribe to webhook events for real-time updates
- Check item availability and inventory
The server URLs below are placeholders. Your actual API base URL, client ID, and client secret are provided during partner onboarding. Contact developer@totepos.com to get started.
Path parameters use snake_case. JSON response fields use snake_case. Schema names use PascalCase. Enum values use SCREAMING_SNAKE_CASE.
The type of event that occurred. Determines the shape of the data field.
Event-specific payload. Shape depends on event_type. See individual event schemas for details.
Order lifecycle status. Tracks the high-level state of the order from creation through completion or cancellation.
- PENDING: Order created from cart checkout, awaiting payment.
- CONFIRMED: At least one payment completed; order accepted by the store.
- COMPLETED: Order fulfilled and closed.
- FAILED: Order could not be processed (e.g., all payments failed).
- VOIDED: Order voided before any fulfillment began.
- CANCELLED: Order cancelled by customer or system.
State transitions:
- PENDING -> CONFIRMED, FAILED, VOIDED, CANCELLED
- CONFIRMED -> COMPLETED, CANCELLED
- COMPLETED, FAILED, VOIDED, CANCELLED are terminal (no further transitions)
Order lifecycle status. Tracks the high-level state of the order from creation through completion or cancellation.
- PENDING: Order created from cart checkout, awaiting payment.
- CONFIRMED: At least one payment completed; order accepted by the store.
- COMPLETED: Order fulfilled and closed.
- FAILED: Order could not be processed (e.g., all payments failed).
- VOIDED: Order voided before any fulfillment began.
- CANCELLED: Order cancelled by customer or system.
State transitions:
- PENDING -> CONFIRMED, FAILED, VOIDED, CANCELLED
- CONFIRMED -> COMPLETED, CANCELLED
- COMPLETED, FAILED, VOIDED, CANCELLED are terminal (no further transitions)
Fulfillment lifecycle status. Tracks the physical preparation and handoff of the order. Maps directly from the backend fulfillment state machine.
- PENDING: Order created, not yet accepted by store.
- IN_PROGRESS: Store accepted the order and is queuing it.
- PREPARING: Store staff actively assembling the order.
- READY_FOR_PICKUP: Order assembled and waiting for customer (pickup/curbside).
- FULFILLED: Customer received the order (pickup/curbside/kiosk).
- DELIVERED: Order delivered to customer address (delivery orders).
- RETURNED: Order returned after fulfillment.
- CANCELLED: Fulfillment cancelled before completion.
State transitions:
- PENDING -> IN_PROGRESS, CANCELLED
- IN_PROGRESS -> PREPARING, CANCELLED
- PREPARING -> READY_FOR_PICKUP, CANCELLED
- READY_FOR_PICKUP -> FULFILLED, DELIVERED, CANCELLED
- FULFILLED -> RETURNED
- DELIVERED -> RETURNED
- RETURNED, CANCELLED are terminal (no further transitions)
Cancellation restriction: Orders can only be cancelled via POST /orders/{order_id}/cancel when fulfillment_status is PENDING or IN_PROGRESS. Once preparation begins, cancellation requires store intervention.
Fulfillment lifecycle status. Tracks the physical preparation and handoff of the order. Maps directly from the backend fulfillment state machine.
- PENDING: Order created, not yet accepted by store.
- IN_PROGRESS: Store accepted the order and is queuing it.
- PREPARING: Store staff actively assembling the order.
- READY_FOR_PICKUP: Order assembled and waiting for customer (pickup/curbside).
- FULFILLED: Customer received the order (pickup/curbside/kiosk).
- DELIVERED: Order delivered to customer address (delivery orders).
- RETURNED: Order returned after fulfillment.
- CANCELLED: Fulfillment cancelled before completion.
State transitions:
- PENDING -> IN_PROGRESS, CANCELLED
- IN_PROGRESS -> PREPARING, CANCELLED
- PREPARING -> READY_FOR_PICKUP, CANCELLED
- READY_FOR_PICKUP -> FULFILLED, DELIVERED, CANCELLED
- FULFILLED -> RETURNED
- DELIVERED -> RETURNED
- RETURNED, CANCELLED are terminal (no further transitions)
Cancellation restriction: Orders can only be cancelled via POST /orders/{order_id}/cancel when fulfillment_status is PENDING or IN_PROGRESS. Once preparation begins, cancellation requires store intervention.
Aggregate payment status across all payments on the order. This is a server-computed summary -- do not set directly.
- UNPAID: No payments submitted yet.
- PROCESSING: At least one payment is in a non-terminal state (PENDING or AUTHORIZED).
- PARTIALLY_PAID: Some payments completed but total paid < order total.
- PAID: Total paid >= order total. The order is fully covered.
State transitions:
- UNPAID -> PROCESSING, PARTIALLY_PAID, PAID
- PROCESSING -> PARTIALLY_PAID, PAID, UNPAID (if all payments fail)
- PARTIALLY_PAID -> PROCESSING, PAID
- PAID is terminal for forward flow (refunds revert to PARTIALLY_PAID or UNPAID)
Aggregate payment status across all payments on the order. This is a server-computed summary -- do not set directly.
- UNPAID: No payments submitted yet.
- PROCESSING: At least one payment is in a non-terminal state (PENDING or AUTHORIZED).
- PARTIALLY_PAID: Some payments completed but total paid < order total.
- PAID: Total paid >= order total. The order is fully covered.
State transitions:
- UNPAID -> PROCESSING, PARTIALLY_PAID, PAID
- PROCESSING -> PARTIALLY_PAID, PAID, UNPAID (if all payments fail)
- PARTIALLY_PAID -> PROCESSING, PAID
- PAID is terminal for forward flow (refunds revert to PARTIALLY_PAID or UNPAID)
- Mock serverhttps://developers.tote.ai/_mock/online-ordering/spec/openapi/order-status-changed
- Production (placeholder -- use your assigned base URL)https://api.tote.ai/v1/online-ordering/order-status-changed
- Sandbox (placeholder -- use your assigned base URL)https://sandbox.api.tote.ai/v1/online-ordering/order-status-changed
{ "event_id": "a7a26ff2-e851-45b6-9634-d595f45458b7", "event_type": "order.status_changed", "created_at": "2019-08-24T14:15:22Z", "data": { "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe", "location_id": "46910cc3-ab41-4b80-b4a7-94dab9f1b795", "previous_status": "PENDING", "current_status": "PENDING", "previous_fulfillment_status": "PENDING", "current_fulfillment_status": "PENDING", "previous_payment_status": "UNPAID", "current_payment_status": "UNPAID", "updated_at": "2019-08-24T14:15:22Z" } }
The type of event that occurred. Determines the shape of the data field.
Event-specific payload. Shape depends on event_type. See individual event schemas for details.
Human-readable cancellation reason. Null if no reason was provided.
- Mock serverhttps://developers.tote.ai/_mock/online-ordering/spec/openapi/order-cancelled
- Production (placeholder -- use your assigned base URL)https://api.tote.ai/v1/online-ordering/order-cancelled
- Sandbox (placeholder -- use your assigned base URL)https://sandbox.api.tote.ai/v1/online-ordering/order-cancelled
{ "event_id": "a7a26ff2-e851-45b6-9634-d595f45458b7", "event_type": "order.cancelled", "created_at": "2019-08-24T14:15:22Z", "data": { "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe", "location_id": "46910cc3-ab41-4b80-b4a7-94dab9f1b795", "reason": "string", "cancelled_at": "2019-08-24T14:15:22Z" } }
The type of event that occurred. Determines the shape of the data field.
Stock change details. Use GET /locations/{location_id}/inventory as a polling fallback to reconcile.
Items whose availability status changed. A single event can report multiple item changes at the same location.
Item availability status at a location.
- IN_STOCK: Item is available for ordering.
- LOW_STOCK: Item is available but quantities are limited. The threshold for LOW_STOCK is configured server-side per location.
- OUT_OF_STOCK: Item is not available for ordering. Do not display this item as orderable to customers.
Item availability status at a location.
- IN_STOCK: Item is available for ordering.
- LOW_STOCK: Item is available but quantities are limited. The threshold for LOW_STOCK is configured server-side per location.
- OUT_OF_STOCK: Item is not available for ordering. Do not display this item as orderable to customers.
- Mock serverhttps://developers.tote.ai/_mock/online-ordering/spec/openapi/stock-updated
- Production (placeholder -- use your assigned base URL)https://api.tote.ai/v1/online-ordering/stock-updated
- Sandbox (placeholder -- use your assigned base URL)https://sandbox.api.tote.ai/v1/online-ordering/stock-updated
{ "event_id": "a7a26ff2-e851-45b6-9634-d595f45458b7", "event_type": "stock.updated", "created_at": "2019-08-24T14:15:22Z", "data": { "location_id": "46910cc3-ab41-4b80-b4a7-94dab9f1b795", "items": [ … ] } }