Docs
Ctrl+K

Hitelesítés

API kulcsok, Bearer hitelesítés, jogosultsági modell, kulcs-életciklus és kérési limitek.

Áttekintés#

A Bokko Public API minden kérése Bearer-tokenes hitelesítést igényel. Az API kulcsot az Authorization fejlécben kell küldeni.

Authorization: Bearer bk_live_<key>
  • Minden kulcs egyetlen szolgáltatói üzlethez van kötve
  • A kulcsok explicit jogosultsághalmazzal rendelkeznek -- csak azokat a műveleteket engedik, amelyekre jogosultságot kaptak
  • A kulcs önmagában nem ad teljes hozzáférést: a jogosultságok és az üzletszintű hatókör együtt határozzák meg a hozzáférést
Tipp
A Publikus REST API használatához és az API kulcsok kezeléséhez Bokko Pro előfizetés szükséges. Ingyenes vagy Starter csomag esetén a kérések 403 auth.plan_insufficient hibával elutasításra kerülnek.
Figyelmeztetés
Az API kulcsot soha ne használd kliensoldalon (böngésző, mobil app frontend). A kulcs szerver-szerver kommunikációra való. Kliensoldalon kikerülhet a felhasználóhoz, és visszaélés célpontja lehet.

API kulcs típusok#

Tipp
Az API kulcsot a Bokko dashboardon hozhatod létre az Integrációk → API kulcsok menüpontban. A jelenlegi dashboard UI normál létrehozófolyamata integration típusú kulcsot ad ki, és ehhez owner vagy guest_partner kulcsfajta választható. Részletes UI útmutató: Help: API kulcsok kezelése.
TípusLeírásVisszavonás
personalDelegált felhasználói jogosultság. A kulcs a létrehozó felhasználó nevében jár.Automatikusan visszavonódik, ha a felhasználó hozzáférése megszűnik.
integrationFüggetlen jogosultság. Nem kötődik felhasználóhoz, önállóan működik.Csak manuális visszavonással vagy lejárattal.
Tipp
Automatizációkhoz és külön rendszerek integrálásakor az integration típust javasoljuk. Így a kulcs nem függ egyetlen felhasználó fiókállapotától sem.

API kulcsfajták#

A kulcstípus mellett a Bokko v1 egy külön key kind mezőt is használ, amely tovább szűkíti, mit tehet egy integration kulcs.

FajtaLeírásJogosultsági hatókör
ownerTeljes tulajdonosi integrációs kulcs.A kulcshoz rendelt teljes jogosultságkészlet használható.
guest_partnerKülső foglalási partner kulcs, amely vendégoldali foglalási műveleteket végez.Csak a vendégoldali foglalási jogosultságok használhatók.

guest_partner kulcsnál az engedélyezett jogosultságkészlet erre a négyre szűkül:

  • services.read
  • staff.read
  • availability.read
  • booking.create

Jogosultságok#

CapabilityLeírás
availability.readSearch available slots
booking.createCreate a booking
booking.readRead a booking
booking.cancelCancel a booking
services.readList services
staff.readList staff
webhook.manageManage webhook configuration
subscription.readRead subscription state

A kulcsok jogosultságokkal rendelkeznek, amelyek meghatározzák, mely műveleteket végezhetik el. Ezeket a kulcs létrehozásakor kell beállítani.

JogosultságLeírásÉrintett végpontok
services.readSzolgáltatások listázásaGET /services
staff.readMunkatársak listázásaGET /staff
availability.readSzabad időpontok keresésePOST /availability/search
booking.createÚj foglalás beküldésePOST /bookings
booking.readFoglalások listázása és részleteiGET /bookings, GET /bookings/{bookingId}, GET /bookings/{bookingId}/events
booking.cancelFoglalás lemondásaPOST /bookings/{bookingId}/cancel
webhook.manageWebhook konfiguráció kezeléseGET/PUT/DELETE /webhooks/config, GET /webhooks/deliveries
subscription.readElőfizetési csomag lekérdezéseGET /subscription

Üzletszintű hatókör#

Az API kulcsok egyetlen szolgáltató üzletéhez vannak kötve. Az üzletszintű hatókör érvényesítése az alábbi módon történik:

Kötelező salonSlug és locationSlug paraméterek:

  • POST /availability/search -- szabad időpontok lekérdezéséhez (request body-ban)
  • POST /bookings -- foglalás létrehozásához (request body-ban)
  • GET /services -- szolgáltatások listázásához (query stringben)
  • GET /staff -- munkatársak listázásához (query stringben)

