API
API (Application Programming Interface) poskytuje datové rozhraní pro přístup k datům v rámci konkrétního rezervačního systému (konkrétního subjektu). Díky API můžete napojit reenio na vlastní aplikace – například převádět rezervace a platby do účetnictví nebo CRM, synchronizovat zákazníky, blokovat čas z externího systému nebo vydávat a uplatňovat slevové kódy.
Níže uvedený popis je určen pro odborníky. Jde o přehled možností API – technickou specifikaci všech požadavků, parametrů a odpovědí najdete v interaktivní dokumentaci: https://reenio.cz/api-docs/
Tato funkcionalita je dostupná pouze v balíčku PREMIUM.
Co API umožňuje
Většina API slouží ke čtení dat (rezervace, zákazníci, platby, termíny). U vybraných oblastí lze data také měnit:
| Oblast | Čtení | Změny přes API |
|---|---|---|
| Rezervace | ✔ | změna stavu, úhrada, storno |
| Zákazníci | ✔ | úprava údajů, nastavení kreditu |
| Platby a doklady | ✔ | – |
| Termíny | ✔ | – |
| Blokace času | ✔ | vytvoření, smazání |
| Slevové kupóny a kódy | ✔ | vytvoření kódu, uplatnění kódu |
| Zdroje | ✔ | – |
| Hodnocení | ✔ | – |
Cesty v tabulkách níže jsou relativní k základní adrese API.
Rezervace
Načítání rezervací a jejich zpracování – typicky pro přenos do jiného systému nebo pro odbavení zákazníků na místě.
| Co umožňuje | Endpoint | Poznámka |
|---|---|---|
| Seznam rezervací v období | GET /reservation |
start/end ve formátu datum i čas; stránkováno, max. 90 dní; filtr podle místa, služby, zaměstnance, zdroje; volitelně i storna a náhradníci |
| Detail rezervace | GET /reservation/{id} |
|
| Detail více rezervací najednou | GET /reservations/{ids} |
až 100 ID |
| Vyhledání podle kódu rezervace | GET /reservation/detailbycode/{code} |
např. při odbavení podle QR kódu |
| Změna stavu | PUT /reservation/{id}/state |
povolené stavy vrací detail rezervace (newStateOptions) |
| Označení jako uhrazená / neuhrazená | PUT /reservation/{id}/ispaid |
|
| Storno | PUT /reservation/{id}/cancel |
uhrazenou rezervaci nelze stornovat |
Zákazníci
Synchronizace zákazníků s CRM nebo jiným systémem.
| Co umožňuje | Endpoint | Poznámka |
|---|---|---|
| Seznam zákazníků | GET /customer |
stránkováno |
| Detail zákazníka | GET /customer/{id} |
|
| Detail více zákazníků najednou | GET /customers/{ids} |
až 100 ID |
| Úprava zákazníka | PATCH /customer/{id} |
jméno, příjmení, titul, poznámka |
| Zjištění kreditu | GET /customer/{id}/credit |
výše a expirace |
| Nastavení kreditu | PUT /customer/{id}/credit |
|
| Seznam štítků zákazníků | GET /label |
stránkováno |
Platby a doklady
Podklady pro účetnictví a fakturaci.
| Co umožňuje | Endpoint | Poznámka |
|---|---|---|
| Doklady k platbám v období | GET /paymentdocument |
start/end ve formátu datum; stránkováno, max. 90 dní, podle data dokončení platby |
| Doklady k rezervaci | GET /paymentdocument/reservation/{id} |
|
| Doklad v PDF | GET /paymentdocument/{id}/pdf |
|
| Doklad v ISDOC | GET /paymentdocument/{id}/isdoc |
pro import do účetního software |
| Sazby DPH | GET /vat-rate |
stránkováno |
Termíny
Informace o vypsaných termínech a jejich obsazenosti.
| Co umožňuje | Endpoint | Poznámka |
|---|---|---|
| Definice termínů, jak jsou zadané v administraci | GET /eventdefinition/{typ} |
max. 31 dní; typ: singleevent, interval, customtime, sequence, seats |
| Konkrétní výskyty termínů s obsazeností | GET /eventoccurence/{typ} |
start/end ve formátu datum; max. 31 dní; typ: singleevent, sequence, seats |
Blokace času
Zablokování času, kdy nelze rezervovat – např. podle obsazenosti v externím kalendáři nebo systému.
| Co umožňuje | Endpoint | Poznámka |
|---|---|---|
| Výskyty blokací v období | GET /blockingtimeoccurence |
start/end ve formátu datum; opakované blokace rozepsané na jednotlivé výskyty |
| Definice blokací v období | GET /blockingtimedefinition |
start/end ve formátu datum; včetně pravidel opakování |
| Detail blokace | GET /blockingtimedefinition/{id} |
|
| Vytvoření blokace | POST /blockingtimedefinition |
pro místo, službu, zaměstnance nebo zdroj |
| Smazání blokace | DELETE /blockingtimedefinition/{id} |
Slevové kupóny a kódy
Vydávání a uplatňování slevových kódů z externích systémů – např. věrnostní program nebo prodej na pokladně.
| Co umožňuje | Endpoint | Poznámka |
|---|---|---|
| Seznam kupónů | GET /coupon |
stránkováno |
| Detail kupónu | GET /coupon/{id} |
|
| Kódy kupónu | GET /coupon/{id}/codes |
stránkováno |
| Vyhledání kódu | GET /couponcode/search/{code} |
|
| Detail kódu | GET /couponcode/{id} |
|
| Vytvoření kódu | POST /couponcode |
lze omezit na zákazníka a dobu platnosti |
| Uplatnění kódu | PUT /couponcode/{id}/checkin |
Zdroje
Číselníky potřebné pro správné zpracování rezervací, termínů a blokací.
| Co umožňuje | Endpoint | Poznámka |
|---|---|---|
| Místa | GET /resource/place |
|
| Služby | GET /resource/service |
|
| Zaměstnanci | GET /resource/employee |
|
| Kombinace zdrojů (místo + služba + zaměstnanec) | GET /resource |
odpovídá resourceId v rezervacích a blokacích |
| Varianty kapacity (např. dospělý / dítě) | GET /capacityvariant |
Hodnocení
| Co umožňuje | Endpoint | Poznámka |
|---|---|---|
| Hodnocení od zákazníků | GET /review |
stránkováno |
Ostatní
| Co umožňuje | Endpoint | Poznámka |
|---|---|---|
| Ověření platnosti API klíče | GET /auth/checkaccess |
|
| Informace o uživateli a subjektu | GET /user/info |
pro koho byl klíč vystaven |
Obecné informace
REST API je dostupné na adrese https://api.reenio.cz/{lang}/api/v1/admin/, kde {lang} je kód jazyka (např. cs). Cesty uvedené v přehledu jsou relativní k této adrese.
- Data se předávají ve formátu JSON v kódování UTF-8.
- Pokud není uvedeno jinak, je datum a čas v časové zóně UTC a ve formátu ISO 8601.
- Počet požadavků je omezen na 200 za minutu (viz Chybové stavy).
- Dotazy na období (
start,end) mají omezenou délku (uvedeno v přehledu). Delší období je potřeba rozdělit do více dotazů. Parametrystart/endpřijímají datum (2026-11-01) nebo datum i čas (2026-11-01T08:00:00Z) v závislosti na konkrétní metodě. Limit se aplikuje včetně. - Je nutné používat TLS 1.2 a vyšší; starší verze nejsou od 1. 10. 2021 podporovány.
Autentizace
Přístup k API je zabezpečen API klíčem, který vytvoříte v administraci reenio v části Nastavení - API. Klíč je svázán se subjektem a uživatelem, který jej vytvořil – přes API tak máte stejná oprávnění jako tento uživatel.
Klíč se předává v každém požadavku v HTTP hlavičce:
Authorization: Bearer <apikey>
API klíč udržujte v tajnosti. Při podezření na jeho zneužití jej v administraci smažte a vytvořte nový. API klíč může být také nastaven jako pouze pro čtení, což je doporučené, pokud není potřeba pomocí API údaje modifikovat.
Rychlý start
Ověření, že API klíč funguje (odpověď 200 OK bez těla):
curl -i https://api.reenio.cz/cs/api/v1/admin/auth/checkaccess \
-H "Authorization: Bearer <apikey>"
Načtení rezervací za první týden v listopadu:
curl "https://api.reenio.cz/cs/api/v1/admin/reservation?start=2026-11-01&end=2026-11-08" \
-H "Authorization: Bearer <apikey>" \
-H "Accept: application/json"
Odpověď obsahuje seznam rezervací (list) a odkaz na další stránku (nextPage) – viz Stránkování odpovědí API. Podrobný popis všech vlastností rezervace najdete ve Swagger dokumentaci, kde lze požadavky po zadání API klíče (tlačítko Authorize) i rovnou vyzkoušet.
Jak spolu data souvisejí
- Zdroje. Rezervace, termíny i blokace se vážou ke zdroji. Zdroj je kombinace místa, služby a zaměstnance – v rezervaci jsou proto uvedeny jak jednotlivé
placeId,serviceIdaemployeeId, takresourceIdcelé kombinace. Názvy a podrobnosti získáte zGET /resource/place,/service,/employeeaGET /resource. Číselníky zdrojů se mění zřídka, je vhodné si je načíst jednou a uložit. - Zákazník. Rezervace obsahuje základní údaje zákazníka včetně jeho ID. Kompletní profil (adresa, vlastní pole, kredit, štítky) získáte přes
GET /customer/{id}, pro více rezervací najednou efektivněji přesGET /customers/{ids}. - Kapacita a vstupenky. U rezervací s variantami kapacity (např. dospělý / dítě) a u vstupenek je uvedeno
capacityVariantId– název varianty najdete vGET /capacityvariant. - Platby. Doklad k platbě obsahuje seznam ID rezervací (
reservationsIds), ke kterým se vztahuje. Opačným směrem vedeGET /paymentdocument/reservation/{id}. Informaci, zda je rezervace uhrazena, nese přímo rezervace (isPaid). - Slevové kódy. Kupón (
/coupon) definuje slevu, kódy (/couponcode) jsou jednotlivé konkrétní kódy, které zákazník zadává. Kód může být svázán s konkrétním zákazníkem.
Stránkování odpovědí API
Koncové body API podporující stránkování (v přehledu označené jako „stránkováno“) vracejí v rámci odpovědi serveru kromě požadovaných dat (vlastnost list) také vlastnosti hasNextPage a nextPage. Vlastnost nextPage obsahuje absolutní URL pro získání další stránky s daty. Odkaz na další stránku je vrácen vždy, a to i přesto, že žádná další data nemusejí aktuálně existovat. To, jestli nějaká další data v daný okamžik existují, udává vlastnost hasNextPage (true/false).
Příklad odpovědi koncového bodu podporujícího stránkování:
{
"list":[
{
"id":1884,
....
...
},
...
...
],
"hasNextPage": true,
"nextPage":"https://api.reenio.cz/cs/api/v1/admin/reservation?continuationToken=91b7PM"
}
Pro získání další stránky použijte URL tak, jak ji vrátilo API. Do URL již není potřeba přidávat další parametry požadavku (každá následující stránka má automaticky stejné vlastnosti jako ta první). Autentizace během stránkování probíhá stejným způsobem jako při dotazu na požadovaný koncový bod.
Pseudokód pro získání všech požadovaných dat z API:
var url = "https://api.reenio.cz/cs/api/v1/admin/reservation?start=2020-10-27&end=2020-12-27&limit=5";
var response = null;
do {
response = ...; // požadavek na data
// zpracování dat (response.list)
url = response.nextPage;
} while(response.hasNextPage);
V průběhu stránkování je zajištěno, že nově vzniklá data budou vždy na následující stránce. Díky tomu je možné pokračovat ve stránkování i s odstupem času. Stačí si v okamžiku, kdy bude mít vlastnost hasNextPage hodnotu false, uložit adresu další stránky (nextPage) a o pár hodin později vytvořit požadavek na tuto stránku. Odpověď bude obsahovat pouze nově vzniklá data. Během stránkování je potřeba postupovat vždy kupředu. Tedy každý následující požadavek musí vést na nextPage předchozí odpovědi (požadavek by nikdy neměl směřovat opakovaně na tutéž stránku).
Počet položek na stránce lze ovlivnit pomocí parametru limit. Tento limit se může pro jednotlivé koncové body lišit.
Průběžná synchronizace dat
Pro realizaci komplexního řešení automatizace je možné využívat také Webhooky. Pro průběžné stahování nových záznamů – typicky rezervací nebo dokladů k platbám – je nejvhodnější využít výše popsané stránkování:
- Při prvním spuštění načtěte data za požadované období a projděte všechny stránky.
- Adresu z
nextPageposlední odpovědi (hasNextPage= false) si uložte. - Při dalším spuštění (např. jednou za několik minut) zavolejte uloženou adresu. Dostanete pouze záznamy, které mezitím přibyly, a novou adresu
nextPagesi opět uložte.
Oproti opakovanému načítání celého období tak nestahujete stále stejná data a snadno se vejdete do limitu počtu požadavků.
Chybové stavy
API používá standardní HTTP stavové kódy. Konkrétní kódy, které může daný endpoint vrátit, jsou uvedeny ve Swagger dokumentaci.
| Kód | Význam |
|---|---|
| 200 | Požadavek byl úspěšně zpracován. |
| 400 | Chybný požadavek – např. chybějící parametr nebo překročená délka období. Některé endpointy vracejí v těle bližší popis { "errorCode": "..." }. |
| 401 | Chybějící nebo neplatný API klíč. |
| 403 | Uživatel, pro kterého byl klíč vystaven, nemá k operaci oprávnění, případně subjekt nemá aktivní balíček PREMIUM. |
| 404 | Požadovaný záznam neexistuje. |
| 405 | Operaci nelze se záznamem provést – např. storno již uhrazené rezervace. |
| 409 | Operace je v konfliktu s aktuálním stavem záznamu. |
| 429 | Překročen limit počtu požadavků. |
Číselníky
Stav rezervace (state)
| Hodnota | Název |
|---|---|
| 0 | nová |
| 1 | potvrzená |
| 2 | stornovaná |
| 3 | neproběhla |
| 4 | proběhla |
| 5 | nedorazil |
| 6 | schválená |
| 100–109 | uživatelsky definované stavy |
Typ rezervace (reservationType)
| Hodnota | Název |
|---|---|
| 1 | interval |
| 2 | celý jeden termín |
| 4 | celá sekvence |
| 5 | místenky / sedadla |
| 6 | libovolný čas |
| 7 | vícedenní |
| 8 | poukaz |
Předávání dat do vloženého rezervačního formuláře
Mimo REST API lze při vložení rezervačního systému na vlastní web (iframe) předvyplnit údaje zákazníka a reagovat na dokončení rezervace. Slouží k tomu atributy data-api-ready a data-reservation-created v kódu pro vložení. Předvyplnění vlastních položek rezervačního formuláře není podporováno.
<script>
function onApiReady(api){
api.setCustomer({
firstName: 'Pepa',
lastName: 'Novák',
email: 'pepa@reenio.cz',
phone: '+420123....'
});
}
function onReservationCreated(){
// např. přesměrování na děkovací stránku
}
</script>
<div class="reenio-iframe" data-size="auto" data-url="/service/seo-konzultace-zdarma-1234;viewMode=7-days;hideResources=1" data-api-ready="onApiReady" data-reservation-created="onReservationCreated"></div>
<script src="https://reenio.cz/cs/GEAA321A/widget-iframe.js" async defer></script>
Historie změn
- 1. 10. 2021 – podporována pouze TLS 1.2 a vyšší.
- 4. 2. 2021 – detail rezervace podle kódu; vlastnost
Resourcesv popisu termínů nahrazenaResourceVariants; nový princip stránkování (hasNextPage+nextPage).
rezervační systém