
# Aggiorna il tema dell'ambiente

`PATCH /v1/branding` · autorizzazione `branding:write`

Modifica la bozza del tema dell'ambiente con un merge patch JSON (`application/merge-patch+json`, RFC 7396). Un token impostato a `null` (o un intero gruppo come `"light": null`) viene cancellato e torna a ereditare; `"theme": null` cancella ogni token. Vengono scritti solo i token modificati; una patch che non cambia nulla mantiene la versione. I valori vengono verificati in scrittura: i colori sono `#rgb`/`#rrggbb`, `font.size_base` 14-18, `radius.card` 0-24, `radius.control` 0-16, `logo_height` 24-80. `logo`, `favicon` e `background_image` devono indicare un'immagine di quel tipo caricata con [Carica una risorsa di branding](/docs/api/management/branding/upload-asset); altrimenti il campo fallisce con `asset_not_found`. Il contrasto viene verificato alla pubblicazione.

## Richiesta

| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| `If-Match` | header | sì | L'`ETag` della bozza come l'ultima letta (`"0"` se mai scritta). Mancante: `428`; obsoleto: `412`. |
| `theme` | object \| null | no | `BrandingTheme` parziale; ogni campo e gruppo può essere `null`. |

## Risposta

`200 OK` con la bozza dell'ambiente e il suo `ETag`. `theme` contiene solo i token impostati; i token non impostati ereditano dal default della piattaforma.

```json
{
  "theme": {"mode": "light", "light": {"color": {"primary": "#0a3d91"}}, "logo_height": 40},
  "css": null,
  "page_template": null,
  "updated_at": "2026-10-05T09:30:00.123456Z"
}
```

## Errori

| HTTP | code | Quando |
|---|---|---|
| 400 | `unknown_field` | Il corpo contiene un campo sconosciuto oppure non è un oggetto JSON. |
| 412 | `precondition_failed` | `If-Match` non corrisponde alla versione attuale della bozza. |
| 415 | `unsupported_media_type` | Il content type non è `application/merge-patch+json`. |
| 422 | `validation_failed` | Un valore di token non è valido (`invalid_value`, `out_of_range`, `unknown_token`); `pointer` indica il token, per esempio `/theme/light/color/primary`. |
| 428 | `precondition_required` | L'header `If-Match` manca. |
| 401 | `unauthenticated` | La credenziale manca, non è valida o è stata revocata. |
| 403 | `insufficient_permissions` | La credenziale non ha l'autorizzazione richiesta. |
| 429 | `rate_limited` | È stato superato il limite di richieste; riprova dopo il periodo indicato in `Retry-After`. |
| 503 | `service_unavailable` | Una dipendenza è temporaneamente non disponibile; riprova dopo il periodo indicato in `Retry-After`. |

## Esempio

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