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)"