C cenaly.com
Kostenlos starten

Guest API für KI-Agenten

Menü, Bestellungen und Reservierungen für KI-Assistenten — öffentliches REST + MCP, ohne Authentifizierung

7 min read Demo-Admin-Panel
On this page 8

Guest API für AI-Agenten

Öffentliche API von cenaly.com, über die AI-Assistenten und Agenten im Namen des Gastes handeln: die Speisekarte des Restaurants lesen, den Katalog durchsuchen, den Warenkorb befüllen, eine Bestellung aufgeben und einen Tisch reservieren. Für all das ist keine Autorisierung nötig — es sind dieselben Vorgänge, die dem Gast auf der Menü-Website zur Verfügung stehen.

Adressierung des Restaurants#

Das Restaurant wird über den Standortcode adressiert — das ist das URL-Segment der Speisekarte in Großbuchstaben. Wenn die Speisekarte unter cenaly.com/MYCAFE geöffnet wird, lautet der Code MYCAFE. Derselbe Code ist in den QR-Codes der Tische hinterlegt.

Schnellstart (REST)#

# Was die API kann
curl https://api.cenaly.com/llm/v1

# Speisekarte des Restaurants auf Russisch
curl "https://api.cenaly.com/llm/v1/locations/MYCAFE/menu?lang=ru"

# Bestellung zum Mitnehmen aufgeben
curl -X POST https://api.cenaly.com/llm/v1/locations/MYCAFE/orders \
  -H 'Content-Type: application/json' \
  -d '{
    "items": [{"itemId": "abc123", "quantity": 2}],
    "orderType": "pickup",
    "customer": {"name": "Гость", "phone": "+995555123456"},
    "language": "ru"
  }'
# → {"accepted": true, "orderId": "…", "total": 24, "statusUrl": "…"}

# Bestellstatus (orderId — geheimer Zugriffstoken)
curl https://api.cenaly.com/llm/v1/locations/MYCAFE/orders/{orderId}

Vollständige Spezifikation: OpenAPI 3.1 · interaktive Dokumentation (in der Sprache der Marke; ?lang=en|ka|ru|tr|sq).

Endpunkte#

Methode Pfad Was er tut
GET /llm/v1/locations/{DOMAIN}/menu?lang=xx Speisekarte: Kategorien, Gerichte, Preise, Varianten und Extras, Währung, Bezugsarten
GET /llm/v1/locations/{DOMAIN}/items/{itemId} Ein Gericht mit Optionen
GET /llm/v1/locations/{DOMAIN}/items?ids=a,b,c Mehrere Gerichte auf einmal (bis zu 10 pro Anfrage)
GET /llm/v1/locations/{DOMAIN}/search?q=&limit= Semantische Suche im Katalog — nach Namen, Beschreibungen und Merkmalen
GET /llm/v1/locations/{DOMAIN}/store-info Fakten außerhalb der Speisekarte: Adresse, Kontakte, Koordinaten, Öffnungszeiten
GET /llm/v1/locations/{DOMAIN}/policies?q= Suche in den veröffentlichten Regeln, FAQ und Infoseiten des Betriebs
POST /llm/v1/locations/{DOMAIN}/carts Warenkorb auf dem Server erstellen
GET / PATCH /llm/v1/locations/{DOMAIN}/carts/{cartId} Warenkorb lesen / Zusammensetzung ändern
POST /llm/v1/locations/{DOMAIN}/orders Bestellung aufgeben (der Server validiert die Zusammensetzung und berechnet die Summen)
GET /llm/v1/locations/{DOMAIN}/orders/{orderId} Bestellstatus, Nummer, Artikel
GET /llm/v1/locations/{DOMAIN}/reservations/availability?start=&durationMinutes= Freie/belegte Tische nach dem Saalplan
POST /llm/v1/locations/{DOMAIN}/reservations Reservierungsanfrage (pending bis zur Bestätigung durch das Restaurant)
GET / DELETE /llm/v1/locations/{DOMAIN}/reservations/{id} Status / Stornierung der Reservierung

