Skip to main content
POST
Transfers use the unified POST /order endpoint. Send a transaction with a single transfer action. Conceptual background lives on the Protocol Native Asset Transfer page.
A transfer is rejected if it would push the source account into liquidation territory. The protocol bounds withdrawable amount by min(equity − 1.05 × MM, marginPnl).

Transaction Envelope

The account and signer must be the authorizing account:
  • internal: must be the master account that owns both from and to.
  • external: must be the account that owns the source.

Transfer Action (transfer)


Transfer Kinds

Internal

Move margin between accounts that share the same master (master to sub-account, sub-account to sub-account, master to a per-instrument isolated account, and back). No minimum amount.

Isolated-account top-up

To add margin to a per-instrument isolated account, set to to the isoPubkey returned on iso=true rows in the fullAccount/positions snapshot.

External

Move margin to any account on the network. Subject to a per-symbol minimum amount.
Notes:
  • external supports recipient auto-create only when the destination is on-curve (a real Solana wallet).
  • Unknown off-curve recipients are rejected; no implicit account creation.

Response

Same OrderResponse envelope. Successful transfers emit a transfer status row; failures emit transferFailed.

Common Error Messages

Failed transfers do not modify any account state.

Margin-only Refresh

transfer (along with createSubAccount with margin move and removeSubAccount) triggers a same-tick margin/risk refresh on the touched accounts. The OrderResponse is returned synchronously, so the response may arrive before the corresponding account stream delta.

Before You Start

See Transaction Signing for how to sign requests.Nonce: use a unique value (e.g. timestamp in nanoseconds): BigInt(Date.now()) * 1_000_000n.

Body

application/json

Transaction with a single transfer action

actions
transfer · object[]
required

Must contain exactly one transfer action

nonce
integer<int64>
required
account
string
required

Authorizing account public key (base58)

signer
string
required

Signer public key (base58)

signature
string
required

Ed25519 signature (base58)

Response

200 - application/json

Transfer accepted

status
enum<string>
Available options:
ok,
error
response
object