Guest API za AI agente
Javni API cenaly.com, preko kojeg AI asistenti i agenti deluju u ime gosta: čitaju meni restorana, pretražuju katalog, sastavljaju korpu, kreiraju porudžbinu i rezervišu sto. Za sve to autorizacija nije potrebna — to su iste operacije koje su dostupne gostu na sajtu menija.
Adresiranje restorana#
Restoran se adresira kodom lokacije — to je segment URL-a menija velikim slovima. Ako se meni otvara na cenaly.com/MYCAFE, kod je MYCAFE. Isti kod je ugrađen u QR kodove stolova.
Brzi start (REST)#
# Šta API ume
curl https://api.cenaly.com/llm/v1
# Cenaly restorana na ruskom
curl "https://api.cenaly.com/llm/v1/locations/MYCAFE/menu?lang=ru"
# Kreiraj porudžbinu za poneti
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 porudžbine (orderId — tajni pristupni token)
curl https://api.cenaly.com/llm/v1/locations/MYCAFE/orders/{orderId}
Puna specifikacija: OpenAPI 3.1 · interaktivna dokumentacija (na jeziku brenda; ?lang=en|ka|ru|tr|sq).
Endpointi#
| Metod | Putanja | Šta radi |
|---|---|---|
| GET | /llm/v1/locations/{DOMAIN}/menu?lang=xx |
Cenaly: kategorije, jela, cene, varijante i dodaci, valuta, načini preuzimanja |
| GET | /llm/v1/locations/{DOMAIN}/items/{itemId} |
Jedno jelo sa opcijama |
| GET | /llm/v1/locations/{DOMAIN}/items?ids=a,b,c |
Više jela odjednom (do 10 po zahtevu) |
| GET | /llm/v1/locations/{DOMAIN}/search?q=&limit= |
Semantička pretraga kataloga — po nazivima, opisima i karakteristikama |
| GET | /llm/v1/locations/{DOMAIN}/store-info |
Činjenice van menija: adresa, kontakti, koordinate, radno vreme |
| GET | /llm/v1/locations/{DOMAIN}/policies?q= |
Pretraga objavljenih pravila, FAQ i info stranica objekta |
| POST | /llm/v1/locations/{DOMAIN}/carts |
Kreiraj korpu na serveru |
| GET / PATCH | /llm/v1/locations/{DOMAIN}/carts/{cartId} |
Pročitaj korpu / izmeni sastav |
| POST | /llm/v1/locations/{DOMAIN}/orders |
Kreiraj porudžbinu (server validira sastav i obračunava iznose) |
| GET | /llm/v1/locations/{DOMAIN}/orders/{orderId} |
Status porudžbine, broj, stavke |
| GET | /llm/v1/locations/{DOMAIN}/reservations/availability?start=&durationMinutes= |
Slobodni/zauzeti stolovi po šemi sale |
| POST | /llm/v1/locations/{DOMAIN}/reservations |
Zahtev za rezervaciju (pending do potvrde restorana) |
| GET / DELETE | /llm/v1/locations/{DOMAIN}/reservations/{id} |
Status / otkazivanje rezervacije |
Korpa: sastavi porudžbinu korak po korak#
Agent ne mora da pogodi sastav porudžbine iz jednog pokušaja — može da vodi korpu na serveru, kao što to čovek radi u veb-korpi:
POST /cartssa prvim stavkama →cartIdPATCH /carts/{cartId}— dodaj, izmeni količinu, ukloni (quantity: 0)POST /orderssacartId— kreiraj
Cene u korpi se uvek preračunavaju po živom meniju, tako da ne može da prikaže zastareo iznos. Korpa živi 7 dana. U svakom odgovoru postoji checkoutUrl — link možete jednostavno dati čoveku da završi porudžbinu u običnom checkout-u.
Pri kreiranju porudžbine može se proslediti idempotencyKey (8–64 znaka): ponavljanje sa istim ključem u roku od 48 sati vratiće izvornu porudžbinu, a ne kreirati drugu. Isto važi i za rezervacije — ponavljanje u istom okviru vratiće izvornu rezervaciju, a ne zauzeti drugi sto.
Povezivanje preko MCP#
Server: https://api.cenaly.com/llm/mcp — Model Context Protocol, streamable HTTP, stateless. Gostujući alati rade bez autorizacije; prijava preko OAuth dodaje im alate vašeg naloga.
Konfiguracija za Claude Desktop / Claude Code i kompatibilne klijente:
{
"mcpServers": {
"meni-guest": {
"type": "http",
"url": "https://api.cenaly.com/llm/mcp"
}
}
}
Gostujući alati (13, bez autorizacije):
| Grupa | Alati |
|---|---|
| Cenaly i katalog | get_menu, get_item, search_products |
| Objekat | get_store_info, search_policies_and_faqs |
| Korpa | update_cart, get_cart |
| Porudžbina | create_order, get_order_status |
| Rezervacija stola | check_table_availability, create_reservation, get_reservation_status, cancel_reservation |
Tipični scenariji:
- Brza porudžbina:
get_menu→create_order→get_order_status(četvorocifreni broj se pojavljuje za par sekundi). - Porudžbina u dijalogu:
search_products→update_cart(stavku po stavku, kao u razgovoru) →get_cart→create_order, ili dati gostucheckoutUrli pustiti ga da sam završi porudžbinu. - Pitanje o objektu:
get_store_info(adresa, radno vreme, kontakti) ilisearch_policies_and_faqs(uslovi dostave, povraćaj, pravila). - Rezervacija stola:
check_table_availability(stolovi sa šeme sale, slobodan/zauzet za izabrano vreme) →create_reservationsatableId→get_reservation_status(restoran potvrđuje zahtev) → po potrebicancel_reservation.
Pristup svojim podacima#
Ako ste vlasnik lokala ili zaposleni, na istih 13 gostujućih alata dodaje se 12 alata za rad sa svojim nalogom — u dve grupe.
Podaci naloga (6): resolve_domain, list_files, read_file, write_file, delete_file, write_signal. Oni otvaraju ne samo meni i porudžbine, već i CRM, magacin, osoblje, podešavanja kase i kuhinjskog ekrana, dokumente i skoro sve ostale sekcije.
Klijentski sajt lokacije (6): get_site_settings, update_site_settings, list_site_templates, apply_site_template, check_domain_availability, rename_site_domain.
| Alat | Šta radi |
|---|---|
get_site_settings |
Čita podešavanja izloga: naslov, tip poslovanja, prekidače (porudžbine, poziv konobara, povratni poziv, cookie baner), dostava/preuzimanje/WhatsApp, izgled i šablon, raspored kartica, kampanje angažovanja, valutna tržišta, A/B test dizajna, a za trgovinu — izlog, SEO, sekcije početne strane i dodatke prodavnice |
update_site_settings |
Menja ista ta podešavanja: izmena se spaja sa profilom lokacije kroz isti tok kao i izmene iz admin panela — promene su vidljive za nekoliko sekundi |
list_site_templates |
Galerija gotovih šablona dizajna — ista kao u panelu |
apply_site_template |
Primenjuje šablon jednom radnjom: izgled, raspored kartica i id šablona |
check_domain_availability |
Proverava da li je ime poddomena slobodno (3–63 znaka, slova/cifre/crtica, rezervisana imena se odbijaju). Ništa ne menja |
rename_site_domain |
⚠️ Preimenuje domen izloga: samo vlasnik, i svi stari linkovi i odštampani QR kodovi na stari domen prestaju da rade |
Prijava — običan OAuth 2.1 pod vašim nalogom cenaly.com: MCP klijent (Claude, ChatGPT, CLI) registruje se sam i otvara prozor za prijavu. Ništa ne treba ručno da se unosi.
- Metapodaci resursa:
https://api.cenaly.com/.well-known/oauth-protected-resource - Metapodaci servera za autorizaciju:
https://api.cenaly.com/.well-known/oauth-authorization-server - Dinamička registracija klijenta (RFC 7591):
POST https://api.cenaly.com/llm/oauth/register
Dok nema tokena, tools/list prikazuje samo gostujuće alate — autorizovani prosto nisu vidljivi.
Pravila i garancije#
- Porudžbina se validira prema živom meniju: nepostojeće jelo, varijanta ili dodatak — greška 400 sa spiskom problema; cene i ukupan iznos računa server, agent nema način da „odredi“ cenu.
- Za preuzimanje i dostavu obavezni su ime i telefon gosta; za dostavu — adresa.
orderId/reservationId— tajni tokeni: preko njih se proverava status i otkazuje rezervacija. Ne objavljujte ih.- Porudžbine i rezervacije stižu restoranu u realnom vremenu — u admin panel, na kuhinjski ekran i u obaveštenja, kao obične porudžbine sa sajta.
- Gostujuće rezervacije imaju status
pendingdok ih restoran ne potvrdi u admin panelu. - U Rusiji alkohol preko agentskog kanala poručivanja nije moguć. Distantna prodaja alkoholnih proizvoda zabranjena je zakonom (pp. 14 p. 2 st. 16 171-FZ), pa kod lokacija sa zemljom „Rusija“ porudžbina sa alkoholnom stavkom ne prolazi validaciju: u odgovoru 400 stiže red sa nazivom te stavke i objašnjenjem da se ona može poručiti samo kod konobara u sali. Porudžbinu treba ponovo sastaviti bez alkohola.
Mašinski čitljivo otkrivanje#
https://cenaly.com/llms.txt— kratka mapa API-ja za LLM;GET https://api.cenaly.com/llm/v1— discovery dokument: pun spisak endpointa, primeri porudžbine, rezervacije i rada sa korpom, linkovi na OAuth metapodatke.