Managing your menu

Your menu is organised into categories and items. Categories group related items together (e.g. Drinks, Mains, Sides). You must create a category before you can add items to it.

The typical setup flow is:

  1. Create your categories
  2. Add items under each category
  3. Update availability and pricing as needed

Managing categories

Create a category

curl --request POST \
  --url https://api.chowdeck.com/merchant/{merchantReference}/menucategory \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "reference": "cat-drinks-001",
    "name": "Drinks"
  }'

Request body:

FieldTypeRequiredDescription
referencestringYesA unique identifier you define
namestringYesThe display name of the category
rankintegerNoDisplay order -- lower numbers appear first

This endpoint is an upsert. If a category with the same reference already exists, it will be updated instead of creating a duplicate.

Update a category

curl --request PUT \
  --url https://api.chowdeck.com/merchant/{merchantReference}/menucategory/{menuCategoryReference} \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "name": "Cold Drinks",
    "is_published": true,
    "rank": 1
  }'

Request body:

FieldTypeRequiredDescription
namestringNoUpdated category name
is_publishedbooleanNoWhether the category is visible to customers
rankintegerNoDisplay order -- lower numbers appear first

List categories

curl --request GET \
  --url https://api.chowdeck.com/merchant/{merchantReference}/menucategory \
  --header 'Authorization: Bearer YOUR_API_KEY'

Managing items

Create an item

curl --request POST \
  --url https://api.chowdeck.com/merchant/{merchantReference}/menu \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "reference": "item-chilled-coke-001",
    "name": "Chilled Coke",
    "description": "Ice cold Coca-Cola 50cl",
    "menu_category_id": 12,
    "price": 120000,
    "in_stock": true,
    "images": [{ "path": "https://your-cdn.com/coke.jpg" }]
  }'

Request body:

FieldTypeRequiredDescription
referencestringYesA unique identifier you define
namestringYesDisplay name of the item
descriptionstringNoShort description shown to customers
menu_category_idintegerYesID of the category this item belongs to
priceintegerYesPrice in the smallest currency unit (e.g. kobo)
in_stockbooleanNoWhether the item is available for purchase. Defaults to true
rankintegerNoDisplay order within the category
imagesarrayNoList of image objects. Each object must have a path key

price is in the smallest currency unit. For example, ₦1,200 should be sent as 120000.

This endpoint is an upsert. If an item with the same reference already exists, it will be updated instead of creating a duplicate.

Update an item

curl --request PUT \
  --url https://api.chowdeck.com/merchant/{merchantReference}/menu/{menuReference} \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "name": "Chilled Coke",
    "description": "Ice cold Coca-Cola 50cl",
    "menu_category_id": 12,
    "in_stock": false,
    "price": 150000
  }'

Get a single item

curl --request GET \
  --url https://api.chowdeck.com/merchant/{merchantReference}/menu/{menuReference} \
  --header 'Authorization: Bearer YOUR_API_KEY'

List all items

curl --request GET \
  --url https://api.chowdeck.com/merchant/{merchantReference}/menu \
  --header 'Authorization: Bearer YOUR_API_KEY'

Bulk operations

Bulk create

Use this endpoint to sync your entire menu in a single request. Each item includes its category inline -- the API creates or updates the category automatically.

This endpoint performs a full sync. Any item or category that exists on your menu but is not included in this request will be deactivated. Only use this when you intend to replace your entire menu. For partial updates, use the bulk update endpoint instead.

curl --request POST \
  --url https://api.chowdeck.com/merchant/{merchantReference}/menu/bulk-upload \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "items": [
      {
        "reference": "item-001",
        "name": "Chilled Coke",
        "description": "Ice cold Coca-Cola 50cl",
        "category": {
          "reference": "cat-drinks-001",
          "name": "Drinks"
        },
        "price": 120000,
        "in_stock": true,
        "images": [{ "path": "https://your-cdn.com/coke.jpg" }]
      },
      {
        "reference": "item-002",
        "name": "Bottled Water",
        "description": "500ml still water",
        "category": {
          "reference": "cat-drinks-001",
          "name": "Drinks"
        },
        "price": 50000,
        "in_stock": true,
        "images": []
      }
    ]
  }'

Multiple items can share the same category reference. The category is created once and reused.

Bulk update

Use this to update specific fields on existing items without affecting the rest of your menu.

curl --request PUT \
  --url https://api.chowdeck.com/merchant/{merchantReference}/menu/bulk-update \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "items": [
      {
        "reference": "item-001",
        "price": 130000,
        "in_stock": true
      },
      {
        "reference": "item-002",
        "in_stock": false
      }
    ]
  }'

Each item in the items array must include its reference so we know which item to update.


Error responses

All failed requests return this shape:

{
  "status": "failed",
  "message": "..."
}