List menu items
Try itLists menu items with their add-ons, filtered by name, category, availability or whether they are on the menu.
https:/ / tablebuddy.radioworkflow.com/ api/ v1/ menu/ itemsPaged in id order. Filters combine: q matches the name or the code, in any case; available=false lists what is sold out (86ed) and active=false what has been taken off the menu. A cursor holds only with the same filters.
Each item carries its add-on groups and the add-ons in them. No cost price and no recipe: those are the stockroom's. Toast owns a linked item's name, price, description and place on the menu, so those read as Toast has them.
Authentication
Authorization: Bearer <key>, or the same key in x-api-key. A key acts as the person who made it, cut down to this endpoint’s scope, and never as an owner. How keys workpos.use) or Edit the menu (menu.manage)Request headers
AuthorizationrequiredBearer <key>. x-api-key: <key> works too; Authorization wins when both are sent.Idempotency-KeyignoredQuery parameters
limitinteger1–100optionalDefault 50.
cursorstringidoptionalnext_cursor from the previous page.qstring1–80 charsoptionalNot blank; no NUL character or unpaired surrogate.
category_idstringidoptionalavailableenumoptionaltrue for items on sale, false for items sold out (86ed).truefalseactiveenumoptionaltrue for items on the menu, false for items taken off it.truefalseAny other parameter, or one sent twice, is answered 422 invalid_request naming it. A list pages by cursor: see Pagination.
Response
In id order. A cursor holds only with the same filters.
Text in this answer can be typed in another system the restaurant uses (Toast) and synced in.
currencystringISO 4217minor_digitsinteger0–3dataarray of objectdata[].idstringiddata[].category_idstringiddata[].namestringdata[].descriptionstringnullabledata[].codestringnullabledata[].priceintegerminor unitsdata[].is_availablebooleandata[].is_activebooleandata[].food_typestringnullabledata[].stationstringnullabledata[].prep_minutesintegernullabledata[].addon_groupsarray of objectdata[].addon_groups[].groupobjectdata[].addon_groups[].group.idstringiddata[].addon_groups[].group.namestringdata[].addon_groups[].group.min_selectintegerdata[].addon_groups[].group.max_selectintegerdata[].addon_groups[].group.addonsarray of objectdata[].addon_groups[].group.addons[].idstringidaddon_ids.data[].addon_groups[].group.addons[].namestringdata[].addon_groups[].group.addons[].priceintegerminor unitshas_morebooleannext_cursorstringidnullablecursor. Null on the last page.An answer may gain fields within v1: ignore the ones you do not know. Versioning
Response headers
request-idalwaysCache-Controlalwaysno-store: an answer is never cached.RateLimit-Limit, RateLimit-Remaining, RateLimit-Resetonce the key is knownx-error-codeon an errorerror.code in the body.Retry-Afteron a 429WWW-Authenticateon a 401, and a 403 insufficient_scopeErrors
insufficient_scopeFix: Scopes are fixed when a key is made: make a new key with the scope.
issuer_access_endedFix: Make a new key from an active account.
issuer_permission_changedFix: Ask an owner to restore the permission, or make a new key from an account that holds it.
permission_requiredFix: Use a key with the named scope, from a creator who holds the named permission.
invalid_requestq blank or over 80 characters, or available or active other than true or false.Fix: Fix the named fields. Nothing was done, and an Idempotency-Key is not used up.
invalid_cursorFix: Start without cursor, keeping the same filters.
missing_api_keyNo Authorization: Bearer header and no x-api-key header.invalid_api_keyThe key is unknown, revoked or expired (answered alike).rate_limitedOver the key's 60 units a minute, or over 30 unknown keys a minute from one network (an address; an IPv6 caller's /64).internal_errorSomething failed on our side. Nothing kept the Idempotency-Key.curl -X GET "$TABLEBUDDY_URL/api/v1/menu/items?q=salmon&active=true" \ -H "Authorization: Bearer $TABLEBUDDY_API_KEY"
{
"currency": "USD",
"minor_digits": 2,
"data": [
{
"id": "cmg5x2b4f0002tb2jd8k1q7wz",
"category_id": "cmg5x2b4f0001tb2jx0v5n3ps",
"name": "Cedar-plank salmon",
"description": "Maple glaze, charred lemon",
"code": "E7",
"price": 2600,
"is_available": true,
"is_active": true,
"food_type": null,
"station": "Grill",
"prep_minutes": 18,
"addon_groups": [
{
"group": {
"id": "cmg5x2b4f0003tb2jm6c2r9ua",
"name": "Sides",
"min_select": 0,
"max_select": 2,
"addons": [
{
"id": "cmg5x2b4f0004tb2jf1s8t0yb",
"name": "Garlic mash",
"price": 400
}
]
}
}
]
}
],
"has_more": false,
"next_cursor": null
}