
# Mettre à jour une organisation

`PATCH /fapi/v1/organizations/{org_id}` · appelé depuis l'hôte de connexion de l'environnement

Modifie le nom, le slug ou la couleur de marque d'une organisation (JSON merge patch, RFC 7396). Les métadonnées, l'identifiant externe et la limite de membres ne peuvent pas être modifiés ici. Nécessite le cookie `__Host-idp_session` de l'utilisateur authentifié ; si le cookie est absent, expiré ou révoqué, renvoie `401 unauthenticated`. Une application de première partie sur une autre origine peut à la place envoyer son jeton d'accès Front API (`Authorization: DPoP <token>` avec une preuve DPoP ; voir [Jeton d'accès Front API](/docs/api/fapi/front-api-token)). L'utilisateur doit être membre actif de l'organisation disposant de l'autorisation `idp_org:update`. Un utilisateur qui n'est pas membre reçoit `404 not_found` ; un membre sans cette autorisation reçoit `403 insufficient_permissions`.

Avec `@keenauth/js` : `await keenauth.organizations.update(orgId, { name: "Acme Inc" }, { expectedVersion: 4 })`.

## Requête

En-têtes :

| En-tête | Obligatoire | Description |
| --- | --- | --- |
| `Idp-Client` | oui | Identifiant du SDK. |
| `Origin` | oui, avec le cookie | Doit être exactement `https://<hôte de connexion>`. |
| `Content-Type` | oui | `application/json` ou `application/merge-patch+json`. |
| `If-Match` | non | `"<version>"` de l'organisation telle que lue en dernier ; si elle a changé depuis, renvoie `412 precondition_failed` et rien ne change. |

`org_id` : l'identifiant de l'organisation (`org_…`).

Corps (au moins un champ) :

| Champ | Obligatoire | Description |
| --- | --- | --- |
| `name` | non | Nouveau nom d'affichage ; ne peut pas être `null`. |
| `slug` | non | Nouveau slug ; ne peut pas être `null`. L'ancien slug reste réservé pendant 90 jours, et un slug ne peut être modifié qu'une fois en 30 jours. |
| `brand_color` | non | `#RRGGBB` ; `null` le supprime. |

## Réponse

`200 OK` avec un nouvel `ETag` ; le corps est l'organisation (voir [Obtenir une organisation](./get)).

## Erreurs

| Statut | Code | Quand |
| --- | --- | --- |
| 400 | `unknown_field` | Le corps contient un champ autre que `name`, `slug` et `brand_color`. |
| 401 | `unauthenticated` | Aucun cookie de session valide. |
| 403 | `origin_not_allowed` | `Origin` est absent ou incorrect. |
| 403 | `insufficient_permissions` | L'utilisateur ne dispose pas de `idp_org:update` dans l'organisation. |
| 404 | `not_found` | Aucune organisation de ce type pour cet utilisateur ; un identifiant inconnu, mal formé ou étranger reçoit la même réponse. |
| 409 | `slug_taken` | Une autre organisation utilise déjà ce slug. |
| 409 | `slug_reserved` | Le slug figure dans la réservation de 90 jours d'une autre organisation. |
| 409 | `slug_change_rate_limited` | Le slug a déjà été modifié au cours des 30 derniers jours. |
| 409 | `organization_disabled` | L'organisation est désactivée. |
| 409 | `organization_pending_deletion` | L'organisation est programmée pour suppression. |
| 412 | `precondition_failed` | `If-Match` ne correspond pas à la version actuelle, ou l'organisation a changé pendant le traitement de la requête. |
| 422 | `validation_failed` | Un champ est invalide ou vaut `null` alors que ce n'est pas autorisé, ou le patch est vide (`empty_patch`). |
| 503 | `service_unavailable` | Service temporairement indisponible ; réessayez après `Retry-After`. |

## Exemple

```bash
curl -X PATCH https://example.keenauth.app/fapi/v1/organizations/org_01jbz6x8kq3m2n4p5r6s7t8v9a \
  -H "Idp-Client: my-app/1.0.0 (node/22.0.0)" \
  -H "Origin: https://example.keenauth.app" \
  -H "Content-Type: application/merge-patch+json" \
  -H 'If-Match: "4"' \
  -b cookies.txt \
  -d '{"name": "Acme Inc", "brand_color": null}'
```

La réponse a la même structure que [Obtenir une organisation](./get), avec `"version": 5`.
