Skip to main content

Overview

A customer is a person (or business) you transact with — your end user, buyer, or payer. You create customers under your account so that payments, invoices, and other activity can be attributed to a specific person rather than landing in an anonymous pool. Each customer record holds basic identity details (name, email, phone) and, optionally, a virtual account: a dedicated Nigerian bank account number tied to that customer. When money is sent to a customer’s virtual account over the bank network, Hyparrow automatically attributes the incoming transfer to that customer and records it as a transaction — no manual reconciliation required.
All amounts in the Hyparrow API are expressed in kobo, the minor unit of the Nigerian Naira. 1 NGN = 100 kobo, so ₦500.00 is 50000.

Base URL & authentication

All requests go to the production base URL and must be signed with your API key pair, sent as request headers.
Build and test against the sandbox first. Point requests at https://sandbox.hyparrow.cloud/api/v1 and use a pk_test_ key (with its matching sk_test_ secret). Sandbox virtual accounts simulate the bank network, so you can trigger test transfers without moving real money.

Typical flow

The most common pattern is: create a customer, give them a virtual account, then receive a bank transfer that Hyparrow attributes back to that customer.
1

Create the customer

Register the person you want to transact with. You get back a customer record with a unique id (UUID) and a human-friendly customerCode (e.g. HYP_...).
2

Create a virtual account for them

Call the virtual-account endpoint with the customer’s id and a bankCode. Hyparrow provisions a dedicated account number on the bank network and stores it on the customer record.
3

Share the account details

Show the returned accountNumber, accountName, and bankName to your customer so they can pay by bank transfer.
4

Receive the payment

When the customer sends money to their virtual account, Hyparrow records a virtual_account transaction attributed to that customer. List or fetch it via the Transactions endpoints, or react to it through webhooks.

Create a customer

POST /customers Creates a new customer under the authenticated account.

Request fields

Response

201 Created
A newly created customer has status: "active" and no virtual account fields yet — those appear only after you create a virtual account.

List customers

GET /customers Returns the customers belonging to your account, newest first, with pagination.

Query parameters

Response

200 OK

Get a customer

GET /customers/{id} Retrieves a single customer. The {id} path parameter accepts either the customer UUID or the HYP_ customer code.

Response

200 OK

Create a customer virtual account

POST /customers/virtual-account Provisions a dedicated virtual bank account for an existing customer. A virtual account is a real, transfer-receiving account number on the bank network that is permanently tied to one customer. Anyone who sends a bank transfer to it — from any Nigerian bank app — pays that customer, and Hyparrow records the incoming money as a virtual_account transaction attributed to them. This removes manual reconciliation: instead of asking payers to add a reference, you give each customer their own account number and let the destination identify them.

Request fields

Response

201 Created
By default the generated accountName carries the HYPARROW prefix (for example HYPARROW/Ada Obi), which is what payers see in their banking app.

Create a virtual account with a custom prefix

POST /customers/virtual-account/custom Works exactly like the standard endpoint above, but lets you replace the default HYPARROW prefix on the account name with your own brand. Useful when you want the payer to see your business name in their transfer screen.

Request fields

Response

201 Created

Errors & edge cases

The API returns a non-2xx status with success: false and an error message.
Other things to keep in mind:
  • A virtual account is permanent for a customer. Once created, share the same accountNumber for all of that customer’s future transfers.
  • The bankCode must be a code supported by the bank network; an unsupported code returns 400.
  • On GET /customers/{id}, a UUID-looking value that isn’t a real customer returns 404; a value that is neither a UUID nor a HYP_ code returns 400.