API reference

Catalogue and menu

Items, recipes, prices per outlet and channel, deals, coupons, availability and barcodes.

get

/v1/catalogue/items

Items with their variants; inactive ones only with include_inactive=true

operationId listCatalogueItems

Auth

Member token+Tenant header

Parameters

  • include_inactivein queryenum (2)optional
    truefalse
  • limitin queryintegeroptional
  • cursorin querystringoptional
    pattern ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$

Response 200

V1CatalogueItemscontract v1.catalogue.items
  • itemsarray of objectrequired
    • item_idUuid7required
    • kindenum (3)required
      dishskucombo
    • name_keystringrequired
      pattern ^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$
    • categorystringrequired
    • brand_idUuid7 | nullrequired
    • barcodestring | nullrequired
    • stock_ingredient_idUuid7 | nullrequired
    • activebooleanrequired
    • variantsarray of objectrequired
      • variant_idUuid7required
      • name_keystringrequired
        pattern ^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$
      • barcodestring | nullrequired
      • activebooleanrequired
  • next_cursorUuid7 | nullrequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/catalogue/items

catalogue.item.upsert.v1 — create or update an item with its variants and option groups (owner/manager, all outlets)

operationId upsertCatalogueItem

Auth

Member token+Tenant header

Request body

object
  • command_idUuid7required
  • idempotency_keystringrequired
    pattern ^[A-Za-z0-9_.:-]{8,100}$
  • typeconst "catalogue.item.upsert.v1"required
  • payloadCatalogueItemUpsertV1required

Response 200

CommandResultcontract command-result
  • command_idUuid7required
  • typestringrequired
    pattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
  • entity_idUuid7required
  • committed_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

get

/v1/catalogue/recipes

Recipe versions with their lines, optionally of one item

operationId listCatalogueRecipes

Auth

Member token+Tenant header

Parameters

  • itemin querystringoptional
    pattern ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
  • limitin queryintegeroptional
  • cursorin querystringoptional
    pattern ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$

Response 200

V1CatalogueRecipescontract v1.catalogue.recipes
  • itemsarray of objectrequired
    • recipe_version_idUuid7required
    • item_idUuid7required
    • variant_idUuid7 | nullrequired
    • versionintegerrequired
      ≥ 1≤ 9007199254740991
    • valid_fromstring (date)required
      pattern ^(?:(?:[0-9][0-9][2468][048]|[0-9][0-9][13579][26]|[0-9][0-9]0[48]|[02468][048]00|[13579][26]00)-02-29|[0-9]{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01])|(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30)|(?:02)-(?:0[1-9]|1[0-9]|2[0-8])))$
    • valid_tostring (date) | nullrequired
      pattern ^(?:(?:[0-9][0-9][2468][048]|[0-9][0-9][13579][26]|[0-9][0-9]0[48]|[02468][048]00|[13579][26]00)-02-29|[0-9]{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01])|(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30)|(?:02)-(?:0[1-9]|1[0-9]|2[0-8])))$
    • yield_qty_milliintegerrequired
      ≥ -9007199254740991≤ 9007199254740991
    • linesarray of objectrequired
      • recipe_line_idUuid7required
      • ingredient_idUuid7required
      • qty_milliintegerrequired
        ≥ -9007199254740991≤ 9007199254740991
      • unitstringrequired
        pattern ^[a-z][a-z_]{0,15}$
      • waste_pct_bpintegerrequired
        ≥ 0≤ 10000
  • next_cursorUuid7 | nullrequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/catalogue/recipes

catalogue.recipe.version.create.v1 — the next recipe version; closes the open one; an overlapping validity or a unit that is not the ingredient's base unit is refused

operationId createRecipeVersion

Auth

Member token+Tenant header

Request body

object
  • command_idUuid7required
  • idempotency_keystringrequired
    pattern ^[A-Za-z0-9_.:-]{8,100}$
  • typeconst "catalogue.recipe.version.create.v1"required

Response 200

CommandResultcontract command-result
  • command_idUuid7required
  • typestringrequired
    pattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
  • entity_idUuid7required
  • committed_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

get

/v1/catalogue/prices

Price rows in every validity window, future-dated included

operationId listCataloguePrices

Auth

Member token+Tenant header