Kötelező salonSlug paraméter:

  • GET /bookings -- foglalások listázásához (query stringben)
  • GET /webhooks/config, PUT /webhooks/config, DELETE /webhooks/config -- webhook konfiguráció kezeléséhez
  • POST /webhooks/config/rotate-secret -- webhook secret rotálásához
  • GET /webhooks/deliveries -- kézbesítési napló lekérdezéséhez

Nem kötelező (a kulcs + booking resource alapján érvényesítve):

  • GET /bookings/{bookingId}
  • GET /bookings/{bookingId}/events
  • POST /bookings/{bookingId}/cancel
  • GET /subscription (a kulcs önmagában meghatározza, melyik szolgáltatói üzlet előfizetéséről van szó)

Ha a megadott salonSlug nem egyezik a kulcshoz rendelt üzlettel, vagy a locationSlug nem található:

HTTP 403
{
  "error": {
    "code": "auth.scope_mismatch",
    "message": "A kulcs nem jogosult erre a szolgáltatóra vagy telephelyre."
  }
}
Figyelmeztetés
A rendszer szándékosan 403-at ad vissza 404 helyett, hogy megakadályozza az üzletazonosítók felderítését.

Idempotencia#

Write műveletek támogatják az Idempotency-Key fejlécet az ismételt küldés elleni védelemhez.

TulajdonságÉrték
FejlécIdempotency-Key
FormátumRFC 4122 UUID (v1-v5, v4 ajánlott)
TTL24 óra
Fingerprintüzletszintű hatókör + operationId + path params + kanonikus body

Működés:

  • Ugyanaz a kulcs + egyező fingerprint --> az eredeti válasz visszaadásra kerül (meta.idempotent: true)
  • Ugyanaz a kulcs + eltérő fingerprint --> 409 idempotency.payload_mismatch

Rate limiting#

Route groupStandardElevatedEgység
catalog120600kérés / perc
availability30150kérés / perc
booking30150kérés / perc
webhook1050kérés / perc
subscription60300kérés / perc

A Bokko Public API végpontcsoportonként (route group) és API kulcsonként külön limitet alkalmaz, 1 perces gördülő ablakkal. Két limit-szint (tier) létezik: standard és elevated.

VégpontcsoportÉrintett végpontokStandard (req/min)Elevated (req/min)
catalogGET /services, GET /staff120600
availabilityPOST /availability/search30150
bookingPOST /bookings, GET /bookings, POST /bookings/{bookingId}/cancel30150
webhookGET/PUT/DELETE /webhooks/config, GET /webhooks/deliveries1050
subscriptionGET /subscription60300

Túllépés esetén a válasz:

HTTP 429
Retry-After: 30

{
  "error": {
    "code": "rate_limit.exceeded",
    "message": "Túllépte a kérésmennyiséget.",
    "retryable": true,
    "details": {
      "retryAfterSeconds": 30
    }
  }
}

Kulcs életciklus#

MűveletLeírás
LétrehozásA Bokko dashboardon, az Integrációk → API kulcsok menüpontban.
VisszavonásAzonnali érvénytelenítés. A visszavont kulccsal küldött kérések 401-et kapnak.
LejáratOpcionális expiresAt mező. Lejárat után a kulcs automatikusan érvénytelen.

Kódpéldák#

cURL#

bash
curl -X GET "https://api.bokko.io/v1/services?salonSlug=pelda-uzlet&locationSlug=belvaros" \
  -H "Authorization: Bearer bk_live_abc123def456"

JavaScript (fetch)#

javascript
const response = await fetch(
  'https://api.bokko.io/v1/services?salonSlug=pelda-uzlet&locationSlug=belvaros',
  {
    headers: {
      'Authorization': 'Bearer bk_live_abc123def456',
      'Content-Type': 'application/json',
    },
  }
);

const data = await response.json();

Python (requests)#

python
import requests

response = requests.get(
    'https://api.bokko.io/v1/services',
    params={'salonSlug': 'pelda-uzlet', 'locationSlug': 'belvaros'},
    headers={
        'Authorization': 'Bearer bk_live_abc123def456',
        'Content-Type': 'application/json',
    },
)

data = response.json()
Tipp
A kódpéldákban használt bk_live_abc123def456 kulcs csak illusztráció. A saját kulcsodat a Bokko dashboard Integrációk → API kulcsok menüpontjában találod.