Skip to main content
POST
Creates a new transfer in quote status with locked-in pricing: the fee tier, the fees and the exact on-chain hop amount (see Pricing & revenue share). Call /prepare next to get the unsigned transactions. Pay one wallet with recipientWallet, or up to 20 with destinations (multi-destination). Send exactly one of the two. Idempotent via externalId — the same externalId returns the existing transfer rather than creating a duplicate.
On compliance-enabled networks the route is screened automatically after deployment, and a screening fee of 0.002 SOL per screened wallet is charged at deploy. /estimate quotes it. You don’t take any action to pass screening — see Compliance & screening for the lifecycle, funding impact, and what happens if a wallet is flagged.

Request body

string
required
The Solana mint address of the token to transfer.
string
required
Raw token amount as a string (e.g. "1000000000" for 1 SOL).
string
required
Human-readable token amount (e.g. "1.0").
string
required
Solana public key of the wallet that will sign and pay for the deployment transactions.
string
Solana public key of the final recipient. Provide exactly one of recipientWallet or destinations.
array
Pay several wallets from one route: [{ "wallet": "...", "amountRaw": "..." }], 1–20 entries. Each amountRaw is that destination’s share of the transfer’s amountRaw. Shares must sum to it exactly, and wallets must be distinct. Each destination receives its share of the post-fee hop amount. See Multi-destination transfers.
integer
default:"6"
Decimal precision of the token (0–18).
string
Token symbol (e.g. "SOL"). Optional, used for display purposes.
integer
Number of intermediate abstraction hops (3–10). Defaults to the integration setting. Not with route.
integer
Seconds from now until delivery: 60 to 2,592,000 (30 days). Not with route, which sets its own timing.
object
A custom route: { "hops": [...] }, each hop either a wallet you name, { "wallet": "<address>", "waitSeconds": 120 }, or a draw from the hop library, { "bundle": "cex", "waitSeconds": 300 }. waitSeconds (20 to 2,592,000) is how long the funds stay in that hop. To one recipient the route ends on the recipient, added as the last hop. Not with hops or arrivalSeconds: the route sets both. Every rule violation comes back at once as MH_018.
integer
Use a saved route template as route. Its hops are copied onto the transfer, so later edits to the template do not change it, and bundle hops are drawn for this transfer. Not with route, hops or arrivalSeconds. MH_021 if your integration has no such template.
string
Your own identifier for idempotency (e.g. "order_12345"). Alphanumeric, ., _, - only.
number
Fallback USD price, used only when the on-chain pool price can’t be read.

Response

integer
Internal transfer ID.
string
Your external ID, if provided.
string
Human-readable support reference (e.g. "MH-acme-42").
string
Mint address of the token being transferred.
string
Transfer amount in base units.
string
Human-readable token amount.
string
Solana public key of the signing wallet.
string | null
Final recipient; null for a multi-destination transfer.
integer | null
Number of destinations, or null.
array | null
Per destination: wallet, amountRaw (what it receives), status (pending/paid), payoutSignature, paidAt.
string
What the recipient, or all destinations together, receives: the on-chain hop amount.
string
Internal funding strategy (e.g. "direct_orchestration").
integer
Number of abstraction hops.
integer
Target arrival time in seconds.
string
Pricing tier applied.
integer
Percentage fee in basis points.
string
Percent fee in token base units.
integer
The tier’s per-hop charge.
integer
Total per-hop + per-route charge in lamports.
string
Transfer status. Initially quote.
boolean
Whether created with a test-mode API key.
string
ISO 8601 timestamp when pricing was quoted.
string
ISO 8601 timestamp after which the transfer expires if not funded.
string
ISO 8601 creation timestamp.
object
{ hops: [{ index, address, label, category, scheduledAt, executedAt, txSignature }] }: the route’s hops on chain, in order, with any library draws filled in. label and category are set for hop library wallets, null otherwise. Absent if the hops could not be read.