
# Revocar una invitación

`POST /fapi/v1/organizations/{org_id}/invitations/{invitation_id}:revoke` · llamado desde el host de inicio de sesión del entorno

Revoca una invitación pendiente. La respuesta es la invitación revocada; su dirección ha sido borrada (`email` es `null`). Una invitación que ya no está pendiente (aceptada, caducada o ya revocada) devuelve `422 invitation_invalid`.

Requiere la cookie `__Host-idp_session` del usuario autenticado con un `Origin` exacto, o un token de acceso a la API frontal (`Authorization: DPoP <token>` con una prueba DPoP) de una aplicación de origen propio; consulte [Token de acceso a la API frontal](/docs/api/fapi/front-api-token). El usuario debe ser un miembro activo de la organización con el permiso `idp_members:invite`. Un usuario que no es miembro recibe `404 not_found`; un miembro sin el permiso recibe `403 insufficient_permissions`. Solo un miembro que tenga el rol de administrador puede revocar una invitación que lleve un rol privilegiado (`403 role_not_assignable`).

Con `@keenauth/js`: `await keenauth.organizations.revokeInvitation(orgId, invitationId)`.

## Solicitud

Encabezados:

| Encabezado | Obligatorio | Descripción |
| --- | --- | --- |
| `Idp-Client` | sí | Identificador del SDK. |
| `Origin` | sí, con la cookie | `https://<host de inicio de sesión>`. |

`org_id`: el identificador de la organización (`org_…`). `invitation_id`: el identificador de la invitación (`inv_…`), el `id` de [la invitación](/docs/api/fapi/organizations/invitations/create).

Sin cuerpo.

## Respuesta

`200 OK` con la invitación y `ETag: "<version>"`.

## Errores

| Estado | Código | Cuándo |
| --- | --- | --- |
| 401 | `unauthenticated` | No hay una cookie de sesión o un token válido. |
| 403 | `insufficient_permissions` | El usuario no tiene `idp_members:invite` en la organización. |
| 403 | `role_not_assignable` | La invitación lleva un rol privilegiado y el usuario no tiene el rol de administrador. |
| 403 | `origin_not_allowed` | El `Origin` no coincide. |
| 404 | `not_found` | No existe tal organización o invitación para este usuario; un identificador desconocido, mal formado o ajeno produce la misma respuesta. |
| 409 | `organization_disabled` | La organización está deshabilitada o pendiente de eliminación (`organization_pending_deletion`). |
| 422 | `invitation_invalid` | La invitación no está pendiente. |
| 503 | `service_unavailable` | No disponible temporalmente; reintente después de `Retry-After`. |

## Ejemplo

```bash
curl -X POST "https://example.keenauth.app/fapi/v1/organizations/org_01jbz6x8kq3m2n4p5r6s7t8v9a/invitations/inv_01jbz6x8kq3m2n4p5r6s7t8v9d:revoke" \
  -H "Idp-Client: my-app/1.0.0 (node/22.0.0)" \
  -H "Origin: https://example.keenauth.app" \
  -b cookies.txt
```

```json
{
  "id": "inv_01jbz6x8kq3m2n4p5r6s7t8v9d",
  "email": null,
  "role_ids": ["rol_01jbz6x8kq3m2n4p5r6s7t8v9w"],
  "delivery": "email",
  "delivery_status": "sent",
  "status": "revoked",
  "send_count": 1,
  "last_sent_at": "2026-11-03T10:00:00Z",
  "expires_at": "2026-11-10T10:00:00Z",
  "accepted_user_id": null,
  "accepted_at": null,
  "revoked_at": "2026-11-03T11:00:00Z",
  "created_at": "2026-11-03T10:00:00Z",
  "updated_at": "2026-11-03T11:00:00Z",
  "version": 2
}
```

## Datos personales

Este endpoint contiene datos personales: membresías de organizaciones e invitaciones. [Datos personales en las API de KeenAuth](/docs/policies/personal-data) describe qué se almacena, cuánto tiempo se conserva y cómo se elimina. No envíe categorías especiales de datos personales (salud, datos biométricos, religión, opiniones políticas, orientación sexual) en ningún campo.
