Skip to content

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.

Overview

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

Base URL

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.

Download OpenAPI description
Overview
Tote Developer Support
Languages
Servers
Mock server
https://developers.tote.ai/_mock/online-ordering/spec/openapi
Production (placeholder -- use your assigned base URL)
https://api.tote.ai/v1/online-ordering
Sandbox (placeholder -- use your assigned base URL)
https://sandbox.api.tote.ai/v1/online-ordering

Authentication

OAuth 2.0 client credentials token management.

Operations

Locations

Store locations, hours, and capabilities.

Operations

Carts

Shopping cart creation, item management, pricing, and checkout.

Operations

Orders

Order retrieval, fulfillment tracking, and cancellation.

Operations

Payments

Payment submission, split payments, and refunds.

Operations

Webhook Subscriptions

Webhook subscription management and event delivery.

Operations

Inventory

Item availability and stock status.

Operations

Events

Webhook event payloads delivered to your subscription URLs.

Webhooks

Menu changed eventWebhook

Request

Sent when a location's menu is modified. Re-fetch the full menu via GET /locations/{location_id}/menu. Use version_hash to avoid unnecessary re-fetches.

Bodyapplication/json
event_idstring(uuid)required

Unique identifier for this event. Use for idempotent processing.

event_typestringrequired

The type of event that occurred. Determines the shape of the data field.

Value "menu.changed"
created_atstring(date-time)required

When the event occurred (ISO 8601 UTC).

dataobjectrequired

Menu change details. Re-fetch the full menu via GET /locations/{location_id}/menu after receiving this event.

data.​location_idstring(uuid)required

The location whose menu changed.

data.​version_hashstringrequired

New menu version hash. Compare with your cached version to determine if a re-fetch is needed. Matches the version_hash field from GET /locations/{location_id}/menu/metadata.

Example: "sha256:b2c3d4e5f6a7"
data.​change_typestringrequired

The type of menu change that occurred.

  • ITEMS_ADDED: New items added to the menu.
  • ITEMS_REMOVED: Items removed from the menu.
  • ITEMS_MODIFIED: Existing items changed (price, name, modifiers, etc.).
  • CATEGORIES_CHANGED: Category structure modified (added, removed, reordered).
  • FULL_UPDATE: Bulk menu update affecting multiple aspects.
Enum"ITEMS_ADDED""ITEMS_REMOVED""ITEMS_MODIFIED""CATEGORIES_CHANGED""FULL_UPDATE"
data.​changed_atstring(date-time)required

When the menu change occurred.

application/json
{ "event_id": "a7a26ff2-e851-45b6-9634-d595f45458b7", "event_type": "menu.changed", "created_at": "2019-08-24T14:15:22Z", "data": { "location_id": "46910cc3-ab41-4b80-b4a7-94dab9f1b795", "version_hash": "sha256:b2c3d4e5f6a7", "change_type": "ITEMS_ADDED", "changed_at": "2019-08-24T14:15:22Z" } }

Responses

Event received successfully.

Location hours changed eventWebhook

Request

Sent when a location's business hours are modified. Includes both previous and current hours for comparison.

Bodyapplication/json
event_idstring(uuid)required

Unique identifier for this event. Use for idempotent processing.

event_typestringrequired

The type of event that occurred. Determines the shape of the data field.

Value "location.hours_changed"
created_atstring(date-time)required

When the event occurred (ISO 8601 UTC).

dataobjectrequired

Event-specific payload. Shape depends on event_type. See individual event schemas for details.

data.​location_idstring(uuid)required

The location whose hours changed.

data.​previous_hoursArray of objectsrequired

Business hours before the change.

data.​previous_hours[].​day_of_weekstringrequired

Day of the week.

Enum"MONDAY""TUESDAY""WEDNESDAY""THURSDAY""FRIDAY""SATURDAY""SUNDAY"
data.​previous_hours[].​open_timestringrequired

Opening time in HH:MM format (24-hour, location local time).

data.​previous_hours[].​close_timestringrequired

Closing time in HH:MM format (24-hour, location local time).

data.​previous_hours[].​is_closedbooleanrequired

Whether the location is closed on this day.

data.​current_hoursArray of objectsrequired

Business hours after the change.

data.​current_hours[].​day_of_weekstringrequired

Day of the week.

Enum"MONDAY""TUESDAY""WEDNESDAY""THURSDAY""FRIDAY""SATURDAY""SUNDAY"
data.​current_hours[].​open_timestringrequired

Opening time in HH:MM format (24-hour, location local time).

data.​current_hours[].​close_timestringrequired

Closing time in HH:MM format (24-hour, location local time).

data.​current_hours[].​is_closedbooleanrequired

Whether the location is closed on this day.

data.​effective_datestring or null(date)

Date when the new hours take effect (YYYY-MM-DD). Null means the change is effective immediately.

data.​changed_atstring(date-time)required

When the hours change was made.

application/json
{ "event_id": "a7a26ff2-e851-45b6-9634-d595f45458b7", "event_type": "location.hours_changed", "created_at": "2019-08-24T14:15:22Z", "data": { "location_id": "46910cc3-ab41-4b80-b4a7-94dab9f1b795", "previous_hours": [], "current_hours": [], "effective_date": "2019-08-24", "changed_at": "2019-08-24T14:15:22Z" } }

Responses

Event received successfully.