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}}'