API-REFERENZ

RESTful API: Geliştiriciler için tam dokümantasyon

Authentifizierung mit öffentlichem API-Key, JSON-Antworten, Rate-Limit 500 Anfragen/Min. Jeder Endpunkt ist mit cURL-, JavaScript- und PHP-Beispielen ausführlich dokumentiert.

Erste Schritte

Base URL und Authentication

Alle API-Aufrufe erfolgen über HTTPS über die untenstehende Base URL. HTTP-Anfragen werden per 301-Weiterleitung auf HTTPS umgeleitet.

Base URL

https://cerez.io/api/v1

OpenAPI-3.1-Spezifikation

Maschinenlesbare OpenAPI-3.1-Definition aller Endpunkte. Importierbar in Postman, Insomnia, Codegeneratoren und interaktive Clients.

openapi.json herunterladen

Authentifizierung: Öffentlicher API-Key

SDK API herkese açık (public) API key ile çalışır: GET isteklerinde URL yolunda, POST isteklerinde istek gövdesinde gönderilir. Bu anahtar tarayıcıdaki SDK tarafından kullanılır, istemci tarafında görünür olması normaldir. Authorization: Bearer header kullanılmaz. API key'inizi admin panel > Kurulum sayfasından alabilirsiniz.

curl https://cerez.io/api/v1/banner/YOUR_API_KEY
Sicherheit: Der Secret-Key wird bei diesen API-Aufrufen nicht verwendet und niemals clientseitig eingesetzt; er dient nur der Kontoverwaltung im Admin-Panel. Zur Zugriffsbeschränkung können Sie eine domainbezogene IP-Positivliste (CIDR) definieren.
POST

/api/v1/heartbeat

Erhöht den Pageview-Zähler und markiert die Domain als aktiv. Das SDK ruft diesen Endpoint einmal pro Seitenaufruf auf.

Body-Parameter

ParameterTypBeschreibung
api_keystringÖffentlicher API Key
session_idstringSession-ID (für eindeutiges Pageview-Tracking)
page_urlstringAktuelle Seiten-URL
referrerstringdocument.referrer-Wert (optional)

Antwort

{
  "success": true,
  "pageview_count_month": 42183,
  "plan_limit": 100000,
  "usage_percent": 42.18
}
SDK-API

Alle SDK-Endpunkte

Alle /api/v1-Endpunkte, die mit dem öffentlichen API-Key arbeiten. Das vollständige Anfrage- und Antwortschema jedes Endpunkts finden Sie in der maschinenlesbaren OpenAPI-3.1-Definition.

Cookies und Einwilligung

MethodeEndpointBeschreibung
GET/banner/{api_key}Banner-Konfiguration (Sprache, Theme, Kategorien)
POST/consent/logEinwilligungsprotokollierung (Fallback-Pfad: /consent-log)
GET/consent/state/{api_key}Serverseitige Einwilligungsabfrage (serverseitiges GTM)
GET/consent/group/{api_key}Domainübergreifende Einwilligungssynchronisierung
POST/preferencesSpeichern im universellen Präferenzzentrum

Barrierefreiheit

MethodeEndpointBeschreibung
GET/a11y/{api_key}Konfiguration des Barrierefreiheits-Widgets
POST/a11y/feature-usedNutzungstelemetrie der Barrierefreiheitsfunktionen
POST/a11y/easy-readKI-Textvereinfachung (Leichte Lesbarkeit)
POST/a11y/ci-reportCI/CD-Barrierefreiheits-Gate-Bericht

TCF und Vendor List

IAB TCF ist für Kunden derzeit geschlossen: Der Endpunkt /tcf liefert enabled: false und es wird kein TC-String erzeugt. Für die IAB-Registrierung gibt es noch keinen Zeitplan.

MethodeEndpointBeschreibung
GET/tcf/{api_key}IAB-TCF-Konfiguration und GVL-Metadaten
GET/gvl.jsonGlobal Vendor List (24-Stunden-Edge-Cache)

Telemetrie und System

MethodeEndpointBeschreibung
POST/heartbeatSeitenaufruf- und Lebenssignal
POST/interactionsInteraktionstelemetrie (gemäß KVKK standardmäßig aus)
POST/telemetryAnonyme SDK-Leistungsmetriken
GET/metaVersions- und Funktionserkennung (öffentlich, schreibgeschützt)

