Skip to content

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.

Terminal window
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_pin is true when a card PIN is needed (Zimswitch).
  • collects — the exact fields to gather from the customer. Each field says its type (msisdn, otp, pin, card_number, …) and its step: charge means send it in the initial charge; confirm means 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 marked status: "coming_soon". Each item carries available (usable now) and status, 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.