
# 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](/docs/api/management/branding/upload-asset); 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.

```json
{
  "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

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