Antwort-Hüllen

Aus historischen Gründen verwenden SDK-Endpunkte unterschiedliche Antwort-Hüllen; diese Formen bleiben aus Gründen der Abwärtskompatibilität erhalten. Werten Sie Antworten gemäß der folgenden Tabelle aus.

HülleEndpunkte
{ ... } (ohne Hülle, direktes Objekt)GET /banner, GET /a11y, GET /tcf, GET /gvl.json
{ "status": "ok" }POST /consent/log, POST /heartbeat, POST /a11y/feature-used
{ "success": true }POST /preferences, POST /a11y/ci-report
{ "ok": true }POST /telemetry
{ "found": ... }GET /consent/state, GET /consent/group
{ "data": ..., "meta": ... }Alle Management-API-Endpunkte (/api/mgmt/v1)

API-Version

Güncel API ve SDK sürümleri ile TCF/GVL meta verisini çalışma zamanında GET /api/v1/meta uç noktasından alabilirsiniz (public, salt-okunur).

GET /api/v1/meta

{
  "api_version": "1.0.0",
  "sdk_version": "2.6.2",
  "products": ["cookie", "accessibility"],
  "tcf": { "gvl_version": 123, "policy_version": 5 },
  "docs": "https://cerez.io/kaynaklar/api-referans"
}

OpenAPI-3.1-Spezifikation

Alle 18 SDK-Endpunkte in maschinenlesbarer Form (Postman-Import / Client-Generierung).

Management-API

Management-API (Server-zu-Server)

Eine separate API für programmatischen serverseitigen Zugriff. Die SDK-API (öffentlicher api_key) dient Banner und Einwilligung; die Management-API liest mit dem secret_key Ihre Domain-Daten (Cookie-Inventar, Einwilligungsdatensätze, Statistik, Barrierefreiheits-Score) und bietet außerdem schreibende Endpunkte für Webhooks, Betroffenenanfragen und das Starten von Scans.

Base URL

https://cerez.io/api/mgmt/v1

Authentifizierung: Bearer secret_key

Secret key'inizi Authorization: Bearer header'ında gönderin. Secret key'i admin panel > Kurulum > API'den alın ve YALNIZCA güvenli sunucu ortamında saklayın; istemci tarafına asla koymayın.

curl https://cerez.io/api/mgmt/v1/domain \
  -H "Authorization: Bearer YOUR_SECRET_KEY"
Tüm başarılı yanıtlar { "data": ..., "meta": ... } zarfında döner. Hatalar RFC 9457 application/problem+json ile döner. Rate limit: 60 istek/dakika.

Endpunkte

MethodeEndpointBeschreibung
GET/domainTarif, Abonnement und Einstellungen
GET/cookiesCookie-Kategorien und gescannte Cookies
GET/stats?period=30Zustimmungs-/Ablehnungsrate, Geräteverteilung, Tagesreihe
GET/consents?from&to&cursorEinwilligungsdatensätze (cursor-paginiert, KVKK/DSGVO-Nachweis)
GET/a11y/scoreLetzter WCAG-Scan-Score und Verstoßverteilung
GET/consents/receipt?visitor_id=Einwilligungsnachweis für einen einzelnen Besucher (KVKK/DSGVO)
POST/scanCookie-Scan auslösen (synchron, bis zu 3 Seiten)
GET/scan/{id}Scan-Status und -Ergebnis
GET/scan/{id}/diffUnterschied zum vorherigen vollständigen Scan (hinzugefügt, entfernt, geändert)
GET/webhooksWebhook-Liste (Secret maskiert)
POST/webhooksWebhook erstellen (url + events)
DELETE/webhooks/{id}Webhook löschen
POST/webhooks/{id}/testTestereignis senden
GET/dsar/export?visitor_id=Betroffenendaten exportieren (DSGVO Art. 15)
POST/dsar/erasureBetroffenendaten anonymisieren (zweistufig)

Erfolgreiche Antwort 200 OK

GET /api/mgmt/v1/domain

