
# Remplacer le thème de l'organisation

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

Remplace tout le brouillon de thème de la portée ; les jetons absents du corps sont effacés. `{"theme":{}}` efface la portée. `If-Match` porte l'`ETag` de cette portée (issu du GET correspondant), pas celui de l'environnement. Tout jeton autre que `logo`, `light.color.primary` et `dark.color.primary` échoue avec `422` (`token_not_allowed_in_scope`).

## Requête

| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| `org_id` | chemin | oui | Identifiant `org_…`. |
| `If-Match` | en-tête | oui | L'`ETag` du brouillon lu en dernier (`"0"` s'il n'a jamais été écrit). Absent : `428` ; périmé : `412`. |
| `theme` | objet | oui | `BrandingTheme` complet de la portée. |

## Réponse

`200 OK` avec le brouillon de thème de la portée et son `ETag` (chaque portée a sa propre version).

```json
{
  "theme": {"logo": "logo_acme", "light": {"color": {"primary": "#0a3d91"}}},
  "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. |
| 404 | `not_found` | L'identifiant n'est pas un identifiant `org_…` valide. |
| 412 | `precondition_failed` | `If-Match` ne correspond pas à la version actuelle du brouillon. |
| 422 | `validation_failed` | Une valeur de jeton est invalide (`invalid_value`, `out_of_range`, `unknown_token`) ; `pointer` désigne le jeton, p. ex. `/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 n'a pas la permission requise. |
| 429 | `rate_limited` | La limite de débit est dépassée ; réessayez après le délai `Retry-After`. |
| 503 | `service_unavailable` | Une dépendance est temporairement indisponible ; réessayez après le délai `Retry-After`. |

## Exemple

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