The payment flow
What to take from it:- Your secret key never leaves your server. The browser only ever
holds the ugwo
uidand, 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_ugwoand 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 torequires_ugwoandtotal_amount_paidrecords 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.