# Tester avec le bac à sable

> Un environnement séparé, gratuit et illimité, avec un simulateur pour tester vos webhooks sans numéro WhatsApp.

Chaque application a un environnement **sandbox**, strictement séparé de la production : ses propres clés (`pk_test_…`), entreprises, numéros, webhooks et données.

| | Sandbox | Production |
|---|---|---|
| Clés | `pk_test_…` | `pk_live_…` |
| Limites de quota et de nombre d'entreprises | Aucune | Celles de votre plan |
| Facturation Bref Point Inbox | Aucune | Selon votre plan |
| Simulateur | Oui | **Refusé** (`403 sandbox_only`) |

<Callout type="note" title="Et Meta dans le sandbox ?">
Un compte connecté dans le sandbox est un compte de test Meta : les messages que vous **envoyez** partent réellement vers Meta (et vers les destinataires que ce compte de test autorise). Le **simulateur**, lui, ne contacte jamais Meta : il fabrique les événements localement.
</Callout>

## Simuler un message reçu

Idéal pour tester votre réception de bout en bout : le message est enregistré, la fenêtre de 24 heures s'ouvre pour cet expéditeur, et votre webhook `message.received` se déclenche exactement comme en production (les données portent `"simulated": true`).

<ApiExample method="POST" path="/sandbox/simulate/inbound-message" />

## Faire avancer le statut d'un message

Après un envoi (`POST /messages`), faites évoluer le message comme le ferait Meta :

<ApiExample method="POST" path="/sandbox/simulate/message-status" />

Les mêmes règles qu'en production s'appliquent : un statut **ne recule jamais**, et un `failed` ne remplace pas un message déjà `read`. Une transition sans effet répond simplement avec l'état actuel.

## Un scénario complet

1. Connectez un numéro dans le sandbox et déclarez un webhook sur `*` ([Démarrage rapide](/docs/quickstart)).
2. `POST /sandbox/simulate/inbound-message` : votre serveur reçoit `message.received`.
3. Répondez avec `POST /messages` (message libre, la fenêtre est ouverte).
4. `POST /sandbox/simulate/message-status` avec `delivered`, puis `read` : vous recevez les événements correspondants.
5. Provoquez une panne chez vous (réponse `500`) et observez les reprises dans `GET /webhook-deliveries`.
6. Quand tout est bon, créez une clé de production et reprenez les mêmes appels.
