Collect money from your customers: hosted checkout pages and permanent customer account numbers. Everything settles into your PowerWave wallet.
Every code block, endpoint and section has a Copy button.
Before you start
Accept bank-transfer payments from your customers. Money always settles into your PowerWave wallet (withdraw it, spend it, or pay it out). It needs an approved reseller business at Tier 3 with payments switched on. Use your reseller API key (pw_live_…). Your customer can pay by bank transfer, or with their own PowerWave wallet (Pay with PowerWave, no fee).
What you must send about the customer
Call
Name
Email
Phone
POST /checkout/sessions
required
required
optional
POST /customers (account number)
required
required
required
Paga needs a way to reach the customer to open a checkout or an account number, so a missing or invalid field is refused with 422 validation_error and nothing is created. Phone numbers are Nigerian numbers such as 08031234567.
How a checkout works
Your server calls POST /checkout/sessions with your order reference, the amount and the customer's name and email.
Send the customer to checkout_url (on checkout.powerwave.ng, run by PowerWave). It shows a one-time account number and a countdown; Paga only accepts the exact amount.
When the transfer lands we send the checkout.paid webhook and, if you gave a redirect_url, return the customer to it with ?reference=…&status=paid&signature=… (signature = HMAC-SHA256(your webhook signing secret, reference + "." + status), present once you have a webhook secret).
Before delivering, confirm with the signed webhook or GET /checkout/sessions/{reference}. Treat the redirect as a hint only.
Checkout
POST/v1/checkout/sessions
Open a checkout
Open a hosted checkout for one order. Send your customer to checkout_url; they pay by bank transfer (or with their PowerWave wallet) and the money lands in your wallet.
ParameterDescription
referencerequired
your unique order ID (4-64 characters: letters, numbers, . - _)
amountrequired
order amount in naira, e.g. "45000"
customer_namerequired
the customer's full name (max 150 characters)
customer_emailrequired
the customer's email address
customer_phoneoptional
Nigerian number, e.g. 08031234567
customer_refoptional
your own ID for the customer
descriptionoptional
shown to the customer (max 255 characters)
redirect_urloptional
an https:// URL; we send the customer back to it with ?reference=&status=&signature=
expires_in_minutesoptional
default 30 (5-1440)
fee_beareroptional
'reseller' (fee deducted from what you receive) or 'customer' (fee added to their total); default = your Payments setting
curl -X POST "https://api.powerwave.ng/v1/checkout/sessions" \
-H "Authorization: Bearer $PW_KEY" \
-H "Content-Type: application/json" \
-d '{"reference":"INV-2026-0142","amount":"45000","customer_name":"Adaeze Okafor","customer_email":"adaeze@example.com","description":"First term fees","redirect_url":"https://yourshop.com/paid"}'
Give one of your customers their own permanent account number. Every transfer into it lands in your wallet (fee deducted). Calling again with the same customer_ref returns the same account.
ParameterDescription
customer_refrequired
your ID for the customer (max 80 characters)
customer_namerequired
the customer's full name
phonerequired
the customer's Nigerian phone number, e.g. 08039998877
1.5% per payment, nothing else. Choose on your Payments page (or per checkout with fee_bearer): deduct it from what you receive, or add it to the customer's total. Payments into customer account numbers (POST /customers) always have the fee deducted, because the customer decides what to send. Pay with PowerWave payments have no fee.
Checkout statuses
status
Meaning
pending
Waiting for the transfer.
paid
Paid and credited to your wallet. Deliver the order.
under_review
A payment arrived but could not be verified automatically yet; our team is confirming it. Don't deliver yet - you get checkout.paid or checkout.failed.
expired / cancelled
Closed without payment. A transfer that still arrives is credited to you and the checkout becomes paid (with a note).
failed
Our team rejected a payment under review. Nothing was credited.
Wrong amounts are credited, not held
If the customer pays less, more, or after the link closed, whatever Paga confirms is credited to your wallet straight away. The checkout becomes paid with amount_paid and a note (for example "Underpaid: ₦600.00 received, ₦1,000.00 was due"). Check that amount_paid covers the order before you deliver. A later top-up on the same checkout sends checkout.additional_payment.
Payment webhooks
We send checkout.paid, checkout.expired, checkout.failed, checkout.additional_payment and, for customer account numbers, collection.received. Payloads and signature checking are on the Webhooks page.