Redeem a Handoff Key
kygit-handoff (design D3). Verifies auth_secret against the stored auth_hash (constant-time compare) and, on success, atomically flips the recipient into an active org member at the handoff's stored role and returns the sealed envelope for the recipient's own client to decrypt (the gateway never sees the plaintext). ONE transaction, no durable lease — first writer wins. A SAME-principal replay before expiry returns 200 deduplicated:true with the ORIGINAL sealed envelope (safe: only the key holder can derive wrap_key). Auth: SIWX WALLET ONLY — a control-plane session, grant key, or service key is refused 403 HANDOFF_REDEEM_REQUIRES_WALLET, because the keystore key published on this call is what makes the recipient a real key-holder. Tier-free: principalAuth resolves-or-provisions the caller's own org-of-one with no active tier required. Never lifecycle-gated. Response carries Cache-Control: no-store — it is never cached by an intermediary. vault-multi-writer rev 47, REQUIRED (no observe mode): the redeemer must ALSO submit writer_acceptance, its own double-signed acceptance of the mint-time writer_admission_grant — both signatures independently verified. On success the redeemer's directory signing half is published possession-verified in the SAME transaction.
Request
- Base URL: https://api.run402.com
- URL: https://api.run402.com/vaults/v1/handoffs/{handoff_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.