Publier le brouillon d'image de marque
POST /v1/branding:publish · permission branding:write
Prend un instantané de tous les brouillons (environnement, applications, organisations, textes) et en fait la version en ligne des pages hébergées. Avant publication, le thème effectif de chaque portée est vérifié : jetons obligatoires, plages de valeurs et contraste WCAG de chaque paire de couleurs. Tout problème rejette toute la publication avec 422 branding_validation_failed et une liste issues[] qui nomme chaque jeton à modifier (avec le ratio mesuré, le threshold et une suggestion conforme la plus proche pour le contraste). Les 50 dernières versions sont conservées. Idempotency-Key est facultatif.
Lorsque le brouillon contient du CSS personnalisé, il est aussi rendu sur les écrans hébergés avant toute publication (une vérification de rendu qui peut durer jusqu'à 25 secondes ; utilisez un délai client d'au moins 30 secondes). Le CSS qui casse un élément protégé ou ajoute une violation d'accessibilité que la page n'a pas sans lui rejette la publication avec 422 branding_validation_failed et une liste render_violations[]. Si le brouillon change pendant la vérification, rien n'est publié et vous recevez 409 conflict ; publiez à nouveau.
Requête
Cette opération ne prend aucun champ de chemin, de requête ou de corps. L'environnement provient de l'identifiant.
Réponse
200 OK avec les métadonnées de la nouvelle version (l'instantané lui-même n'est pas renvoyé).
{
"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"}
]
}
Un rejet de la vérification de rendu liste chaque constat : screen (par exemple password), locale (en, ar ou ja), width (largeur de la fenêtre en pixels CSS, 320 ou 1280), rule (protected_no_area, protected_not_visible, protected_transparent, protected_covered, protected_contrast, ou un identifiant de règle axe-core tel que color-contrast) et target (le nom de l'élément protégé ou un sélecteur CSS axe-core). Les valeurs CSS ne sont jamais renvoyées. Au plus 100 constats sont renvoyés ; render_violations_truncated vaut true s'il y en avait davantage.
{
"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
}
Erreurs
| HTTP | code | Quand |
|---|---|---|
| 403 | plan_feature_unavailable |
Le brouillon contient du CSS personnalisé ou un modèle de page que le plan n'inclut pas (feature indique lequel). |
| 422 | branding_validation_failed |
Le brouillon ne peut pas être publié ; voir issues[]. Le CSS personnalisé du brouillon est assaini à nouveau à la publication ; en cas d'échec, les violations figurent dans l'extension violations[] (voir PUT /v1/branding/css). Si le CSS personnalisé échoue à la vérification de rendu, les constats figurent dans render_violations[] et render_violations_truncated. |
| 409 | conflict |
Le brouillon a changé pendant la vérification de son CSS personnalisé ; rien n'a été publié. Publiez à nouveau. |
| 401 | unauthenticated |
L'identifiant est absent, invalide ou révoqué. |
| 403 | insufficient_permissions |
L'identifiant n'a pas la permission requise. |
| 429 | rate_limited |
La limite de débit est dépassée ; réessayez après le délai Retry-After. |
| 503 | service_unavailable |
Une dépendance est temporairement indisponible (y compris la vérification de rendu d'un brouillon avec CSS personnalisé) ; réessayez après le délai Retry-After. |
Exemple
curl -X POST https://api.eu.keenauth.com/v1/branding:publish \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)"