API referenceMenu items

Menu items

4 operations. Every schema and example on this page is generated from the platform contract.

List a store’s menu items.

Merchant read of the store’s menu items. Removed items (soft-deleted) are excluded; merchant-hidden items are included (flagged via is_available/checkout_enabled).

Parameters

store_idstring · uuidqueryrequired

Store whose menu to list (also authorises the merchant).

Response, 200

itemsarray of objectrequired
24 child fields
idstringrequired
namestringrequired
descriptionstring, nullablerequired
categorystring, nullablerequired
emojistring, nullablerequired
image_urlstring, nullablerequired
product_mediaarray of objectrequired
5 child fields
idstringrequired
typeenumrequired
imagevideo
urlstringrequired
thumbnail_urlstring, nullablerequired
sort_ordernumberrequired
contains_allergensarray of stringrequired
dietary_tagsarray of stringrequired
ingredientsstring, nullablerequired
nutrition_summarystring, nullablerequired
is_popularbooleanrequired
is_availablebooleanrequired
checkout_enabledbooleanrequired
stock_tracking_enabledbooleanrequired
stock_quantitynumber, nullablerequired
stock_remainingnumber, nullablerequired
sold_outbooleanrequired
collect_eligiblebooleanrequired
available_nowbooleanrequired
collect_prep_minutesnumber, nullablerequired
price_pencenumberrequired
currencystringrequired
sort_ordernumberrequired
curl -G "https://www.membber.com/api/v1/menu-items" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  --data-urlencode "store_id=6659c139-0000-4000-8000-d0c500000066"
Response, 200
{
  "items": [
    {
      "id": "00000d1b-0000-4000-8000-d0c500000000",
      "name": "Example name",
      "description": "Added at the front desk",
      "category": "<category>",
      "emoji": "<emoji>",
      "image_url": "https://example.com/image.jpg",
      "product_media": [
        {
          "id": "00000d1b-0000-4000-8000-d0c500000000",
          "type": "image",
          "url": "https://example.com/image.jpg",
          "thumbnail_url": "https://example.com/image.jpg",
          "sort_order": 1
        }
      ],
      "contains_allergens": [
        "<contains_allergen>"
      ],
      "dietary_tags": [
        "<dietary_tag>"
      ],
      "ingredients": "<ingredients>",
      "nutrition_summary": "<nutrition_summary>",
      "is_popular": true,
      "is_available": true,
      "checkout_enabled": true,
      "stock_tracking_enabled": true,
      "stock_quantity": 1,
      "stock_remaining": 1,
      "sold_out": true,
      "collect_eligible": true,
      "available_now": true,
      "collect_prep_minutes": 1,
      "price_pence": 1500,
      "currency": "GBP",
      "sort_order": 1
    }
  ]
}

Create a store menu item.

Merchant creates a menu item. The service validates name + price and normalises all fields. Broadcasts a menu_item_created realtime event so customer apps re-pull the menu. No HTTP idempotency key (identical to the legacy route), a create is not deduplicated.

Request body

store_idstring · uuidrequired

Store the item belongs to (also authorises the merchant).

namestringrequired

Item name (required; max 120 chars).

price_penceintegerrequired

Price in pence (required; 0..10,000,000).

descriptionstring, nullableoptional
categorystring, nullableoptional
emojistring, nullableoptional
image_urlstring, nullableoptional
product_mediaarray of anyoptional
currencystringoptional
contains_allergensarray of stringoptional
dietary_tagsarray of stringoptional
ingredientsstring, nullableoptional
nutrition_summarystring, nullableoptional
is_popularbooleanoptional
is_availablebooleanoptional
checkout_enabledbooleanoptional
collect_eligiblebooleanoptional
available_nowbooleanoptional
collect_prep_minutesinteger, nullableoptional
sort_orderintegeroptional
stock_tracking_enabledbooleanoptional
stock_quantityinteger, nullableoptional
stock_remaininginteger, nullableoptional

Response, 200

itemobjectrequired

A menu_items row (write result, raw DB shape).

