Fee Quotes
Every transfer provides a comprehensive fee quote in thefees array. This allows you to show users exactly what they’ll pay before any money moves.
To review fees before execution:
- Create a transfer with
execute: false - Review the
feesarray in the response - Call
POST /transfers/{transferId}/executewhen ready to proceed
execute: true.
Fee Expiration: Fee quotes are valid for a limited time (typically 10-15 minutes from creation). The expiresAt field shows exactly when the fee quote will expire. If you don’t execute before this time, you’ll need to create a new transfer to get updated fees.
Fees
Transfer fees vary by source, target, amount and transfer type:- Bank fees - Traditional banking fees for depositing funds (e.g., $15.00 wire transfer fee)
- Conversion fees - Fees for exchanging between different assets
- Network fees - Onchain transaction costs to complete the transfer (e.g., ETH gas fees)
fees array when you create a transfer.
Transfer Lifecycle
When you create a transfer, it will be in one of these statuses that determine what action you need to take:quoted- Transfer is ready but requires manual execution via the/executeendpointprocessing- Transfer is being executed (no action needed - poll for completion)completed- Transfer completed successfullyfailed- Transfer failed (seefailureReasonfor details)
Execution Control
execute: true: Transfer will automatically attempt to executeexecute: false: Transfer will be created inquotedstatus and you must call the/executeendpoint. Use this to obtain a fee quote or validate a transfer destination before deciding whether to execute the Transfer.
Sources and Targets
- A source can be an Account or a Payment Method
- A target can be an Account, Payment Method, Onchain Address, or Email Address
Transfer Execution
When a transfer reachescompleted status, it contains the final execution details that delivered funds to the target and completion timestamps.
Failure Reasons
When a transfer fails, thefailureReason field provides a human-readable description of what went wrong.
Common failure reasons include:
- “Insufficient balance to complete this transfer.”
- “The recipient address is invalid for the selected network.”
- “The recipient address failed security validation checks.”
- “Unable to send to this recipient.”
failed.
Methods
createTransfer()
quoted. If execute: false, the transfer stays quoted until you call /v2/transfers/{transferId}/execute.
If execute: true, quoted status emits momentarily before the transfer moves to processing, where execution proceeds. Subscribe to the transfers webhook to follow progress in real time instead of polling.
Parameters
request
TransferRequest
requestOptions?
RequestOptions
Request-specific configuration.
Returns
HttpResponsePromise<Transfer>
Example
executeFundTransfer()
Parameters
request
ExecuteFundTransferRequest
requestOptions?
RequestOptions
Request-specific configuration.
Returns
HttpResponsePromise<Transfer>
Example
getTransferById()
Parameters
request
GetTransferByIdRequest
requestOptions?
RequestOptions
Request-specific configuration.
Returns
HttpResponsePromise<Transfer>
Example
listTransfers()
?status=processing- Monitor active transfers.?status=quoted- Find transfers awaiting execution.?status=failed- Review failed transfers for troubleshooting.?status=completed- Find completed transfers.
?accountId=<ID>- All transfers where the account is either source or target (OR semantics).?sourceAccountId=<ID>- Only transfers where the account is the source (outbound).?targetAccountId=<ID>- Only transfers where the account is the target (inbound). ProvidingaccountIdtogether withsourceAccountIdortargetAccountIdis a validation error and returns HTTP 400.
?createdAfter=2026-01-01T00:00:00Z&createdBefore=2026-01-31T23:59:59Z- Transfers created within a date range.?updatedAfter=2026-01-01T00:00:00Z- Transfers updated since a given time. Useful for incremental sync.
?sourceAsset=usd- Transfers funded from a USD account.?targetAsset=usdc- Transfers delivering USDC to the target.
?sourceAddress=0x...- Transfers from a specific on-chain source address.?targetAddress=0x...- Transfers to a specific on-chain destination address.?targetEmail=user@example.com- Transfers to a specific email recipient.?transferId=transfer_...- Look up a single transfer by ID; bypasses pagination.
Parameters
request?
ListTransfersRequest = {}
requestOptions?
RequestOptions
Request-specific configuration.
Returns
HttpResponsePromise<ListTransfersResponse>
Example
submitDepositTravelRule()
status will be completed and the transfer will proceed. Otherwise, status will be incomplete and missingFields will indicate which fields still need to be provided.
Parameters
request
DepositTravelRuleRequest
requestOptions?
RequestOptions
Request-specific configuration.
Returns
HttpResponsePromise<DepositTravelRuleResponse>