Prerequisites
- The Veil MCP connector is added and authorized in your client (see Connect)
- Your Veil account has completed KYC and has a bank account added
- Your wallet holds USDC or USDT
Running an offramp
1
Check session
The assistant calls
veil_get_session_status to see whether you are already logged in. If status is authenticated, skip to the account status step. If unauthenticated, continue to the next step.2
Request an OTP
The assistant calls
veil_request_otp with your email. Veil sends a six-digit code to that address.3
Verify the OTP
When you share the code, the assistant calls
veil_verify_otp. On success, your session is active and the assistant has your user profile.4
Check account status
The assistant calls If
veil_get_account_status. This tells it whether KYC is approved and a bank account is present. If stage is ready, skip to the wallet step.stage is needs_kyc, the assistant calls veil_kyc_start and shares a link for you to open in a browser. After you complete the form, it polls veil_kyc_check_status until status is approved.If stage is needs_bank_account, the assistant calls veil_bank_account_get_form_url and shares a link. You fill in your bank details in the browser, then return to the chat.5
List wallets
The assistant calls
veil_wallets_list to find your wallets and their USDC/USDT balances.6
Get a quote
The assistant calls
veil_offramp_quote with the amount, asset, wallet, and destination bank. The quote is non-binding — you can adjust the amount and re-quote as many times as you like.7
Execute the offramp
After you confirm the quote, the assistant calls
veil_offramp_execute. This creates a pending transaction and, when a code is required, sends a six-digit confirmation code to your email.The assistant requires
userConfirmed=true before calling veil_offramp_execute. It will not proceed without your explicit approval.A code isn’t always required. Depending on your offramp security settings, a send to your own bank may settle immediately — the response returns the transaction with no
requestId, and the next confirm step is skipped. Sends to a @username or a new recipient always require a code, and sandbox never does.8
Confirm with the code
Share the six-digit code from your email. The assistant calls
veil_offramp_confirm. This step is irreversible — once confirmed, the crypto is converted and the fiat is sent to your bank.9
Track status (optional)
To check progress later, the assistant calls
veil_offramp_get_transaction with the transaction ID, or veil_transactions_list to see recent activity.Sending to a Veil user by @handle
If the recipient has a Veil username, you can send directly to their@handle. The assistant calls veil_username_beneficiary_preview first to confirm the recipient is ready, then passes the binding token to veil_offramp_quote and veil_offramp_execute.
See also
- Environments — switching between sandbox and live modes
- Tool reference — all 31 tools with full input/output documentation
- Offramp lifecycle — the full lifecycle across all surfaces