
# Aggiorna un'organizzazione

`PATCH /fapi/v1/organizations/{org_id}` · chiamato dall'host di accesso dell'ambiente

Modifica il nome, lo slug o il colore del brand di un'organizzazione (JSON merge patch, RFC 7396). Metadati, ID esterno e limite di membri non possono essere modificati qui. Richiede il cookie `__Host-idp_session` dell'utente autenticato; se il cookie manca, è scaduto o è stato revocato, restituisce `401 unauthenticated`. Un'applicazione first-party su un'altra origine può invece inviare il proprio token di accesso Front API (`Authorization: DPoP <token>` con una prova DPoP; vedi [Token di accesso Front API](/docs/api/fapi/front-api-token)). L'utente deve essere un membro attivo dell'organizzazione con l'autorizzazione `idp_org:update`. Un utente che non è membro riceve `404 not_found`; un membro senza l'autorizzazione riceve `403 insufficient_permissions`.

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

## Richiesta

Header:

| Header | Obbligatorio | Descrizione |
| --- | --- | --- |
| `Idp-Client` | sì | Identificatore dell'SDK. |
| `Origin` | sì, con il cookie | Deve essere esattamente `https://<sign-in host>`. |
| `Content-Type` | sì | `application/json` oppure `application/merge-patch+json`. |
| `If-Match` | no | `"<version>"` dell'organizzazione come letta l'ultima volta; se è cambiata nel frattempo, restituisce `412 precondition_failed` e non cambia nulla. |

`org_id`: l'identificatore dell'organizzazione (`org_…`).

Body (almeno un campo):

| Campo | Obbligatorio | Descrizione |
| --- | --- | --- |
| `name` | no | Nuovo nome visualizzato; non può essere `null`. |
| `slug` | no | Nuovo slug; non può essere `null`. Il vecchio slug resta riservato per 90 giorni, e uno slug può cambiare una volta ogni 30 giorni. |
| `brand_color` | no | `#RRGGBB`; `null` lo rimuove. |

## Risposta

`200 OK` con un nuovo `ETag`; il body è l'organizzazione (vedi [Ottieni un'organizzazione](./get)).

## Errori

| Stato | Codice | Quando |
| --- | --- | --- |
| 400 | `unknown_field` | Il body contiene un campo diverso da `name`, `slug` e `brand_color`. |
| 401 | `unauthenticated` | Nessun cookie di sessione valido. |
| 403 | `origin_not_allowed` | `Origin` manca o è errato. |
| 403 | `insufficient_permissions` | L'utente non ha `idp_org:update` nell'organizzazione. |
| 404 | `not_found` | Nessuna organizzazione per questo utente; un identificatore inesistente, malformato o di un'altra organizzazione riceve la stessa risposta. |
| 409 | `slug_taken` | Un'altra organizzazione usa lo slug. |
| 409 | `slug_reserved` | Lo slug è nella prenotazione di 90 giorni di un'altra organizzazione. |
| 409 | `slug_change_rate_limited` | Lo slug è già cambiato negli ultimi 30 giorni. |
| 409 | `organization_disabled` | L'organizzazione è disattivata. |
| 409 | `organization_pending_deletion` | L'organizzazione è programmata per l'eliminazione. |
| 412 | `precondition_failed` | `If-Match` non indica la versione attuale, oppure l'organizzazione è cambiata durante l'elaborazione della richiesta. |
| 422 | `validation_failed` | Un campo non è valido o è `null` dove non è consentito, oppure la patch è vuota (`empty_patch`). |
| 503 | `service_unavailable` | Temporaneamente non disponibile; riprova dopo `Retry-After`. |

## Esempio

```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 risposta ha la stessa struttura di [Ottieni un'organizzazione](./get), con `"version": 5`.
