Transfers
Outgoing transactions are called transfers in the Client API. A transfer created via the API goes through the same policy evaluation, approval, and MPC signing pipeline as one initiated from the dashboard — an API key cannot bypass whitelists, limits, quorums, or the mobile-signer approval step.
Create a transfer
POST /v1/profiles/{profile_id}/transfersRequires an Idempotency_key header (UUID).
{
"wallet_id": "770e8400-e29b-41d4-a716-446655440000",
"destination_address": "0x1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b",
"asset_id": "9c1d2e30-5f6a-4b7c-8d9e-0f1a2b3c4d5e",
"amount": "1500.00",
"external_id": "INV-2026-0042"
}| Field | Type | Required | Description |
|---|---|---|---|
wallet_id | UUID | Yes | Source wallet |
destination_address | string | Yes | Destination — must pass the wallet’s whitelist policy |
asset_id | UUID | Yes | Asset to send (see the asset directory) |
amount | string | Yes | Decimal string in asset units |
external_id | string | No | Your reference (order ID, invoice number) — returned in responses and webhooks |
List transfers
GET /v1/profiles/{profile_id}/transfersPaginated via page/page_size; filterable by wallet and status.
Transfer statuses
| Status | Meaning |
|---|---|
PENDING | Created; policy evaluation in progress |
PENDING_APPROVAL | Awaiting the required approvals |
PENDING_SIGNATURE | Approvals collected; MPC signing in progress |
READY_TO_SEND | Signed; ready to broadcast |
SENT | Broadcast to the network — terminal success |
REJECTED | Rejected by an approver or signer, or cancelled by a user |
REJECTED_BY_POLICY | Blocked by a policy rule |
NO_POLICY_FOUND | No matching policy (default-deny) |
EXPIRED | Approval window expired |
FAILED | Signing or broadcast failed |
A sub_status field carries the detailed reason on terminal states (e.g.
REJECTED_BY_APPROVER, CANCELLED_BY_USER, BROADCAST_FAILED).
Track status changes via webhooks
(TRANSFER_CREATED, TRANSFER_UPDATED, TRANSFER_DELIVERED, TRANSFER_FAILED)
instead of polling.
Fee estimation
POST /v1/profiles/{profile_id}/fee-estimateRequires an Idempotency_key header. Same body as transfer creation plus an
optional priority:
{
"wallet_id": "770e8400-e29b-41d4-a716-446655440000",
"destination_address": "0x1a2b...",
"asset_id": "9c1d2e30-...",
"amount": "1.5",
"priority": "STANDARD"
}priority is SLOW, STANDARD (default), or FAST. The response contains
fee_value (in the native fee currency), fee_value_usd, fee_currency, and
chain-specific metadata.
Cancelling and fee bumping
Cancelling a pending transfer and bumping the fee of a stuck transaction are performed in the dashboard, which enforces the role and approval rules for those actions — they are not part of the public API. See Transaction Lifecycle.