
# Reemplazar el tema de la organización

`PUT /v1/branding/organizations/{org_id}` · permiso `branding:write`

Reemplaza todo el borrador del tema del ámbito; los tokens ausentes del cuerpo se borran. `{"theme":{}}` vacía el ámbito. `If-Match` lleva el `ETag` de este ámbito (del GET correspondiente), no el del entorno. Cualquier token distinto de `logo`, `light.color.primary` y `dark.color.primary` falla con `422` (`token_not_allowed_in_scope`).

## Solicitud

| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
| `org_id` | ruta | sí | Id `org_…`. |
| `If-Match` | encabezado | sí | El `ETag` del borrador leído por última vez (`"0"` si nunca se escribió). Ausente: `428`; obsoleto: `412`. |
| `theme` | objeto | sí | `BrandingTheme` completo del ámbito. |

## Respuesta

`200 OK` con el borrador del tema del ámbito y su `ETag` (cada ámbito tiene su propia versión).

```json
{
  "theme": {"logo": "logo_acme", "light": {"color": {"primary": "#0a3d91"}}},
  "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. |
| 404 | `not_found` | El id no es un id `org_…` válido. |
| 412 | `precondition_failed` | `If-Match` no coincide con la versión actual del borrador. |
| 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 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; vuelva a intentarlo tras el periodo `Retry-After`. |

## Ejemplo

```bash
curl -X PUT https://api.eu.keenauth.com/v1/branding/organizations/org_01jbexample0000000000000000 \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -H 'If-Match: "1"' \
  -d '{"theme":{"logo":"logo_acme","light":{"color":{"primary":"#0a3d91"}}}}'
```
