Preskočiť na hlavný obsah
← Főoldal

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ó.

📄 OpenAPI 3.1 (JSON)🔔 Webhookok🔑 API-kulcs létrehozása

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:readGET /bookings, GET /bookings/{id}, GET /time-off
booking:writePOST /bookings, PATCH /bookings/{id} (lemondás, áthelyezés, megerősítés), POST /time-off, DELETE /time-off/{id}
customer:readGET /customers
service:readGET /services, GET /availability
webhook:manageGET/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

HTTPerrorJelentés
401missing_or_invalid_authorizationHiányzik az Authorization fejléc, vagy a kulcs nem rk_live_ + 24 karakter formátumú
401invalid_api_keyIlyen kulcs nem létezik
401api_key_revokedA kulcsot visszavonták az irányítópulton
401api_key_expiredA kulcs lejárt (expiresAt)
402trial_endedA 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
402monthly_limit_exceededA vállalkozás kimerítette partnercsomagja havi foglalási keretét (used, limit, resetAt)
403insufficient_scopeA kulcs nem rendelkezik a szükséges jogosultsággal (required, have)
403manual_requires_appA „manual: true” értéket csak a Terminuj alkalmazásba bejelentkezett személy küldheti, API-kulcs nem
404not_foundA foglalás, szabadnap vagy webhook nem létezik ennél a vállalkozásnál (service_not_found is)
409slot_conflictAz időpontot időközben lefoglalták; létrehozáskor suggestedAlternatives is érkezik
409already_cancelledA foglalás állapota nem engedi a változtatást (already_completed, cannot_cancel, not_reschedulable, already_confirmed, cannot_confirm is)
422invalid_bodyA kérés törzse nem felel meg a sémának — részletek a detail mezőben
422consent_requiredA 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
422start_in_pastA kezdés a múltban van (outside_working_hours = nyitvatartáson kívül is)
429rate_limit_exceededA kulcs kéréskorlátja túllépve — lásd az 5. részt
429daily_cap_reachedA 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.