SX Users

User Account

Read a user's balance across all wallets and the ledger of every movement recorded for them.

Read one user's money: the balance per currency across all their wallets, and the ledger of every movement recorded for them (deposits, withdrawals, trades, and transfers).

Authentication: both endpoints accept your Owner API Key (x-api-key) or a user token (Authorization: Bearer). A user token only reads its own user; another user_id answers 403 FORBIDDEN. A user outside your customer answers 404 USER_NOT_FOUND.

x-api-key: YOUR_OWNER_API_KEY

Get User Balance

GEThttps://api.sandbox.sovera.io/sovx/v1/users/:user_id/accounts/balance

Read the user's balance per currency, summed across their wallets. Every amount is a decimal string at the asset's scale; held is total minus available, never negative.

Path Parameters

ParameterTypeRequiredDescription
user_idstring (UUID)YesUser to read.

Response Fields

FieldTypeDescription
objectstringAlways account_balance.
user_idstring (UUID)User id.
balances[]arrayOne row per currency.
balances[].currencystringUppercase currency code.
balances[].totalstringTotal balance.
balances[].availablestringAvailable to spend.
balances[].heldstringReserved by pending movements.
as_ofstringUTC time the balance was read.
GET https://api.sandbox.sovera.io/sovx/v1/users/{{userID}}/accounts/balance

Success Response (200 OK):

{
  "success": true,
  "data": {
    "object": "account_balance",
    "user_id": "3afd8834-33a7-52b0-aa47-8138c9af062a",
    "balances": [
      { "currency": "BTC", "total": "0.50000000", "available": "0.45000000", "held": "0.05000000" },
      { "currency": "USDT", "total": "1250.000000", "available": "1250.000000", "held": "0.000000" }
    ],
    "as_of": "2026-10-12T14:03:11Z"
  },
  "meta": { "timestamp": "2026-10-12T14:03:11Z", "version": "v1", "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736" }
}
curl -X GET "https://api.sandbox.sovera.io/sovx/v1/users/{{userID}}/accounts/balance" \
  -H "x-api-key: YOUR_OWNER_API_KEY"

Errors: 401 UNAUTHORIZED · 403 FORBIDDEN a user token for another user · 404 USER_NOT_FOUND · 429 RATE_LIMIT_EXCEEDED.


List User Transactions

GEThttps://api.sandbox.sovera.io/sovx/v1/users/:user_id/accounts/transactions

List the movements recorded for the user, newest first. Each item is a transaction object. A user with no movements returns data: [].

Query Parameters

ParameterTypeRequiredDescription
filter[limit]integerNoPage size. Default 25, max 100.
cursorstringNoOpaque cursor from meta.pagination.navigation.
filter[order]stringNocreated_at or updated_at, ASC or DESC. Default created_at DESC.
filter[where][status][eq|inq]stringNoPENDING, PROCESSING, COMPLETED, FAILED, CANCELLED, EXPIRED, BLOCKED.
filter[where][currency][eq|inq]stringNoCurrency code, case-insensitive exact match.
filter[where][tx_hash][eq]stringNoOn-chain transaction hash.
filter[where][idempotency_key][eq]stringNox-idempotency-key of the request that created the movement.
filter[where][created_at][gte|lte|between]stringNoUTC date-time ending in Z.
GET https://api.sandbox.sovera.io/sovx/v1/users/{{userID}}/accounts/transactions?filter[where][created_at][gte]=2026-10-01T00:00:00Z&filter[limit]=25

Success Response (200 OK):

{
  "success": true,
  "data": [
    {
      "id": "a243e6ea-553a-5b40-bc5d-780249591cdd",
      "object": "transaction",
      "type": "SELL",
      "status": "COMPLETED",
      "status_reason": null,
      "customer_id": "corp-redundant-firewall",
      "user_id": "3afd8834-33a7-52b0-aa47-8138c9af062a",
      "wallet_id": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
      "currency": "USD",
      "amount": "1004.9504",
      "fee": "10.0495",
      "net_amount": "994.9009",
      "price": "1.0072",
      "pair": "USDT/USD",
      "base_currency": "USDT",
      "quote_currency": "USD",
      "balance_after": "49071.0687",
      "references": {
        "order_id": "7690141a-e24f-5d91-a3cc-364f32c11258",
        "withdrawal_id": null,
        "transfer_id": null,
        "deposit_id": null
      },
      "address": null,
      "network": null,
      "memo": null,
      "tx_hash": null,
      "idempotency_key": "9a7c3e1f-5b2d-4c8e-a6f0-1d3b5e7f9a2c",
      "description": null,
      "created_at": "2026-10-05T20:24:01Z",
      "updated_at": "2026-10-05T20:24:03Z",
      "completed_at": "2026-10-05T20:24:03Z",
      "created_by": "d5263d12-b5e8-5fc7-ba07-816c0c78a61a",
      "updated_by": "d5263d12-b5e8-5fc7-ba07-816c0c78a61a"
    }
  ],
  "meta": {
    "timestamp": "2026-10-12T14:03:11Z",
    "version": "v1",
    "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
    "pagination": {
      "records": { "limit": 25, "has_next": false, "has_previous": false },
      "navigation": { "next": null, "previous": null }
    }
  }
}
curl -g -X GET "https://api.sandbox.sovera.io/sovx/v1/users/{{userID}}/accounts/transactions?filter[where][created_at][gte]=2026-10-01T00:00:00Z&filter[limit]=25" \
  -H "x-api-key: YOUR_OWNER_API_KEY"

Errors: 401 UNAUTHORIZED · 403 FORBIDDEN a user token for another user · 404 USER_NOT_FOUND · 422 VALIDATION_ERROR unknown filter, operator, or cursor, with source.parameter · 429 RATE_LIMIT_EXCEEDED.


The transaction object

Every ledger list (wallet, user, and account) returns this shape. A movement always states one currency, and every amount is a decimal string in it. For trades, currency is the quote asset of pair (USD in USDT/USD), so amount, fee, net_amount, and price all read in the quote asset.

FieldTypeDescription
idstringMovement id.
objectstringAlways transaction.
typestringDEPOSIT, WITHDRAWAL, BUY, SELL, TRANSFER_IN, TRANSFER_OUT, CREDIT, or CHARGE. Open enum.
statusstringPENDING, PROCESSING, COMPLETED, FAILED, CANCELLED, EXPIRED, or BLOCKED.
status_reasonobject | null{code, message} when the movement didn't succeed; null otherwise.
customer_idstringYour customer id.
user_idstring | nullUser the movement belongs to.
wallet_idstring | nullWallet the movement belongs to.
currencystring | nullCurrency every amount is stated in.
amountstring | nullGross amount.
feestring | nullFee charged, or null.
net_amountstring | nullAmount after fees.
pricestring | nullTrade price in the quote asset; null for non-trades.
pairstring | nullTrading pair as BASE/QUOTE; null for non-trades.
base_currency / quote_currencystringPresent only on trades.
balance_afterstring | nullBalance in currency after the movement.
referencesobjectorder_id, withdrawal_id, transfer_id, deposit_id: the resource that produced the movement, or null.
addressstring | nullOn-chain address, for deposits and withdrawals.
networkstring | nullCanonical network code.
memostring | nullMemo or destination tag.
tx_hashstring | nullOn-chain hash; null until broadcast and for internal movements.
idempotency_keystring | nullx-idempotency-key of the request that created the movement.
descriptionstring | nullFree-text description.
created_at / updated_at / completed_atstring | nullUTC timestamps without milliseconds; completed_at is null until the movement settles.
created_by / updated_bystring | nullActor that created or last changed the movement.

On this page