Base URL
Each environment has its own host, both served under the/v1 prefix:
mpk_test_… in the sandbox, mpk_live_… in production). See Environments.
Authentication
Send aBearer credential on every request:
mpk_test_… for the sandbox, mpk_live_… for production) as the bearer token. GET /v1/me returns the app, environment, and scopes for any key. Full detail in Authentication.
Resource conventions
- Opaque IDs carry a type prefix —
str_(location),ord_(order),dws_(webhook subscription),evt_(event), and so on. Treat them as opaque strings. - Money is integer USD cents.
450means $4.50. Never parse amounts as floats. Currency codes are always uppercase ISO‑4217 (USD). - Field casing. Menu payloads use camelCase (
externalId,minSelections,modifierGroups); order and webhook payloads use snake_case (fulfillment_type,menu_entity_id,payment_status). A line item’smenu_entity_idcarries theexternalIdyou published for that menu object. - Timestamps on events and orders are Unix seconds (the
createdfield). - Object typing. Most resources carry an
objectfield (order,location,event, …) so you can tell them apart.
Lists
List endpoints return an envelope with anobject of list and a data array:
GET /v1/ordersreturns up to 100 orders and includes ahas_moreflag indicating more exist.GET /v1/webhook_eventsreturns up to 50 events, most recent first.GET /v1/locationsandGET /v1/webhook_subscriptionsreturn the full set for your app.
Filtering and pagination on
GET /v1/orders are under construction. The endpoint takes no query parameters today
— it returns the 100 most-recent orders across all of your connected locations, with has_more signalling that
more exist. There’s no location_id filter or cursor to page further back yet; both are coming. For now, rely on
order.notification webhooks to receive orders as they happen, and treat the list endpoint as a recent-activity view.Errors
Errors use standard HTTP status codes with a JSON body carrying a stable_tag and a human-readable message. Branch on the tag, not the message. The full catalog is in Errors.
Rate limits
There are no published per-app rate limits today. Be a good citizen — respond to webhooks asynchronously, avoid tight polling loops (you don’t need to poll; orders are pushed), and retry5xx responses with exponential backoff and jitter.