Warenkorb: die Bestellung Schritt für Schritt zusammenstellen#

Der Agent muss die Zusammensetzung der Bestellung nicht mit einem Schuss erraten — er kann den Warenkorb auf dem Server führen, so wie es ein Mensch im Web-Warenkorb tut:

  1. POST /carts mit den ersten Zeilen → cartId
  2. PATCH /carts/{cartId} — hinzufügen, Menge ändern, entfernen (quantity: 0)
  3. POST /orders mit cartId — aufgeben

Die Preise im Warenkorb werden immer anhand der aktuellen Speisekarte neu berechnet, sodass er keinen veralteten Betrag anzeigen kann. Der Warenkorb bleibt 7 Tage bestehen. In jeder Antwort gibt es checkoutUrl — den Link können Sie einfach an eine Person weitergeben, damit sie die Bestellung im normalen Checkout abschließt.

Beim Anlegen einer Bestellung kann idempotencyKey übergeben werden (8–64 Zeichen): eine Wiederholung mit demselben Schlüssel innerhalb von 48 Stunden gibt die ursprüngliche Bestellung zurück, statt eine zweite anzulegen. Dasselbe funktioniert auch für Reservierungen — eine Wiederholung im selben Fenster gibt die ursprüngliche Reservierung zurück, statt einen zweiten Tisch zu belegen.

Verbindung über MCP#

Server: https://api.cenaly.com/llm/mcp — Model Context Protocol, streamable HTTP, stateless. Die Gast-Tools funktionieren ohne Autorisierung; die Anmeldung per OAuth fügt ihnen die Tools Ihres Kontos hinzu.

Konfiguration für Claude Desktop / Claude Code und kompatible Clients:

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

Gast-Tools (13, ohne Autorisierung):

Gruppe Tools
Speisekarte und Katalog get_menu, get_item, search_products
Betrieb get_store_info, search_policies_and_faqs
Warenkorb update_cart, get_cart
Bestellung create_order, get_order_status
Tischreservierung check_table_availability, create_reservation, get_reservation_status, cancel_reservation

Typische Szenarien:

  • Schnelle Bestellung: get_menu → create_order → get_order_status (die 4-stellige Nummer erscheint nach ein paar Sekunden).
  • Bestellung im Dialog: search_products → update_cart (Artikel für Artikel, wie im Gespräch) → get_cart → create_order, oder dem Gast die checkoutUrl geben und ihn die Bestellung selbst abschließen lassen.
  • Frage zum Betrieb: get_store_info (Adresse, Öffnungszeiten, Kontakte) oder search_policies_and_faqs (Lieferbedingungen, Rückgabe, Regeln).
  • Tischreservierung: check_table_availability (Tische aus dem Saalplan, frei/belegt für die gewählte Zeit) → create_reservation mit tableId → get_reservation_status (das Restaurant bestätigt die Anfrage) → bei Bedarf cancel_reservation.

Zugriff auf Ihre eigenen Daten#

Wenn Sie Inhaber eines Betriebs oder Mitarbeiter sind, kommen zu denselben 13 Gast-Tools 12 Tools für die Arbeit mit Ihrem eigenen Konto hinzu — in zwei Gruppen.

Kontodaten (6): resolve_domain, list_files, read_file, write_file, delete_file, write_signal. Sie öffnen nicht nur Menü und Bestellungen, sondern auch CRM, Lager, Personal, Einstellungen der Kasse und des Küchenbildschirms, Dokumente und fast alle übrigen Bereiche.

Kundenseite des Standorts (6): get_site_settings, update_site_settings, list_site_templates, apply_site_template, check_domain_availability, rename_site_domain.

