Transactions
One list across every kind of money movement (charges, payouts, deposits, withdrawals and refunds) for reconciliation.
The transaction object
{
"id": "chg_01J9Z3K8Q4W6XK2M7N5P0R3T8V",
"object": "transaction",
"type": "CHARGE",
"approval_status": "NOT_REQUIRED",
"status": "SUCCESSFUL",
"amount": "50000",
"currency": "UGX",
"country": "UG",
"network": "MTN",
"msisdn_masked": "+2567****456",
"reference": "order-9001",
"fee": "1250",
"net": "48750",
"provider": "…",
"metadata": { "cart_id": "c_42" },
"created_at": "2026-09-28T09:29:51.000Z",
"updated_at": "2026-09-28T09:30:08.000Z"
}Attributes
idstring- The underlying object's id:
chg_,pyt_,dep_,wdl_orref_. objectstring- Always
"transaction". typeenumCHARGE,PAYOUT,DEPOSIT,WITHDRAWALorREFUND.approval_statusenumNOT_REQUIRED,PENDING(waiting for a second team member),APPROVEDorREJECTED.statusenum- See Transaction statuses.
amountstring- Minor units, as a string.
currencyenumUGX,KESorGHS.countryenum- The wallet's country:
UG,KEorGH. networkenumMTNorAIRTEL.msisdn_maskedstring- The wallet number, masked (
+2567****456). Full numbers are never returned. referencestring- Your reference, unchanged.
feestring- SkanPay's fee booked so far (
"0"until the transaction succeeds). netstring- Money in (charges, deposits, refunds):
amount − fee. Money out (payouts, withdrawals):amount + fee, the total debited. providerstring | null- An identifier for the rail that carried the payment. Informational: don't build logic on it.
metadataobject | null- As sent.
created_atstring- ISO 8601, UTC.
updated_atstring- ISO 8601, UTC. Changes with the status.
It carries no failure_code or description; fetch the typed object (e.g. GET /v1/charges/:id) or the timeline below for those.
List transactions
GET/v1/transactions
Newest first, cursor-paginated.
Query parameters
typeenumOptionalCHARGE,PAYOUT,DEPOSIT,WITHDRAWAL,REFUNDstatusenumOptional- Any status.
approval_statusenumOptionalNOT_REQUIRED,PENDING,APPROVED,REJECTEDreferencestringOptional- Exact match.
currencyenumOptionalUGX,KES,GHSlimitintegerOptional- 1–100, default 25.
starting_afterstringOptional- The
next_cursorof the previous page.
curl "https://api.skanpay.website/v1/transactions?type=CHARGE&status=SUCCESSFUL¤cy=UGX&limit=100" \
-H "Authorization: Bearer $SKANPAY_SECRET_KEY"Retrieve a transaction, with its timeline
GET/v1/transactions/:id
Any transaction id works. Returns the transaction, every status event in order, and every ledger entry behind it. See Reconciliation for how to read the ledger.
{
"transaction": { "id": "chg_…", "object": "transaction", "type": "CHARGE", ... },
"events": [
{ "id": "evt_…", "status": "INITIATED", "source": "API", "provider_status": null, "message": null, "created_at": "…" },
...
],
"ledger": [
{ "id": "…", "journal_id": "…", "account": "PROVIDER_FLOAT", "side": "DEBIT", "amount": "50000", "currency": "UGX", "reason": "CHARGE_SETTLED", "created_at": "…" },
...
]
}curl https://api.skanpay.website/v1/transactions/chg_01J9Z3K8Q4W6XK2M7N5P0R3T8V \
-H "Authorization: Bearer $SKANPAY_SECRET_KEY"Returns 404 transaction_not_found for an unknown id.