API pre vývojárov
Otvorené API Vitrina: menu, objednávky, rezervácie, hostia a predaj pre vašu pokladnicu, kuchynskú obrazovku, CRM či účtovníctvo. REST a JSON, kľúče s oprávneniami, podpísané webhooky.
Čo všetko sa dá
- Menu: kategórie, jedlá, ceny a dostupnosť v jednotlivých prevádzkach, ako aj vypredané položky: stiahnuť jedlo z predaja alebo ho vrátiť
- Úprava menu: kategórie a jedlá, názvy a popisy v jazykoch hostí, ceny, porcie, modifikátory, poradie a viditeľnosť
- Objednávky: zoznam s filtrami, položky a sumy, stavy kuchyne a výdaja (prijatá, pripravuje sa, hotová, vydaná)
- Nové objednávky z call centra, kiosku alebo iného webu s rovnakými cenami a pravidlami rozvozu ako na vašom webe; pokladnica a kuchyňa ich vidia hneď a hosť platí pri prevzatí
- Rozvoz: kto veze (len krstné meno kuriéra), kedy objednávku vyzdvihol a kedy ju doručil: priamo v objednávke aj udalosťou
- Platby a vrátenia peňazí pri každej objednávke na odsúhlasenie, len na čítanie
- Rezervácie: zoznam, nová rezervácia a zmena stavu (potvrdiť, odmietnuť, hosť prišiel alebo neprišiel)
- Hostia: profily a kontakty, len s osobitným povolením
- Bonusy hostí: pripísať alebo odpísať s dôvodom, s osobitným povolením; zostatok nejde do mínusu a každá operácia sa zapíše do denníka
- Predaj po dňoch pre účtovníctvo: objednávky, tržby, zľavy, vrátenia peňazí a prepitné podľa spôsobu platby a kanála
- Prevádzky: adresy, kontakty a otváracie hodiny
- Udalosti (nová objednávka, zmena stavu, platba, zrušenie, vrátenie peňazí, rozvoz, nová rezervácia, vypredané položky a zmeny menu) webhookom na váš server
Prijímať platby, vracať peniaze ani rušiť objednávky API nevie: s peniazmi hostí narába iba samotný podnik. Preto hosť objednávky z API platí pri prevzatí.
Prístup a oprávnenia
Kľúč vytvára majiteľ podniku v administrácii, v sekcii „API a webhooky“: pomenuje integráciu a zvolí oprávnenia a prevádzky. Kľúč sa zobrazí iba raz (v databáze zostáva len jeho odtlačok) a zrušiť ho možno kedykoľvek. Mená, telefóny a adresy hostí integrácia vidí len s oprávnením customers:read.
Oprávnenia kľúča
locations:read- Prevádzky: adresy, kontakty a otváracie hodiny
menu:read- Menu, ceny a dostupnosť jedál
menu:write- Vypredané položky: stiahnuť jedlo z predaja alebo ho vrátiť
menu:manage- Úprava menu: kategórie, jedlá, ceny, porcie a poradie
orders:read- Objednávky: zoznam a detail, bez kontaktov hosťa
orders:write- Stavy kuchyne a výdaja
orders:create- Nové objednávky s platbou pri prevzatí
payments:read- Platby a vrátenia peňazí pri objednávkach, len na čítanie
reservations:read- Rezervácie: zoznam a detail
reservations:write- Nová rezervácia a zmena jej stavu
customers:read- Meno, telefón, e-mail a adresa hosťa v objednávkach, rezerváciách a zozname hostí
loyalty:write- Pripisovanie a odpisovanie bonusov hosťa, len spolu s prístupom k hosťom
reports:read- Predaj po dňoch pre účtovníctvo
Prvá požiadavka
API beží na serveri podniku: každý klient Vitrina má vlastný server a vlastnú doménu. Kľúč sa posiela v hlavičke Authorization: Bearer vit_live_…, odpoveď je JSON vždy v rovnakej obálke: dáta, servisné polia a chyba s kódom a textom v jazyku požiadavky.
curl https://api.example.com/api/open/v1/ping \
-H "Authorization: Bearer vit_live_…"{
"data": {
"ok": true,
"brand": "my-bistro",
"apiVersion": "2026-10-13",
"serverTime": "2026-10-13T09:30:00.000Z",
"clientName": "POS integration",
"scopes": ["menu:read", "orders:read", "orders:write"],
"cafeIds": []
},
"meta": null,
"error": null
}Webhooky
Adresy pre udalosti pridáva majiteľ v tej istej sekcii administrácie a pre každú zvolí, ktoré udalosti na ňu posielať. Každá požiadavka je podpísaná: hlavička Vitrina-Signature obsahuje čas odoslania a HMAC-SHA256 z času a tela požiadavky, vypočítaný tajným kľúčom adresy. Mená a kontakty hostí v udalostiach idú len na adresy so zapnutým políčkom „Posielať kontakty hosťa“.
Udalosti
order.created- Nová objednávka
order.status_changed- Zmenil sa stav objednávky
order.paid- Objednávka je zaplatená
order.cancelled- Objednávka je zrušená
order.refunded- Hosťovi boli vrátené peniaze alebo bonusy
order.delivery_updated- Kuriér bol priradený alebo odobratý, objednávka bola vyzdvihnutá alebo doručená
reservation.created- Nová rezervácia
reservation.status_changed- Zmenil sa stav rezervácie
menu.availability_changed- Jedlo bolo stiahnuté z predaja alebo vrátené
menu.changed- Zmenilo sa menu: kategórie, jedlá, ceny alebo poradie
import { createHmac, timingSafeEqual } from 'node:crypto'
const TOLERANCE_SECONDS = 300
export function isFromVitrina(rawBody, header, secret) {
const parts = header.split(',').map((part) => part.trim().split('='))
const t = parts.find(([name]) => name === 't')?.[1] ?? ''
const age = Math.abs(Date.now() / 1000 - Number(t))
if (!/^\d+$/.test(t) || age > TOLERANCE_SECONDS) return false
const hmac = createHmac('sha256', secret).update(`${t}.${rawBody}`)
const want = Buffer.from(hmac.digest('hex'))
return parts
.filter(([name]) => name === 'v1')
.map(([, value]) => Buffer.from(value ?? ''))
.some((got) => got.length === want.length && timingSafeEqual(got, want))
}Podpis sa počíta zo surového tela požiadavky, pred spracovaním JSON. Podpis starší ako 5 min odmietnite; opakované doručenie tej istej udalosti nesie rovnakú hodnotu Vitrina-Event-Id; podľa nej odfiltrujte duplikáty.
Limity a spoľahlivosť
- 600 požiadaviek za minútu na každý kľúč, špička až 60 naraz; nad limit príde odpoveď 429 a hlavička
Retry-After - Hlavička
Idempotency-Keypri POST, PUT a PATCH: opakovanie s rovnakým kľúčom do 24 h vráti prvú odpoveď namiesto vytvorenia duplikátu; pri nových objednávkach a bonusoch je povinná - Zoznamy po stránkach: limit do 200 a offset, v odpovedi celkový počet
- Ak váš server neodpovie do 10 s, udalosť posielame znova s rastúcou pauzou: 8 pokusov počas takmer dvoch dní
- Adresa, ktorá neprijala 20 doručení za sebou, sa sama vypne; denník doručení sa uchováva 30 dní a každú udalosť z neho možno poslať znova
Verzie
Verzia je v adrese: /api/open/v1. Nekompatibilné zmeny vychádzajú len ako nová verzia vedľa starej a stará odpovedá, kým ju niekto používa. Dátum revízie rozhrania je v poli apiVersion každej udalosti, teraz 2026-10-13.
Úplný popis
Všetky požiadavky, odpovede a kódy chýb sú v špecifikácii OpenAPI na serveri podniku: stránka /api/open/v1/docs a súbor /api/open/v1/openapi.json pre generátory klientov.
Pre integrátorov
Píšete integráciu pre viacero podnikov, napríklad pokladnicu, donáškovú službu či účtovníctvo? Napíšte nám: dáme vám testovací prístup a pomôžeme s prvým pripojením.
Koľko to stojí
API a webhooky sú súčasťou balíkov „Kompletný“ a „Sieť“. Pre „Štart“ a „Reštaurácia“ na požiadanie.