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"
}| Field | Type | Notes |
|---|---|---|
id | string | The underlying payment or payout id |
type | enum | collection (money in) or payout (money out) |
reference | string | Your reference on the transaction (collections) |
amount | number | Decimal major units |
fee | number | Charge applied, decimal major units (0 when none) |
currency | string | ISO-4217 |
channel | string | Rail, e.g. mpesa_stk_push, mobile_money |
status | enum | pending / processing / succeeded / failed |
counterparty | string | Payer msisdn (collection) or recipient msisdn (payout) |
receipt | string | Provider receipt once confirmed |
wallet | string | 8-digit number of the wallet credited/debited |
created_at | timestamp |
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):
| Param | Notes |
|---|---|
type | collection or payout. Omit for both |
status | pending / processing / succeeded / failed |
currency | ISO-4217, e.g. KES, TZS |
wallet | 8-digit wallet number — scope to one wallet |
from | Date YYYY-MM-DD, inclusive lower bound |
to | Date YYYY-MM-DD, inclusive upper bound |
before | Pagination cursor (RFC-3339 timestamp) — see below |
limit | Page 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.csvColumns: 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
| Code | Meaning |
|---|---|
200 | OK |
400 | Bad filter value (e.g. malformed from/to date, unknown type) |
401 | Missing/invalid API key |
429 | Rate limit exceeded |
