Actualizar un directorio

PATCH /v1/directories/{directory_id} · permiso directories:write

Actualiza el nombre del directorio y su configuración de aprovisionamiento con un JSON merge patch (RFC 7396, Content-Type: application/merge-patch+json). If-Match es obligatorio; el valor actual es el encabezado ETag de GET /v1/directories/{directory_id}. Ningún campo acepta null. Un parche que no cambia nada no escribe nada y conserva la versión. La escritura se audita como directory.updated con el valor anterior y el nuevo de cada ajuste modificado.

Solicitud

Campo Tipo Obligatorio Descripción
directory_id ruta sí ID del directorio SCIM (dir_…).
If-Match encabezado sí ETag actual del directorio.
name cadena no De 1 a 64 caracteres, sin caracteres de control, sin espacios al inicio ni al final.
provisioning_mode cadena no user_store (también se escriben los usuarios del entorno, las membresías de organización y los roles de grupo) o mirror (solo se conservan los registros del directorio).
attribute_allowlist array no Atributos SCIM opcionales que se almacenan, sin duplicados: title, usertype, phonenumbers y los atributos de la extensión enterprise employeenumber, department, division, costcenter, organization, manager (nombres completos urn:ietf:params:scim:schemas:extension:enterprise:2.0:user:).
unverified_domain_action cadena no Usuario cuyo dominio de correo no está verificado: invite (membresía invitada) o mirror_only (solo registro del directorio).
delete_action cadena no SCIM DELETE /Users: remove_membership o delete_user (elimina el usuario que gestiona el directorio).
on_delete_memberships cadena no Qué ocurre con las membresías de este directorio cuando se elimina: keep, suspend o remove.
mass_deprovision_guard objeto no enabled (booleano), percent (5–50) y absolute_min (10–1000): las desprovisiones que superen ambos umbrales en 5 minutos quedan retenidas para aprobación.
send_welcome_email booleano no Indica si un nuevo usuario del directorio recibe un correo de activación de cuenta.

Respuesta

200 OK con el directorio y su nuevo ETag.

{
  "id": "dir_01j9xm2n4p6q8r0s2t4v6w8y0z",
  "organization_id": "org_01j9xk3m7q8r2s4t6v8w0y2z4a",
  "type": "scim",
  "name": "Okta EU",
  "state": "active",
  "base_url": "https://acme.eu.keenauth.app/scim/v2/dir_01j9xm2n4p6q8r0s2t4v6w8y0z",
  "created_at": "2026-10-19T09:31:00.123456Z",
  "last_request_at": null,
  "provisioning_mode": "user_store",
  "attribute_allowlist": ["title", "urn:ietf:params:scim:schemas:extension:enterprise:2.0:user:department"],
  "unverified_domain_action": "invite",
  "delete_action": "remove_membership",
  "on_delete_memberships": "keep",
  "mass_deprovision_guard": {"enabled": true, "percent": 20, "absolute_min": 25},
  "send_welcome_email": false
}

Errores

HTTP code Cuándo
400 malformed_request El cuerpo no es un objeto JSON.
400 unknown_field El parche contiene un campo que no se puede escribir (por ejemplo state).
404 not_found El directorio no existe en este entorno.
409 conflict provisioning_mode cambia mientras el directorio tiene registros de usuario, o el directorio se está eliminando.
412 precondition_failed If-Match no coincide con la versión actual.
415 unsupported_media_type Content-Type no es application/merge-patch+json.
422 validation_failed Un campo es null o no es válido; el error indica el campo (por ejemplo /mass_deprovision_guard/percent invalid).
428 precondition_required Falta If-Match.
401 unauthenticated La credencial falta, no es válida o fue revocada.
403 insufficient_permissions La credencial no tiene el permiso requerido.
429 rate_limited Se superó el límite de frecuencia; reintente después del tiempo indicado en Retry-After.
503 service_unavailable La sincronización de directorios no está disponible temporalmente o no está configurada en este despliegue; reintente después del tiempo indicado en Retry-After.

Ejemplo

curl -i -X PATCH "https://api.eu.keenauth.com/v1/directories/dir_01j9xm2n4p6q8r0s2t4v6w8y0z" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H 'If-Match: "3"' \
  -H "Content-Type: application/merge-patch+json" \
  -d '{"name":"Okta EU","mass_deprovision_guard":{"percent":20}}'