Sandbox

Safe integration environment. Keys prefixed knos_sandbox_ never call live telecom providers; wallet holds still apply.

How to use

  1. Use a knos_sandbox_… key from Developers (never a production key here).
  2. Call the same endpoints as production — fulfillment is simulated; wallet holds still apply.
  3. Force a failure with beneficiary/meter ending in 0000 to exercise error + webhook paths before requesting production.

Behavior

AreaSandbox behavior
FulfillmentSimulated completion / failure — no live provider fulfillment
WalletHolds and releases like production
Meter lookupDeterministic fake meters
Forced failBeneficiary or meter ending in 0000 → SANDBOX_TEST_FAILURE
ECG tokenFake token on successful sandbox ECG
Production keysSandbox credentials cannot create production traffic

Forced failure example

POSThttps://confident-elephant-309.convex.site/v1/transactions
Request
curl -sS https://confident-elephant-309.convex.site/v1/transactions \  -H "Authorization: Bearer $KEY" \  -H "Content-Type: application/json" \  -d '{    "idempotencyKey": "fail-demo-1",    "product": "airtime",    "productId": "airtime-mtn",    "amount": 1,    "beneficiary": "0240000000"  }'
Later GET → failed
{  "transaction": {    "status": "failed",    "errorCode": "SANDBOX_TEST_FAILURE",    "customerMessage": "Sandbox forced failure (beneficiary/meter ends with 0000)"  }}