Balances & transactions
Your workspace holds one wallet per currency. The balance endpoints are read-only: money enters through collections, reserved accounts, and deposits, and leaves through payouts.
Endpoints
Section titled “Endpoints”| Method | Path | Scope | Success |
|---|---|---|---|
GET |
/v1/balances |
read |
200 |
GET |
/v1/transactions |
read |
200 |
List balances
Section titled “List balances”GET /v1/balances
Returns one entry per wallet, in wallet creation order.
{ "data": [ { "currency": "NGN", "available": 2485000, "pending": 15000, "label": "Naira" }, { "currency": "GBP", "available": 320.5, "pending": 0, "label": "Pound sterling" } ], "meta": { "request_id": "8c9d0e1f-2a3b-4c4d-9e5f-6a7b8c9d0e1f" }}| Field | Meaning |
|---|---|
currency |
ISO code of the wallet |
available |
Spendable balance: completed credits minus completed debits and holds |
pending |
Net of pending rows: pending credits minus pending debits |
label |
Human-readable currency name |
Balances are derived by summing ledger rows, not stored as a mutable counter, so they always reflect the transactions recorded at read time.
A currency with no wallet does not appear. Wallets are provisioned by the platform; if you expect a currency and do not see it, contact support — the API will not create a wallet on demand.
List transactions
Section titled “List transactions”GET /v1/transactions
Returns ledger rows for the workspace, newest first (by created_at, then id).
Query parameters
Section titled “Query parameters”| Parameter | Type | Default | Notes |
|---|---|---|---|
direction |
string | all | in or out. Any other value is ignored |
channel |
string | all | card, collection_va, reserved_va, open_banking, transfer, payout, service, or reversal |
currency |
string | all | Uppercased before matching |
from |
ISO date | none | created_at >= from. Invalid dates are ignored |
to |
ISO date | none | created_at <= to. Invalid dates are ignored |
q |
string | none | Substring match against counterparty name, counterparty account, reference, and title |
limit |
integer | 50 |
Clamped to a maximum of 100 |
curl "https://api.nuansis.co/v1/transactions?direction=in¤cy=NGN&from=2026-10-01&limit=25" \ -H "Authorization: Bearer $NUANSIS_API_KEY"{ "data": [ { "id": 9012, "type": "credit", "direction": "in", "category": "deposit", "channel": "collection_va", "status": "completed", "reference": "dep_7f3a1c9e", "idempotencyKey": "dep_7f3a1c9e", "businessId": 42, "walletId": 7, "currency": "NGN", "amount": "250000.000000", "fees": "0.000000", "title": "Deposit", "description": null, "provider": "novac", "providerReference": "7f3a1c9e", "counterpartyName": "ADAEZE OKAFOR", "counterpartyAccount": "0123456789", "counterpartyBank": null, "counterpartyEmail": null, "metadata": null, "createdAt": "2026-10-18T10:26:07.412Z", "updatedAt": "2026-10-18T10:26:07.412Z" } ], "meta": { "request_id": "9d0e1f2a-3b4c-4d5e-8f6a-7b8c9d0e1f2a" }}Response fields
Section titled “Response fields”The endpoint returns raw ledger rows in camelCase, with amounts as decimal strings:
| Field | Notes |
|---|---|
type |
credit or debit |
direction |
in or out; null on legacy rows |
category |
deposit, send, convert, fee, reversal, or payout |
channel |
The surface the money moved through, or null |
status |
pending, processing, completed, failed, or reversed |
reference |
Unique ledger reference |
idempotencyKey |
De-duplication key used for the row |
amount, fees |
Decimal strings, 6 fractional digits |
counterparty* |
Counterparty details when known |
metadata |
Provider payload or failure detail |
Because direction was added after the first ledger rows existed, the filter treats a missing
direction as in for credits and out for debits. Rows returned to you may still have
direction: null.
No cursor pagination
Section titled “No cursor pagination”There is no cursor or page parameter. Narrow the window with from/to and limit, and walk
backwards by advancing to if you need a full history. The hard cap of 100 rows per call is
enforced server-side.
Common errors
Section titled “Common errors”| Status | Code | Cause |
|---|---|---|
401 |
unauthorized |
Missing or invalid API key |
403 |
insufficient_scope |
Key lacks read and holds no *:write scope |
429 |
rate_limited |
Request budget exhausted |