Skip to main content
This page walks through a complete Veil offramp from inside a chat. Each step names the tool the assistant calls and shows what to expect. The OTP confirmation step in this flow applies to every programmatic offramp surface, not only MCP — CLI and direct API use the same confirm gate. The dashboard uses session re-verification instead. See Offramp lifecycle for the full picture.

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
If any of those aren’t in place, the onboarding steps below cover them.

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 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.
If 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.
The sender never sees the recipient’s bank details. See Usernames.

See also