An offramp is the conversion of stablecoin into fiat that lands in a bank account. Regardless of which surface kicks it off — dashboard, REST API, MCP server, or CLI — the lifecycle has the same shape: a non-binding quote, an execute step that commits the conversion, and a settlement that arrives via webhook minutes later.Documentation Index
Fetch the complete documentation index at: https://docs.useveil.co/llms.txt
Use this file to discover all available pages before exploring further.
The four steps
Quote
Ask “what would I get?” Inputs: wallet, amount, token, destination (bank account or
@username). Outputs: exchange rate, fee, fiat amount, estimated processing time. Quoting commits to nothing — you can call it as often as you like.Execute
Lock in the conversion. Veil creates a pending transaction and reserves the funds. What happens next depends on the surface (see below).
OTP-confirm (MCP only)
For the MCP surface, execute sends a six-digit code to your email. You confirm by passing the code back, and only then does Veil submit the order to actually move funds. The code is single-use and short-lived.
Two execute surfaces
Where the OTP step is required differs by surface — be clear which one you’re using.REST API and dashboard
Single step. The caller is already authenticated, so there’s no email-OTP between execute and submission.
MCP (AI agent surface)
Two steps. Execute sends an OTP; confirm verifies it before committing. This gives the human-in-the-loop final sign-off on conversions an agent proposes.
Where the funds land
Self-offramps accept abankAccountId — passed by the dashboard’s bank picker, the REST API, or the CLI. If you omit it, the offramp uses the wallet’s default bank account. Either way, the destination is the sender’s own bank.
Handle-routed offramps don’t take a bankAccountId. The sender names the recipient by @handle and Veil resolves the destination to the recipient’s primary bank server-side — the sender never sees or picks among the recipient’s banks.
Rate-drift protection (MCP)
Exchange rates can move between execute and confirm. On the MCP path, confirm re-quotes and rejects the offramp if the rate has shifted more than 5% since execute. The OTP is single-use, so the cancelled transaction can’t be retried — start a new offramp. The REST API has no equivalent check because there’s no time window between its quote and submission.See also
- Wallets — the source of the funds
- Bank accounts — the destination
- Auto-settle — the no-user-in-the-loop path
- Usernames — handle-routed offramps