Redeem an Invite Key
kygit-invite (design D1/D3/D9). Verifies auth_secret against the stored auth_hash (constant-time compare, kind-domain-separated — an invite secret never verifies a handoff hash) and, on success, atomically flips the recipient into an active org member at the invite's stored role, resolves the room fields (inviter, live_presences, catch-up cursor), and returns the sealed envelope for the recipient's own client to decrypt. ONE transaction, no durable lease — first writer wins, the SAME engine a handoff redeem runs. A row of the WRONG KIND at this route (e.g. a real handoff id) is the identical 403 INVITE_KEY_INVALID — never disclosed. A SAME-principal replay before expiry returns 200 deduplicated:true with the ORIGINAL sealed envelope. Auth: SIWX WALLET ONLY — a control-plane session, grant key, or service key is refused 403 INVITE_REDEEM_REQUIRES_WALLET. Tier-free: principalAuth resolves-or-provisions the caller's own org-of-one with no active tier required (the joiner's own cold-start tier purchase, if any, is a separate client-side step this route never blocks on). Never lifecycle-gated. Response carries Cache-Control: no-store.
Request
- Base URL: https://api.run402.com
- URL: https://api.run402.com/vaults/v1/invites/{invite_id}/redeem
- Auth: API key in header SIGN-IN-WITH-X
Path parameters
Headers
SIWX auth header — base64-encoded JSON payload containing a signed CAIP-122 (EIP-4361) message. See https://docs.x402.org/extensions/sign-in-with-x.
Request body
Response
Claimed. On a same-principal replay before expiry, deduplicated is true and sealed_envelope is the ORIGINAL envelope (never a pretend re-redeem).
Example response
{
"next_actions": [
{
"method": "POST",
"path": "/tiers/v1/hobby",
"auth": "x402"
}
]
}Changes
No recorded changes to this operation across all 1 revision of this API.