
# Revocar las sesiones de una organización

`POST /v1/organizations/{org_id}/sessions:revoke` · permiso `sessions:write`

Revoca cada sesión activa abierta en el contexto de la organización, para todos sus usuarios, junto con las familias de refresh tokens emitidas para la organización o vinculadas a esas sesiones. Los access tokens emitidos para la organización dejan de aceptarse en la introspección y en la comprobación de revocación desde ese momento. Úselo después de un incidente de seguridad o cuando una organización se da de baja; para cerrar la sesión de un solo usuario o de una sola sesión, use [Revocar las sesiones de un usuario](../users/revoke-sessions.md).

El cuerpo debe incluir un `reason`. Se guarda como nota solo en el registro de auditoría de gestión; las sesiones terminan con el motivo de revocación `admin`. Las sesiones que ya están revocadas o expiradas no se cuentan, así que una llamada repetida tiene éxito con recuentos en cero. Envíe una cabecera `Idempotency-Key` para que los reintentos sean seguros.

## Solicitud

| Parámetro | En | Obligatorio | Descripción |
|---|---|---|---|
| `org_id` | path | sí | Id de organización, con el prefijo `org_`. |

Cuerpo:

| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `reason` | string | sí | Su nota para el registro de auditoría: de 1 a 256 caracteres, sin caracteres de control ni saltos de línea. |

## Respuesta

`200 OK`.

```json
{
  "revoked_sessions": 42,
  "revoked_token_families": 57
}
```

| Campo | Descripción |
|---|---|
| `revoked_sessions` | Sesiones revocadas por esta llamada. |
| `revoked_token_families` | Familias de refresh tokens revocadas por esta llamada. |

## Errores

Cada error es un cuerpo `application/problem+json` con un `code` estable.

| HTTP | `code` | Cuándo |
|---|---|---|
| 400 | `malformed_request`, `unknown_field` | El cuerpo no es JSON válido o tiene un campo desconocido. |
| 415 | `unsupported_media_type` | Se envió un cuerpo sin `Content-Type: application/json`. |
| 422 | `validation_failed` | `reason` falta o está vacío (`required`), supera los 256 caracteres (`too_long`) o contiene un carácter de control o un salto de línea (`invalid_value`). |
| 404 | `not_found` | La organización no existe en este entorno. |
| 401 | `unauthenticated` | Falta la clave de API, no es válida o está revocada. |
| 403 | `insufficient_permissions` | La clave no tiene el permiso `sessions:write`. |
| 429 | `rate_limited` | Se superó el límite de frecuencia; respete `Retry-After`. |
| 503 | `service_unavailable` | Una dependencia no está disponible temporalmente; reintente más tarde. |

## Ejemplo

```bash
curl -X POST https://api.eu.keenauth.com/v1/organizations/org_0a1b2c3d4e5f6g7h8j9k0m1n2p/sessions:revoke \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"reason": "Security incident INC-1042"}'
```

CLI: `keenauth organizations sessions revoke org_0a1b2c3d4e5f6g7h8j9k0m1n2p --reason "Security incident INC-1042" --yes`
