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ů. Parametry start/end př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, serviceId a employeeId, tak resourceId celé kombinace. Názvy a podrobnosti získáte z GET /resource/place, /service, /employee a GET /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řes GET /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 v GET /capacityvariant.
  • Platby. Doklad k platbě obsahuje seznam ID rezervací (reservationsIds), ke kterým se vztahuje. Opačným směrem vede GET /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í:

  1. Při prvním spuštění načtěte data za požadované období a projděte všechny stránky.
  2. Adresu z nextPage poslední odpovědi (hasNextPage = false) si uložte.
  3. 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 nextPage si 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 Resources v popisu termínů nahrazena ResourceVariants; nový princip stránkování (hasNextPage + nextPage).