Publicar el borrador de marca
POST /v1/branding:publish · permiso branding:write
Toma una instantánea de todos los borradores (entorno, aplicaciones, organizaciones, textos) y la convierte en la versión activa de las páginas alojadas. Antes de publicar se comprueba el tema efectivo de cada ámbito: tokens obligatorios, rangos de valores y contraste WCAG de cada par de colores. Cualquier problema rechaza toda la publicación con 422 branding_validation_failed y una lista issues[] que indica cada token que cambiar (en el contraste, con el ratio medido, el threshold y la suggestion válida más cercana). Se conservan las últimas 50 versiones. Idempotency-Key es opcional.
Si el borrador tiene CSS personalizado, también se renderiza en las pantallas alojadas antes de publicar nada (una comprobación de renderizado que puede tardar hasta 25 segundos; use un tiempo de espera del cliente de al menos 30 segundos). El CSS que rompe un elemento protegido o añade una infracción de accesibilidad que la página no tiene sin él rechaza la publicación con 422 branding_validation_failed y una lista render_violations[]. Si el borrador cambia durante la comprobación, no se publica nada y recibe 409 conflict; publique de nuevo.
Solicitud
Esta operación no admite campos de ruta, consulta ni cuerpo. El entorno proviene de la credencial.
Respuesta
200 OK con los metadatos de la nueva versión (la instantánea en sí no se devuelve).
{
"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 rechazo de la comprobación de renderizado enumera cada hallazgo: screen (por ejemplo password), locale (en, ar o ja), width (ancho de la ventana gráfica en píxeles CSS, 320 o 1280), rule (protected_no_area, protected_not_visible, protected_transparent, protected_covered, protected_contrast o un ID de regla de axe-core como color-contrast) y target (el nombre del elemento protegido o un selector CSS de axe-core). Los valores CSS nunca se devuelven. Se devuelven como máximo 100 hallazgos; render_violations_truncated es true cuando hay más.
{
"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
}
Errores
| HTTP | código | Cuándo |
|---|---|---|
| 403 | plan_feature_unavailable |
El borrador tiene CSS personalizado o una plantilla de página que el plan no incluye (feature indica cuál). |
| 422 | branding_validation_failed |
El borrador no se puede publicar; consulte issues[]. El CSS personalizado del borrador se vuelve a sanear al publicar; si no lo supera, las infracciones están en la extensión violations[] (consulte PUT /v1/branding/css). Si el CSS personalizado no supera la comprobación de renderizado, los hallazgos están en render_violations[] y render_violations_truncated. |
| 409 | conflict |
El borrador cambió mientras se comprobaba su CSS personalizado; no se publicó nada. Publique de nuevo. |
| 401 | unauthenticated |
La credencial falta, no es válida o se ha revocado. |
| 403 | insufficient_permissions |
La credencial no tiene el permiso necesario. |
| 429 | rate_limited |
Se superó el límite de frecuencia; vuelva a intentarlo tras el periodo Retry-After. |
| 503 | service_unavailable |
Una dependencia no está disponible temporalmente (incluida la comprobación de renderizado de un borrador con CSS personalizado); vuelva a intentarlo tras el periodo Retry-After. |
Ejemplo
curl -X POST https://api.eu.keenauth.com/v1/branding:publish \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)"