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
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
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 withsuccess: false and an error message.
- A virtual account is permanent for a customer. Once created, share the same
accountNumberfor all of that customer’s future transfers. - The
bankCodemust be a code supported by the bank network; an unsupported code returns400. - On
GET /customers/{id}, a UUID-looking value that isn’t a real customer returns404; a value that is neither a UUID nor aHYP_code returns400.

