curl --request POST \
--url https://api.hyperliquid.xyz/exchange \
--header 'Content-Type: application/json' \
--data '
{
"action": {
"type": "usdSend",
"hyperliquidChain": "Mainnet",
"signatureChainId": "0xa4b1",
"destination": "0x1234567890123456789012345678901234567890",
"amount": "100.000000",
"time": 1705234567890
},
"nonce": 1705234567890,
"signature": {
"r": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
"s": "0xfedcba0987654321fedcba0987654321fedcba0987654321fedcba0987654321",
"v": 27
},
"vaultAddress": null
}
'{
"status": "ok",
"response": {
"type": "usdSend",
"data": {
"status": "success"
}
}
}curl --request POST \
--url https://api.hyperliquid.xyz/exchange \
--header 'Content-Type: application/json' \
--data '
{
"action": {
"type": "usdSend",
"hyperliquidChain": "Mainnet",
"signatureChainId": "0xa4b1",
"destination": "0x1234567890123456789012345678901234567890",
"amount": "100.000000",
"time": 1705234567890
},
"nonce": 1705234567890,
"signature": {
"r": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
"s": "0xfedcba0987654321fedcba0987654321fedcba0987654321fedcba0987654321",
"v": 27
},
"vaultAddress": null
}
'{
"status": "ok",
"response": {
"type": "usdSend",
"data": {
"status": "success"
}
}
}action (object, required) — The USD send action object containing:
type (string) — Must be "usdSend"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 formatamount (string) — Amount of USDC to send (e.g., "100.5" for 100.5 USDC)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
{
"types": {
"HyperliquidTransaction:UsdSend": [
{"name": "hyperliquidChain", "type": "string"},
{"name": "destination", "type": "string"},
{"name": "amount", "type": "string"},
{"name": "time", "type": "uint64"}
]
},
"primaryType": "HyperliquidTransaction:UsdSend",
"domain": {
"name": "HyperliquidSignTransaction",
"version": "1",
"chainId": 42161,
"verifyingContract": "0x0000000000000000000000000000000000000000"
},
"message": {
"hyperliquidChain": "Mainnet",
"destination": "0x...",
"amount": "100.5",
"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": "usdSend",
"hyperliquidChain": "Mainnet",
"signatureChainId": "0xa4b1",
"destination": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0",
"amount": "100.5",
"time": 1234567890123
},
"nonce": 1234567890123,
"signature": {...}
}'
{
"status": "ok",
"response": {
"type": "default"
}
}
time parameter in the action must exactly match the nonce parameter. This ensures signature uniqueness and prevents replay attacks.Show child attributes
Action type for USDC transfer
usdSend Chain to send on
Mainnet, Testnet Chain ID for signature (use '0xa4b1' for Arbitrum mainnet or '0x66eee' for Arbitrum testnet)
Destination address to send USDC to
Amount of USDC to send (in USDC units, with 6 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?