C cenaly.com
Zacznij za darmo

Guest API dla agentów AI

Menu, zamówienia i rezerwacje dla asystentów AI — publiczny REST + MCP, bez autoryzacji

6 min read Demo panelu admina
On this page 8

Guest API dla agentów AI

Publiczne API cenaly.com, przez które asystenci i agenci AI działają w imieniu gościa: czytają menu restauracji, wyszukują w katalogu, kompletują koszyk, składają zamówienie i rezerwują stolik. Do tego wszystkiego autoryzacja nie jest potrzebna — to te same operacje, które są dostępne dla gościa na stronie menu.

Adresowanie restauracji#

Restauracja jest adresowana kodem lokalizacji — to segment URL menu zapisany wielkimi literami. Jeśli menu otwiera się pod cenaly.com/MYCAFE, kod to MYCAFE. Ten sam kod jest zaszyty w kodach QR stolików.

Szybki start (REST)#

# Co potrafi API
curl https://api.cenaly.com/llm/v1

# Menu restauracji po rosyjsku
curl "https://api.cenaly.com/llm/v1/locations/MYCAFE/menu?lang=ru"

# Złożyć zamówienie na wynos
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": "…"}

# Status zamówienia (orderId — tajny token dostępu)
curl https://api.cenaly.com/llm/v1/locations/MYCAFE/orders/{orderId}

Pełna specyfikacja: OpenAPI 3.1 · dokumentacja interaktywna (w języku marki; ?lang=en|ka|ru|tr|sq).

Endpointy#

Metoda Ścieżka Co robi
GET /llm/v1/locations/{DOMAIN}/menu?lang=xx Menu: kategorie, dania, ceny, warianty i dodatki, waluta, sposoby odbioru
GET /llm/v1/locations/{DOMAIN}/items/{itemId} Jedno danie z opcjami
GET /llm/v1/locations/{DOMAIN}/items?ids=a,b,c Kilka dań naraz (do 10 na zapytanie)
GET /llm/v1/locations/{DOMAIN}/search?q=&limit= Wyszukiwanie semantyczne w katalogu — po nazwach, opisach i cechach
GET /llm/v1/locations/{DOMAIN}/store-info Fakty poza menu: adres, kontakty, współrzędne, godziny pracy
GET /llm/v1/locations/{DOMAIN}/policies?q= Wyszukiwanie w opublikowanych zasadach, FAQ i stronach informacyjnych lokalu
POST /llm/v1/locations/{DOMAIN}/carts Utworzyć koszyk na serwerze
GET / PATCH /llm/v1/locations/{DOMAIN}/carts/{cartId} Odczytać koszyk / zmienić skład
POST /llm/v1/locations/{DOMAIN}/orders Złożyć zamówienie (serwer waliduje skład i liczy kwoty)
GET /llm/v1/locations/{DOMAIN}/orders/{orderId} Status zamówienia, numer, przedmioty
GET /llm/v1/locations/{DOMAIN}/reservations/availability?start=&durationMinutes= Stoliki wolne/zajęte według schematu sali
POST /llm/v1/locations/{DOMAIN}/reservations Zgłoszenie rezerwacji (pending do potwierdzenia przez restaurację)
GET / DELETE /llm/v1/locations/{DOMAIN}/reservations/{id} Status / anulowanie rezerwacji

Koszyk: złożyć zamówienie krok po kroku#

Agent nie musi zgadywać składu zamówienia jednym strzałem — może prowadzić koszyk na serwerze, tak jak robi to człowiek w koszyku w przeglądarce:

  1. POST /carts z pierwszymi pozycjami → cartId
  2. PATCH /carts/{cartId} — dodać, zmienić ilość, usunąć (quantity: 0)
  3. POST /orders z cartId — złożyć

Ceny w koszyku są zawsze przeliczane według aktualnego menu, więc nie może pokazać nieaktualnej kwoty. Koszyk żyje 7 dni. W każdej odpowiedzi jest checkoutUrl — link można po prostu przekazać człowiekowi, żeby dokończył zamówienie w zwykłym checkoutcie.

Przy tworzeniu zamówienia można przekazać idempotencyKey (8–64 znaki): powtórzenie z tym samym kluczem w ciągu 48 godzin zwróci pierwotne zamówienie, a nie utworzy drugiego. To samo działa dla rezerwacji — powtórzenie w tym samym oknie zwróci pierwotną rezerwację, a nie zajmie drugiego stolika.

Połączenie przez MCP#

Serwer: https://api.cenaly.com/llm/mcp — Model Context Protocol, streamable HTTP, stateless. Narzędzia gościa działają bez autoryzacji; logowanie przez OAuth dodaje do nich narzędzia Twojego konta.

Konfiguracja dla Claude Desktop / Claude Code i zgodnych klientów:

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

Narzędzia gościa (13, bez autoryzacji):

Grupa Narzędzia
Menu i katalog get_menu, get_item, search_products
Lokal get_store_info, search_policies_and_faqs
Koszyk update_cart, get_cart
Zamówienie create_order, get_order_status
Rezerwacja stolika check_table_availability, create_reservation, get_reservation_status, cancel_reservation