Tool Was es tut
get_site_settings Liest die Einstellungen des Schaufensters: Titel, Geschäftstyp, Schalter (Bestellungen, Ruf des Kellners, Rückruf, Cookie-Banner), Lieferung/Selbstabholung/WhatsApp, Gestaltung und Vorlage, Anordnung der Karten, Engagement-Kampagnen, Währungsmärkte, A/B-Test des Designs, und für den Einzelhandel — Schaufenster, SEO, Sektionen der Startseite und Shop-Plugins
update_site_settings Ändert dieselben: Der Patch wird über dieselbe Pipeline mit dem Profil des Standorts zusammengeführt wie Änderungen aus dem Adminbereich — die Änderungen sind nach wenigen Sekunden sichtbar
list_site_templates Galerie fertiger Design-Vorlagen — dieselbe wie im Panel
apply_site_template Wendet eine Vorlage mit einer Aktion an: Gestaltung, Anordnung der Karten und id der Vorlage
check_domain_availability Prüft, ob der Name der Subdomain frei ist (3–63 Zeichen, Buchstaben/Ziffern/Bindestriche, reservierte Namen werden abgelehnt). Ändert nichts
rename_site_domain ⚠️ Benennt die Domain des Schaufensters um: nur der Inhaber, und alle alten Links und gedruckten QR-Codes auf die bisherige Domain funktionieren nicht mehr

Die Anmeldung erfolgt über normales OAuth 2.1 unter Ihrem cenaly.com-Konto: Der MCP-Client (Claude, ChatGPT, CLI) registriert sich selbst und öffnet ein Login-Fenster. Es muss nichts von Hand eingefügt werden.

  • Metadaten der Ressource: https://api.cenaly.com/.well-known/oauth-protected-resource
  • Metadaten des Autorisierungsservers: https://api.cenaly.com/.well-known/oauth-authorization-server
  • Dynamische Client-Registrierung (RFC 7591): POST https://api.cenaly.com/llm/oauth/register

Solange kein Token vorhanden ist, zeigt tools/list nur die Gast-Tools — die autorisierten sind einfach nicht sichtbar.

Regeln und Garantien#

  • Die Bestellung wird am Live-Menü validiert: ein nicht existierendes Gericht, eine Variante oder ein Extra — Fehler 400 mit einer Liste der Probleme; Preise und Gesamtsumme berechnet der Server, der Agent hat keine Möglichkeit, einen Preis „festzulegen“.
  • Für Selbstabholung und Lieferung sind Name und Telefon des Gastes Pflicht; für die Lieferung — die Adresse.
  • orderId / reservationId sind geheime Token: Mit ihnen wird der Status geprüft und die Reservierung storniert. Veröffentlichen Sie sie nicht.
  • Bestellungen und Reservierungen erreichen das Restaurant in Echtzeit — im Adminbereich, auf dem Küchenbildschirm und in den Benachrichtigungen, wie normale Bestellungen von der Website.
  • Reservierungen des Gastes haben den Status pending, bis das Restaurant sie im Adminbereich bestätigt.
  • In Russland kann Alkohol über den Agenturkanal nicht bestellt werden. Der Fernverkauf alkoholischer Produkte ist gesetzlich verboten (Ziff. 14 Abs. 2 Art. 16 171-ФЗ), daher wird bei Standorten mit dem Land „Russland“ eine Bestellung mit einem Alkohol-Artikel nicht validiert: In der Antwort 400 kommt eine Zeile mit dem Namen dieses Artikels und der Erläuterung, dass er nur beim Kellner im Saal bestellt werden kann. Die Bestellung muss ohne Alkohol neu zusammengestellt werden.

Maschinenlesbare Erkennung#

  • https://cenaly.com/llms.txt — eine kurze API-Karte für LLM;
  • GET https://api.cenaly.com/llm/v1 — Discovery-Dokument: vollständige Liste der Endpunkte, Beispiele für Bestellung, Reservierung und Arbeit mit dem Warenkorb, Links zu den OAuth-Metadaten.
Was this article helpful?