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.

Five tools cover the full offramp lifecycle. Read the Offramp lifecycle concept page for the sequence overview.

veil_offramp_quote

Get a non-binding exchange rate quote for converting crypto to fiat. Call this before veil_offramp_execute to show the user what they will receive. Inputs
amount
number
required
Amount of crypto to convert, in whole units (e.g. 50 for 50 USDC).
assetIn
string
required
Token to convert. One of USDC or USDT.
walletId
string
Optional. When provided, the tool verifies the wallet holds at least amount of assetIn before calling the upstream quote service. Fails fast on over-balance requests.
bankAccountId
string
Optional. Route the quote to a specific bank account. Omit to use the wallet’s primary bank. Mutually exclusive with beneficiaryUsername.
beneficiaryUsername
string
Optional. Quote a send-to-handle offramp. Pass the @handle without the @ prefix. Mutually exclusive with bankAccountId.
bindingToken
string
Optional. Obtained from veil_username_beneficiary_preview’s bindingHint field. Locks the recipient and prevents drift between preview and execute.
Outputs
status
string
required
ok on success, error on failure.
amountIn
number
Amount of crypto sent.
assetIn
string
Token sent (USDC or USDT).
amountOut
number
Estimated fiat amount to receive.
currencyOut
string
Fiat currency (e.g. EUR, USD).
exchangeRate
number
Exchange rate (fiat per crypto unit).
noahFee
number
Processing fee in destination currency.
totalFee
number
Total fee in destination currency.
bankAccountId
string
The bank account that will receive the funds.
suffixLast4
string
Last four digits of the destination account for confirmation.
reason
string
Error description when status is error.
Example
[calls veil_offramp_quote with amount=50, assetIn="USDC", walletId="wal_xyz"]
→ status: "ok", amountIn: 50, assetIn: "USDC", amountOut: 46.23,
  currencyOut: "EUR", exchangeRate: 0.9246, totalFee: 0.46,
  bankAccountId: "ba_abc", suffixLast4: "1234"
When quoting against a beneficiaryUsername instead of a bankAccountId, the response carries the resolved destination from the binding preview — the recipient’s bankAccountId and suffixLast4 reflect their primary bank, not the sender’s.

veil_offramp_execute

Initiate an offramp. Creates a pending transaction and sends a six-digit confirmation code to the user’s email. The code expires in 10 minutes.
Call this only after the user has reviewed the quote and explicitly confirmed they want to proceed. The userConfirmed field must be true.
Inputs
walletId
string
required
ID of the wallet to debit.
amount
number
required
Amount to convert.
assetIn
string
required
Token to convert. One of USDC or USDT.
userConfirmed
boolean
required
Must be true. The assistant will not call this tool without explicit user approval.
bankAccountId
string
Optional. Destination bank account. Omit to use the wallet’s primary bank. Mutually exclusive with beneficiaryUsername.
beneficiaryUsername
string
Optional. Send to a @handle recipient. Mutually exclusive with bankAccountId.
bindingToken
string
Optional. From veil_username_beneficiary_preview. Locks the recipient.
Outputs
status
string
required
ok on success, error on failure.
transactionId
string
Transaction ID. Pass to veil_offramp_confirm.
requestId
string
Confirmation request ID. Pass to veil_offramp_confirm.
amountIn
number
Amount of crypto being converted.
assetIn
string
Token being converted.
amountOut
number
Fiat amount to receive.
currencyOut
string
Fiat currency.
fee
number
Fee applied.
exchangeRate
number
Rate locked at execute time.
confirmationExpiresAt
string
ISO 8601 timestamp when the confirmation code expires.
maskedEmail
string
Masked email where the code was sent (e.g. y***@example.com).
message
string
Human-readable instruction for the next step (e.g. prompting the user for the confirmation code).
reason
string
Error description when status is error.
Example
[calls veil_offramp_execute with walletId="wal_xyz", amount=50, assetIn="USDC", userConfirmed=true]
→ status: "ok", transactionId: "txn_123", requestId: "req_456",
  maskedEmail: "y***@example.com", amountOut: 46.23, currencyOut: "EUR",
  message: "Ask the user for the 6-digit code sent to their email."

veil_offramp_confirm

Confirm an offramp by submitting the six-digit code sent to the user’s email. This step is irreversible. Inputs
transactionId
string
required
From veil_offramp_execute.
requestId
string
required
From veil_offramp_execute.
code
string
required
The six-digit code from the user’s email.
Outputs
status
string
required
ok on success, error on failure.
transaction
object
Full transaction record. See veil_offramp_get_transaction for the shape.
reason
string
Error description when status is error. Common values: Invalid confirmation code, Confirmation code has expired, Exchange rate changed.
Example
[calls veil_offramp_confirm with transactionId="txn_123", requestId="req_456", code="719302"]
→ status: "ok", transaction.status: "processing", transaction.currencyOut: "EUR"

veil_offramp_get_transaction

Get the current status and details of a specific transaction. Inputs
transactionId
string
required
Transaction ID from veil_offramp_execute or veil_transactions_list.
Outputs
status
string
required
ok on success, error on failure.
transaction
object
Transaction record with fields: id, type, status (pending / processing / completed / failed), amountIn, assetIn, amountOut, currencyOut, fee, exchangeRate, wireRef, createdAt, settledAt, wallet.name, wallet.chain, bankAccount.bankName, bankAccount.suffixLast4, bankAccount.currency. The bankAccount.* fields are null when the viewer is not the account owner (e.g. on the sender side of a @handle offramp).
reason
string
Error description when status is error.
Example
[calls veil_offramp_get_transaction with transactionId="txn_123"]
→ status: "ok", transaction.status: "completed", transaction.settledAt: "2026-05-14T14:22:00Z"

veil_transactions_list

List offramp and deposit transactions with pagination and filtering. Inputs
limit
number
Number of results per page. Maximum 100. Server applies a default if omitted.
offset
number
Pagination offset. Server defaults to 0 if omitted.
status
string
Optional filter. One of pending, processing, completed, failed.
type
string
Optional filter. One of offramp, deposit.
Outputs
status
string
required
ok on success, error on failure.
transactions
array
Array of transaction records. Each has the same shape as veil_offramp_get_transaction’s transaction field.
total
number
Total number of matching transactions.
hasMore
boolean
Whether another page is available.
limit
number
Limit applied to this response.
offset
number
Offset applied to this response.
reason
string
Error description when status is error.
Example
[calls veil_transactions_list with status="completed", limit=5]
→ status: "ok", total: 12, hasMore: true, transactions: [...]

See also