
# Actualizar los valores predeterminados de la organización

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

Actualiza los valores predeterminados de organización del entorno mediante un parche de fusión JSON (`application/merge-patch+json`, RFC 7396). `If-Match` es obligatorio: si falta, devuelve `428`; si la versión está desactualizada, devuelve `412`. Envíe únicamente los campos que cambia. Un parche que no cambia nada no escribe nada y conserva la versión.

## Solicitud

| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `If-Match` | encabezado | sí | El `ETag` de los valores predeterminados tal como se leyeron por última vez. Si falta: `428`; si está desactualizado: `412`. |
| `org_admin_role_id` | string | no | Rol del entorno (`rol_…`) que obtienen los administradores de la organización. Debe tener los permisos de sistema de gestión de organizaciones (`422 permission_reserved`), y ninguna organización puede quedarse sin un administrador activo (`409 last_org_admin`). No puede ser `null`. |
| `default_member_role_id` | string | no | Rol del entorno (`rol_…`) que obtienen los nuevos miembros de la organización. No puede ser `null`. |
| `max_memberships_per_user` | integer | no | Número de organizaciones a las que puede pertenecer un usuario, de 1 a 1000 (predeterminado: 200). No puede ser `null`. |
| `invitation_ttl_days` | integer | no | Días durante los que una invitación sigue siendo válida, de 1 a 30 (predeterminado: 7). No puede ser `null`. |
| `org_self_service_deletion_grace_days` | integer | no | Días que espera una eliminación de organización iniciada por el propio usuario antes de ejecutarse, de 0 a 30 (predeterminado: 14). No puede ser `null`. |
| `on_org_delete_members` | string | no | `detach` (predeterminado): los miembros solo pierden la pertenencia. `delete_exclusive_provisioned`: los usuarios que llegaron a esta organización mediante JIT o SCIM y que no pertenecen a ninguna otra organización se ponen en cola para su eliminación. No puede ser `null`. |
| `org_custom_roles_enabled` | boolean | no | Permite a los administradores de la organización definir sus propios roles (predeterminado: `false`). Escribir roles de organización sigue requiriendo la función `org_custom_roles` del plan. No puede ser `null`. |
| `org_self_delete_enabled` | boolean | no | Permite a los administradores de la organización eliminar su propia organización (predeterminado: `false`). No puede ser `null`. |

## Comportamiento

- Los campos de rol deben nombrar un rol de este entorno; un rol de organización o un rol desconocido devuelve `422 validation_failed` con `unknown_role`.
- El cambio en `on_org_delete_members` se aplica a las organizaciones eliminadas después del cambio.
- Los errores de validación incluyen el puntero JSON del campo, por ejemplo `/invitation_ttl_days` con el código `out_of_range`.
- El cambio se registra en el registro de auditoría de gestión como `organization_defaults.updated` con los nombres de los campos modificados, nunca sus valores.

## Respuesta

`200 OK` con los valores predeterminados actualizados y el nuevo `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
}
```

## Errores

| HTTP | código | Cuándo |
|---|---|---|
| 400 | `unknown_field` | El parche contiene un campo desconocido o de solo lectura, o no es un objeto JSON (`malformed_request`). |
| 403 | `insufficient_permissions` | La credencial no tiene el permiso requerido. |
| 409 | `last_org_admin` | El nuevo rol de administrador dejaría una organización sin un administrador activo. |
| 412 | `precondition_failed` | `If-Match` no coincide con la versión actual. |
| 415 | `unsupported_media_type` | El tipo de contenido no es `application/merge-patch+json`. |
| 422 | `validation_failed` | Un valor no es válido (el puntero indica el campo), o un campo se estableció en `null` (`code: invalid`). |
| 428 | `precondition_required` | Falta `If-Match`. |

## Ejemplo

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