7 child fields
idstringrequired
store_idstringrequired
namestringrequired
price_pencenumber, nullableoptional
currencystring, nullableoptional
is_availableboolean, nullableoptional
checkout_enabledboolean, nullableoptional
curl -X POST "https://www.membber.com/api/v1/menu-items" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  -H "Idempotency-Key: 1f0e2d3c-4b5a-4678-9abc-def012345678" \
  -H "Content-Type: application/json" \
  -d '{
    "store_id": "6659c139-0000-4000-8000-d0c500000066",
    "name": "Example name",
    "price_pence": 1500
  }'
Response, 200
{
  "item": {
    "id": "00000d1b-0000-4000-8000-d0c500000000",
    "store_id": "6659c139-0000-4000-8000-d0c500000066",
    "name": "Example name",
    "price_pence": 1500,
    "currency": "GBP",
    "is_available": true,
    "checkout_enabled": true
  }
}

Remove (soft-delete) a store menu item.

Merchant removes a menu item. Soft delete (order-history integrity): flips visibility AND stamps deleted_at so the list can tell a REMOVED item apart from a merchant-HIDDEN one. Broadcasts a menu_item_archived realtime event. Idempotent. store_id is supplied as a query parameter.

Parameters

itemIdstringpathrequired
store_idstring · uuidqueryrequired

Store the item belongs to (also authorises the merchant).

Response, 200

archivedbooleanrequired
curl -X DELETE "https://www.membber.com/api/v1/menu-items/b9bf0b8e-0000-4000-8000-d0c5000000b9?store_id=6659c139-0000-4000-8000-d0c500000066" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  -H "Idempotency-Key: 1f0e2d3c-4b5a-4678-9abc-def012345678"
Response, 200
{
  "archived": true
}

Update a store menu item.

Merchant updates a menu item. Stock edits preserve in-flight reservations (set_menu_item_stock); a plain edit cannot silently resurrect a removed item (409 ITEM_ARCHIVED unless restore is intended). Broadcasts a menu_item_updated realtime event. Idempotent (converges).

Parameters

itemIdstringpathrequired

Request body

store_idstring · uuidrequired

Store the item belongs to (also authorises the merchant).

namestringrequired

Item name (required; max 120 chars).

price_penceintegerrequired

Price in pence (required; 0..10,000,000).

descriptionstring, nullableoptional
categorystring, nullableoptional
emojistring, nullableoptional
image_urlstring, nullableoptional
product_mediaarray of anyoptional
currencystringoptional
contains_allergensarray of stringoptional
dietary_tagsarray of stringoptional
ingredientsstring, nullableoptional
nutrition_summarystring, nullableoptional
is_popularbooleanoptional
is_availablebooleanoptional
checkout_enabledbooleanoptional
collect_eligiblebooleanoptional
available_nowbooleanoptional
collect_prep_minutesinteger, nullableoptional
sort_orderintegeroptional
stock_tracking_enabledbooleanoptional
stock_quantityinteger, nullableoptional
stock_remaininginteger, nullableoptional

Response, 200

itemobjectrequired

A menu_items row (write result, raw DB shape).

7 child fields
idstringrequired
store_idstringrequired
namestringrequired
price_pencenumber, nullableoptional
currencystring, nullableoptional
is_availableboolean, nullableoptional
checkout_enabledboolean, nullableoptional
curl -X PATCH "https://www.membber.com/api/v1/menu-items/b9bf0b8e-0000-4000-8000-d0c5000000b9" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  -H "Idempotency-Key: 1f0e2d3c-4b5a-4678-9abc-def012345678" \
  -H "Content-Type: application/json" \
  -d '{
    "store_id": "6659c139-0000-4000-8000-d0c500000066",
    "name": "Example name",
    "price_pence": 1500
  }'
Response, 200
{
  "item": {
    "id": "00000d1b-0000-4000-8000-d0c500000000",
    "store_id": "6659c139-0000-4000-8000-d0c500000066",
    "name": "Example name",
    "price_pence": 1500,
    "currency": "GBP",
    "is_available": true,
    "checkout_enabled": true
  }
}
WhatsApp
Book a Call
Start Free