Actualizar el tema del entorno
PATCH /v1/branding · permiso branding:write
Modifica el borrador del tema del entorno mediante un parche de fusión JSON (application/merge-patch+json, RFC 7396). Un token establecido en null (o un grupo completo, como "light": null) se borra y vuelve a heredar; "theme": null borra todos los tokens. Solo se escriben los tokens modificados; un parche que no cambia nada mantiene la versión. Los valores se validan al escribir: los colores son #rgb/#rrggbb, font.size_base de 14 a 18, radius.card de 0 a 24, radius.control de 0 a 16, logo_height de 24 a 80. logo, favicon y background_image deben nombrar una imagen de ese tipo subida con Subir un recurso de marca; de lo contrario, el campo falla con asset_not_found. El contraste se comprueba al publicar.
Solicitud
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
If-Match |
encabezado | sí | El ETag del borrador tal como se leyó por última vez ("0" si nunca se escribió). Ausente: 428; obsoleto: 412. |
theme |
object | null | no | Parcial de BrandingTheme; cada campo y grupo puede ser null. |
Respuesta
200 OK con el borrador del entorno y su ETag. theme contiene solo los tokens establecidos; los tokens no establecidos heredan del valor predeterminado de la plataforma.
{
"theme": {"mode": "light", "light": {"color": {"primary": "#0a3d91"}}, "logo_height": 40},
"css": null,
"page_template": null,
"updated_at": "2026-10-05T09:30:00.123456Z"
}
Errores
| HTTP | código | Cuándo |
|---|---|---|
| 400 | unknown_field |
El cuerpo tiene un campo desconocido o no es un objeto JSON. |
| 412 | precondition_failed |
If-Match no coincide con la versión actual del borrador. |
| 415 | unsupported_media_type |
El tipo de contenido no es application/merge-patch+json. |
| 422 | validation_failed |
Un valor de token no es válido (invalid_value, out_of_range, unknown_token); pointer indica el token, p. ej. /theme/light/color/primary. |
| 428 | precondition_required |
Falta el encabezado If-Match. |
| 401 | unauthenticated |
La credencial falta, no es válida o fue revocada. |
| 403 | insufficient_permissions |
La credencial no tiene el permiso necesario. |
| 429 | rate_limited |
Se superó el límite de frecuencia; reintente después del periodo indicado en Retry-After. |
| 503 | service_unavailable |
Una dependencia no está disponible temporalmente; reintente después del periodo indicado en Retry-After. |
Ejemplo
curl -X PATCH https://api.eu.keenauth.com/v1/branding \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Content-Type: application/merge-patch+json" \
-H 'If-Match: "3"' \
-d '{"theme":{"light":{"color":{"primary":"#0a3d91"}},"radius":null}}'