Skip to main content

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 stable id (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_account transaction is recorded and attributed to that customerId.
  • Transfers: sending money out creates a bank_transfer (and may add a separate transfer_fee), moving from pending to processing to completed/failed.
  • Verifications: a paid lookup produces a verification_payment (or account_inquiry) record so the spend is auditable.
  • Invoices, products, subscriptions: paying one links the transaction via invoiceId, productId, or subscriptionId.

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
The 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
For an inbound 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

Other things to keep in mind:
  • Transactions are immutable history — you read them, you never edit them. The bank network advances status and sets completedAt.
  • A transaction can sit in pending/processing briefly before settling; reconcile on completed/success or failed, 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 a dateFrom/dateTo range narrows the list to transactions matching all of them.