# Test values

> Every MobileValidate test phone number and e-mail address, the exact answer each returns, and the public sandbox key that runs them with no signup.

Canonical: https://mobilevalidate.com/docs/test-values · Last updated: 2026-09-25

Test values are phone numbers and e-mail addresses with a fixed, documented answer. Use them to build and test every branch of your integration: registered, not registered, unknown, pending, unsupported and the request errors. They never reach a real network and are never billed.

## How do I try them without signing up?

Use the public sandbox key. It is public on purpose and works in every example in these docs:

```bash
curl https://api.mobilevalidate.com/v1/lookup -H "Authorization: Bearer mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym" -H "Content-Type: application/json" -d '{"numbers":["+447700900001"],"checks":["whatsapp","telegram","carrier"]}'
```

The sandbox key answers **only the test values below**. Any other number or address returns `403 sandbox_magic_only`. It allows 30 requests a minute and 1,000 a day per IP address, bulk jobs of at most 10 rows, and no webhooks. You can also run every value from the console on the [home page](/#try-it).

## Which test values can I use?

The answer depends on the value and on the kind of check. Account checks answer yes or no (`registered`), the carrier lookup returns data (`attributes`), and every e-mail check follows the address table.

### Phone numbers

| Number | Account checks (WhatsApp, Telegram, …) | `whatsapp.business` |
|---|---|---|
| `+447700900001` | `registered: true` | `registered: true`, `business: false` |
| `+447700900002` | `registered: false` | `registered: false` |
| `+447700900003` | `unknown` (`UPSTREAM_TIMEOUT`) | `unknown` (`UPSTREAM_TIMEOUT`) |
| `+447700900004` | `pending` for about 5 s, then `registered: true` | `pending` for about 5 s, then `registered: true`, `business: false` |
| `+447700900005` | `unsupported_country` | `unsupported_country` |
| `+447700900006` | `registered: true` | `registered: true`, `business: true` |

### Carrier lookup

| Number | `network.carrier` |
|---|---|
| `+447700900001` | `line_type: "mobile"`, `carrier: "Test Carrier"`, `country: "GB"` |
| `+447700900002` | `unknown` (`NO_DATA`) |
| `+447700900003` | `unknown` (`UPSTREAM_TIMEOUT`) |
| `+447700900004` | `pending` for about 5 s, then `line_type: "mobile"`, `carrier: "Test Carrier"`, `country: "GB"` |
| `+447700900005` | `unsupported_country` |
| `+447700900006` | `line_type: "mobile"`, `carrier: "Test Carrier"`, `country: "GB"` |

### E-mail addresses

| Address | Every e-mail check |
|---|---|
| `registered@test.mobilevalidate.com` | `registered: true` |
| `not-registered@test.mobilevalidate.com` | `registered: false` |
| `unknown@test.mobilevalidate.com` | `unknown` (`UPSTREAM_TIMEOUT`) |
| `pending@test.mobilevalidate.com` | `pending` for about 5 s, then `registered: true` |
| `unsupported@test.mobilevalidate.com` | `unknown` (`UNSUPPORTED_PROVIDER`) |

### Values that fail the whole request

| Value | Response (for every check) |
|---|---|
| `+447700900429` | `429 rate_limited` with a `Retry-After` header |
| `+447700900402` | `402 insufficient_balance` |
| `rate-limited@test.mobilevalidate.com` | `429 rate_limited` with a `Retry-After` header |
| `no-balance@test.mobilevalidate.com` | `402 insufficient_balance` |

Services limited to some countries still answer the test numbers, so every check can be tested with them.

## What do other numbers and addresses return?

- **Public sandbox key:** `403 sandbox_magic_only`, with a suggestion to use a test value.
- **Your own test key** (`mv_test_…`): a stable, made-up answer derived from the number or address and the check. The same input always gives the same answer, marked `"test": true`. Nothing is sent to any network.
- **Live keys** (`mv_live_…`): test values are refused with `400 test_number_only`, so test data never ends up in real billing.

## How do I test error handling?

The values that fail the whole request return the real error shape, including `request_id` and the `Retry-After` header for `429`. Use them to test your retry and top-up paths. Every error code is described in [Errors](/docs/errors).

## What comes next?

- [Get a free test key](/get-test-key) to try any number or address in test mode, run bulk jobs and receive webhooks.
- Live keys follow after we review your use case: [request access](/request-access).
- The full test-mode behaviour, including the spam reputation fixtures, is in [Test mode](/docs/test-mode).

## Frequently asked questions

### Do I need an account to use the test values?

No. The public sandbox key in the examples answers every test value on this page. It is free, never billed and limited per IP address.

### Why does the sandbox key reject my own number?

The sandbox key answers only the test values on this page and returns 403 sandbox_magic_only for anything else. Get a personal test key to try any number in test mode, or request access for live keys.

### Are the test numbers real phone numbers?

No. They come from the +44 7700 900000–900999 range, which the UK regulator reserves for drama and never assigns to subscribers. The e-mail addresses use our own test domain.
