Skip to main content
POST
/
api
/
v1
/
transfers
curl -X POST /api/v1/transfers \
  -H "x-api-key: mh_live_abc123..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "tokenMint": "So11111111111111111111111111111111111111112",
    "amountRaw": "1000000000",
    "amountTokens": "1.0",
    "tokenDecimals": 9,
    "tokenSymbol": "SOL",
    "sourceOwner": "Abc123...",
    "recipientWallet": "Def456...",
    "hops": 7,
    "arrivalSeconds": 300,
    "externalId": "order_12345"
  }'
{
  "id": 42,
  "externalId": "order_12345",
  "supportBundleId": "MH-acme-42",
  "tokenMint": "So111...112",
  "amountRaw": "1000000000",
  "amountTokens": "1.0",
  "sourceOwner": "Abc123...",
  "recipientWallet": "Def456...",
  "fundingStrategy": "direct_orchestration",
  "hops": 7,
  "arrivalSeconds": 300,
  "pricingTier": "standard",
  "percentFeeBps": 50,
  "totalFlatFeeLamports": 42000,
  "status": "quote",
  "isTest": false,
  "quotedAt": "2025-01-15T10:30:00.000Z",
  "expiresAt": "2025-01-15T11:00:00.000Z",
  "createdAt": "2025-01-15T10:30:00.000Z"
}
Creates a new transfer in quote status with locked-in pricing. Call /prepare next to get the unsigned transactions. Idempotent via externalId — the same externalId returns the existing transfer rather than creating a duplicate.

Request body

tokenMint
string
required
The Solana mint address of the token to transfer.
amountRaw
string
required
Raw token amount as a string (e.g. "1000000000" for 1 SOL).
amountTokens
string
required
Human-readable token amount (e.g. "1.0").
sourceOwner
string
required
Solana public key of the wallet that will sign and pay for the deployment transactions.
recipientWallet
string
required
Solana public key of the final recipient.
tokenDecimals
integer
default:"6"
Decimal precision of the token (0–18).
tokenSymbol
string
Token symbol (e.g. "SOL"). Optional, used for display purposes.
hops
integer
Number of intermediate abstraction hops (3–10). Defaults to the integration setting.
arrivalSeconds
integer
Target transfer arrival time in seconds. Minimum: 60.
externalId
string
Your own identifier for idempotency (e.g. "order_12345"). Alphanumeric, ., _, - only.
tokenPriceUsd
number
Optional token price in USD. If not provided, resolved from Raydium spot pricing.

Response

id
integer
Internal transfer ID.
externalId
string
Your external ID, if provided.
supportBundleId
string
Human-readable support reference (e.g. "MH-acme-42").
tokenMint
string
Mint address of the token being transferred.
amountRaw
string
Transfer amount in base units.
amountTokens
string
Human-readable token amount.
sourceOwner
string
Solana public key of the signing wallet.
recipientWallet
string
Solana public key of the final recipient.
fundingStrategy
string
Internal funding strategy (e.g. "direct_orchestration").
hops
integer
Number of abstraction hops.
arrivalSeconds
integer
Target arrival time in seconds.
pricingTier
string
Pricing tier applied.
percentFeeBps
integer
Percentage fee in basis points.
totalFlatFeeLamports
integer
Total flat fee in lamports.
status
string
Transfer status. Initially quote.
isTest
boolean
Whether created with a test-mode API key.
quotedAt
string
ISO 8601 timestamp when pricing was quoted.
expiresAt
string
ISO 8601 timestamp after which the transfer expires if not funded.
createdAt
string
ISO 8601 creation timestamp.
curl -X POST /api/v1/transfers \
  -H "x-api-key: mh_live_abc123..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "tokenMint": "So11111111111111111111111111111111111111112",
    "amountRaw": "1000000000",
    "amountTokens": "1.0",
    "tokenDecimals": 9,
    "tokenSymbol": "SOL",
    "sourceOwner": "Abc123...",
    "recipientWallet": "Def456...",
    "hops": 7,
    "arrivalSeconds": 300,
    "externalId": "order_12345"
  }'
{
  "id": 42,
  "externalId": "order_12345",
  "supportBundleId": "MH-acme-42",
  "tokenMint": "So111...112",
  "amountRaw": "1000000000",
  "amountTokens": "1.0",
  "sourceOwner": "Abc123...",
  "recipientWallet": "Def456...",
  "fundingStrategy": "direct_orchestration",
  "hops": 7,
  "arrivalSeconds": 300,
  "pricingTier": "standard",
  "percentFeeBps": 50,
  "totalFlatFeeLamports": 42000,
  "status": "quote",
  "isTest": false,
  "quotedAt": "2025-01-15T10:30:00.000Z",
  "expiresAt": "2025-01-15T11:00:00.000Z",
  "createdAt": "2025-01-15T10:30:00.000Z"
}