curl --request POST \
--url https://api.hyperliquid.xyz/exchange \
--header 'Content-Type: application/json' \
--data '
{
"action": {
"type": "spotSend",
"hyperliquidChain": "Mainnet",
"signatureChainId": "0xa4b1",
"destination": "0x1234567890123456789012345678901234567890",
"token": "PURR",
"amount": "1000.0",
"time": 1705234567890
},
"nonce": 1705234567890,
"signature": {
"r": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
"s": "0xfedcba0987654321fedcba0987654321fedcba0987654321fedcba0987654321",
"v": 27
},
"vaultAddress": null
}
'{
"status": "ok",
"response": {
"type": "spotSend",
"data": {
"status": "success"
}
}
}curl --request POST \
--url https://api.hyperliquid.xyz/exchange \
--header 'Content-Type: application/json' \
--data '
{
"action": {
"type": "spotSend",
"hyperliquidChain": "Mainnet",
"signatureChainId": "0xa4b1",
"destination": "0x1234567890123456789012345678901234567890",
"token": "PURR",
"amount": "1000.0",
"time": 1705234567890
},
"nonce": 1705234567890,
"signature": {
"r": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
"s": "0xfedcba0987654321fedcba0987654321fedcba0987654321fedcba0987654321",
"v": 27
},
"vaultAddress": null
}
'{
"status": "ok",
"response": {
"type": "spotSend",
"data": {
"status": "success"
}
}
}action (object, required) — The spot send action object containing:
type (string) — Must be "spotSend"hyperliquidChain (string) — "Mainnet" for mainnet, "Testnet" for testnetsignatureChainId (string) — Chain ID used for signing in hex format (e.g., "0xa4b1" for Arbitrum)destination (string) — Recipient address in 42-character hexadecimal formattoken (string) — Token identifier in format "TOKEN_NAME:TOKEN_ID" (e.g., "PURR:0xc1fb593aeffbeb02f85e0308e9956a90")amount (string) — Amount of tokens to send (e.g., "100.5")time (number) — Current timestamp in milliseconds (must match nonce)nonce (number, required) — Current timestamp in milliseconds (must match action.time)
signature (object, required) — EIP-712 signature of the action
"TOKEN_NAME:TOKEN_ID""PURR:0xc1fb593aeffbeb02f85e0308e9956a90"{
"types": {
"HyperliquidTransaction:SpotSend": [
{"name": "hyperliquidChain", "type": "string"},
{"name": "destination", "type": "string"},
{"name": "token", "type": "string"},
{"name": "amount", "type": "string"},
{"name": "time", "type": "uint64"}
]
},
"primaryType": "HyperliquidTransaction:SpotSend",
"domain": {
"name": "HyperliquidSignTransaction",
"version": "1",
"chainId": 42161,
"verifyingContract": "0x0000000000000000000000000000000000000000"
},
"message": {
"hyperliquidChain": "Mainnet",
"destination": "0x...",
"token": "PURR:0xc1fb593aeffbeb02f85e0308e9956a90",
"amount": "100.0",
"time": 1234567890123
}
}
status — "ok" if successfulresponse — Contains transfer details:
type — "default"curl -X POST https://api.hyperliquid.xyz/exchange \
-H "Content-Type: application/json" \
-d '{
"action": {
"type": "spotSend",
"hyperliquidChain": "Mainnet",
"signatureChainId": "0xa4b1",
"destination": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0",
"token": "PURR:0xc1fb593aeffbeb02f85e0308e9956a90",
"amount": "100.0",
"time": 1234567890123
},
"nonce": 1234567890123,
"signature": {...}
}'
{
"status": "ok",
"response": {
"type": "default"
}
}
Show child attributes
Action type for spot token transfer
spotSend Chain to send on
Mainnet, Testnet Chain ID for signature (use '0xa4b1' for Arbitrum mainnet or '0x66eee' for Arbitrum testnet)
Destination address to send spot token to
Token name or address to send
Amount of token to send (in token units with appropriate decimals)
Timestamp in milliseconds
Current timestamp in milliseconds
EIP-712 signature of the action with r, s, v components
Show child attributes
ECDSA signature r component (hex string)
"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"
ECDSA signature s component (hex string)
"0xfedcba0987654321fedcba0987654321fedcba0987654321fedcba0987654321"
ECDSA recovery id (27 or 28)
27
Address when trading on behalf of a vault or subaccount (optional)
Was this page helpful?