Qora by Laayo
Get API keys

Test mode

A completely separate environment: separate keys, separate payments, separate webhooks, separate dashboard data. Nothing in test mode can touch live money.

How modes are separated

There is no mode parameter to set, and therefore none to get wrong. Your key's prefix decides everything:

  • A sk_test_ key can only see and create test payments.
  • A sk_live_ key can only see and create live payments.

Asking for a live payment with a test key returns 404, not 403 — from a test key's point of view, live objects do not exist.

The dashboard follows the same rule. The environment switch in the top bar changes which set of payments, keys, webhooks and events you are looking at, and a persistent amber band across the top makes test mode impossible to mistake for live.

What you need

Test mode runs against a separate sandbox, so your account needs test credentials connected under Settings → Fonepay. Without them, POST /v1/payments returns credentials_missing.

What is and is not simulated

BehaviourIn test mode
QR generationReal. The payload is a genuine QR, minted in the sandbox.
ConfirmationReal — the same confirmation path live payments take.
WebhooksReal, signed with your test endpoint's own secret.
Money movementNone. Nothing settles anywhere.
Qora software feesNever charged. Test traffic is free.

Going live

  1. Complete business verification.
  2. Add live Fonepay credentials.
  3. Change sk_test_ to sk_live_ in your environment.
  4. Add a live webhook endpoint — it gets its own signing secret, distinct from the test one.

Test and live webhook endpoints have different signing secrets. Verifying live deliveries with your test secret fails every signature. Keep them in separate environment variables.