
# Revocare un invito

`POST /fapi/v1/organizations/{org_id}/invitations/{invitation_id}:revoke` · chiamato dall'host di accesso dell'ambiente

Revoca un invito in attesa. La risposta è l'invito revocato; il suo indirizzo è stato cancellato (`email` è `null`). Un invito non più in attesa (accettato, scaduto o già revocato) restituisce `422 invitation_invalid`.

Richiede il cookie `__Host-idp_session` dell'utente autenticato con un `Origin` esatto, oppure un access token della API frontend di un'applicazione first-party (`Authorization: DPoP <token>` con una prova DPoP; vedi [Access token della API frontend](/docs/api/fapi/front-api-token)). L'utente deve essere un membro attivo dell'organizzazione con l'autorizzazione `idp_members:invite`. Un utente che non è membro riceve `404 not_found`; un membro senza l'autorizzazione riceve `403 insufficient_permissions`. Solo un membro con il ruolo di amministratore può revocare un invito che riporta un ruolo privilegiato (`403 role_not_assignable`).

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

## Richiesta

Header:

| Header | Obbligatorio | Descrizione |
| --- | --- | --- |
| `Idp-Client` | sì | Identificatore dell'SDK. |
| `Origin` | sì, con il cookie | `https://<host di accesso>`. |

`org_id`: l'identificatore dell'organizzazione (`org_…`). `invitation_id`: l'identificatore dell'invito (`inv_…`), cioè l'`id` di [l'invito](/docs/api/fapi/organizations/invitations/create).

Nessun body.

## Risposta

`200 OK` con l'invito e `ETag: "<version>"`.

## Errori

| Stato | Codice | Quando |
| --- | --- | --- |
| 401 | `unauthenticated` | Nessun cookie di sessione o token valido. |
| 403 | `insufficient_permissions` | L'utente non ha `idp_members:invite` nell'organizzazione. |
| 403 | `role_not_assignable` | L'invito riporta un ruolo privilegiato e l'utente non ha il ruolo di amministratore. |
| 403 | `origin_not_allowed` | L'`Origin` non corrisponde. |
| 404 | `not_found` | Nessuna organizzazione o invito del genere per questo utente; un identificatore sconosciuto, malformato o di un altro utente riceve la stessa risposta. |
| 409 | `organization_disabled` | L'organizzazione è disabilitata o in attesa di eliminazione (`organization_pending_deletion`). |
| 422 | `invitation_invalid` | L'invito non è in attesa. |
| 503 | `service_unavailable` | Temporaneamente non disponibile; riprova dopo `Retry-After`. |

## Esempio

```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
}
```

## Dati personali

Questo endpoint contiene dati personali: appartenenze alle organizzazioni e inviti. [Dati personali nelle API di KeenAuth](/docs/policies/personal-data) descrive cosa viene memorizzato, per quanto tempo viene conservato e come viene cancellato. Non inviare dati personali particolari (salute, dati biometrici, religione, opinioni politiche, orientamento sessuale) in nessun campo.
