Skip to main content
The CLI offramp flow is: quote (optional), create (which executes and, when a code is required, prompts for the emailed OTP to confirm), then show. See Offramp lifecycle for the full picture. Whether an offramp needs a code depends on your offramp security settings, which you manage in the dashboard under Settings → Offramp security. The CLI honors these settings but can’t change them — the dashboard is the only place to do that. When a code is required, the CLI uses a per-transaction email OTP — the same gate the MCP server uses — rather than the dashboard’s session re-verification. Sends to your own saved bank can skip the code if you’ve turned it off or set an amount threshold; sends to a @username or a one-off recipient always require it; sandbox never does.

Quote

Preview the rate and fees before committing:
Flags: Quoting commits to nothing. You can call it repeatedly. When --wallet-id is given, the CLI also checks whether the wallet holds enough balance.

Create (execute + OTP + confirm)

This is a two-step interactive command:
1

Pre-send confirmation

The CLI fetches a quote, prints the amount, fee, and destination, and asks you to confirm:
Pass --yes to skip this prompt. When your settings require a code, the OTP step below still applies; when they don’t, the send completes here.
2

Execute (and receive an OTP if required)

After you confirm, the CLI sends the execute request. When a code is required, Veil creates a pending transaction and emails a six-digit code to your account email:
When your settings waive the code, there’s no prompt — the CLI prints the transaction details right away.
3

Enter the OTP

The CLI accepts up to 5 attempts. On success, it prints the transaction ID, amounts, and status.
Flags: --bank-account-id and --beneficiary-username are mutually exclusive.

Show

Prints current status, amounts in and out, fee, wire reference (once settled), and timestamps.

Idempotency and retries

Each veil offramp create invocation generates a fresh idempotency key. If the execute request succeeds but the network drops before you enter the OTP, the unconfirmed transaction expires automatically — you can safely run veil offramp create again to start a new one. If an OTP email was sent before the network error, disregard it — that code is tied to the expired transaction.

Error codes

These are the codes veil offramp create surfaces and what each means: For any code followed by “Run veil offramp create again”, the failed transaction is closed — starting a new one is always safe.

See also