# Sandbox

Test iMessage for free on Zernio's shared sandbox line before ordering a sender: inbound, replies, inbox and webhooks with your own phone

The sandbox lets you try iMessage end to end, and check the integration and latency, before ordering a sender.

## Set it up

You message Zernio's shared sandbox line from your own phone or Apple ID. They reach your inbox and `message.received` webhooks exactly as on a sender of your own.

1. Add your phone number or Apple ID email as a sandbox contact, in the dashboard (**iMessage** page, "Try iMessage free on our sandbox line") or with [`POST /v1/imessage/sandbox/contacts`](/imessage/add-imessage-sandbox-contact):

```json
{ "handle": "+15551234567" }
```

2. The contact starts as `pending`. From that phone or Apple ID, send its `joinText` (for example `JOIN 4821`) to the sandbox line. The response's `joinLink`, and the QR code in the dashboard, open Messages with the text already filled in.
3. When the code arrives the contact turns `active`. Every message you send to the sandbox line from then on lands in your inbox, and fires your webhooks, on the sandbox account.

<Callout type="warn">
The handle has to be the one your device starts new conversations from. Otherwise the code arrives from a different address and the contact stays `pending`.
</Callout>

The setting lives here:

- iPhone: Settings > Apps > Messages > Send & Receive
- Mac: Messages > Settings > iMessage

[`GET /v1/imessage/sandbox/contacts`](/imessage/list-imessage-sandbox-contacts) returns the sandbox line (`handle`), the sandbox `accountId` and your contacts with their status.

## Reply

Reply from the inbox, or with [`POST /v1/inbox/conversations/{conversationId}/messages`](/messages/send-inbox-message) using the sandbox `accountId`.

The `conversationId` comes from the `message.received` webhook or from listing the sandbox account's conversations.

Each user sees only their own sandbox conversations.

## Limits

| Rule | Value |
|---|---|
| Contacts | Up to 5 per user. A phone or email can be on one list at a time; a contact not activated within 24 hours can be claimed by someone else |
| Who you can message | Only your own active sandbox contacts |
| Reply window | 24 hours after the contact's last message; each new message from the contact reopens it |
| Starting conversations | Not supported: the contact always writes first |
| Group chats | Not supported |
| Content | No verification codes, prices or marketing content |
| Volume | 50 messages a day per user |
| Cost | Free. The sandbox is not billed and does not count as a connected account |

A send outside these rules returns `403` with the reason.

The sandbox is for testing only. Do not use it for production traffic or for messaging anyone but yourself. Access can be revoked for misuse.

## When you are done

Remove your contacts with [`DELETE /v1/imessage/sandbox/contacts/{contactId}`](/imessage/remove-imessage-sandbox-contact) or the trash icon in the dashboard.

Removing a contact deletes its sandbox conversation. Messages from that handle to the sandbox line are no longer delivered to you.

To go to production, [order a sender](/platforms/imessage/connect). It has no reply window, can start conversations within the [new-contact rules](/platforms/imessage/new-contacts), and supports groups.