Parameters

  • itemin querystringoptional
    pattern ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
  • outletin querystringoptional
    pattern ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
  • channel_kindin querystringoptional
    pattern ^(counter|table_qr|pickup|own_site|aggregator:[a-z][a-z0-9_]*)$
  • limitin queryintegeroptional
  • cursorin querystringoptional
    pattern ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$

Response 200

V1CataloguePricescontract v1.catalogue.prices
  • itemsarray of objectrequired
    • price_idUuid7required
    • item_idUuid7required
    • variant_idUuid7 | nullrequired
    • outlet_idUuid7required
    • channel_kindstringrequired
    • amount_minorintegerrequired
      ≥ -9007199254740991≤ 9007199254740991
    • currencystringrequired
      pattern ^[A-Z]{3}$
    • tax_classstringrequired
    • valid_fromstring (date)required
      pattern ^(?:(?:[0-9][0-9][2468][048]|[0-9][0-9][13579][26]|[0-9][0-9]0[48]|[02468][048]00|[13579][26]00)-02-29|[0-9]{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01])|(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30)|(?:02)-(?:0[1-9]|1[0-9]|2[0-8])))$
    • valid_tostring (date) | nullrequired
      pattern ^(?:(?:[0-9][0-9][2468][048]|[0-9][0-9][13579][26]|[0-9][0-9]0[48]|[02468][048]00|[13579][26]00)-02-29|[0-9]{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01])|(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30)|(?:02)-(?:0[1-9]|1[0-9]|2[0-8])))$
  • next_cursorUuid7 | nullrequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/catalogue/prices

catalogue.price.set.v1 — a price for an outlet and channel; closes the open one; an overlapping validity is refused

operationId setPrice

Auth

Member token+Tenant header

Request body

object
  • command_idUuid7required
  • idempotency_keystringrequired
    pattern ^[A-Za-z0-9_.:-]{8,100}$
  • typeconst "catalogue.price.set.v1"required
  • payloadCataloguePriceSetV1required

Response 200

CommandResultcontract command-result
  • command_idUuid7required
  • typestringrequired
    pattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
  • entity_idUuid7required
  • committed_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

get

/v1/catalogue/deals

Deals visible to the caller's outlet scope (an empty outlet list = every outlet)

operationId listCatalogueDeals

Auth

Member token+Tenant header

Parameters

  • limitin queryintegeroptional
  • cursorin querystringoptional
    pattern ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$

Response 200

V1CatalogueDealscontract v1.catalogue.deals
  • itemsarray of objectrequired
    • deal_idUuid7required
    • kindstringrequired
    • name_keystringrequired
      pattern ^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$
    • rulemap of anyrequired
    • windowsarray of anyrequired
    • outlet_idsarray of Uuid7required
    • valid_fromstring (date)required
      pattern ^(?:(?:[0-9][0-9][2468][048]|[0-9][0-9][13579][26]|[0-9][0-9]0[48]|[02468][048]00|[13579][26]00)-02-29|[0-9]{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01])|(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30)|(?:02)-(?:0[1-9]|1[0-9]|2[0-8])))$
    • valid_tostring (date) | nullrequired
      pattern ^(?:(?:[0-9][0-9][2468][048]|[0-9][0-9][13579][26]|[0-9][0-9]0[48]|[02468][048]00|[13579][26]00)-02-29|[0-9]{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01])|(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30)|(?:02)-(?:0[1-9]|1[0-9]|2[0-8])))$
    • activebooleanrequired
  • next_cursorUuid7 | nullrequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/catalogue/deals

catalogue.deal.upsert.v1 — create or update a deal with its weekly windows (outlet time zone)

operationId upsertDeal

Auth

Member token+Tenant header

Request body

object
  • command_idUuid7required
  • idempotency_keystringrequired
    pattern ^[A-Za-z0-9_.:-]{8,100}$
  • typeconst "catalogue.deal.upsert.v1"required
  • payloadCatalogueDealUpsertV1required

Response 200

CommandResultcontract command-result
  • command_idUuid7required
  • typestringrequired
    pattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
  • entity_idUuid7required
  • committed_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

get

/v1/catalogue/coupons

Coupons visible to the caller's outlet scope (an empty outlet list = every outlet)

operationId listCatalogueCoupons

Auth

Member token+Tenant header

