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:
- Create your categories
- Add items under each category
- 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:
| Field | Type | Required | Description |
|---|---|---|---|
reference | string | Yes | A unique identifier you define |
name | string | Yes | The display name of the category |
rank | integer | No | Display order -- lower numbers appear first |
This endpoint is an upsert. If a category with the same
referencealready 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:
| Field | Type | Required | Description |
|---|---|---|---|
name | string | No | Updated category name |
is_published | boolean | No | Whether the category is visible to customers |
rank | integer | No | Display 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:
| Field | Type | Required | Description |
|---|---|---|---|
reference | string | Yes | A unique identifier you define |
name | string | Yes | Display name of the item |
description | string | No | Short description shown to customers |
menu_category_id | integer | Yes | ID of the category this item belongs to |
price | integer | Yes | Price in the smallest currency unit (e.g. kobo) |
in_stock | boolean | No | Whether the item is available for purchase. Defaults to true |
rank | integer | No | Display order within the category |
images | array | No | List of image objects. Each object must have a path key |
priceis in the smallest currency unit. For example, ₦1,200 should be sent as120000.This endpoint is an upsert. If an item with the same
referencealready 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": "..."
}Updated 19 days ago
