curl --request POST --url https://relay.mainnet.kuru.io/relay \
--header "Authorization: Bearer $KURU_RELAY_JWT" \
--header 'Content-Type: application/json' \
--data '{
"requestId":"018f5ef2-88a1-7b41-a826-4b679010f87f",
"method":"wallet.execute_batch",
"wallet":"0x1111111111111111111111111111111111111111",
"payload":{
"header":{"accountId":"123","market":"0x8121ee960066e4344a213f9ac7502395502aee7a","authNonce":"1","nonce":"1720000000123","deadline":"1720000030","clientOrderId":"0x0000000000000000000000000000000000000000000000000000000000000001","builder":"0x0000000000000000000000000000000000000000","builderFeePps":"0"},
"orders":[{"side":"BUY","quantity":"1000000","price":"123400","tif":"GTC","executionInstruction":"POST_ONLY","minSizeAfterBlock":"0"}],
"cancelSlotIdxs":[],"expectedOrderIds":[],"signature":"0x..."
},
"authorization7702":null
}'
{
"requestId": "018f5ef2-88a1-7b41-a826-4b679010f87f",
"status": "BROADCAST",
"txHash": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"sponsorAddress": "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"sponsorNonce": "42",
"transactionType": "DYNAMIC_FEE"
}
REST methods
Execute order batch
Place readable native orders, cancel maker slots, or perform both atomically.
POST
/
relay
curl --request POST --url https://relay.mainnet.kuru.io/relay \
--header "Authorization: Bearer $KURU_RELAY_JWT" \
--header 'Content-Type: application/json' \
--data '{
"requestId":"018f5ef2-88a1-7b41-a826-4b679010f87f",
"method":"wallet.execute_batch",
"wallet":"0x1111111111111111111111111111111111111111",
"payload":{
"header":{"accountId":"123","market":"0x8121ee960066e4344a213f9ac7502395502aee7a","authNonce":"1","nonce":"1720000000123","deadline":"1720000030","clientOrderId":"0x0000000000000000000000000000000000000000000000000000000000000001","builder":"0x0000000000000000000000000000000000000000","builderFeePps":"0"},
"orders":[{"side":"BUY","quantity":"1000000","price":"123400","tif":"GTC","executionInstruction":"POST_ONLY","minSizeAfterBlock":"0"}],
"cancelSlotIdxs":[],"expectedOrderIds":[],"signature":"0x..."
},
"authorization7702":null
}'
{
"requestId": "018f5ef2-88a1-7b41-a826-4b679010f87f",
"status": "BROADCAST",
"txHash": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"sponsorAddress": "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"sponsorNonce": "42",
"transactionType": "DYNAMIC_FEE"
}
Submits
The header requires
Up to 256 orders and 62 unique cancellations are accepted.
wallet.execute_batch. Use this method for normal order entry and cancellation integrations.
The example uses the verified mainnet WETHUSDC market, but its wallet, nonce, deadline, account ID, and signature are placeholders. Build and sign a fresh intent for the selected network before submitting.
string
required
New lowercase UUIDv7 for correlation.
string
default:"wallet.execute_batch"
required
Must be
wallet.execute_batch.string
required
Secondary trading EOA matching the bearer JWT.
object
required
Signed
BatchIntent containing header, orders, cancelSlotIdxs, expectedOrderIds, and signature.object | null
Normally
null after onboarding.accountId, market, authNonce, increasing nonce, Unix-second deadline, 32-byte clientOrderId, builder, and builderFeePps. Every integer is a canonical unsigned decimal string.
Sign BatchIntent with the KuruTradingWallet EIP-712 domain: version 2, chain ID 143 on mainnet or 10143 on testnet, and the delegated trading EOA as verifyingContract (not the shared implementation or Relay address). Version-1 wallet signatures are invalid for the current implementation; rebuild and re-sign any pending intents created with that domain. AccountCore signer grants use their separate KuruAccountCore version-1 domain. See Trading-wallet Signing.
Each native order requires side (BUY/SELL), quantity, price, tif (GTC/IOC/FOK), executionInstruction (NONE/POST_ONLY), and minSizeAfterBlock. Post-only requires GTC.
curl --request POST --url https://relay.mainnet.kuru.io/relay \
--header "Authorization: Bearer $KURU_RELAY_JWT" \
--header 'Content-Type: application/json' \
--data '{
"requestId":"018f5ef2-88a1-7b41-a826-4b679010f87f",
"method":"wallet.execute_batch",
"wallet":"0x1111111111111111111111111111111111111111",
"payload":{
"header":{"accountId":"123","market":"0x8121ee960066e4344a213f9ac7502395502aee7a","authNonce":"1","nonce":"1720000000123","deadline":"1720000030","clientOrderId":"0x0000000000000000000000000000000000000000000000000000000000000001","builder":"0x0000000000000000000000000000000000000000","builderFeePps":"0"},
"orders":[{"side":"BUY","quantity":"1000000","price":"123400","tif":"GTC","executionInstruction":"POST_ONLY","minSizeAfterBlock":"0"}],
"cancelSlotIdxs":[],"expectedOrderIds":[],"signature":"0x..."
},
"authorization7702":null
}'
expectedOrderIds must be parallel to cancelSlotIdxs; bind cancellations to current order IDs whenever possible.
{
"requestId": "018f5ef2-88a1-7b41-a826-4b679010f87f",
"status": "BROADCAST",
"txHash": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"sponsorAddress": "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"sponsorNonce": "42",
"transactionType": "DYNAMIC_FEE"
}