Parameters

  • limitin queryintegeroptional
  • cursorin querystringoptional
    pattern ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$

Response 200

V1CatalogueCouponscontract v1.catalogue.coupons
  • itemsarray of objectrequired
    • coupon_idUuid7required
    • codestringrequired
      pattern ^[A-Z0-9][A-Z0-9-]{2,31}$
    • kindenum (2)required
      percentamount
    • value_bpinteger | nullrequired
      ≥ -9007199254740991≤ 9007199254740991
    • value_minorinteger | nullrequired
      ≥ -9007199254740991≤ 9007199254740991
    • currencystringrequired
      pattern ^[A-Z]{3}$
    • min_spend_minorintegerrequired
      ≥ -9007199254740991≤ 9007199254740991
    • global_capinteger | nullrequired
      ≥ -9007199254740991≤ 9007199254740991
    • per_customer_capinteger | nullrequired
      ≥ -9007199254740991≤ 9007199254740991
    • requires_customerbooleanrequired
    • outlet_idsarray of Uuid7required
    • campaign_idUuid7 | nullrequired
    • valid_fromIsoDatetimerequired
    • valid_toIsoDatetime | nullrequired
    • activebooleanrequired
  • next_cursorUuid7 | nullrequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/catalogue/coupons

catalogue.coupon.set.v1 — create a coupon or change its caps, end date or status

operationId setCoupon

Auth

Member token+Tenant header

Request body

object
  • command_idUuid7required
  • idempotency_keystringrequired
    pattern ^[A-Za-z0-9_.:-]{8,100}$
  • typeconst "catalogue.coupon.set.v1"required
  • payloadCatalogueCouponSetV1required

Response 200

CommandResultcontract command-result
  • command_idUuid7required
  • typestringrequired
    pattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
  • entity_idUuid7required
  • committed_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/catalogue/deals/{id}:end

catalogue.deal.end.v1 — end a deal (payload deal_id must equal the path id)

operationId endDeal

Auth

Member token+Tenant header

Parameters

  • idin pathstringrequired
    pattern ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$

Request body

object
  • command_idUuid7required
  • idempotency_keystringrequired
    pattern ^[A-Za-z0-9_.:-]{8,100}$
  • typeconst "catalogue.deal.end.v1"required
  • payloadCatalogueDealEndV1required

Response 200

CommandResultcontract command-result
  • command_idUuid7required
  • typestringrequired
    pattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
  • entity_idUuid7required
  • committed_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/catalogue/availability

catalogue.availability.set.v1 — mark an item sold out or back on sale at one outlet

operationId setAvailability

Auth

Member token+Tenant header

Request body

object
  • command_idUuid7required
  • idempotency_keystringrequired
    pattern ^[A-Za-z0-9_.:-]{8,100}$
  • typeconst "catalogue.availability.set.v1"required

Response 200

CommandResultcontract command-result
  • command_idUuid7required
  • typestringrequired
    pattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
  • entity_idUuid7required
  • committed_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

get

/v1/catalogue/menu

Items for sale at an outlet and channel now: price rows, options, sold-out state and deal badges

operationId getMenu

Auth

Member token+Tenant header

Parameters

  • outletin querystringrequired
    pattern ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
  • channel_kindin querystringrequired
    pattern ^(counter|table_qr|pickup|own_site|aggregator:[a-z][a-z0-9_]*)$

Response 200

