Skip to main content

Overview

The Menu API provides comprehensive endpoints for managing your restaurant’s menu structure. The menu system is hierarchical:
Branch
  └── Categories
        └── Menu Items
              └── Modifier Groups
                    └── Modifiers

Base URL

https://api.restai.com/v1/menu

Authentication

All menu endpoints require:
  • Bearer token authentication
  • Tenant middleware (organization scoping)
  • Branch context (specified via header or token)
Authorization: Bearer <your_token>

Permissions

  • menu:read - View menu items, categories, and modifiers
  • menu:create - Create new menu items, categories, and modifiers
  • menu:update - Modify existing menu items
  • menu:delete - Remove menu items, categories, and modifiers

Categories

Categories organize menu items into logical groups (e.g., “Appetizers”, “Main Dishes”, “Desserts”).
id
string (uuid)
Unique identifier
name
string
Category name (1-255 characters)
description
string
Category description (max 500 characters)
image_url
string
Category image URL
sort_order
integer
Display order (default: 0)
is_active
boolean
Whether category is visible to customers
Individual dishes or products available for order.
id
string (uuid)
Unique identifier
category_id
string (uuid)
Parent category ID
name
string
Item name (1-255 characters)
description
string
Item description (max 1000 characters)
price
integer
Price in cents (e.g., 2500 = S/. 25.00)
image_url
string
Item image URL
is_available
boolean
Current availability status
preparation_time_min
integer
Estimated preparation time in minutes (1-120)

Modifier Groups

Groups of modifiers that can be applied to menu items (e.g., “Protein Choice”, “Extras”).
id
string (uuid)
Unique identifier
name
string
Group name (1-255 characters)
min_selections
integer
Minimum required selections (default: 0)
max_selections
integer
Maximum allowed selections (default: 1)
is_required
boolean
Whether customer must select from this group

Modifiers

Individual options within a modifier group (e.g., “Chicken +S/. 5”, “Extra Cheese +S/. 3”).
id
string (uuid)
Unique identifier
group_id
string (uuid)
Parent modifier group ID
name
string
Modifier name (1-255 characters)
price
integer
Additional price in cents (default: 0)
is_available
boolean
Current availability status

Price Format

All prices in the API are stored as integers in cents to avoid floating-point precision issues:
  • S/. 25.00 = 2500
  • S/. 12.50 = 1250
  • S/. 0.50 = 50
Always multiply decimal prices by 100 when sending to the API, and divide by 100 when displaying to users.

Example Menu Structure

{
  "category": {
    "id": "cat-123",
    "name": "Burgers",
    "sort_order": 1,
    "is_active": true
  },
  "item": {
    "id": "item-456",
    "category_id": "cat-123",
    "name": "Classic Burger",
    "price": 2500,
    "is_available": true,
    "preparation_time_min": 15
  },
  "modifier_group": {
    "id": "group-789",
    "name": "Choose Your Protein",
    "min_selections": 1,
    "max_selections": 1,
    "is_required": true
  },
  "modifiers": [
    {
      "id": "mod-001",
      "group_id": "group-789",
      "name": "Beef",
      "price": 0
    },
    {
      "id": "mod-002",
      "group_id": "group-789",
      "name": "Chicken",
      "price": 200
    }
  ]
}

Quick Start

  1. Create Categories: Organize your menu into logical sections
  2. Add Menu Items: Create items within each category
  3. Define Modifier Groups: Set up customization options
  4. Add Modifiers: Populate groups with specific choices
  5. Link to Items: Associate modifier groups with menu items

Common Workflows

Categories

Manage menu categories

Menu Items

Create and update dishes

Modifiers

Configure item customizations

API Endpoints

Categories

  • GET /menu/categories - List all categories
  • POST /menu/categories - Create category
  • PATCH /menu/categories/:id - Update category
  • DELETE /menu/categories/:id - Delete category
  • GET /menu/items - List items (optionally filter by category)
  • POST /menu/items - Create item
  • PATCH /menu/items/:id - Update item
  • DELETE /menu/items/:id - Delete item
  • GET /menu/items/:id/modifier-groups - Get item’s modifier groups
  • POST /menu/items/:id/modifier-groups - Link modifier group to item
  • DELETE /menu/items/:id/modifier-groups/:groupId - Unlink group

Modifier Groups

  • GET /menu/modifier-groups - List all groups with modifiers
  • POST /menu/modifier-groups - Create group
  • PATCH /menu/modifier-groups/:id - Update group
  • DELETE /menu/modifier-groups/:id - Delete group

Modifiers

  • POST /menu/modifiers - Create modifier
  • PATCH /menu/modifiers/:id - Update modifier
  • DELETE /menu/modifiers/:id - Delete modifier

Build docs developers (and LLMs) love