M meni.ge
Start for free
πŸ”— Integrations

πŸ›’ Guest API for AI Agents

Menus, orders and reservations for AI assistants β€” public REST + MCP, no auth

Documentation

Guest API for AI agents

A public meni.ge API that lets AI assistants and agents act on behalf of a guest: read a restaurant's menu, compose and place an order, reserve a table. No authentication β€” these are the same operations a guest performs on the menu website.

Managing a restaurant's own data (menu editing, prices, analytics) is a separate MCP server with API keys: see the MCP Server Guide.

Addressing a restaurant

A restaurant is addressed by its location code β€” the uppercase segment of its menu URL. If the menu opens at meni.ge/MYCAFE, the code is MYCAFE. The same code is embedded in table QR codes.

Quick start (REST)

# What the API can do
curl https://api.meni.ge/llm/v1

# Restaurant menu in English
curl "https://api.meni.ge/llm/v1/locations/MYCAFE/menu?lang=en"

# Place a pickup order
curl -X POST https://api.meni.ge/llm/v1/locations/MYCAFE/orders \
  -H 'Content-Type: application/json' \
  -d '{
    "items": [{"itemId": "abc123", "quantity": 2}],
    "orderType": "pickup",
    "customer": {"name": "Guest", "phone": "+995555123456"},
    "language": "en"
  }'
# β†’ {"accepted": true, "orderId": "…", "total": 24, "statusUrl": "…"}

# Order status (orderId is the secret access token)
curl https://api.meni.ge/llm/v1/locations/MYCAFE/orders/{orderId}

Full specification: OpenAPI 3.1.

Endpoints

Method Path Purpose
GET /llm/v1/locations/{DOMAIN}/menu?lang=xx Menu: categories, items, prices, variants and addons, currency, fulfilment options
GET /llm/v1/locations/{DOMAIN}/items/{itemId} A single item with its options
POST /llm/v1/locations/{DOMAIN}/orders Place an order (the server validates items and computes totals)
GET /llm/v1/locations/{DOMAIN}/orders/{orderId} Order status, number, lines
GET /llm/v1/locations/{DOMAIN}/reservations/availability?start=&durationMinutes= Free/busy tables on the floor plan
POST /llm/v1/locations/{DOMAIN}/reservations Reservation request (pending until the restaurant confirms)
GET / DELETE /llm/v1/locations/{DOMAIN}/reservations/{id} Reservation status / cancellation

Connecting over MCP

Server: https://api.meni.ge/llm/mcp β€” Model Context Protocol, streamable HTTP, stateless, no auth.

Configuration for Claude Desktop / Claude Code and compatible clients:

{
  "mcpServers": {
    "meni-guest": {
      "type": "http",
      "url": "https://api.meni.ge/llm/mcp"
    }
  }
}

Tools: get_menu, get_item, create_order, get_order_status, check_table_availability, create_reservation, get_reservation_status, cancel_reservation.

Typical flows:

  • Ordering: get_menu β†’ create_order β†’ get_order_status (the 4-digit order number appears within seconds).
  • Table reservation: check_table_availability (tables from the floor plan, free/busy for the chosen window) β†’ create_reservation with tableId β†’ get_reservation_status (the restaurant confirms the request) β†’ cancel_reservation if needed.

Rules and guarantees

  • Orders are validated against the live menu: an unknown item, variant or addon yields a 400 with a list of problems; prices and totals are computed server-side β€” an agent cannot "set" a price.
  • Pickup and delivery orders require the guest's name and phone; delivery also requires an address.
  • orderId / reservationId are secret tokens: they grant status access and cancellation. Do not publish them.
  • Orders and reservations reach the restaurant in real time β€” admin panel, kitchen display, notifications β€” exactly like orders from the website.
  • Guest reservations stay pending until the restaurant confirms them in the admin panel.

Machine-readable discovery

  • https://meni.ge/llms.txt β€” a short API map for LLMs;
  • https://meni.ge/.well-known/mcp.json β€” MCP servers manifest;
  • GET https://api.meni.ge/llm/v1 β€” discovery document with examples.