Skip to main content

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.

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.

The four steps

1

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.
2

Execute

Lock in the conversion. Veil creates a pending transaction and reserves the funds. What happens next depends on the surface (see below).
3

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.
4

Settle

Veil processes the conversion and pays out to the bank. Sandbox settlement is instant; production takes minutes to hours depending on the rail.

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 a bankAccountId — 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