SZNDSZND

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:

  1. Initialize — Create a session with POST /client/checkout/initialize, passing the currency, amount, and your unique reference.
  2. Customer pays — Either on the hosted checkout page, or on your own UI using the public payment endpoints (see API-driven card checkout).
  3. Confirm — Receive the final result via webhooks (source of truth) and optionally the verify API.
  4. Reconcile — Store your reference with the returned transactionRef for 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.

MethodWhat the customer doesCurrencies
Bank transferTransfers to a timed virtual account from any bank appNGN, GBP, EUR
OPayApproves a push prompt in the OPay appNGN
Card collectionCards with 3-D Secure where required, via the hosted checkoutUSD, NGN, GBP, EUR, KES, GHS, UGX, TZS, SLE
API-driven card checkoutCard payments with your own UI, calling the payment endpoints directlyUSD, NGN
Mobile money collectionMobile money push to the customer's walletKES, GHS, XOF, XAF, UGX, TZS, CDF, GMD, LRD, ZMW, SLE
Crypto collectionStablecoin on-chain collectionUSD (USDC, USDT)
Interac payeesBusiness Interac collection emails with security question/answerCAD
CAD Interac money requestPull collection: Blaaiz sends an Interac request to payer_email, greeting uses payer_name (quote rail: "INTERAC_REQUEST", max 1500 CAD)CAD
INR UPI depositCustomer pays by UPI (intent link or QR). Checkout currency is INR and the method is UPI.INR
ZAR bank accountCustomer pays into a South African bank accountZAR

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 auth
  • GET /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.

Next steps