Types
Lifecycle
Three more statuses exist but are not part of the ordinary payout or deposit path, and none of them emits a webhook:
draft (created but awaiting an approval that hasn’t been given), and negotiating / cancelled, which belong to broker rate negotiation.
Not every transaction passes through every state — fast rails can jump from pending straight to completed. Treat the status you receive as the source of truth and don’t assume ordering. Each change between the statuses in the table above emits a webhook event of the same name; the three statuses called out below it are the exception and emit nothing.
References
A transaction carries up to three identifiers:external_reference is the externalReference you sent at creation, with one exception worth planning around: NGN and mobile money payouts always get a Rolla-generated reference instead (NG-XXXXXXXX / MM-XXXXXXXX), because the provider imposes its own format. Webhook payloads call this same field reference.
You can also attach up to 20 keys of your own metadata to a payout; it is echoed verbatim on every response and webhook for that transaction.
What’s always on the object
Twelve fields are present on every transaction, whatever its type:id, transaction_type, status, description, external_reference, fee_amount, source_amount, destination_amount, source_currency, destination_currency, created_at and updated_at.
Everything else is conditional and is omitted entirely rather than returned as null when it doesn’t apply — exchange_rate on swaps only, virtual_account / payer / payment_rail on deposits only, beneficiary on payouts that carried one, uetr / tracking_codes once a cross-border payout has been assigned them, and metadata when you supplied some. Branch on a field’s presence, not on its value.
All amounts are integers in minor units — kobo for NGN, cents for USD.
Finding your transactions
There’s more than one listing endpoint because they answer different questions — pick the one that matches what you’re trying to do:
For anything real-time, prefer webhooks over polling these endpoints.