
# Mettre à jour le thème de l'environnement

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

Modifie le brouillon du thème de l'environnement à l'aide d'un merge patch JSON (`application/merge-patch+json`, RFC 7396). Un jeton défini à `null` (ou un groupe entier, tel que `"light": null`) est effacé et hérite à nouveau de la valeur par défaut ; `"theme": null` efface tous les jetons. Seuls les jetons modifiés sont écrits ; un patch qui ne modifie rien conserve la version. Les valeurs sont vérifiées à l'écriture : les couleurs sont `#rgb`/`#rrggbb`, `font.size_base` entre 14 et 18, `radius.card` entre 0 et 24, `radius.control` entre 0 et 16, `logo_height` entre 24 et 80. `logo`, `favicon` et `background_image` doivent désigner une image de ce type importée avec [Importer un actif de marque](/docs/api/management/branding/upload-asset) ; sinon le champ échoue avec `asset_not_found`. Le contraste est vérifié à la publication.

## Requête

| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| `If-Match` | en-tête | oui | L'`ETag` du brouillon tel que lu en dernier (`"0"` s'il n'a jamais été écrit). Absent : `428` ; obsolète : `412`. |
| `theme` | objet \| null | non | `BrandingTheme` partiel ; chaque champ et chaque groupe peut valoir `null`. |

## Réponse

`200 OK` avec le brouillon de l'environnement et son `ETag`. `theme` ne contient que les jetons définis ; les jetons non définis héritent de la valeur par défaut de la plateforme.

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

## Erreurs

| HTTP | code | Quand |
|---|---|---|
| 400 | `unknown_field` | Le corps contient un champ inconnu ou n'est pas un objet JSON. |
| 412 | `precondition_failed` | `If-Match` ne correspond pas à la version actuelle du brouillon. |
| 415 | `unsupported_media_type` | Le type de contenu n'est pas `application/merge-patch+json`. |
| 422 | `validation_failed` | La valeur d'un jeton est invalide (`invalid_value`, `out_of_range`, `unknown_token`) ; `pointer` désigne le jeton, par exemple `/theme/light/color/primary`. |
| 428 | `precondition_required` | L'en-tête `If-Match` est absent. |
| 401 | `unauthenticated` | L'identifiant est absent, invalide ou révoqué. |
| 403 | `insufficient_permissions` | L'identifiant ne dispose pas de l'autorisation requise. |
| 429 | `rate_limited` | La limite de débit a été dépassée ; réessayez après la période indiquée par `Retry-After`. |
| 503 | `service_unavailable` | Une dépendance est temporairement indisponible ; réessayez après la période indiquée par `Retry-After`. |

## Exemple

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