List wallet transactions
Every row of the team's wallet, as the billing page's ledger lists it: top-ups, Pro months, units, SMS charges and releases, sender ID fees and refunds,…
https://app.usenotix.dev/api/v1/billing/transactionsFull access and read only keys can call this. Sending access keys cannot. Key permissions lists the extra rules some calls have.
Every row of the team's wallet, as the billing page's ledger lists it: top-ups, Pro months, units, SMS charges and releases, sender ID fees and refunds, adjustments and reversals. amountMinor is signed (positive into the wallet) in the wallet's currency; receiptReference is set on a row that has a receipt. type lists one kind of row only. Newest first. Filter with from (inclusive) and to (exclusive) as ISO 8601 times. Pass nextCursor back as cursor for the next page; limit is 1 to 100 (20 by default). A team with no wallet yet answers an empty list and a null currency.
Who can call it
A full access or read only key made by someone who is a team admin today (the team owner always is), as the billing page is for admins. A key made by a member answers 403 FORBIDDEN, and so does a key made before Notix recorded who made each key. Send-only and live AI keys answer 403 SCOPE_DENIED; a key limited to one domain answers 403 DOMAIN_PINNED. Every read is recorded in the key's audit log (GET /v1/audit-log).
The team can make 60 billing reads a minute through the API (20 for invoices, which are read from Stripe, within a limit shared by every team); when Notix cannot count them the answer is 503 SERVICE_UNAVAILABLE (try again shortly), never a 429.
Query parameters
Only rows of this type.
One of TOPUP, PRO_CHARGE, UNITS_CHARGE, ADJUSTMENT, REVERSAL, SMS_CHARGE, SMS_RELEASE, SENDER_ID_FEE, SENDER_ID_REFUND, TOPUP_FEE, REFERRAL_CREDIT.
Only rows made at or after this time (ISO 8601).
Only rows made before this time (ISO 8601).
nextCursor from the previous page.
Minimum 1. Maximum 100. Default 20.
Headers
Bearer followed by your API key.
Errors
A query value is not valid, or the cursor is not from this list.
`SCOPE_DENIED`: a send-only or live AI key. `DOMAIN_PINNED`: a key limited to one domain. `FORBIDDEN`: the key was made by a member who is not a team admin, or before Notix recorded who made each key.
The read took longer than 10 seconds.
The team read billing 60 times in the last minute.
The rate counters cannot be read just now; try again shortly.
Every error has the same shape. See all error codes.
curl -X GET "https://app.usenotix.dev/api/v1/billing/transactions" \
-H "Authorization: Bearer $NOTIX_API_KEY"
import { Notix } from "notix-js";
const notix = new Notix(process.env.NOTIX_API_KEY);
const { data, error } = await notix.billing.transactions({ type: "SMS_CHARGE", from: "2026-09-01T00:00:00Z" });
const next = data?.nextCursor; // pass back as cursor for the next page
{
"currency": "NGN",
"data": [
{
"id": "cm1x8f3k20001qz7v5b9d2e4a",
"type": "TOPUP",
"amountMinor": 1,
"amountFormatted": "string",
"balanceAfterMinor": 1,
"balanceAfterFormatted": "string",
"reference": "string",
"customerDescription": "string",
"receiptReference": "string",
"createdAt": "2026-10-01T10:00:00.000Z"
}
],
"nextCursor": "string"
}