AuralisDocs
OperationsInvitations

Read what an invitation link offers, before accepting it

What the accept surface shows before the invitee commits (AC-124).

/v1/invitations/{token}No credential
Operation id
preview_invitation
Access
Public by design. No credential is required or consulted.
GET/v1/invitations/{token}

What the accept surface shows before the invitee commits (AC-124).

The token is the secret from the invitation email. This is what builds the "join Northwind Support as an editor" screen: it names the workspace, the role on offer, who invited them and when the link runs out.

Read acceptable before offering a join button. state says why it is false: expired, revoked, or accepted because someone already used it.

password_required decides which screen comes next. true means the invitee has no account yet and should be sent to the claim route to create one. false means they already have one and should sign in and accept. null means it could not be determined, and the safe move is to send them to sign in, which is recoverable in one step.

A token that does not match anything is refused with invitation_unknown and nothing else. No address, no workspace, no role. Reading a 404 here as "wrong workspace" is a mistake: it means the value is not a live token.

Public, and therefore hardened as an enumeration surface: a value that does not hash to a stored digest gets invitation_unknown carrying no address, no workspace, no inviter, no role and no expiry. Everything this route knows it declines to say until the caller has proved they hold the credential it is about.

Expired, revoked and consumed are named here rather than flattened into unknown, and that is a deliberate reading of the anti-oracle rule. The rule protects against a caller who does not hold a token; such a caller cannot reach these branches at all, because reaching them requires a value that matches a SHA-256 digest of a 256-bit CSPRNG secret. Flattening them would defend against an attack that already requires the credential, at the cost of AC-112's three distinct answers and AC-125's nine distinct surfaces: an invitee holding a genuinely expired link would be told only that their link is "not valid", which is the shared message FR-103 exists to forbid.

Charged against the acceptance budget, refunded once the token resolves. It shares that budget rather than taking a third scope because it is the same actor doing the same thing one step earlier, and separate budgets would let a guesser spend both. An invitee following their own link pays nothing; a caller working through the keyspace pays for every miss.

Access: no credential.

Path Parameters

token*Token

Response Body

application/json

application/json

curl -X GET "https://example.com/v1/invitations/string"
{  "state": "pending",  "acceptable": true,  "email": "sam.okafor@northwind.example",  "role": "editor",  "expires_at": "2026-08-21T10:04:00+00:00",  "workspace_name": "Northwind Support",  "invited_by": {    "display_name": "Dana Osei",    "email": "dana.osei@northwind.example"  },  "password_required": true}