Discover payment methods
Before you render a payment form or a checkout, ask the API which methods are live.
Don’t hard-code EcoCash, O’mari or any other method: fetch them from
GET /v1/payment-methods and render what comes back. When Lango adds or retires a
method, your integration picks it up with no code change.
This endpoint is public — no API key — so you can call it from the browser or your server.
curl https://api.lango.co.zw/v1/payment-methods{ "environment": "production", "data": [ { "method": "ecocash", "display_name": "EcoCash", "flow": "push", "requires_pin": false, "description": "A payment request is pushed to the customer EcoCash phone and they approve it there. Collect only the mobile number, start the charge, then check the payment status; the merchant never handles the PIN.", "currencies": ["USD", "ZWG"], "collects": [ { "name": "msisdn", "label": "Mobile number", "type": "msisdn", "required": true, "step": "charge", "example": "263771234567" } ], "logo_url": "https://api.lango.co.zw/v1/payment-methods/ecocash/logo.svg", "available": true, "status": "active" }, { "method": "omari", "display_name": "O'mari", "flow": "otp", "requires_pin": false, "description": "The customer is sent a one-time PIN and enters it to confirm the payment.", "currencies": ["USD", "ZWG"], "collects": [ { "name": "msisdn", "label": "Mobile number", "type": "msisdn", "required": true, "step": "charge" }, { "name": "otp", "label": "One-time PIN", "type": "otp", "required": true, "step": "confirm" } ], "logo_url": "https://api.lango.co.zw/v1/payment-methods/omari/logo.svg", "available": true, "status": "active" } ]}By default you get only the methods that are usable right now in the environment your request hit (your test key’s sandbox, or production). That’s what you render.
What each method tells you
flow— how the customer authorises, so you know what UI to show:push— the request is pushed to the customer’s phone (EcoCash, OneMoney); they approve it there. Collect only the number, start the charge, then poll or wait for the webhook while they approve. You never collect their PIN.otp— the customer is sent a one-time PIN (O’mari). Collect the number, start the charge, then collect the OTP and confirm it.code— a code is issued and the customer approves it in an app (InnBucks).card— the customer enters card details (Zimswitch, Visa/Mastercard).requires_pinistruewhen a card PIN is needed (Zimswitch).
collects— the exact fields to gather from the customer. Each field says itstype(msisdn,otp,pin,card_number, …) and itsstep:chargemeans send it in the initial charge;confirmmeans send it when confirming an OTP.currencies— the currencies the method supports.logo_url— an SVG you can render as the method’s icon.
Filtering
?currency=USD— only methods that support a currency.?include=all— the full catalogue, including methods markedstatus: "coming_soon". Each item carriesavailable(usable now) andstatus, so you can grey-out what isn’t live yet. For a live payment form, use the default (available-only) list.
Then take the payment
Once the customer picks a method, create the payment with that method and the fields you
collected — see Direct API or Hosted checkout.