Coming soon. Steadi Pay is not live yet. Accounts are for sandbox testing only, and no real payments can be made.

Docs

Hosted checkout

Your server creates a session. The customer pays on pay.steadipay.ltd. You confirm the result with a webhook or verify.

Create a session

POST /v1/checkout_sessions

FieldRequiredNotes
amountYesKwacha as a string, for example 250 or 250.50. amount_minor (tambala) still works.
currencyNoMust be MWK if sent.
merchant_referenceYesYour order id. At least 3 characters. Use it to match webhooks.
return_urlYesWhere we send the customer after a successful payment. Must start with https:// or http://.
cancel_urlNoOptional separate cancel URL.
descriptionNoShown on checkout.
customer_emailNoIf you already have it.
customer_msisdnNoMalawi mobile number. We format it.
curl -X POST https://api.steadipay.ltd/v1/checkout_sessions \
  -H "Authorization: Bearer sk_test_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": "250",
    "currency": "MWK",
    "merchant_reference": "TICKET-8841",
    "description": "389 Tickets · Saturday show",
    "return_url": "https://tickets.example/orders/8841/return"
  }'

Response

{
  "id": "cs_...",
  "amount_minor": "25000",
  "currency": "MWK",
  "merchant_reference": "TICKET-8841",
  "checkout_url": "https://pay.steadipay.ltd/cs_...",
  "expires_at": "2026-09-19T16:00:00.000Z"
}

Redirect the customer to checkout_url. They choose the method. Steadi Pay chooses the provider. You do not pick Airtel vs TNM vs card for them.

POST /v1/payments accepts the same body and returns checkout_url if you already named the route that way.

Read a session

GET /v1/checkout_sessions/:id returns the session and, once they have started paying, the payment_id.

Return URL

return_url must be a web address that starts with https:// or http://. After a successful payment, checkout shows the receipt for five seconds and then sends the customer there. It uses your address exactly as you gave it and adds nothing to it, so put your own order reference in it.

Treat return as “the customer is back”, not “the money is in”. On the return page, look up the payment by merchant reference or payment id and call verify, or wait for the webhook. If the payment fails or expires, checkout shows that and offers a button back to you instead of redirecting.

Checkout page

Hosted checkout is English and Chichewa, works on a small phone, and never asks for a card number. Cards open the bank's hosted page (N-Genius). Mobile money is a push prompt or a pay-by-reference number. Bank is a pay-by-reference number with steps for the customer's own bank. When the customer covers the fees, they see one line called handling fee.