Revoke a pending invitation
Revoke a pending invitation, with effect on the next attempt (FR-94).
/v1/workspace/invitations/{invitation_id}/revokeAdmin- Operation id
- revoke_invitation
- Access
- An editor or a viewer is refused.
/v1/workspace/invitations/{invitation_id}/revokeRevoke a pending invitation, with effect on the next attempt (FR-94).
Kills the outstanding link. Anyone holding that email can no longer join, and there is no window: the next attempt to accept, after this returns, is refused.
This does not remove anyone. It only stops an invitation that has not been
accepted. An already accepted or already revoked invitation is refused with
409 invitation_not_pending.
Revoking frees the address, so inviting the same person afterwards issues a genuinely new invitation rather than being treated as a resend.
The row is kept and only stamped: §14.5's retention says an accepted or revoked invitation is the record of how someone came to be in a workspace, or of an admin deciding they should not, and deleting it throws that away. Stamping also frees the address's pending slot, so revoke-then-reinvite is a genuinely new invitation rather than a refusal.
There is no grace period and there is nothing cached: acceptance re-reads the row, so the next attempt after this statement commits is refused.
Tenancy: the request is scoped to one workspace, and the credential presented is what selects it. A caller with no membership in that workspace is refused with 404, which is indistinguishable from a workspace that does not exist.
Authorisation: admin or owner. An editor or viewer receives 403 insufficient_role.
Access: Authorization: Bearer carrying either a realm access token or an API key. A key must hold the invitations:write scope, and the workspace role of the person who owns it must meet the floor above.
A realm-issued access token, presented as Authorization: Bearer <token>. It acts as the person who signed in, and every operation resolves their workspace role live from the membership record.
In: header
Path Parameters
uuidResponse Body
application/json
application/json
curl -X POST "https://example.com/v1/workspace/invitations/497f6eca-6276-4993-bfeb-53cbbbba6f08/revoke"{ "id": "3a9c7e12-58bd-4f06-9a44-2c7e1b0d8f31", "email": "sam.okafor@northwind.example", "role": "editor", "state": "revoked", "expires_at": "2026-08-21T10:04:00+00:00", "created_at": "2026-08-14T10:04:00+00:00", "revoked_at": "2026-08-14T16:20:00+00:00", "invited_by": { "id": "c0f4a7d3-1b62-4e58-8d90-6f3a2c5e7b18", "display_name": "Dana Osei", "email": "dana.osei@northwind.example" }, "delivery": { "state": "sent", "attempts": 1, "message_id": "0100019180a4c1f2-9f0a4a2e-1e4c-4d31-9a77-5b8c2d1e0f44-000000", "last_sent_at": "2026-08-14T10:04:01+00:00" }}