Nyilvános API
REST API (v1-es verzió) a vállalkozás saját weboldalához, AI recepcióshoz, Zapierhez, Make-hez és egyéb csatlakozásokhoz. A válaszok JSON formátumúak, ok mezővel; hiba esetén error mezővel is. Az összes útvonal és mező teljes leírása az OpenAPI 3.1-ben található.
1. Hitelesítés kulccsal
Minden kérésnek tartalmaznia kell az Authorization: Bearer rk_live_… fejlécet. A kulcsot az irányítópulton hozza létre → API-kulcsok. A teljes kulcs csak egyszer jelenik meg — mentse el környezeti változóba vagy jelszókezelőbe; nálunk csak az ujjlenyomata tárolódik. A kulcs egyetlen vállalkozáshoz tartozik, ezért a vállalkozást a kérésekben nem kell megadni.
curl "https://app.terminuj.com/api/v1/services" \
-H "Authorization: Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX"2. A kulcs jogosultságai
A kulcs létrehozásakor kiválasztja a jogosultságokat — csak azokat adja meg, amelyekre a csatlakozásnak valóban szüksége van.
| Jogosultság | Útvonalak (/api/v1/…) |
|---|---|
booking:read | GET /bookings, GET /bookings/{id}, GET /time-off |
booking:write | POST /bookings, PATCH /bookings/{id} (lemondás, áthelyezés, megerősítés), POST /time-off, DELETE /time-off/{id} |
customer:read | GET /customers |
service:read | GET /services, GET /availability |
webhook:manage | GET/POST /webhooks, GET/DELETE /webhooks/{id}, GET /webhooks/{id}/deliveries |
3. Leggyakoribb használat
Szabad időpontok
Minden napra visszaadja, hogy nyitva van-e, valamint a szabad időpontokat a foglalások, a szabadnapok és a szolgáltatás szünetei levonása után; legkorábban most + 2 óra. from = nap ÉÉÉÉ-HH-NN formátumban (alapértelmezés: ma), days 1–62 (alapértelmezés: 28), opcionálisan staff = egy adott munkatárs. Az időzóna Europe/Bratislava.
curl "https://app.terminuj.com/api/v1/availability?service=<id-sluzby>&from=2026-06-15&days=7" \
-H "Authorization: Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX"Foglalás létrehozása
startAt UTC-ben, a végén Z betűvel (12:00Z = nyáron 14:00 Pozsonyban). Az ügyfél e-mail-címe kötelező; nélküle csak "channel": "telefon" esetén (telefonon felvett időpont — elég a név és a telefonszám). A weboldala nyilvános űrlapjáról érkező időpontokat "channel": "web" értékkel küldje; ha a vállalkozás megköveteli a hozzájárulást a szolgáltatás elállási határidő lejárta előtti megkezdéséhez, adja hozzá ezt: "serviceStartConsent": true, aszerint, hogy az ügyfél bejelölte-e a jelölőnégyzetet (különben 422 consent_required). Opcionálisan preferredStaffId, customer.notes és locale (sk | en | cs | hu | de | es — az API-üzenetek és az ügyfélnek e foglalással kapcsolatban küldött további üzenetek nyelve; alapértelmezés a vállalkozás nyelve). Ha ugyanazt a szolgáltatást és időpontot ugyanazzal az e-mail-címmel 10 percen belül újra elküldi, ugyanazt a foglalást kapja vissza (dupla kattintás, hálózati kiesés).
Az API-n keresztüli foglalásnál a Terminuj nem küld visszaigazoló e-mailt az ügyfélnek — a visszaigazolást az Ön csatlakozása küldi. A tulajdonos a vállalkozás beállításai szerint kap értesítést. A foglalás beleszámít a csomag havi keretébe.
curl -X POST "https://app.terminuj.com/api/v1/bookings" \
-H "Authorization: Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX" \
-H "Content-Type: application/json" \
-d '{
"serviceId": "<id-sluzby>",
"startAt": "2026-06-15T12:00:00Z",
"customer": {
"fullName": "Jana Nováková",
"email": "jana@example.com",
"phone": "+421900123456"
}
}'Foglalás lemondása, áthelyezése vagy megerősítése
Egyetlen útvonal, az action mező szerint: {"action": "cancel", "reason": "…"}, {"action": "reschedule", "startAt": "…Z"} vagy {"action": "confirm"} (csak előlegre váró időpontnál). Lemondáskor az ügyfél e-mailt kap; áthelyezéskor és megerősítéskor akkor, ha a vállalkozásnál be vannak kapcsolva a visszaigazoló e-mailek.
curl -X PATCH "https://app.terminuj.com/api/v1/bookings/<id-rezervacie>" \
-H "Authorization: Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX" \
-H "Content-Type: application/json" \
-d '{ "action": "cancel", "reason": "Zákazník neprišiel" }'Ügyfelek keresése
A search a névben, az e-mail-címben és a telefonszámban keres.
curl "https://app.terminuj.com/api/v1/customers?search=jana&limit=10" \
-H "Authorization: Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX"A további útvonalakat (foglalások listája from/to/status/createdFrom szűrővel, szolgáltatások, időblokkolás /time-off, webhookok) az OpenAPI írja le.
4. Lapozás
A listák paraméterei: ?limit=25&cursor=<id>. Alapértelmezés 25, legfeljebb 100 oldalanként (foglalások, ügyfelek, webhook-kézbesítések); szolgáltatásoknál alapértelmezés 50, legfeljebb 200. A válasz tartalmazza: { pagination: { nextCursor, hasMore, limit } }.
# Első oldal
curl "https://app.terminuj.com/api/v1/bookings?limit=25" -H "Authorization: Bearer rk_live_…"
# Következő oldal (nextCursor az előző válaszból)
curl "https://app.terminuj.com/api/v1/bookings?limit=25&cursor=<nextCursor>" -H "Authorization: Bearer rk_live_…"5. Kéréskorlát
A korlát kulcsonként, 1 perces csúszó ablakban számít:
- Olvasás (booking:read, customer:read, service:read): percenként 600 kérés
- Írás (booking:write, webhook:manage): percenként 60 kérés
Túllépéskor 429 rate_limit_exceeded választ kap a Retry-After fejléccel (hány másodperc múlva próbálja újra) és a retryAfterSeconds mezővel. Az X-RateLimit-Limit, X-RateLimit-Remaining és X-RateLimit-Reset fejlécek az elutasításkor érkeznek.
6. Hibakódok
| HTTP | error | Jelentés |
|---|---|---|
| 401 | missing_or_invalid_authorization | Hiányzik az Authorization fejléc, vagy a kulcs nem rk_live_ + 24 karakter formátumú |
| 401 | invalid_api_key | Ilyen kulcs nem létezik |
| 401 | api_key_revoked | A kulcsot visszavonták az irányítópulton |
| 401 | api_key_expired | A kulcs lejárt (expiresAt) |
| 402 | trial_ended | A vállalkozás próbaidőszaka lejárt — 14 nappal a regisztráció után (resetAt = a próbaidő vége); új foglalás csak csomagválasztás után |
| 402 | monthly_limit_exceeded | A vállalkozás kimerítette partnercsomagja havi foglalási keretét (used, limit, resetAt) |
| 403 | insufficient_scope | A kulcs nem rendelkezik a szükséges jogosultsággal (required, have) |
| 403 | manual_requires_app | A „manual: true” értéket csak a Terminuj alkalmazásba bejelentkezett személy küldheti, API-kulcs nem |
| 404 | not_found | A foglalás, szabadnap vagy webhook nem létezik ennél a vállalkozásnál (service_not_found is) |
| 409 | slot_conflict | Az időpontot időközben lefoglalták; létrehozáskor suggestedAlternatives is érkezik |
| 409 | already_cancelled | A foglalás állapota nem engedi a változtatást (already_completed, cannot_cancel, not_reschedulable, already_confirmed, cannot_confirm is) |
| 422 | invalid_body | A kérés törzse nem felel meg a sémának — részletek a detail mezőben |
| 422 | consent_required | A vállalkozás hozzájárulást kér a szolgáltatás elállási határidő előtti megkezdéséhez, és hiányzik a serviceStartConsent: true |
| 422 | start_in_past | A kezdés a múltban van (outside_working_hours = nyitvatartáson kívül is) |
| 429 | rate_limit_exceeded | A kulcs kéréskorlátja túllépve — lásd az 5. részt |
| 429 | daily_cap_reached | A vállalkozás elérte a nyilvános foglalások napi felső határát (elmúlt 24 óra) — a kulccsal történő írás ugyanúgy számít, mint az űrlap |
7. Webhookok
Ha szeretné, hogy a Terminuj maga értesítse az új, lemondott vagy áthelyezett foglalásokról, lásd: /docs/webhooks — HMAC SHA-256 aláírás, újrapróbálás 1 perc, 5 perc, 30 perc és 2 óra után, kódpéldák.
A webhookok az API-n keresztül is kezelhetők: GET/POST /api/v1/webhooks, GET/DELETE /api/v1/webhooks/{id} és GET /api/v1/webhooks/{id}/deliveries (kézbesítési napló).
8. Támogatás
Hiba vagy új funkció kérése: podpora@terminuj.com.