Account Data
Read a user's crypto balances and transaction history across all their wallets.
Read a user's account data: their balances per currency and their full transaction history. Both endpoints aggregate across all the user's wallets, so you get one consolidated view per user without walking wallet by wallet. This is the per-user version (with userId in the path) of Account Management.
Authentication: every endpoint on this page accepts your Owner API Key in x-api-key or the user's token in Authorization: Bearer. All requests accept an optional x-trace-id header for request tracking.
x-api-key: YOUR_OWNER_API_KEY
Authorization: Bearer YOUR_USER_TOKENMonetary fields come back as numbers.
Get Balance
Get the user's balance for every currency they hold. Same shape as the owner balance. Each entry carries the total balance, the available amount you can move or withdraw right now, and the held amount locked in pending operations.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| userId | string (uuid) | Yes | The user's user_id. |
No body.
GET https://api.sandbox.sovera.io/sovx/v1/users/{userID}/accounts/balanceSuccess Response (200 OK):
data is a flat array. Each item carries currency, balance, available, and held as numbers.
{
"success": true,
"data": [
{
"currency": "USD",
"balance": 25000,
"available": 24000,
"held": 1000
}
],
"meta": {
"timestamp": "2026-01-15T10:30:00.000Z",
"version": "v1",
"trace_id": "5b8f3a9d-2c7e-4a1b-9f6d-0e3c2b1a4d5f"
}
}curl -X GET "https://api.sandbox.sovera.io/sovx/v1/users/{userID}/accounts/balance" \
-H "x-api-key: YOUR_OWNER_API_KEY"Errors: 401 invalid key · 404 user not found · 500 server error.
Get Transactions
List the user's transactions, newest first, across every wallet. Same response and same filters as /accounts/transactions, with pagination under meta.pagination.
Query Parameters
Path param userId. Filters live under filter[...].
| Parameter | Type | Required | Description |
|---|---|---|---|
filter[limit] | number | No | Items per page (default: 20, max: 100). |
filter[skip] | number | No | Offset. |
filter[sort] | string | No | Sort by date: ASC or DESC (default DESC). |
filter[where][type] | string | No | Type/action (e.g. DEPOSIT, WITHDRAWAL, CONVERSION). Accepts a comma-separated list. |
filter[where][currency] | string | No | Currency code (e.g. btc, usdc). |
filter[where][status] | string | No | Transaction status (e.g. pending, done). |
filter[where][from] | number | No | Start date, Unix timestamp in ms (inclusive). |
filter[where][to] | number | No | End date, Unix timestamp in ms (inclusive). |
filter[where][amount][gte] | number | No | Amount ≥ value. |
filter[where][amount][lte] | number | No | Amount ≤ value. |
GET https://api.sandbox.sovera.io/sovx/v1/users/{userID}/accounts/transactions?filter[limit]=20&filter[skip]=0Success Response (200 OK):
Each item carries id and balance at the root, and a transaction object with the rest of the detail.
| Field | Type | Description |
|---|---|---|
id | number | Numeric transaction ID in sFox. |
balance | number | Resulting account balance after the transaction. |
transaction | object | Order and transaction detail. |
transaction.order_id | string | Order ID (numeric string; empty when not applicable). |
transaction.trade_id | string | Trade ID (numeric string; empty when not applicable). |
transaction.client_id | string (uuid) | Associated client (injected by the backend). |
transaction.idempotency_id | string (uuid)|null | Idempotency ID. |
transaction.symbol | string|null | Trading pair (e.g. btc/usd), or null. |
transaction.created_at | string (ISO 8601) | Creation date. |
transaction.hash | string | On-chain hash (empty when not applicable). |
transaction.action | string | Movement type (e.g. Deposit, Sell, Charge). |
transaction.currency | string | Movement currency. |
transaction.memo | string | Note. |
transaction.amount | number | Amount (negative for outflows). |
transaction.net_proceeds | number | Net amount. |
transaction.price | number | Applied price. |
transaction.fees | number | Fees. |
transaction.status | string | Status (e.g. done). |
transaction.description | string|null | Description. |
{
"success": true,
"data": [
{
"id": 99938268,
"balance": 49071.06877634,
"transaction": {
"order_id": "11637477",
"trade_id": "71847575",
"client_id": "76f0b5a8-a683-4ee3-8b13-af3c807df325",
"idempotency_id": null,
"symbol": "usdt/usd",
"created_at": "2026-05-19T20:24:01.000Z",
"hash": "",
"action": "Sell",
"currency": "usd",
"memo": "",
"amount": 1004.95049505,
"net_proceeds": 1004.95049505,
"price": 1.00720535,
"fees": 10.04950495,
"status": "done",
"description": ""
}
}
],
"meta": {
"timestamp": "2026-01-15T10:30:00.000Z",
"version": "v1",
"trace_id": "5b8f3a9d-2c7e-4a1b-9f6d-0e3c2b1a4d5f",
"pagination": {
"records": { "skip": 0, "has_next": false, "has_previous": false, "total": 1, "limit": 20 },
"navigation": {
"first": "/users/{userID}/accounts/transactions?filter[limit]=20&filter[skip]=0",
"last": "/users/{userID}/accounts/transactions?filter[limit]=20&filter[skip]=0",
"previous": null,
"next": null
}
}
}
}curl -X GET "https://api.sandbox.sovera.io/sovx/v1/users/{userID}/accounts/transactions?filter[limit]=20&filter[skip]=0" \
-H "x-api-key: YOUR_OWNER_API_KEY"Errors: 400 filter[limit] exceeds 100 · 401 invalid key · 404 user not found · 500 server error.