Get Balance Updates
Retrieve historical deposit and withdrawal transactions for a subaccount. This endpoint returns balance changes from on-chain deposits and withdrawals, excluding funding payments.
Endpoint
POST https://papi.synthetix.io/v1/tradeRequest
Request Format
{
"params": {
"action": "getBalanceUpdates",
"subAccountId": "1867542890123456789",
"actionFilter": "DEPOSIT",
"limit": 50,
"offset": 0
},
"nonce": 1704067200000,
"expiresAfter": 1704153600000,
"signature": {
"v": 28,
"r": "0x19480589384695193600abcdef19480589384695193600abcdef19480589384695193600abcdef19480589384695193600abcdef",
"s": "0xabcdef19480589384695193600abcdef19480589384695193600abcdef19480589384695193600abcdef19480589384695193600"
}
}Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
params | object | Yes | Request parameters wrapper |
params.action | string | Yes | Must be "getBalanceUpdates" |
params.subAccountId | string | Yes | Subaccount ID to retrieve balance updates for |
params.actionFilter | string | No | Filter by action type: "DEPOSIT", "WITHDRAWAL", or comma-separated "DEPOSIT,WITHDRAWAL". Defaults to both |
params.limit | integer | No | Maximum number of results to return (default: 50, max: 1000) |
params.offset | integer | No | Pagination offset (default: 0) |
| Parameter | Type | Required | Description |
|---|---|---|---|
nonce | uint64 | Yes | Unix milliseconds timestamp (must be monotonically increasing) |
signature | object | Yes | EIP-712 signature object |
expiresAfter | uint64 | No | Unix milliseconds expiration timestamp (5x rate limit on stale cancels) |
Response
Response Structure
| Field | Type | Description |
|---|---|---|
status | string | Always "ok" for successful requests or "error" for failures |
response | object | Response object containing balance updates (omitted when status is "error") |
error | object | Error details (only present when status is "error") |
request_id | string | Request tracking identifier |
Success Response
{
"status": "ok",
"response": {
"balanceUpdates": [
{
"id": 12345,
"subAccountId": 1867542890123456789,
"action": "DEPOSIT",
"status": 1,
"amount": "1000.00",
"collateral": "USDT",
"timestamp": 1704067200000,
"txHash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"
},
{
"id": 12346,
"subAccountId": 1867542890123456789,
"action": "WITHDRAWAL",
"status": 1,
"amount": "-500.00",
"collateral": "USDT",
"timestamp": 1704153600000,
"destinationAddress": "0xabcdef1234567890abcdef1234567890abcdef12",
"txHash": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890"
}
]
},
"request_id": "5ccf215d37e3ae6d"
}Empty Result
{
"status": "ok",
"response": {
"balanceUpdates": []
},
"request_id": "5ccf215d37e3ae6f"
}Balance Update Object
| Field | Type | Description |
|---|---|---|
id | integer | Unique transaction ID |
subAccountId | integer | Subaccount ID associated with the transaction |
action | string | Action type: "DEPOSIT" or "WITHDRAWAL" |
status | integer | Transaction status (1 = success) |
amount | string | Amount changed (positive for deposits, negative for withdrawals) |
collateral | string | Collateral symbol (e.g., "USDT", "WETH") |
timestamp | integer | Unix timestamp in milliseconds when the transaction was created |
destinationAddress | string | Destination address for withdrawals (optional, only for withdrawals) |
txHash | string | On-chain transaction hash (optional) |
toSubAccountId | integer | Target subaccount ID for internal transfers (optional) |
Error Response
{
"status": "error",
"error": {
"code": "VALIDATION_ERROR",
"message": "limit cannot exceed 1000"
},
"timestamp": "2025-01-01T00:00:00Z",
"request_id": "5ccf215d37e3ae6d"
}Usage Examples
Get All Balance Updates
{
"params": {
"action": "getBalanceUpdates",
"subAccountId": "1867542890123456789"
},
"nonce": 1704067200000,
"expiresAfter": 1704153600000,
"signature": { "v": 28, "r": "0x...", "s": "0x..." }
}Get Deposits Only
{
"params": {
"action": "getBalanceUpdates",
"subAccountId": "1867542890123456789",
"actionFilter": "DEPOSIT"
},
"nonce": 1704067200000,
"expiresAfter": 1704153600000,
"signature": { "v": 28, "r": "0x...", "s": "0x..." }
}Get Withdrawals Only
{
"params": {
"action": "getBalanceUpdates",
"subAccountId": "1867542890123456789",
"actionFilter": "WITHDRAWAL"
},
"nonce": 1704067200000,
"expiresAfter": 1704153600000,
"signature": { "v": 28, "r": "0x...", "s": "0x..." }
}Paginated Request
{
"params": {
"action": "getBalanceUpdates",
"subAccountId": "1867542890123456789",
"limit": 100,
"offset": 100
},
"nonce": 1704067200000,
"expiresAfter": 1704153600000,
"signature": { "v": 28, "r": "0x...", "s": "0x..." }
}Implementation Notes
- Returns deposit and withdrawal transactions only (excludes funding payments)
- Results are ordered by timestamp (most recent first)
- Default limit is 50 results per request, maximum is 1000
- Use pagination with
limitandoffsetfor large result sets - For funding payment history, use Get Funding Payments
- Authentication requires signature by account owner
Signing
All trading methods are signed using EIP-712. Each successful trading request will contain:
- A piece of structured data that includes the sender address
- A signature of the hash of that structured data, signed by the sender
For detailed information on EIP-712 signing, see EIP-712 Signing.
Nonce Management
The nonce system prevents replay attacks and ensures order uniqueness:
- Use current timestamp in milliseconds as nonce
- Each nonce must be greater than the previous one
- Recommended: Use
Date.now()or equivalent - If nonce conflicts occur, increment by 1 and retry
Error Handling
Common error scenarios:
| Error | Description |
|---|---|
| Invalid signature | EIP-712 signature validation failed |
| Invalid market symbol | Market symbol not recognized |
| Nonce already used | Nonce must be greater than previous value |
| Rate limit exceeded | Too many requests in time window |
| Request expired | expiresAfter timestamp has passed |
| Error Code | Message | Description |
|---|---|---|
VALIDATION_ERROR | subAccountId is required | No subaccount ID was provided |
VALIDATION_ERROR | limit cannot exceed 1000 | Limit parameter exceeds maximum |
VALIDATION_ERROR | limit must be non-negative | Negative limit value provided |
VALIDATION_ERROR | offset must be non-negative | Negative offset value provided |
VALIDATION_ERROR | actionFilter must be 'DEPOSIT', 'WITHDRAWAL', or comma-separated combination | Invalid action filter value |
INTERNAL_ERROR | Failed to retrieve balance updates | Server error retrieving data |
Related Endpoints
- Get Subaccount - View current account balances and margin status
- Get Funding Payments - Funding payment history (separate from deposits/withdrawals)