> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.pay4power.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.pay4power.com/_mcp/server.

# Sandbox Testing

> Simulate successful, failed, and processing transactions in the Sandbox environment.

Use the Sandbox base URL to exercise your integration without moving money. The Sandbox recognises reserved customer identifiers that force a specific transaction outcome, so you can test every branch of your fulfilment logic before you go live.

These identifiers only work against the Sandbox environment listed on the [overview page](/#base-urls). In the Live environment, every identifier is treated as a real customer.

## Simulated outcomes

Send the identifier in the `receiver` field of the request. For electricity it is the meter number. For airtime and data it is the customer phone number.

| Outcome    | `receiver` value | What the API returns                                                        |
| ---------- | ---------------- | --------------------------------------------------------------------------- |
| Failure    | `9999999999999`  | HTTP 417 with `success: false` and a failure message.                       |
| Processing | `8888888888888`  | HTTP 202 with `status: PROCESSING`. Use requery to resolve the final state. |
| Success    | Any other number | HTTP 200 with `status: SUCCESS`.                                            |

The same identifiers apply to electricity (`POWER`), airtime (`AIRTIME`), and data (`DATA`). TV does not have documented simulator identifiers.

## Where the identifier goes

| Product     | Request                                                                                                                                                                           |
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Electricity | Send it as the meter number in `receiver` when you verify or initiate the transaction. The simulated outcome is returned when you vend with the resulting verification reference. |
| Airtime     | Send it as the phone number in `receiver` in the vend request.                                                                                                                    |
| Data        | Send it as the phone number in `receiver` in the vend request, together with the selected package.                                                                                |

## Suggested test plan

1. Vend with an ordinary number and confirm your application fulfils the order on `SUCCESS`.
2. Vend with `9999999999999` and confirm your application records the failure without fulfilling the order or re-sending the vend.
3. Vend with `8888888888888`, then poll `GET /requery` until a final status is returned, and confirm that pending transactions are never fulfilled early.

See [Transaction Status](/bill-payments/transaction-status) for requery and reconciliation guidance.