Collections
Collections let you take payment from customers in supported currencies. Once a payment succeeds, funds are credited to the wallet or account configured for your product.
How collections work
All collection methods share the same underlying pattern:
- Initialize — Create a session with
POST /client/checkout/initialize, passing the currency, amount, and your uniquereference. - Customer pays — Either on the hosted checkout page, or on your own UI using the public payment endpoints (see API-driven card checkout).
- Confirm — Receive the final result via webhooks (source of truth) and optionally the verify API.
- Reconcile — Store your
referencewith the returnedtransactionReffor support and reconciliation.
This is a checkout flow, not a Quotes flow. Only the initialize call uses your API key; the payment itself runs on the public checkout endpoints, authenticated by the returned access_code — so it can be completed in a browser or mobile client without exposing your keys.
Need payment instructions in API responses instead of a hosted page? Use the Quotes path (create → accept), which requires signed (HMAC) requests. CAD Interac money request (pull collection) is also a quotes flow: rail: "INTERAC_REQUEST" plus payer_email and payer_name — see CAD Interac money request.
Collection methods
Every currency below supports exactly the methods listed — no "and others." If a method is not listed for a currency, it is not available for it.
Per-customer availability still depends on your account and environment — use the discovery endpoints below at runtime rather than hardcoding this table in your app. But a method never appears for a currency outside its row.
INR UPI deposit {#inr-upi-deposit}
INR deposits are UPI collections into an INR balance. Initialize checkout the same way as other collections (POST /client/checkout/initialize) with currency set to INR. Pass the customer's phone number. They complete payment from a UPI intent link or QR code. Settlement is same-currency: INR in, INR credited. Status updates use the regular webhooks.
INR payouts use a separate bank-transfer flow. See INR payout.
Need to reverse a completed deposit? See Refunds.
Discovering what is available
Corridors and methods change with configuration and rollout, so confirm at runtime:
GET /api/v1/client/currencies— active currencies and related metadata (API key required)GET /api/v1/client/banks/:country_code— bank or network identifiers for a country, where applicable (API key required)GET /api/v1/public/banks/:country_code— same bank list, no authGET /api/v1/checkout/currency-methods/:currency— checkout methods for a currency, no auth
Note the banks endpoints take a country code as a path parameter (NG, KE), not a currency query parameter.
Authentication
Only the initialize call (POST /client/checkout/initialize) and the Client API use your API key. Everything the customer touches — the hosted page, method selection, payment confirmation, status polling — runs on public endpoints authenticated by the access_code returned at initialize. Never embed API keys or secrets in mobile or browser clients. Follow Authentication for headers and signing.