Skip to main content

The payment flow

What to take from it:
  • Your secret key never leaves your server. The browser only ever holds the ugwo uid and, for the embed, your public key.
  • The browser is not the source of truth. A customer can close the tab after paying, or tamper with a callback. Fulfil from the webhook plus a server-side GET. See Validate and fulfil.
  • Payment is asynchronous. Bank transfers and USSD complete when the customer acts, which may be minutes later.

The objects

Lifecycles

Ugwo

  • Several attempts can be open at once. A customer who starts a bank transfer can switch to USSD; just create another activity. The first one to succeed pays the ugwo. If a later one also succeeds, it is flagged as a double charge and the ugwo is not changed. Once the ugwo is paid or cancelled, new activities are rejected with 409.
  • A failed attempt doesn’t close the ugwo. It returns to requires_ugwo and you can try again, with any medium.
  • Underpayment keeps it open. If a PSP reports collecting less than the ugwo’s amount, the ugwo goes back to requires_ugwo and total_amount_paid records what was received so far.

Activity

Full status tables live on each object page: Ugwo, Activity, Next action, Refund.

Where to go next

Quickstart

Run the flow above with cURL in sandbox.

Validate and fulfil

The checks to run before you ship an order.