{
  "data": {
    "id": 42,
    "site_name": "Örnek",
    "domain_url": "https://example.com",
    "products": ["cookie", "accessibility"],
    "subscriptions": [
      { "product": "cookie", "plan_slug": "cookie_pro", "status": "active" }
    ],
    "settings": { "kvkk_enabled": true, "consent_expiry_days": 180 }
  },
  "meta": { "api": "mgmt/v1", "generated_at": "2026-06-30T12:00:00+00:00" }
}

Webhooks HMAC-SHA256

Bei niederfrequenten Ereignissen wird ein signierter POST an Ihre registrierten Endpunkte gesendet: scan.completed, cookies.new_found, scan.error. Einwilligungsereignisse mit hohem Volumen werden nicht per Webhook gesendet.

Beispiel-Payload und -Header

POST https://ornek.com/webhooks/cerez
X-Cerez-Event: scan.completed
X-Cerez-Timestamp: 1782475200
X-Cerez-Signature: sha256=3a7b...e0

{
  "event": "scan.completed",
  "created_at": "2026-06-30T12:00:00+00:00",
  "domain_id": 42,
  "data": { "total_cookies": 31, "new_cookies": 2 }
}

Signaturprüfung (Empfängerseite)

Die Signatur wird aus dem Zeitstempel und dem Rohtext abgeleitet. Prüfen Sie mit einem zeitkonstanten Vergleich und stellen Sie sicher, dass der Zeitstempel nicht älter als 5 Minuten ist (Replay-Schutz).

// Node.js
const crypto = require('crypto');
const expected = 'sha256=' + crypto
  .createHmac('sha256', WEBHOOK_SECRET)
  .update(timestamp + '.' + rawBody)
  .digest('hex');
const ok = crypto.timingSafeEqual(
  Buffer.from(expected), Buffer.from(signatureHeader)
);
// PHP
$expected = 'sha256=' . hash_hmac('sha256', $timestamp . '.' . $rawBody, $secret);
$ok = hash_equals($expected, $signatureHeader);

DSAR (Betroffenenanfragen) KVKK m.11 / GDPR m.15-17

Hilft Ihnen, auf Auskunfts- und Löschanfragen zu den Daten eines Besuchers zu reagieren. Löschung = Anonymisierung: direkte Identifikatoren (visitor_id, external_id, user_agent, region) werden entfernt; der Einwilligungsnachweis (Aktion, Kategorien, TCF-String, Zeitstempel) bleibt ERHALTEN. Sie überprüfen die Identität des Besuchers.

Die Anonymisierung erfolgt zweistufig (Schutz vor versehentlicher Löschung)

# 1. Önizleme (confirm_token yok), hiçbir şey değişmez
curl -X POST https://cerez.io/api/mgmt/v1/dsar/erasure \
  -H "Authorization: Bearer YOUR_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "visitor_id": "3f2b8c1e-9d4a-4b7e-a1c2-0e5f6a7b8c9d" }'
# -> { "data": { "dry_run": true, "matched_count": 3, "confirm_token": "..." } }

# 2. Uygula (önizlemeden gelen confirm_token ile)
curl -X POST https://cerez.io/api/mgmt/v1/dsar/erasure \
  -H "Authorization: Bearer YOUR_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "visitor_id": "3f2b8c1e-9d4a-4b7e-a1c2-0e5f6a7b8c9d", "confirm_token": "..." }'
# -> { "data": { "dry_run": false, "affected_count": 3 } }

Ändert sich die Datensatzanzahl zwischen Vorschau und Anwendung, wird das Token ungültig (409). Zugriff und Löschung werden bei jedem erfolgreichen Aufruf im Audit-Protokoll erfasst. Dieses Werkzeug hilft Ihnen, Ihre Compliance-Pflichten zu erfüllen; wenden Sie sich für die rechtliche Gültigkeit an qualifizierten Rechtsbeistand.

OpenAPI-3.1-Spezifikation

Maschinenlesbare OpenAPI-3.1-Definition der Management-API (Postman/Codegen).

Management-API openapi.json
Rate Limiting

Anfragelimits

Wird pro IP-Adresse angewendet. Bei Überschreitung des Limits enthält die Antwort einen Header mit der Wartezeit.

