TeronaPay

Statement API

The statement gives you windowed totals + live balances for a merchant. It powers the Statement page in the dashboard.

GET /v1/statement

Aggregate over a time window.

Query parameters

ParamTypeNotes
sinceRFC3339Window start. Defaults to lifetime
beforeRFC3339Window end. Defaults to now
currencystringISO-4217. Defaults to merchant's default_currency
formatstringjson (default) or csv
includestringOnly with format=csv: transactions switches to per-transaction CSV

Response 200 (JSON):

{
  "merchant_id": "...",
  "currency": "KES",
  "since": "2026-04-19T10:00:00Z",
  "before": "2026-05-19T10:00:00Z",
  "inbound_succeeded": { "count": 2, "amount": 20.00 },
  "fees_paid": 0.00,
  "refunds_succeeded": { "count": 4, "amount": 20.00 },
  "payouts_succeeded": { "count": 0, "amount": 0.00 },
  "payouts_pending": { "count": 0, "amount": 0.00 },
  "available_payable": 0.00,
  "payable_pending": 0.00
}

CSV exports

Aggregate?format=csv returns a 2-row CSV:

merchant_id,currency,since,before,inbound_succeeded_count,inbound_succeeded_amount,...
abc123,KES,...

Transactions?format=csv&include=transactions returns one row per money-movement event (payment/refund/payout) in the window:

kind,id,status,amount,currency,channel,reference,channel_receipt,occurred_at
payment,...
refund,...
payout,...

The transactions CSV streams internally via cursor pagination (page size 1000). Server-side cap of 50,000 rows per response.

Window semantics

The window applies to:

  • payments.created_at for payment rows
  • refunds.updated_at for refund rows (timestamp of completion, not initiation)
  • payouts.updated_at for payout rows (same)

This matches the dashboard Statement page so the aggregate JSON and the transactions CSV agree.

Live balances

available_payable and payable_pending are NOT windowed — they're current ledger snapshots, aggregated across all of the account's wallets in the requested currency. For a single wallet's balance, use GET /v1/wallets/{id}/balance instead.

Statement email schedule

Configure in the dashboard or via /docs/api/me (coming). Cadence none or monthly. We email the statement (with transactions CSV attached) on the configured cadence.

API: Statement · TeronaPay docs