The Signing Kit uses a prepare → stamp → confirm pattern. Every signing operation (wallet creation, address creation, transaction signing) follows the same three steps:Documentation Index
Fetch the complete documentation index at: https://docs.relayer.fi/llms.txt
Use this file to discover all available pages before exploring further.
- Prepare — your backend calls the API to get an unsigned activity/transaction
- Stamp — the user signs the payload with a passkey (WebAuthn, browser-side)
- Confirm — your backend sends the stamped payload back; the enclave validates and processes it
Prerequisites
- A Relayer API key with the Signing module enabled (see Authentication)
- A user with a registered passkey in your workspace (see step 1 below)
Step 1 — Register a passkey (one-time setup)
The first time a user enrolls in your workspace, they register a passkey. This creates the wallet workspace and binds the user’s WebAuthn credential to it. The full flow happens in the browser via the Relayer dashboard or your own WebAuthn-capable frontend. The API calls involved:For end-user onboarding (Embedder integrators), the Widget Kit handles passkey enrollment automatically. See Widget Kit.
Step 2 — Create a wallet
Prepare the wallet creation
Your backend asks the API for an unsigned wallet-creation activity.The response includes the unsigned activity payload your frontend needs to stamp.
cURL
User stamps with passkey
Your frontend prompts the user with a WebAuthn biometric challenge (Face ID, fingerprint, security key). The browser produces a stamped activity.
Frontend (browser)
Step 3 — Generate an address
Same prepare/stamp/confirm pattern, this time forCREATE_WALLET_ACCOUNTS:
Step 4 — Sign a transaction
Prepare the transaction
cURL
transactionId— store this for laterunsignedTransaction(hex) — pass to the frontend for passkey signing
awaiting_signature.User signs with passkey
Your frontend signs the unsigned transaction hex with the user’s passkey:
Frontend (browser)
Confirm — and broadcast
Send the signed hex to confirm. The API validates the signature against the original unsigned transaction via hash comparison, persists the signed transaction, and broadcasts to the blockchain.The response contains
cURL
txHash once the transaction is in the mempool.Separating signing from broadcasting
If you need to gate the broadcast step (multi-step approval, scheduled submission), don’t use confirm-with-broadcast. Instead:POST /v1/transactions/prepare→ unsigned tx- User stamps with passkey on the frontend
POST /v1/transactions/confirm→ signs and persists (no broadcast yet) — TODO: confirm whether your tenant supports this gated modePOST /v1/transactions/broadcast/{transactionId}later, when conditions are met
cURL
Cancelling before broadcast
A transaction inawaiting_signature status can be cancelled:
cURL
Approval gate (high-value transactions)
If your workspace has approval enabled and the transaction value exceeds the threshold,POST /v1/transactions/confirm returns HTTP 202 with { approvalId } instead of broadcasting. The transaction stays pending until an authorized team member stamps approval:
Next Steps
Endpoints
Full endpoint reference for wallets, transactions, passkeys, recovery, policies, and approvals.
API Reference
Interactive schemas and try-it playground.
Glossary
Wallet, passkey, policy, and other domain terms.
Error Reference
API error codes and handling patterns.