Skip to content

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.

Method Path Scope Success
GET /v1/balances read 200
GET /v1/transactions read 200

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.

GET /v1/transactions

Returns ledger rows for the workspace, newest first (by created_at, then id).

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
Terminal window
curl "https://api.nuansis.co/v1/transactions?direction=in&currency=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" }
}

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.

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.

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