Typowe scenariusze:

  • Szybkie zamówienie: get_menu → create_order → get_order_status (4-cyfrowy numer pojawia się po kilku sekundach).
  • Zamówienie w dialogu: search_products → update_cart (po jednym przedmiocie, jak w rozmowie) → get_cart → create_order, albo przekazać gościowi checkoutUrl i pozwolić mu dokończyć zamówienie samemu.
  • Pytanie o lokal: get_store_info (adres, godziny, kontakty) lub search_policies_and_faqs (warunki dostawy, zwrot, zasady).
  • Rezerwacja stolika: check_table_availability (stoliki ze schematu sali, wolny/zajęty na wybrany czas) → create_reservation z tableId → get_reservation_status (restauracja potwierdza zgłoszenie) → w razie potrzeby cancel_reservation.

Dostęp do własnych danych#

Jeśli jesteś właścicielem lokalu lub pracownikiem, do tych samych 13 narzędzi gościnnych dochodzi 12 narzędzi pracy z własnym kontem — w dwóch grupach.

Dane konta (6): resolve_domain, list_files, read_file, write_file, delete_file, write_signal. Otwierają nie tylko menu i zamówienia, ale też CRM, magazyn, personel, ustawienia kasy i ekranu kuchennego, dokumenty oraz niemal wszystkie pozostałe sekcje.

Strona klienta placówki (6): get_site_settings, update_site_settings, list_site_templates, apply_site_template, check_domain_availability, rename_site_domain.

Narzędzie Co robi
get_site_settings Czyta ustawienia witryny: nagłówek, typ biznesu, przełączniki (zamówienia, wezwanie kelnera, oddzwonienie, banner cookie), dostawa/odbiór osobisty/WhatsApp, wygląd i szablon, układ kart, kampanie zaangażowania, rynki walutowe, test A/B designu, a w przypadku sprzedaży detalicznej — witryna, SEO, sekcje strony głównej i wtyczki sklepu
update_site_settings Zmienia je: patch jest scalany z profilem placówki tym samym potokiem co poprawki z panelu administracyjnego — zmiany są widoczne po kilku sekundach
list_site_templates Galeria gotowych szablonów designu — ta sama co w panelu
apply_site_template Stosuje szablon w jednej akcji: wygląd, układ kart i id szablonu
check_domain_availability Sprawdza, czy nazwa subdomeny jest wolna (3–63 znaki, litery/cyfry/myślniki, nazwy zastrzeżone są odrzucane). Niczego nie zmienia
rename_site_domain ⚠️ Zmienia nazwę domeny witryny: tylko właściciel, a wszystkie stare linki i wydrukowane kody QR na poprzednią domenę przestają działać

Logowanie — zwykły OAuth 2.1 na Twoim koncie cenaly.com: klient MCP (Claude, ChatGPT, CLI) rejestruje się sam i otwiera okno logowania. Niczego nie trzeba wklejać ręcznie.

  • Metadane zasobu: https://api.cenaly.com/.well-known/oauth-protected-resource
  • Metadane serwera autoryzacji: https://api.cenaly.com/.well-known/oauth-authorization-server
  • Dynamiczna rejestracja klienta (RFC 7591): POST https://api.cenaly.com/llm/oauth/register

Dopóki nie ma tokenu, tools/list pokazuje tylko narzędzia gościnne — autoryzowane po prostu nie są widoczne.

Zasady i gwarancje#

  • Zamówienie jest walidowane na żywym menu: nieistniejące danie, wariant lub dodatek — błąd 400 z listą problemów; ceny i podsumowanie liczy serwer, agent nie ma sposobu, by „ustalić” cenę.
  • Dla odbioru osobistego i dostawy obowiązkowe są imię i telefon gościa; dla dostawy — adres.
  • orderId / reservationId — tajne tokeny: na ich podstawie sprawdza się status i anuluje rezerwację. Nie publikuj ich.
  • Zamówienia i rezerwacje trafiają do restauracji w czasie rzeczywistym — do panelu administracyjnego, na ekran kuchenny i do powiadomień, jak zwykłe zamówienia ze strony.
  • Rezerwacje gościa mają status pending, dopóki restauracja nie potwierdzi ich w panelu administracyjnym.
  • W Rosji alkoholu nie można zamówić kanałem agentowym. Zdalna sprzedaż wyrobów alkoholowych jest zabroniona przez prawo (pp. 14 p. 2 art. 16 171-FZ), dlatego w placówkach z krajem „Rosja” zamówienie z pozycją alkoholową nie przechodzi walidacji: w odpowiedzi 400 przychodzi wiersz z nazwą tej pozycji i wyjaśnieniem, że można ją zamówić tylko u kelnera na sali. Zamówienie trzeba złożyć ponownie bez alkoholu.

Wykrywanie maszynowe#

  • https://cenaly.com/llms.txt — skrócona mapa API dla LLM;
  • GET https://api.cenaly.com/llm/v1 — dokument discovery: pełna lista endpointów, przykłady zamówienia, rezerwacji i pracy z koszykiem, linki do metadanych OAuth.
Was this article helpful?