RESTful API: Geliştiriciler için tam dokümantasyon
Herkese açık API key ile kimlik doğrulama, JSON yanıtlar, 500 req/dk rate limit. cURL, JavaScript ve PHP örnekleriyle her endpoint ayrıntılı açıklandı.
Base URL ve Authentication
Tüm API çağrıları aşağıdaki temel URL üzerinden HTTPS ile yapılır. HTTP istekleri 301 yönlendirmesiyle HTTPS'e aktarılır.
Base URL
https://cerez.io/api/v1
OpenAPI 3.1 Spesifikasyonu
Tüm endpoint'lerin makine-okunur OpenAPI 3.1 tanımı. Postman, Insomnia, kod üreteçleri ve interaktif istemcilerle içe aktarabilirsiniz.
openapi.json indirKimlik Doğrulama: Herkese Açık 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}
Domain için aktif banner konfigürasyonunu döner. SDK her sayfa yüklenmesinde bu endpoint'i çağırır; yanıt sunucu tarafında 5 dakika önbelleğe alınır.
Path Parametresi
| Parametre | Tip | Açıklama |
|---|---|---|
api_key | string | Domain'inize ait herkese açık API key (zorunlu) |
Query Parametreleri (opsiyonel)
| Parametre | Tip | Açıklama |
|---|---|---|
lang | string | tr | en | de (banner dili; varsayılan: domain ayarı) |
preview | boolean | true ise consent cookie'si yazılmaz (Banner Builder canlı test için) |
Örnek İstek
curl https://cerez.io/api/v1/banner/YOUR_API_KEY
Başarılı Yanıt 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
Kullanıcının onay kararını sunucuya kaydeder. KVKK ve GDPR ispat yükümlülüğü için kayıt 90 gün saklanır.
Body Parametreleri (JSON)
| Parametre | Tip | Açıklama |
|---|---|---|
api_key | string | Herkese açık API key (zorunlu) |
visitor_id | string | Anonim ziyaretçi kimliği, en fazla 100 karakter (zorunlu) |
action | string | accept_all | reject_all | partial | update (zorunlu) |
categories_accepted | object | { necessary, analytics, marketing, functional } boolean değerlerle (zorunlu) |
banner_variant | string | A | B (opsiyonel, A/B testi) |
tc_string | string | IAB TCF TC String (opsiyonel) |
device_type | string | desktop | mobile | tablet (opsiyonel) |
external_id | string | Kendi kullanıcı kimliğiniz (opsiyonel) |
user_agent | string | Otomatik alınır; manuel göndermek opsiyoneldir |
Örnek İstek
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": "vis_a1b2c3d4", "action": "partial", "categories_accepted": { "necessary": true, "analytics": true, "marketing": false }, "device_type": "desktop" }'
Yanıt 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
Pageview sayacını artırır ve domain'in etkin olduğunu işaretler. SDK her sayfa açılışında bu endpoint'i bir kez çağırır.
Body Parametreleri
| Parametre | Tip | Açıklama |
|---|---|---|
api_key | string | Herkese açık API key |
session_id | string | Session ID (tekil pageview takibi için) |
page_url | string | Aktif sayfa URL'si |
referrer | string | document.referrer değeri (opsiyonel) |
Yanıt
{ "success": true, "pageview_count_month": 42183, "plan_limit": 100000, "usage_percent": 42.18 }
Tüm SDK Uç Noktaları
Herkese açık API key ile çalışan tüm /api/v1 uç noktaları. Her birinin tam istek ve yanıt şeması için makine-okunur OpenAPI 3.1 tanımına bakın.
Çerez ve Onay
| Metod | Endpoint | Açıklama |
|---|---|---|
| GET | /banner/{api_key} | Banner yapılandırması (dil, tema, kategoriler) |
| POST | /consent/log | Onay kaydı (yedek yol: /consent-log) |
| GET | /consent/state/{api_key} | Sunucu tarafı onay sorgulama (server-side GTM) |
| GET | /consent/group/{api_key} | Çapraz alan adı onay senkronizasyonu |
| POST | /preferences | Evrensel tercih merkezi kaydı |
Erişilebilirlik
| Metod | Endpoint | Açıklama |
|---|---|---|
| GET | /a11y/{api_key} | Erişilebilirlik widget yapılandırması |
| GET | /a11y/{api_key}/ai-labels | AI üretimi alt-text ve aria-label önerileri |
| POST | /a11y/feature-used | Erişilebilirlik özelliği kullanım telemetrisi |
| POST | /a11y/easy-read | AI ile metni sadeleştirme (Kolay Okuma) |
| POST | /a11y/ci-report | CI/CD erişilebilirlik kapısı raporu |
TCF ve Vendor List
| Metod | Endpoint | Açıklama |
|---|---|---|
| GET | /tcf/{api_key} | IAB TCF yapılandırması ve GVL meta verisi |
| GET | /gvl.json | Global Vendor List (24 saat edge cache) |
| GET | /tcf-validator-test | TCF doğrulayıcı test sayfası (HTML) |
Telemetri ve Sistem
| Metod | Endpoint | Açıklama |
|---|---|---|
| POST | /heartbeat | Sayfa görüntüleme ve canlılık sinyali |
| POST | /interactions | Etkileşim telemetrisi (KVKK gereği varsayılan kapalı) |
| POST | /telemetry | Anonim SDK performans metrikleri |
| GET | /meta | Sürüm ve yetenek keşfi (public, salt-okunur) |
Yanıt Zarfları
SDK uç noktaları tarihsel nedenlerle farklı yanıt zarfları kullanır; geriye dönük uyumluluk için bu şekiller korunmaktadır. Ayrıştırırken aşağıdaki tabloya göre okuyun.
| Zarf | Uç noktalar |
|---|---|
{ ... } (zarfsız, doğrudan nesne) | 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": ... } | Tüm Management API uç noktaları (/api/mgmt/v1) |
API Sürümü
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 Spesifikasyonu
18 SDK uç noktasının tamamı makine-okunur biçimde (Postman içe aktarma / istemci üretimi).
Management API (server-to-server)
Sunucu tarafında programatik erişim için ayrı bir API. SDK API (public api_key) banner ve consent içindir; Management API secret_key ile domain verilerinizi (çerez envanteri, consent kayıtları, istatistik, erişilebilirlik skoru) çeker. Salt-okunur.
Base URL
https://cerez.io/api/mgmt/v1
Kimlik Doğrulama: 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.
Uç Noktalar
| Metod | Endpoint | Açıklama |
|---|---|---|
| GET | /domain | Plan, abonelik ve ayar bilgisi |
| GET | /cookies | Çerez kategorileri ve taranan çerezler |
| GET | /stats?period=30 | Onay/red oranı, cihaz dağılımı, günlük seri |
| GET | /consents?from&to&cursor | Consent kayıtları (cursor-paginated, KVKK/GDPR kanıt) |
| GET | /a11y/score | Son WCAG tarama skoru ve ihlal dağılımı |
| GET | /consents/receipt?visitor_id= | Tek ziyaretçi için consent kanıtı (KVKK/GDPR) |
| POST | /scan | Çerez taraması tetikle (senkron, en fazla 3 sayfa) |
| GET | /scan/{id} | Tarama durumu ve sonucu |
| GET | /webhooks | Webhook listesi (secret maskeli) |
| POST | /webhooks | Webhook oluştur (url + events) |
| DELETE | /webhooks/{id} | Webhook sil |
| POST | /webhooks/{id}/test | Test olayı gönder |
| GET | /dsar/export?visitor_id= | İlgili kişi verisini dışa aktar (GDPR m.15) |
| POST | /dsar/erasure | İlgili kişi verisini anonimleştir (iki adımlı) |
Başarılı Yanıt 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
Düşük frekanslı olaylar gerçekleştiğinde kayıtlı adreslerinize imzalı bir POST gönderilir: scan.completed, cookies.new_found, scan.error. Yüksek hacimli consent olayları webhook ile gönderilmez.
Örnek payload ve başlıklar
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 }
}
İmza doğrulama (alıcı taraf)
İmza, zaman damgası ve ham gövdeden üretilir. Doğrularken sabit-zamanlı karşılaştırma kullanın ve zaman damgasının 5 dakikadan eski olmadığını doğrulayın (tekrar saldırısı koruması).
// 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 (İlgili Kişi Talepleri) KVKK m.11 / GDPR m.15-17
Bir ziyaretçinin verisine erişim ve silme taleplerinize yanıt vermenize yardımcı olur. Silme = anonimleştirme: doğrudan tanımlayıcılar (visitor_id, external_id, user_agent, region) kaldırılır; consent ispat delili (action, kategoriler, TCF string, zaman damgaları) KORUNUR. Ziyaretçinin kimliğini siz doğrularsınız.
Anonimleştirme iki adımlıdır (kazara silme koruması)
# 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": "vis_a1b2c3" }' # -> { "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": "vis_a1b2c3", "confirm_token": "..." }' # -> { "data": { "dry_run": false, "affected_count": 3 } }
Önizleme ile uygulama arasında kayıt sayısı değişirse token geçersiz olur (409). Erişim ve silme her başarılı çağrıda denetim günlüğüne yazılır. Bu araç uyum yükümlülüklerinizi yerine getirmenize yardımcı olur; hukuki geçerlilik için nitelikli danışmanınıza başvurun.
OpenAPI 3.1 Spesifikasyonu
Management API'nin makine-okunur OpenAPI 3.1 tanımı (Postman/codegen).
Management API openapi.jsonİstek Sınırları
Her IP adresi için uygulanır. Sınır aşımında yanıt, bekleme süresini gösteren bir header ile birlikte döner.
Retry-After header'ı saniye cinsinden bekleme süresini belirtir. Burst protection için exponential backoff (1s, 2s, 4s, 8s...) önerilir. Enterprise planında özel rate limit artışı için satış ekibiyle görüşün.
HTTP Durum Kodları
| Kod | Açıklama | Tipik Neden |
|---|---|---|
| 200 | OK | İstek başarılı |
| 202 | Accepted | Kabul edildi (telemetri / etkileşim, asenkron) |
| 304 | Not Modified | İçerik değişmedi (ETag; gvl.json) |
| 402 | Payment Required | Aktif abonelik gerekli (ürün kapalı) |
| 403 | Forbidden | IP whitelist dışı veya plan limiti aşıldı |
| 404 | Not Found | API key veya kaynak bulunamadı |
| 422 | Unprocessable | Doğrulama hatası; yanıttaki errors alanını inceleyin |
| 429 | Too Many Requests | Rate limit aşıldı (500/dk) |
| 502 | Bad Gateway | Yukarı akış hizmeti (AI / tarama) geçici hata |
| 503 | Service Unavailable | Hizmet geçici kullanılamıyor; Retry-After |
Hata Yanıt Formatı
{ "success": false, "error": { "code": "INVALID_API_KEY", "message": "API key bulunamadı veya devre dışı", "details": { "field": "api_key" } } }
Olay Bildirimleri Canlı
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
Çerez taraması tamamlandığında tetiklenir (toplam ve yeni çerez sayısı)
cookies.new_found
Taramada yeni çerez bulunduğunda tetiklenir
scan.error
Tarama başarısız olduğunda tetiklenir
Aklınızdaki sorular
SDK ile API arasındaki fark nedir?
Batch endpoint var mı?
IP whitelist nasıl çalışır?
Webhook desteği var mı?
Rate limit aşılırsa ne olur?
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.API'yi test etmek ister misiniz?
14 gün ücretsiz Pro deneme ile API key'inizi alın, kodu kopyalayın ve hemen entegrasyona başlayın.