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

# Sandbox Mode

> Test your integration without real phone calls or SMS charges.

Test your entire integration without connecting to real MNO infrastructure or incurring charges.

## Enable Sandbox

Use your sandbox API key (prefix `pk_test_`) for all requests:

```bash
curl -X POST "https://api.voicebip.com/v1/agents" \
  -H "Authorization: Bearer pk_test_xxx" \
  -H "Content-Type: application/json" \
  -d '{"display_name": "Test Agent"}'
```

## What Works in Sandbox

* Create agents, provision numbers, configure webhooks
* `POST /v1/calls` -- simulates full call lifecycle (call.initiated fires immediately, call.transcription after 2 seconds, call.completed after 5 seconds)
* `POST /v1/messages` -- simulates SMS delivery (DLR events fire)
* `POST /v1/webhooks/test` -- sends synthetic events with valid HMAC signatures
* All webhook signatures are real HMAC-SHA256 (same verification code works)

## What Doesn't Work in Sandbox

* Real phone calls (no SIP/RTP connections)
* Real SMS delivery (no SMPP to MNO SMSCs)
* Real billing charges (all usage tracked at NGN 0)

## Sandbox Numbers

Sandbox provisions from a reserved test pool:

| Type                  | Range          |
| --------------------- | -------------- |
| Mobile virtual (test) | +234800000xxxx |
| Lagos DID (test)      | +234100000xxxx |

These numbers are not reachable from real phones.

## Switching to Production

Replace `pk_test_` with `pk_live_` in your Authorization header. That's it. Your webhook handlers, signature verification, and event processing code work identically in both modes.