TeronaPay

Transactions API

One unified, read-only view over an account's collections (money in) and payouts (money out). It's the same data as GET /v1/payments and GET /v1/payouts merged into a single time-ordered stream, labelled by type. Scoped to the authenticated account (see X-Account-No to target a specific account).

The Transaction object

{
  "id": "b4a1c0f2-…",
  "type": "collection",
  "reference": "order-8842",
  "amount": 2000.00,
  "fee": 20.00,
  "currency": "KES",
  "channel": "mpesa_stk_push",
  "status": "succeeded",
  "counterparty": "+254712345678",
  "receipt": "UGBL1B6PI0",
  "wallet": "47514771",
  "created_at": "2026-08-16T08:10:43Z"
}
FieldTypeNotes
idstringThe underlying payment or payout id
typeenumcollection (money in) or payout (money out)
referencestringYour reference on the transaction (collections)
amountnumberDecimal major units
feenumberCharge applied, decimal major units (0 when none)
currencystringISO-4217
channelstringRail, e.g. mpesa_stk_push, mobile_money
statusenumpending / processing / succeeded / failed
counterpartystringPayer msisdn (collection) or recipient msisdn (payout)
receiptstringProvider receipt once confirmed
walletstring8-digit number of the wallet credited/debited
created_attimestamp

GET /v1/transactions

curl "https://api.teronapay.com/v1/transactions?type=collection&from=2026-08-01&to=2026-08-16" \
  -u "$KEY:$SECRET"

Query parameters (all optional):

ParamNotes
typecollection or payout. Omit for both
statuspending / processing / succeeded / failed
currencyISO-4217, e.g. KES, TZS
wallet8-digit wallet number — scope to one wallet
fromDate YYYY-MM-DD, inclusive lower bound
toDate YYYY-MM-DD, inclusive upper bound
beforePagination cursor (RFC-3339 timestamp) — see below
limitPage size, default 25, max 200

Response 200:

{
  "data": [ /* Transaction objects, newest first */ ],
  "next_before": "2026-08-16T08:10:43.512Z"
}

next_before is present only when a full page was returned. Pass it back as before to fetch the next page; when it's absent you've reached the end.

curl "https://api.teronapay.com/v1/transactions?before=2026-08-16T08:10:43.512Z" \
  -u "$KEY:$SECRET"

CSV export

Add format=csv to stream the matching rows (up to 5,000) as a CSV download instead of JSON. It honours every filter above except before/limit.

curl "https://api.teronapay.com/v1/transactions?format=csv&from=2026-08-01&to=2026-08-31" \
  -u "$KEY:$SECRET" -o transactions.csv

Columns: Created At, Reference, Source, Type, Counterparty, Channel, Currency, Amount, Charge, Status, Receipt, Wallet — where Source is COLLECTION/PAYOUT and Type is CREDIT/DEBIT.

Status codes summary

CodeMeaning
200OK
400Bad filter value (e.g. malformed from/to date, unknown type)
401Missing/invalid API key
429Rate limit exceeded
API: Transactions · TeronaPay docs