Overview
A transaction is the canonical record of money moving into or out of your account. Almost every money-related action in Hyparrow produces one: a customer funding their virtual account, a bank transfer you send out, a bill payment, a card charge, an invoice being paid, or a paid verification check. You don’t create transactions directly. They are written for you when the underlying action happens, then updated as the bank network confirms the outcome. The Transactions endpoints let you list and read those records for reconciliation, reporting, and reacting to payments.Every
amount is in kobo, the minor unit of the Naira. 1 NGN = 100 kobo, so a
transaction amount of 50000 means ₦500.00. The currency field is NGN.Base URL & authentication
Test against the sandbox first: send requests to
https://sandbox.hyparrow.cloud/api/v1 with a pk_test_ key (and its matching
sk_test_ secret). Sandbox transfers and payments generate real-shaped
transactions you can list and fetch without moving live money.The transaction record
Each transaction carries a stableid (UUID), a unique reference, a type, a
status, and an amount in kobo. Optional link fields (customerId, invoiceId,
productId, subscriptionId, receiptId) connect the transaction back to whatever
produced it.
Transaction types
Transaction statuses
How transactions relate to other actions
- Payments (virtual accounts): when a customer funds their virtual account, a
virtual_accounttransaction is recorded and attributed to thatcustomerId. - Transfers: sending money out creates a
bank_transfer(and may add a separatetransfer_fee), moving frompendingtoprocessingtocompleted/failed. - Verifications: a paid lookup produces a
verification_payment(oraccount_inquiry) record so the spend is auditable. - Invoices, products, subscriptions: paying one links the transaction via
invoiceId,productId, orsubscriptionId.
Typical flow
1
An action happens
A customer pays into their virtual account, you send a transfer, or a
verification runs. Hyparrow writes a transaction in
pending.2
The bank network processes it
The status advances to
processing, then settles as completed/success or
failed. A completedAt timestamp is set on success.3
You list or fetch it
Poll
GET /transactions (or fetch a single one by id) to reconcile, or react to
the change via webhooks.List transactions
GET /transactions
Lists transactions for the authenticated account, newest first, with pagination and
optional filters.
Query parameters
Response
200 OK
pagination.totalPages value is derived from total and limit, so you can
loop until page reaches totalPages.
Get a transaction
GET /transactions/{transactionId}
Retrieves a single transaction by its UUID. The transaction must belong to your
account.
Response
200 OK
virtual_account payment, the senderName, senderAccountNumber,
and senderBankCode fields tell you who paid. For outbound and other transaction
types these may be absent.
Errors & edge cases
- Transactions are immutable history — you read them, you never edit them. The
bank network advances
statusand setscompletedAt. - A transaction can sit in
pending/processingbriefly before settling; reconcile oncompleted/successorfailed, not on creation. - Use
reference(unique per transaction) as your idempotent key when matching Hyparrow records to your own ledger. - Filters combine: passing
type,status, and adateFrom/dateTorange narrows the list to transactions matching all of them.

