Overview
The Items API manages individual menu items nested under categories. Items represent products on the menu with pricing, descriptions, images, and optional customization options. Authentication: All endpoints require authentication via Laravel session. Base Path:/tenant/{tenantId}/food/categories/{category}/items
Item Limits:
- Plan 1 (ESENCIA): 50 items total
- Plan 2 (IMPULSO): 100 items total
- Plan 3 (VISIÓN): 150 items total
List Items
Returns all items within a specific category.The ID of the tenant
The category ID (e.g., “cat-A3K9”)
Create Item
Creates a new menu item within a category.The ID of the tenant
The category ID where the item will be created
Item name (max 200 characters)
Item price (min: 0)
Item description (max 200 characters)
Badge text like “Popular”, “New”, “Spicy” (max 50 characters)
Whether to feature this item prominently. Default: false
Image file (jpg, jpeg, png, webp, max 2MB). Processed to WebP format.
JSON string of customization options (max 8 options). Each option has:
id(string): Unique identifierlabel(string): Option name (max 80 chars)price_add(number): Additional price (0-50)
Images are automatically processed to WebP format (800px max width) and stored as
menu/items/{itemId}.webp.Update Item
Updates an existing menu item. All fields are optional.The ID of the tenant
The category ID
The item ID to update
Item name (max 200 characters)
Item price (min: 0)
Item description (max 200 characters)
Badge text (max 50 characters). Set to
null to remove.Whether to feature this item
Whether the item is active/visible
New image file (replaces existing)
Set to
true to remove the current imageJSON string to replace all options (max 8)
Delete Item
Deletes a menu item and its associated image.The ID of the tenant
The category ID
The item ID to delete
Item Object
| Field | Type | Description |
|---|---|---|
id | string | Unique item identifier (e.g., “item-K9P3”) |
nombre | string | Item name |
precio | number | Item price |
descripcion | string | null | Item description |
image_path | string | null | Relative path to item image |
badge | string | null | Badge text |
is_featured | boolean | Whether item is featured |
activo | boolean | Whether item is active |
options | array | null | Array of customization options |
Option Object
| Field | Type | Description |
|---|---|---|
id | string | Unique option identifier |
label | string | Option name (max 80 chars) |
price_add | number | Additional price (0-50) |
Validation Rules
Options Validation
- Maximum 8 options per item
- Each option label: max 80 characters
- Each price_add: 0-50 range
- Invalid options are silently filtered out
Image Processing
- Accepted formats: JPG, JPEG, PNG, WebP
- Max file size: 2MB
- Processed to: 800px width, WebP format
- Stored at:
storage/app/public/tenants/{tenantId}/menu/items/{itemId}.webp
Error Codes
| Code | HTTP Status | Description |
|---|---|---|
category_not_found | 404 | Parent category does not exist |
item_not_found | 404 | Item ID does not exist in the category |
item_limit_reached | 422 | Tenant has reached item limit for their plan |