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.
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 herunterladenAuthentifizierung: Ö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
/api/v1/banner/{api_key}
Gibt die aktive Banner-Konfiguration für eine Domain zurück. Das SDK ruft diesen Endpoint bei jedem Seitenaufruf auf; die Antwort wird serverseitig 5 Minuten zwischengespeichert.
Pfad-Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
api_key | string | Der öffentliche API Key Ihrer Domain (erforderlich) |
Query-Parameter (optional)
| Parameter | Typ | Beschreibung |
|---|---|---|
lang | string | tr | en | de (Banner-Sprache; Standard: Domain-Einstellung) |
preview | boolean | Bei true wird kein Consent-Cookie geschrieben (für Live-Tests im Banner Builder) |
Beispielanfrage
curl https://cerez.io/api/v1/banner/YOUR_API_KEY
Erfolgreiche Antwort 200 OK
{ "success": true, "data": { "domain": "example.com", "position": "bottom", "theme": "modern", "language": "tr", "texts": { "title": "Çerez Tercihleriniz", "description": "Sitemiz deneyiminizi iyileştirmek için çerez kullanır...", "accept_all": "Tümünü Kabul Et", "reject_all": "Tümünü Reddet" }, "categories": [ { "id": "necessary", "required": true }, { "id": "analytics", "required": false }, { "id": "marketing", "required": false } ], "consent_expiry_days": 180, "products": { "cookie": true, "accessibility": false } } }
/api/v1/consent/log
Speichert die Einwilligungsentscheidung des Nutzers auf dem Server. Der Datensatz wird 90 Tage aufbewahrt, um der Nachweispflicht nach KVKK und GDPR zu genügen.
Body-Parameter (JSON)
| Parameter | Typ | Beschreibung |
|---|---|---|
api_key | string | Öffentlicher API Key (erforderlich) |
visitor_id | string | Anonyme Besucher-ID, bis zu 100 Zeichen (erforderlich) |
action | string | accept_all | reject_all | partial | update (erforderlich) |
categories_accepted | object | { necessary, analytics, marketing, functional } mit booleschen Werten (erforderlich) |
banner_variant | string | A | B (optional, A/B-Test) |
tc_string | string | IAB TCF TC String (optional) |
device_type | string | desktop | mobile | tablet (optional) |
external_id | string | Ihre eigene Benutzer-ID (optional) |
user_agent | string | Wird automatisch erfasst; manuelles Senden ist optional |
Beispielanfrage
curl -X POST https://cerez.io/api/v1/consent/log \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{ "api_key": "YOUR_API_KEY", "visitor_id": "3f2b8c1e-9d4a-4b7e-a1c2-0e5f6a7b8c9d", "action": "partial", "categories_accepted": { "necessary": true, "analytics": true, "marketing": false }, "device_type": "desktop" }'
Antwort 200 OK
{ "status": "ok" }
Not: Doğrulama hatalarında 422 dönmesi için isteğe Accept: application/json başlığı ekleyin.
/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
| Parameter | Typ | Beschreibung |
|---|---|---|
api_key | string | Öffentlicher API Key |
session_id | string | Session-ID (für eindeutiges Pageview-Tracking) |
page_url | string | Aktuelle Seiten-URL |
referrer | string | document.referrer-Wert (optional) |
Antwort
{ "success": true, "pageview_count_month": 42183, "plan_limit": 100000, "usage_percent": 42.18 }
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
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /banner/{api_key} | Banner-Konfiguration (Sprache, Theme, Kategorien) |
| POST | /consent/log | Einwilligungsprotokollierung (Fallback-Pfad: /consent-log) |
| GET | /consent/state/{api_key} | Serverseitige Einwilligungsabfrage (serverseitiges GTM) |
| GET | /consent/group/{api_key} | Domainübergreifende Einwilligungssynchronisierung |
| POST | /preferences | Speichern im universellen Präferenzzentrum |
Barrierefreiheit
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /a11y/{api_key} | Konfiguration des Barrierefreiheits-Widgets |
| POST | /a11y/feature-used | Nutzungstelemetrie der Barrierefreiheitsfunktionen |
| POST | /a11y/easy-read | KI-Textvereinfachung (Leichte Lesbarkeit) |
| POST | /a11y/ci-report | CI/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.
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /tcf/{api_key} | IAB-TCF-Konfiguration und GVL-Metadaten |
| GET | /gvl.json | Global Vendor List (24-Stunden-Edge-Cache) |
Telemetrie und System
| Methode | Endpoint | Beschreibung |
|---|---|---|
| POST | /heartbeat | Seitenaufruf- und Lebenssignal |
| POST | /interactions | Interaktionstelemetrie (gemäß KVKK standardmäßig aus) |
| POST | /telemetry | Anonyme SDK-Leistungsmetriken |
| GET | /meta | Versions- 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ülle | Endpunkte |
|---|---|
{ ... } (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 (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"
{ "data": ..., "meta": ... } zarfında döner. Hatalar RFC 9457 application/problem+json ile döner. Rate limit: 60 istek/dakika.
Endpunkte
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /domain | Tarif, Abonnement und Einstellungen |
| GET | /cookies | Cookie-Kategorien und gescannte Cookies |
| GET | /stats?period=30 | Zustimmungs-/Ablehnungsrate, Geräteverteilung, Tagesreihe |
| GET | /consents?from&to&cursor | Einwilligungsdatensätze (cursor-paginiert, KVKK/DSGVO-Nachweis) |
| GET | /a11y/score | Letzter WCAG-Scan-Score und Verstoßverteilung |
| GET | /consents/receipt?visitor_id= | Einwilligungsnachweis für einen einzelnen Besucher (KVKK/DSGVO) |
| POST | /scan | Cookie-Scan auslösen (synchron, bis zu 3 Seiten) |
| GET | /scan/{id} | Scan-Status und -Ergebnis |
| GET | /scan/{id}/diff | Unterschied zum vorherigen vollständigen Scan (hinzugefügt, entfernt, geändert) |
| GET | /webhooks | Webhook-Liste (Secret maskiert) |
| POST | /webhooks | Webhook erstellen (url + events) |
| DELETE | /webhooks/{id} | Webhook löschen |
| POST | /webhooks/{id}/test | Testereignis senden |
| GET | /dsar/export?visitor_id= | Betroffenendaten exportieren (DSGVO Art. 15) |
| POST | /dsar/erasure | Betroffenendaten 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.jsonAnfragelimits
Wird pro IP-Adresse angewendet. Bei Überschreitung des Limits enthält die Antwort einen Header mit der Wartezeit.
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.
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" } } }
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
Ihre offenen Fragen
Was ist der Unterschied zwischen SDK und API?
Gibt es einen Batch-Endpoint?
Wie funktioniert die IP-Whitelist?
Gibt es Webhook-Unterstützung?
Was passiert, wenn das Rate Limit überschritten wird?
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.