Actualizar una organización
PATCH /v1/organizations/{org_id} · permiso organizations:write
Actualiza una organización con un parche de fusión JSON (RFC 7396, Content-Type: application/merge-patch+json). Los campos que no se envían no cambian; un parche que no modifica nada no cambia la versión. name y slug no pueden borrarse.
Solicitud
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
org_id |
ruta | sí | ID de la organización (org_…). |
If-Match |
encabezado | sí | Obligatorio. El ETag de la última lectura ("<version>"). |
name |
cadena | no | Nombre visible, de 1 a 256 caracteres, sin caracteres de control. |
slug |
cadena | no | Nuevo slug (mismo formato). Puede cambiarse una vez cada 30 días; el slug anterior queda reservado durante 90 días. |
external_id |
cadena | null | no | Su propio identificador, de hasta 255 caracteres; único en el entorno. null lo borra. |
metadata |
objeto | null | no | Se fusiona con el objeto actual (RFC 7396): un miembro establecido en null se elimina; null en todo el campo lo restablece a {}. |
brand_color |
cadena | null | no | Color de marca #RRGGBB; se almacena en mayúsculas. null lo borra. |
max_memberships |
entero | null | no | Límite de membresías, como mínimo 1; null significa sin límite. |
default_zoneinfo |
cadena | null | no | Zona horaria IANA predeterminada (por ejemplo Europe/Istanbul), que se usa en el registro, las invitaciones, el SSO JIT y SCIM en el contexto de la organización cuando el navegador o el proveedor de identidad no proporcionan ninguna. null lo borra (se aplica la predeterminada del entorno). |
Cuerpo de la solicitud:
{
"name": "Acme Corporation",
"metadata": {
"tier": null,
"region": "eu"
}
}
Respuesta
200 OK con la organización actualizada y su nuevo ETag.
{
"id": "org_01j9xk3m7q8r2s4t6v8w0y2z4a",
"name": "Acme Corporation",
"slug": "acme",
"external_id": "crm-4821",
"status": "active",
"metadata": {
"region": "eu"
},
"brand_color": "#1F6FEB",
"max_memberships": null,
"default_zoneinfo": null,
"created_via": "admin_api",
"disabled_at": null,
"deletion_requested_at": null,
"deletion_due_at": null,
"created_at": "2026-10-12T09:30:00.123456Z",
"updated_at": "2026-10-12T10:05:00.654321Z",
"version": 2
}
Errores
| HTTP | código | Cuándo |
|---|---|---|
| 400 | unknown_field |
El cuerpo tiene un campo que no está en el esquema o es de solo lectura (id, status…). |
| 401 | unauthenticated |
La credencial falta, no es válida o fue revocada. |
| 403 | insufficient_permissions |
La credencial no tiene el permiso requerido. |
| 404 | not_found |
No existe una organización con este ID en este entorno. |
| 409 | slug_taken |
El slug lo usa otra organización. |
| 409 | slug_reserved |
El slug es una palabra reservada o el slug anterior de otra organización (reservado durante 90 días). |
| 409 | slug_change_rate_limited |
El slug se cambió hace menos de 30 días. |
| 409 | external_id_taken |
El external_id lo usa otra organización. |
| 409 | organization_pending_deletion |
La organización está pendiente de eliminación por autoservicio; cancele primero la eliminación. |
| 412 | precondition_failed |
If-Match no coincide con la versión actual; vuelva a leer la organización. |
| 422 | validation_failed |
Un campo no es válido (name, slug, external_id, metadata, brand_color, max_memberships, default_zoneinfo). |
| 428 | precondition_required |
Falta If-Match. |
| 429 | rate_limited |
Se superó el límite de frecuencia; reintente después del periodo indicado en Retry-After. |
| 503 | service_unavailable |
Una dependencia no está disponible temporalmente; reintente después del periodo indicado en Retry-After. |
Ejemplo
curl -X PATCH "https://api.eu.keenauth.com/v1/organizations/org_01j9xk3m7q8r2s4t6v8w0y2z4a" \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Content-Type: application/merge-patch+json" \
-H 'If-Match: "1"' \
-d '{"name":"Acme Corporation"}'