
# Aggiorna i valori predefiniti dell'organizzazione

`PATCH /v1/organization-defaults` · autorizzazione `organizations:write`

Aggiorna i valori predefiniti dell'organizzazione dell'ambiente con una merge patch JSON (`application/merge-patch+json`, RFC 7396). `If-Match` è obbligatorio: se manca restituisce `428`, se la versione è obsoleta restituisce `412`. Invia solo i campi che modifichi. Una patch che non cambia nulla non scrive nulla e mantiene la versione.

## Richiesta

| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| `If-Match` | header | sì | Il `ETag` dei valori predefiniti letto per ultimo. Mancante: `428`; obsoleto: `412`. |
| `org_admin_role_id` | string | no | Ruolo dell'ambiente (`rol_…`) assegnato agli amministratori dell'organizzazione. Deve avere le autorizzazioni di gestione del sistema di organizzazione (`422 permission_reserved`) e nessuna organizzazione può restare senza un amministratore attivo (`409 last_org_admin`). Non può essere `null`. |
| `default_member_role_id` | string | no | Ruolo dell'ambiente (`rol_…`) assegnato ai nuovi membri dell'organizzazione. Non può essere `null`. |
| `max_memberships_per_user` | integer | no | Numero di organizzazioni a cui un utente può appartenere, da 1 a 1000 (predefinito 200). Non può essere `null`. |
| `invitation_ttl_days` | integer | no | Giorni di validità di un invito, da 1 a 30 (predefinito 7). Non può essere `null`. |
| `org_self_service_deletion_grace_days` | integer | no | Giorni di attesa prima che una cancellazione self-service dell'organizzazione venga eseguita, da 0 a 30 (predefinito 14). Non può essere `null`. |
| `on_org_delete_members` | string | no | `detach` (predefinito): i membri perdono solo l'appartenenza. `delete_exclusive_provisioned`: gli utenti arrivati in questa organizzazione tramite JIT o SCIM e che non appartengono ad altre organizzazioni vengono messi in coda per l'eliminazione. Non può essere `null`. |
| `org_custom_roles_enabled` | boolean | no | Permette agli amministratori dell'organizzazione di definire i propri ruoli (predefinito `false`). Scrivere ruoli dell'organizzazione richiede comunque la funzionalità del piano `org_custom_roles`. Non può essere `null`. |
| `org_self_delete_enabled` | boolean | no | Permette agli amministratori dell'organizzazione di eliminare autonomamente la propria organizzazione (predefinito `false`). Non può essere `null`. |

## Comportamento

- I campi dei ruoli devono indicare un ruolo di questo ambiente; un ruolo dell'organizzazione o un ruolo sconosciuto restituisce `422 validation_failed` con `unknown_role`.
- La modifica di `on_org_delete_members` si applica alle organizzazioni eliminate dopo la modifica.
- Gli errori di validazione riportano il JSON pointer del campo, per esempio `/invitation_ttl_days` con codice `out_of_range`.
- La modifica viene scritta nel registro di audit di gestione come `organization_defaults.updated` con i nomi dei campi modificati, mai i loro valori.

## Risposta

`200 OK` con i valori predefiniti aggiornati e il nuovo `ETag`.

```json
{
  "org_admin_role_id": "rol_01j9xs0a2b4c6d8e0f2g4h6j8k",
  "default_member_role_id": "rol_01j9xs0a2b4c6d8e0f2g4h6j8m",
  "max_memberships_per_user": 200,
  "invitation_ttl_days": 9,
  "org_self_service_deletion_grace_days": 14,
  "on_org_delete_members": "delete_exclusive_provisioned",
  "org_custom_roles_enabled": false,
  "org_self_delete_enabled": false,
  "updated_at": "2026-11-03T10:00:00.123456Z",
  "version": 2
}
```

## Errori

| HTTP | codice | Quando |
|---|---|---|
| 400 | `unknown_field` | La patch contiene un campo sconosciuto o di sola lettura, oppure non è un oggetto JSON (`malformed_request`). |
| 403 | `insufficient_permissions` | La credenziale non ha l'autorizzazione richiesta. |
| 409 | `last_org_admin` | Il nuovo ruolo di amministratore lascerebbe un'organizzazione senza un amministratore attivo. |
| 412 | `precondition_failed` | `If-Match` non corrisponde alla versione corrente. |
| 415 | `unsupported_media_type` | Il content type non è `application/merge-patch+json`. |
| 422 | `validation_failed` | Un valore non è valido (il pointer indica il campo), oppure un campo è stato impostato a `null` (`code: invalid`). |
| 428 | `precondition_required` | `If-Match` manca. |

## Esempio

```bash
curl -i -X PATCH "https://api.eu.keenauth.com/v1/organization-defaults" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/merge-patch+json" \
  -H 'If-Match: "1"' \
  -d '{"on_org_delete_members":"delete_exclusive_provisioned","invitation_ttl_days":9}'
```

```bash
keenauth organization-defaults update --if-match '"1"' \
  --on-org-delete-members delete_exclusive_provisioned --invitation-ttl-days 9
```
