Accept a team invitation
const url = 'http://localhost:8080/v1/auth/accept-invite';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"token":"example","password":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url http://localhost:8080/v1/auth/accept-invite \ --header 'Content-Type: application/json' \ --data '{ "token": "example", "password": "example" }'Consumes the single-use invite token (CAS — a replay or a race
loses) and attaches the membership. If no account exists for the
invited email, password is required (min 12 chars), the account
is created, and a session cookie is minted (session_minted: true). An EXISTING account is attached WITHOUT a session —
possession of the email alone must not log into an
already-privileged account; the user signs in with their own
password afterwards. ADR-081.
Request Bodyrequired
Section titled “Request Bodyrequired”object
Required (and validated) only when no account exists for the invited email; ignored otherwise.
Example generated
{ "token": "example", "password": "example"}Responses
Section titled “Responses”Membership attached; cookie set when session_minted is true
object
Session expiry (RFC 3339) when session_minted; empty string otherwise.
Example generated
{ "user_id": "example", "email": "example", "tenant_id": "example", "session_minted": true, "livemode": true, "expires_at": "example"}Token invalid/expired/revoked/used, or password does not meet policy
object
object
One of invalid_request_error, authentication_error,
rate_limit_error or api_error. Every error the API
answers has this shape, including an unknown path (404,
code route_not_found) and a method the path does not take
(405, code method_not_allowed, with an Allow header).
The few exceptions are listed in docs/api-surface.md.
The request field the error is about. Sent only when the error
names one. A request body may hold only the fields its
operation lists, spelled and cased as listed: any other
field, or one the server sets (such as id), is refused
with 422 and param naming it. An operation with no request body lists no fields: send
no body, {} or null. The Stripe and Postmark webhooks and
the LiteLLM callback take their sender’s body as it comes.
Example
{ "error": { "type": "invalid_request_error" }}