Markalama taslağını yayımla
POST /v1/branding:publish · izin branding:write
Bütün taslakların (ortam, uygulamalar, organizasyonlar, metinler) anlık görüntüsünü alır ve barındırılan sayfalar için canlı sürüm yapar. Yayından önce her kapsamın etkin teması denetlenir: zorunlu jetonlar, değer aralıkları ve her renk çiftinin WCAG kontrastı. Herhangi bir sorun yayının tamamını 422 branding_validation_failed ile reddeder; issues[] listesi değişmesi gereken her jetonu gösterir (kontrastta ölçülen ratio, threshold ve eşiği sağlayan en yakın suggestion). Son 50 sürüm saklanır. Idempotency-Key isteğe bağlıdır.
Taslakta özel CSS varsa yayından önce barındırılan ekranlarda çizilerek de denetlenir (25 saniyeye kadar sürebilen çizim denetimi; istemci zaman aşımını en az 30 saniye tutun). Korumalı bir öğeyi bozan ya da sayfada CSS'siz olmayan bir erişilebilirlik ihlali getiren CSS yayını 422 branding_validation_failed ve render_violations[] listesiyle reddeder. Taslak denetim sırasında değişirse hiçbir şey yayımlanmaz ve 409 conflict döner; yeniden yayımlayın.
İstek
Bu işlem yol, sorgu ya da gövde alanı almaz. Ortam kimlik bilgisinden gelir.
Yanıt
200 OK; yeni sürümün üst verisi (anlık görüntünün kendisi dönmez).
{
"version": 4,
"snapshot_sha256": "3f1c…",
"source": "publish",
"rolled_back_from": null,
"actor_type": "api_key",
"actor_id": "key_01jb…",
"published_at": "2026-10-05T09:31:00Z"
}
{
"type": "https://docs.keenauth.com/problems/branding_validation_failed",
"status": 422,
"code": "branding_validation_failed",
"issues": [
{"scope_type": "environment", "code": "brand_contrast_insufficient", "field": "light.color.primary_contrast",
"variant": "light", "pair": "primary_contrast_on_primary", "ratio": 2.1, "threshold": 4.5, "suggestion": "#ffffff"}
]
}
Çizim denetimi reddi her bulguyu listeler: screen (ör. password), locale (en, ar ya da ja), width (CSS pikseli olarak görünüm genişliği, 320 ya da 1280), rule (protected_no_area, protected_not_visible, protected_transparent, protected_covered, protected_contrast ya da color-contrast gibi bir axe-core kural kimliği) ve target (korumalı öğenin adı ya da axe-core CSS seçicisi). CSS değeri yanıtta yer almaz. En çok 100 bulgu döner; daha fazlası varsa render_violations_truncated true olur.
{
"type": "https://docs.keenauth.com/errors/branding_validation_failed",
"status": 422,
"code": "branding_validation_failed",
"render_violations": [
{"screen": "recovery", "locale": "ar", "width": 320, "rule": "protected_covered", "target": "recovery_codes_hint"}
],
"render_violations_truncated": false
}
Hatalar
| HTTP | code | Ne zaman |
|---|---|---|
| 403 | plan_feature_unavailable |
Taslakta özel CSS ya da sayfa şablonu var ve plan bunu içermiyor (feature hangisi olduğunu söyler). |
| 422 | branding_validation_failed |
Taslak yayımlanamaz; issues[] listesine bakın. Taslaktaki özel CSS yayında yeniden arındırılır; geçmezse ihlaller violations[] uzantısındadır (bkz. PUT /v1/branding/css). Özel CSS çizim denetiminden geçmezse bulgular render_violations[] ve render_violations_truncated uzantılarındadır. |
| 409 | conflict |
Özel CSS denetlenirken taslak değişti; hiçbir şey yayımlanmadı. Yeniden yayımlayın. |
| 401 | unauthenticated |
Kimlik bilgisi yok, geçersiz ya da iptal edilmiş. |
| 403 | insufficient_permissions |
Kimlik bilgisinde gerekli izin yok. |
| 429 | rate_limited |
Hız sınırı aşıldı; Retry-After süresinden sonra yeniden deneyin. |
| 503 | service_unavailable |
Bir bağımlılık (özel CSS'li taslağın çizim denetimi dahil) geçici olarak kullanılamıyor; Retry-After süresinden sonra yeniden deneyin. |
Örnek
curl -X POST https://api.eu.keenauth.com/v1/branding:publish \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)"