Skip to main content
Every payment starts with initialize. After that you choose how the customer pays.

Redirect

  1. POST /v1/payment/initialize with your secret key.
  2. Redirect the browser to data.checkoutUrl.
  3. The customer picks card or transfer (and any other enabled channel).
  4. We send them to callbackUrl when checkout is done.
  5. Confirm with a webhook and verify.

Custom checkout

  1. Initialize. Keep data.accessCode and data.reference.
  2. For card, start a hosted card session, mount the processor fields, then charge. See Pay with card.
  3. For transfer, request a virtual account and show bank name, account number, and expiry. See Pay with transfer.
  4. Subscribe to GET /v1/payment/checkout/events if the pay page should update live.
Checkout calls after initialize use the access code.

What initialize accepts

Initialize returns data.reference (VPY_TXN_…). Store it on the order.

Callback query string

When checkout finishes, the browser hits your callbackUrl:
Confirm with verify.

Metadata

metadata is returned on verify.

Split (distribution)

₦70 goes to the utility group, ₦30 to logistics. Remainder settles to the primary account. The sum must not exceed amount. Verify includes split when a distribution was applied.

Fees

Channels

Initialize echoes channels for the merchant: card, bank_transfer, bank_payment, and ussd. Hosted checkout shows the ones enabled for you.