500
Anfragen / Minute / IP
5 dk
Banner-Cache-Dauer
90 gün
API-Log-Aufbewahrungsdauer
Limit überschritten: Es wird ein 429 Too Many Requests zurückgegeben. Der Retry-After-Header gibt die Wartezeit in Sekunden an. Für Burst Protection wird Exponential Backoff (1s, 2s, 4s, 8s...) empfohlen. Für eine individuelle Rate-Limit-Erhöhung im Enterprise-Plan wenden Sie sich an das Vertriebsteam.
Fehlercodes

HTTP-Statuscodes

Code Beschreibung Typische Ursache
200 OK Anfrage erfolgreich
202 Accepted Akzeptiert (Telemetrie / Interaktion, asynchron)
304 Not Modified Nicht geändert (ETag; gvl.json)
402 Payment Required Aktives Abonnement erforderlich (Produkt deaktiviert)
403 Forbidden Außerhalb der IP-Whitelist oder Plan-Limit überschritten
404 Not Found API Key oder Ressource nicht gefunden
422 Unprocessable Validierungsfehler; prüfen Sie das errors-Feld in der Antwort
429 Too Many Requests Rate Limit überschritten (500/min)
502 Bad Gateway Upstream-Dienst (KI / Scan) vorübergehender Fehler
503 Service Unavailable Dienst vorübergehend nicht verfügbar; Retry-After

Fehlerantwort-Format

{
  "success": false,
  "error": {
    "code": "INVALID_API_KEY",
    "message": "API key bulunamadı veya devre dışı",
    "details": { "field": "api_key" }
  }
}
Webhook

Ereignisbenachrichtigungen Live

Webhook desteği Management API üzerinden kullanılabilir. Düşük frekanslı olaylarda kayıtlı adresinize HMAC-SHA256 ile imzalı bir POST gönderilir. Kurulum ve imza doğrulama için Management API bölümüne bakın.

scan.completed

Wird ausgelöst, wenn ein Cookie-Scan abgeschlossen ist (Gesamt- und neue Cookie-Anzahl)

cookies.new_found

Wird ausgelöst, wenn beim Scan neue Cookies gefunden werden

scan.error

Wird ausgelöst, wenn ein Scan fehlschlägt

Häufige Fragen

Ihre offenen Fragen

Was ist der Unterschied zwischen SDK und API?
Kurze Antwort: Das SDK läuft im Browser und rendert das Banner automatisch. Die API ist für die Server-zu-Server-Integration konzipiert; sie wird in Szenarien wie eigenen Dashboards, mobilen Apps oder serverseitigem Consent-Logging eingesetzt. Die meisten Kunden nutzen nur das SDK.
Gibt es einen Batch-Endpoint?
Kurz gesagt: Einen Batch-Endpunkt gibt es noch nicht. Der Endpunkt POST /api/v1/consent/log verarbeitet einen einzelnen Aufruf. Batch-Unterstützung steht auf der Roadmap.
Wie funktioniert die IP-Whitelist?
Kurze Antwort: Aktivieren Sie den IP-Restriction-Toggle unter Admin-Panel > Installation und tragen Sie die erlaubten IPs ein (CIDR-Notation wird unterstützt: 192.168.1.0/24). Anfragen außerhalb der Whitelist erhalten ein 403 Forbidden. SDK-Anfragen aus dem Browser werden immer akzeptiert.
Gibt es Webhook-Unterstützung?
Kurze Antwort: Ja. Webhooks sind über die Management-API verfügbar. Ereignisse werden als mit HMAC-SHA256 signierte POST-Anfragen gesendet; unterstützte Ereignistypen sind scan.completed, cookies.new_found und scan.error. Zur Einrichtung siehe den Abschnitt Management-API.
Was passiert, wenn das Rate Limit überschritten wird?
Kısa yanıt: 429 Too Many Requests döner. Retry-After header'ı kaç saniye beklemeniz gerektiğini belirtir. Burst protection için exponential backoff (1s, 2s, 4s, 8s...) önerilir. Enterprise planında özel rate limit yükseltilebilir.

Möchten Sie die API testen?

Holen Sie sich Ihren API-Schlüssel mit der 14-tägigen kostenlosen Testphase, kopieren Sie den Code und beginnen Sie mit der Integration.