
# Actualizar una organización

`PATCH /fapi/v1/organizations/{org_id}` · llamado desde el host de inicio de sesión del entorno

Cambia el nombre, el slug o el color de marca de una organización (merge patch de JSON, RFC 7396). Los metadatos, el ID externo y el límite de miembros no se pueden cambiar aquí. Requiere la cookie `__Host-idp_session` del usuario autenticado; si la cookie falta, ha caducado o ha sido revocada, devuelve `401 unauthenticated`. Una aplicación de primera parte en otro origen puede enviar en su lugar su token de acceso a la API frontal (`Authorization: DPoP <token>` con una prueba DPoP; consulte [Token de acceso de la API frontal](/docs/api/fapi/front-api-token)). El usuario debe ser miembro activo de la organización con el permiso `idp_org:update`. Un usuario que no es miembro recibe `404 not_found`; un miembro sin el permiso recibe `403 insufficient_permissions`.

Con `@keenauth/js`: `await keenauth.organizations.update(orgId, { name: "Acme Inc" }, { expectedVersion: 4 })`.

## Solicitud

Encabezados:

| Encabezado | Obligatorio | Descripción |
| --- | --- | --- |
| `Idp-Client` | sí | Identificador del SDK. |
| `Origin` | sí, con la cookie | Debe ser exactamente `https://<sign-in host>`. |
| `Content-Type` | sí | `application/json` o `application/merge-patch+json`. |
| `If-Match` | no | `"<version>"` de la organización tal como se leyó por última vez; si ha cambiado desde entonces, devuelve `412 precondition_failed` y nada cambia. |

`org_id`: el identificador de la organización (`org_…`).

Cuerpo (al menos un campo):

| Campo | Obligatorio | Descripción |
| --- | --- | --- |
| `name` | no | Nuevo nombre visible; no puede ser `null`. |
| `slug` | no | Nuevo slug; no puede ser `null`. El slug anterior queda reservado durante 90 días, y un slug solo puede cambiarse una vez cada 30 días. |
| `brand_color` | no | `#RRGGBB`; `null` lo elimina. |

## Respuesta

`200 OK` con un nuevo `ETag`; el cuerpo es la organización (consulte [Obtener una organización](./get)).

## Errores

| Estado | Código | Cuándo |
| --- | --- | --- |
| 400 | `unknown_field` | El cuerpo tiene un campo distinto de `name`, `slug` y `brand_color`. |
| 401 | `unauthenticated` | No hay una cookie de sesión válida. |
| 403 | `origin_not_allowed` | `Origin` falta o es incorrecto. |
| 403 | `insufficient_permissions` | El usuario no tiene `idp_org:update` en la organización. |
| 404 | `not_found` | No existe tal organización para este usuario; un identificador desconocido, mal formado o ajeno recibe la misma respuesta. |
| 409 | `slug_taken` | Otra organización usa el slug. |
| 409 | `slug_reserved` | El slug está en la reserva de 90 días de otra organización. |
| 409 | `slug_change_rate_limited` | El slug ya cambió en los últimos 30 días. |
| 409 | `organization_disabled` | La organización está desactivada. |
| 409 | `organization_pending_deletion` | La organización está programada para su eliminación. |
| 412 | `precondition_failed` | `If-Match` no indica la versión actual, o la organización cambió mientras se procesaba la solicitud. |
| 422 | `validation_failed` | Un campo no es válido o es `null` donde no se permite, o el patch está vacío (`empty_patch`). |
| 503 | `service_unavailable` | No disponible temporalmente; reintente después de `Retry-After`. |

## Ejemplo

```bash
curl -X PATCH https://example.keenauth.app/fapi/v1/organizations/org_01jbz6x8kq3m2n4p5r6s7t8v9a \
  -H "Idp-Client: my-app/1.0.0 (node/22.0.0)" \
  -H "Origin: https://example.keenauth.app" \
  -H "Content-Type: application/merge-patch+json" \
  -H 'If-Match: "4"' \
  -b cookies.txt \
  -d '{"name": "Acme Inc", "brand_color": null}'
```

La respuesta tiene la misma forma que [Obtener una organización](./get), con `"version": 5`.
