Appearance
List Products
Returns the active products of the organization with their category, menu options, class prices and class restrictions. Draft and archived products are not included.
GET https://api.canteenweb.com/api/v1/admin/productsQuery parameters
| Parameter | Type | Description |
|---|---|---|
category | UUID | Only products in this category. Must be a category of the organization, otherwise the request fails with 422. |
page | integer | See Pagination. |
Examples
All active products:
bash
curl "https://api.canteenweb.com/api/v1/admin/products" \
-H "Authorization: Bearer your-access-token" \
-H "X-CANTEEN-ORGANIZATION: your-org-uuid"Products of one category:
bash
curl "https://api.canteenweb.com/api/v1/admin/products?category=9e43cdc9-58e5-4374-bf48-2109927d38e0" \
-H "Authorization: Bearer your-access-token" \
-H "X-CANTEEN-ORGANIZATION: your-org-uuid"Response
json
{
"data": [
{
"uuid": "9e48ae62-4428-4126-96ff-4417fc40e651",
"title": "Menú del día",
"description": "Plato principal a elección con guarnición.",
"image": "https://cdn.canteenweb.com/products/menu-del-dia.jpg",
"sku": "MENU-DIA",
"compare_at_price": { "amount": "20000", "currency": "ARS", "formatted": "$ 200,00" },
"price": { "amount": "10000", "currency": "ARS", "formatted": "$ 100,00" },
"cost": { "amount": "4000", "currency": "ARS", "formatted": "$ 40,00" },
"is_menu": true,
"require_menu_dates": true,
"status": { "label": "Activo", "value": "active" },
"category": {
"uuid": "9e43cdc9-58e5-4374-bf48-2109927d38e0",
"title": "Almuerzos"
},
"options": [
{
"uuid": "9e4e14c3-274a-45ff-8f82-9e3377aa1cca",
"name": "Milanesa con puré",
"image": "",
"dates": ["2025-02-26", "2025-02-27"]
},
{
"uuid": "9e4e14c3-2a72-4693-8a41-8a25bc4eb3d8",
"name": "Tarta de verduras",
"image": "",
"dates": ["2025-02-28"]
}
],
"prices": [
{
"amount": "90.00",
"customer_classes": [
{ "value": "9e4e1a11-1111-4111-8111-111111111111", "label": "Docentes" }
]
}
],
"class_restrictions": [
{ "value": "9e4e1a11-2222-4222-8222-222222222222", "label": "Jardín" }
],
"created_at": "2025-02-20T12:00:00.000000Z",
"updated_at": "2025-02-25T09:30:00.000000Z"
}
],
"links": {
"first": "https://api.canteenweb.com/api/v1/admin/products?page=1",
"last": "https://api.canteenweb.com/api/v1/admin/products?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"path": "https://api.canteenweb.com/api/v1/admin/products",
"per_page": 25,
"to": 1,
"total": 1
},
"success": true,
"message": "Request was successful."
}Fields
Product
| Field | Type | Description |
|---|---|---|
uuid | string | Identifier of the product. |
title, description | string | As shown in the app. description can be null. |
image | string or null | URL of the product image. |
sku | string or null | Stock keeping unit, when the organization uses one. |
price | money | Base price. |
compare_at_price | money or null | Previous price, shown struck through in the app when present. |
cost | money or null | Cost price, for margin reports. |
is_menu | boolean | A menu is a product where the diner picks one option per day. |
require_menu_dates | boolean | For menus: whether each option must be assigned to specific dates. |
status | enum | Always active on this endpoint. |
category | object | uuid and title of the category. |
created_at, updated_at | timestamp | ISO 8601. |
Options
Only present with content for menus. Each option has a uuid, a name, an image and the list of dates (YYYY-MM-DD) it is served on.
Prices
Class specific prices, grouped by amount. Each entry has the amount as a decimal string and the customer_classes that pay it. Classes not listed pay the base price.
Class restrictions
Classes that are allowed to order the product. An empty array means every class can.

