REST · JSON · v1

BKG.dk API

Se og ændr bookinger, kunder og salonens udbud fra dine egne systemer. API-nøgler oprettes af salonen under Integrationer; apps forbindes via en godkendelsesskærm.

Vejledninger

Kom i gang

  1. I admin: Integrationer → API og webhooks → opret en nøgle med den adgang, du har brug for.
  2. Send den med hver forespørgsel i headeren X-API-Key.
  3. Hvert svar er {"success", "data", "error", "code", "meta"}; lister bladres med meta.next_cursor.

Webhooks

Signerede POST-kald, når bookinger, kunder, betalinger, anmeldelser eller gavekort ændres. Tjek X-BKG-Signature-V2 (HMAC-SHA256 af "timestamp.body").

Apps

Partner-apps bruger OAuth 2 med PKCE: /oauth/authorize → /api/v1/oauth/token. Tokens er kortlivede, og salonen kan tilbagekalde dem.

v1

Versionering: v1 vokser kun — felter og endpoints tilføjes, de fjernes eller ændres aldrig. Alt, der bryder, får en ny version og mindst 12 måneders varsel.

X-BKG-Signature-V2

import hashlib, hmac
from datetime import datetime, timezone

def verify(raw_body: bytes, headers, secret: str, max_age_s: int = 300) -> bool:
    ts = headers["X-BKG-Timestamp"]
    if abs((datetime.now(timezone.utc) - datetime.fromisoformat(ts)).total_seconds()) > max_age_s:
        return False
    expected = hmac.new(secret.encode(), f"{ts}.".encode() + raw_body, hashlib.sha256).hexdigest()
    sent = [headers.get("X-BKG-Signature-V2"), headers.get("X-BKG-Signature-V2-Previous")]
    return any(s and hmac.compare_digest(expected, s) for s in sent)
const crypto = require("crypto");

function verify(rawBody, headers, secret, maxAgeS = 300) {
  const ts = headers["x-bkg-timestamp"];
  if (Math.abs(Date.now() - Date.parse(ts)) / 1000 > maxAgeS) return false;
  const expected = crypto.createHmac("sha256", secret).update(`${ts}.${rawBody}`).digest("hex");
  return [headers["x-bkg-signature-v2"], headers["x-bkg-signature-v2-previous"]]
    .filter(Boolean)
    .some((s) => s.length === expected.length &&
      crypto.timingSafeEqual(Buffer.from(s), Buffer.from(expected)));
}
function bkg_verify(string $rawBody, array $headers, string $secret, int $maxAge = 300): bool {
    $ts = $headers['X-BKG-Timestamp'] ?? '';
    if (abs(time() - strtotime($ts)) > $maxAge) return false;
    $expected = hash_hmac('sha256', $ts . '.' . $rawBody, $secret);
    foreach (['X-BKG-Signature-V2', 'X-BKG-Signature-V2-Previous'] as $h) {
        if (!empty($headers[$h]) && hash_equals($expected, $headers[$h])) return true;
    }
    return false;
}

Henter referencen…

Referencen kunne ikke hentes.