Skip to main content
The sandbox runs the same API as production, at a different base URL, with its own API keys and its own data. No real payment ever happens: no USSD prompt is sent and nothing is collected or paid out. You trigger the outcome of each transaction yourself and receive the matching webhook, signed exactly as in production. Keys are not interchangeable: a wk_test_ key is rejected in production and a wk_live_ key is rejected in the sandbox (401). Ask Winam for a sandbox key; you receive it with your webhook secret, shown once. Interactive API explorer (sandbox only): https://sandbox.winampay.de/docs.

Behaviour

  • MTN deposit → status: "pending", collection_mode: "merchant_initiated".
  • Orange deposit → status: "pending", collection_mode: "customer_initiated" and an instructions object to display to the player (see Collection modes). The USSD code in the sandbox is deliberately invalid (#150*14*000000*000000000*<amount>#): do not dial it on a real phone.
  • Withdrawal → status: "pending_approval", as in production.
  • A deposit that is not simulated expires after 15 minutes and sends payment.expired.

Simulate an outcome

Response 200:
Test the late payment case. In production a deposit can receive payment.succeeded after payment.expired for the same winam_tx_id (the player paid after the deadline). Simulate expired, then succeeded, and check that your platform credits the player once.

Suggested test plan

  1. Deposit MTN → simulate succeeded → player credited once, webhook signature verified.
  2. Deposit Orange → display instructions → simulate succeeded.
  3. Deposit → simulate failed, then expired, then expired + succeeded.
  4. Re-send the same reference → same winam_tx_id, no second transaction.
  5. Make your webhook endpoint return 500, simulate an outcome, then use Replay Webhook.
  6. Withdrawal → simulate succeeded and failed.