Skip to content

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

  • getPositions
  • getOpenOrders
  • getOrdersHistory
  • getTrades
  • getFundingPayments
  • getSubAccount
  • getDelegatedSigners
  • getBalanceUpdates

What Changed

  • EIP-712 Type: SubAccountAction no longer includes nonce field
  • Request Body: nonce parameter removed from request structure
  • Signature: Sign only subAccountId, action, and optional expiresAfter

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..." }
}
After:
{
  "params": { "action": "getPositions", "subAccountId": "123456789" },
  "signature": { "v": 28, "r": "0x...", "s": "0x..." }
}

Notes

  • The expiresAfter parameter remains optional for request expiration
  • Trading endpoints (placeOrders, cancelOrders, modifyOrder) still require nonce
  • Update your EIP-712 signing code to remove nonce from 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 NewOrdersRequest to PlaceOrders, fixed subAccountId type from uint64 to uint256, added missing closePosition and postOnly fields 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: getSubAccountsgetSubAccount
  • Request: Now requires params.subAccountId parameter
  • Response: Returns single subaccount object instead of array
  • EIP-712 Signature: Uses SubAccountAction type 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 object

December 1, 2025

  • Begin tracking changes
  • Only implemented methods shown