@username or a one-off recipient always require it; sandbox never does.
Quote
Preview the rate and fees before committing:
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)
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
--bank-account-id and --beneficiary-username are mutually exclusive.
Show
Idempotency and retries
Eachveil 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 codesveil 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
- Offramp lifecycle — the full quote-to-settle sequence
- Usernames — using
beneficiary-previewbefore a handle-routed offramp