
# Standardwerte der Organisation aktualisieren

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

Aktualisiert die Standardwerte der Organisation für die Umgebung per JSON-Merge-Patch (`application/merge-patch+json`, RFC 7396). `If-Match` ist erforderlich: Fehlt der Header, wird `428` zurückgegeben, bei einer veralteten Version `412`. Senden Sie nur die Felder, die Sie ändern. Ein Patch, der nichts ändert, schreibt nichts und behält die Version bei.

## Anfrage

| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| `If-Match` | Header | ja | Der `ETag` der Standardwerte, wie zuletzt gelesen. Fehlt er: `428`; veraltet: `412`. |
| `org_admin_role_id` | string | nein | Rolle der Umgebung (`rol_…`), die Organisations-Administratoren erhalten. Sie muss die Berechtigungen der Organisationsverwaltung enthalten (`422 permission_reserved`), und keine Organisation darf ohne aktiven Administrator bleiben (`409 last_org_admin`). Darf nicht `null` sein. |
| `default_member_role_id` | string | nein | Rolle der Umgebung (`rol_…`), die neue Organisationsmitglieder erhalten. Darf nicht `null` sein. |
| `max_memberships_per_user` | integer | nein | Anzahl der Organisationen, denen ein Benutzer angehören kann, 1–1000 (Standard 200). Darf nicht `null` sein. |
| `invitation_ttl_days` | integer | nein | Anzahl der Tage, die eine Einladung gültig bleibt, 1–30 (Standard 7). Darf nicht `null` sein. |
| `org_self_service_deletion_grace_days` | integer | nein | Anzahl der Tage, die eine Selbstbedienungs-Löschung einer Organisation wartet, bevor sie ausgeführt wird, 0–30 (Standard 14). Darf nicht `null` sein. |
| `on_org_delete_members` | string | nein | `detach` (Standard): Mitglieder verlieren nur die Mitgliedschaft. `delete_exclusive_provisioned`: Benutzer, die über JIT oder SCIM in diese Organisation gelangt sind und keiner anderen Organisation angehören, werden zur Löschung vorgemerkt. Darf nicht `null` sein. |
| `org_custom_roles_enabled` | boolean | nein | Erlaubt Organisations-Administratoren, eigene Rollen zu definieren (Standard `false`). Das Schreiben von Organisationsrollen erfordert weiterhin das Tarifmerkmal `org_custom_roles`. Darf nicht `null` sein. |
| `org_self_delete_enabled` | boolean | nein | Erlaubt Organisations-Administratoren, ihre Organisation selbst zu löschen (Standard `false`). Darf nicht `null` sein. |

## Verhalten

- Rollenfelder müssen eine Rolle dieser Umgebung benennen; eine Organisationsrolle oder eine unbekannte Rolle liefert `422 validation_failed` mit `unknown_role`.
- Eine Änderung von `on_org_delete_members` gilt für Organisationen, die nach der Änderung gelöscht werden.
- Validierungsfehler enthalten den JSON-Pointer des Feldes, zum Beispiel `/invitation_ttl_days` mit dem Code `out_of_range`.
- Die Änderung wird im Audit-Log der Verwaltung als `organization_defaults.updated` protokolliert, mit den Namen der geänderten Felder, nie mit deren Werten.

## Antwort

`200 OK` mit den aktualisierten Standardwerten und dem neuen `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
}
```

## Fehler

| HTTP | Code | Wann |
|---|---|---|
| 400 | `unknown_field` | Der Patch enthält ein unbekanntes oder schreibgeschütztes Feld oder ist kein JSON-Objekt (`malformed_request`). |
| 403 | `insufficient_permissions` | Die Anmeldedaten haben nicht die erforderliche Berechtigung. |
| 409 | `last_org_admin` | Die neue Administratorrolle würde eine Organisation ohne aktiven Administrator zurücklassen. |
| 412 | `precondition_failed` | `If-Match` stimmt nicht mit der aktuellen Version überein. |
| 415 | `unsupported_media_type` | Der Inhaltstyp ist nicht `application/merge-patch+json`. |
| 422 | `validation_failed` | Ein Wert ist ungültig (der Pointer nennt das Feld), oder ein Feld wurde auf `null` gesetzt (`code: invalid`). |
| 428 | `precondition_required` | `If-Match` fehlt. |

## Beispiel

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