Changelog
This page tracks significant changes to the Synthetix API documentation and structure.
January 6, 2026
Breaking Change: Nonce Removed from SubAccountAction Requests
SubAccountAction endpoints no longer require the nonce parameter in requests or EIP-712 signatures.
Affected Endpoints
getPositionsgetOpenOrdersgetOrdersHistorygetTradesgetFundingPaymentsgetSubAccountgetDelegatedSignersgetBalanceUpdates
What Changed
- EIP-712 Type:
SubAccountActionno longer includesnoncefield - Request Body:
nonceparameter removed from request structure - Signature: Sign only
subAccountId,action, and optionalexpiresAfter
New SubAccountAction EIP-712 Type
SubAccountAction: [
{ name: "subAccountId", type: "uint256" },
{ name: "action", type: "string" },
{ name: "expiresAfter", type: "uint256" }
]Migration
Before:{
"params": { "action": "getPositions", "subAccountId": "123456789" },
"nonce": 1735689600000,
"signature": { "v": 28, "r": "0x...", "s": "0x..." }
}{
"params": { "action": "getPositions", "subAccountId": "123456789" },
"signature": { "v": 28, "r": "0x...", "s": "0x..." }
}Notes
- The
expiresAfterparameter remains optional for request expiration - Trading endpoints (
placeOrders,cancelOrders,modifyOrder) still requirenonce - Update your EIP-712 signing code to remove
noncefrom the message for SubAccountAction endpoints
December 31, 2025
Fixed: EIP-712 Signature Documentation for placeOrders
Corrected EIP-712 type definitions in all placeOrders documentation to match backend implementation.
What Changed
- Getting Started Guide: Fixed Python and JavaScript examples to include complete EIP-712 types
- WebSocket placeOrders: Corrected type name from
NewOrdersRequesttoPlaceOrders, fixedsubAccountIdtype fromuint64touint256, added missingclosePositionandpostOnlyfields to all usage examples - Code Examples: Applied ES6 object shorthand syntax for cleaner, modern JavaScript
EIP-712 Types Fixed
The PlaceOrders type now correctly includes all required fields:
PlaceOrders: [
{ name: "subAccountId", type: "uint256" },
{ name: "orders", type: "Order[]" },
{ name: "grouping", type: "string" },
{ name: "nonce", type: "uint256" },
{ name: "expiresAfter", type: "uint256" }
]
Order: [
{ name: "symbol", type: "string" },
{ name: "side", type: "string" },
{ name: "orderType", type: "string" },
{ name: "price", type: "string" },
{ name: "triggerPrice", type: "string" },
{ name: "quantity", type: "string" },
{ name: "reduceOnly", type: "bool" },
{ name: "isTriggerMarket", type: "bool" },
{ name: "clientOrderId", type: "string" },
{ name: "closePosition", type: "bool" }
]Previously missing fields: subAccountId, grouping, clientOrderId, closePosition
Impact
This fixes signature validation failures that were preventing market maker integrations from placing orders successfully.
December 14, 2025
Breaking Change: getSubAccounts → getSubAccount
The getSubAccounts endpoint has been replaced with getSubAccount for retrieving subaccount information.
What Changed
- Endpoint:
getSubAccounts→getSubAccount - Request: Now requires
params.subAccountIdparameter - Response: Returns single subaccount object instead of array
- EIP-712 Signature: Uses
SubAccountActiontype with fields:subAccountId,action,expiresAfter(nonce removed as of January 6, 2026)
Migration
// Before
{ "params": { "action": "getSubAccounts" } }
// Returns: array of all subaccounts
// After
{ "params": { "action": "getSubAccount", "subAccountId": "123456789" } }
// Returns: single subaccount objectDecember 1, 2025
- Begin tracking changes
- Only implemented methods shown