V1CatalogueMenucontract v1.catalogue.menu
  • outlet_idUuid7required
  • channel_kindone of 2required
  • business_datestring (date)required
    pattern ^(?:(?:[0-9][0-9][2468][048]|[0-9][0-9][13579][26]|[0-9][0-9]0[48]|[02468][048]00|[13579][26]00)-02-29|[0-9]{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01])|(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30)|(?:02)-(?:0[1-9]|1[0-9]|2[0-8])))$
  • entriesarray of objectrequired
    • item_idUuid7required
    • variant_idUuid7 | nullrequired
    • kindenum (3)required
      dishskucombo
    • name_keystringrequired
      pattern ^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$
    • variant_name_keystring | nullrequired
      pattern ^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$
    • categorystringrequired
    • brand_idUuid7 | nullrequired
    • display_namestring | nullrequired
    • descriptionstring | nullrequired
    • dietenum (4) | nullrequired
      vegnon_vegeggvegan
    • variant_display_namestring | nullrequired
    • variant_descriptionstring | nullrequired
    • barcodestring | nullrequired
    • price_idUuid7required
    • price_minorintegerrequired
      ≥ -9007199254740991≤ 9007199254740991
    • currencystringrequired
      pattern ^[A-Z]{3}$
    • tax_classstringrequired
      pattern ^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$
    • mrp_minorinteger | nullrequired
      ≥ -9007199254740991≤ 9007199254740991
    • availablebooleanrequired
    • option_groupsarray of objectrequired
      • option_group_idUuid7required
      • name_keystringrequired
        pattern ^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$
      • min_selectintegerrequired
        ≥ 0≤ 9007199254740991
      • max_selectintegerrequired
        ≥ 1≤ 9007199254740991
      • requiredbooleanrequired
      • optionsarray of objectrequired
        Show fields of options
        • option_idUuid7required
        • name_keystringrequired
          pattern ^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$
        • price_delta_minorintegerrequired
          ≥ -9007199254740991≤ 9007199254740991
        • currencystringrequired
          pattern ^[A-Z]{3}$
        • display_namestring | nullrequired
        • descriptionstring | nullrequired
      • display_namestring | nullrequired
      • descriptionstring | nullrequired
    • dealsarray of objectrequired
      • deal_idUuid7required
      • name_keystringrequired
        pattern ^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$
      • kindstringrequired
      • windowsarray of objectrequired
        Show fields of windows
        • daysarray of integerrequired
          min items 1max items 7
        • fromstringrequired
          pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
        • tostringrequired
          pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

get

/v1/catalogue/barcodes/{code}

Shop scan: the item or variant with this barcode and its price at the outlet; unknown code → 404

operationId lookupBarcode

Auth

Member token+Tenant header

Parameters

  • codein pathstringrequired
  • outletin querystringrequired
    pattern ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
  • channel_kindin querystringrequired
    pattern ^(counter|table_qr|pickup|own_site|aggregator:[a-z][a-z0-9_]*)$

Response 200

V1CatalogueBarcodecontract v1.catalogue.barcode
  • barcodestringrequired
  • item_idUuid7required
  • variant_idUuid7 | nullrequired
  • on_salebooleanrequired
  • entryobject | nullrequired
    • item_idUuid7required
    • variant_idUuid7 | nullrequired
    • kindenum (3)required
      dishskucombo
    • name_keystringrequired
      pattern ^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$
    • variant_name_keystring | nullrequired
      pattern ^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$
    • categorystringrequired
    • brand_idUuid7 | nullrequired
    • display_namestring | nullrequired
    • descriptionstring | nullrequired
    • dietenum (4) | nullrequired
      vegnon_vegeggvegan
    • variant_display_namestring | nullrequired
    • variant_descriptionstring | nullrequired
    • barcodestring | nullrequired
    • price_idUuid7required
    • price_minorintegerrequired
      ≥ -9007199254740991≤ 9007199254740991
    • currencystringrequired
      pattern ^[A-Z]{3}$
    • tax_classstringrequired
      pattern ^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$
    • mrp_minorinteger | nullrequired
      ≥ -9007199254740991≤ 9007199254740991
    • availablebooleanrequired
    • option_groupsarray of objectrequired
      • option_group_idUuid7required
      • name_keystringrequired
        pattern ^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$
      • min_selectintegerrequired
        ≥ 0≤ 9007199254740991
      • max_selectintegerrequired
        ≥ 1≤ 9007199254740991
      • requiredbooleanrequired
      • optionsarray of objectrequired
        Show fields of options
        • option_idUuid7required
        • name_keystringrequired
          pattern ^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$
        • price_delta_minorintegerrequired
          ≥ -9007199254740991≤ 9007199254740991
        • currencystringrequired
          pattern ^[A-Z]{3}$
        • display_namestring | nullrequired
        • descriptionstring | nullrequired
      • display_namestring | nullrequired
      • descriptionstring | nullrequired
    • dealsarray of objectrequired
      • deal_idUuid7required
      • name_keystringrequired
        pattern ^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$
      • kindstringrequired
      • windowsarray of objectrequired
        Show fields of windows
        • daysarray of integerrequired
          min items 1max items 7
        • fromstringrequired
          pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
        • tostringrequired
          pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.