# Démarrage rapide

> Créez un compte, générez une clé de bac à sable, déclarez un webhook et envoyez votre premier message en quelques minutes.

Ce parcours utilise le **bac à sable** : rien n'est facturé et aucun vrai destinataire n'est contacté. Les exemples s'exécutent dans votre terminal ; chaque bloc existe en curl, Node.js, Python et PHP (votre choix de langage est mémorisé).

Définissez d'abord l'adresse de l'API :

```bash
export INBOX_API="https://VOTRE-HOTE/api/v1"
```

<Steps>

### Créez votre compte

La création d'un compte crée aussi son premier membre (propriétaire) et ouvre une session.

<ApiExample method="POST" path="/auth/signup" />

Le mot de passe doit contenir **10 caractères au minimum**. Conservez le `sessionToken` : c'est la clé de la console, valable 30 jours.

```bash
export INBOX_SESSION="ses_…"
```

### Créez une application

Une application a **deux environnements** : `sandbox` pour tester et `production` pour envoyer à de vrais destinataires. Ils sont strictement séparés.

<ApiExample method="POST" path="/apps" />

### Générez une clé de sandbox

Choisissez ses **portées** : une clé ne peut faire que ce que vous lui accordez.

<ApiExample method="POST" path="/apps/{appId}/keys" />

<Callout type="warning" title="Le secret n'est affiché qu'une seule fois">
Copiez le champ `secret` maintenant. Il n'est stocké nulle part : en cas de perte, générez une nouvelle clé et révoquez l'ancienne.
</Callout>

```bash
export INBOX_KEY="pk_test_…"
```

### Déclarez l'entreprise de votre client

Une **entreprise connectée** représente votre client, propriétaire d'un compte WhatsApp Business. `externalRef` est votre propre identifiant de ce client.

<ApiExample method="POST" path="/connected-businesses" />

### Connectez son compte WhatsApp

Votre client termine l'inscription intégrée de Meta dans le navigateur ; vous recevez un `code`, un `wabaId` et un `phoneNumberId` que vous transmettez à l'API. Voir [Connecter un compte WhatsApp](/docs/guides/connect-whatsapp).

<ApiExample method="POST" path="/connected-businesses/{businessId}/waba-connections" />

Notez l'`id` du numéro (`phoneNumber.id`) : c'est lui qui désigne le numéro d'envoi.

### Recevez les événements

Déclarez la destination de vos webhooks. Le secret de signature n'est affiché qu'une fois.

<ApiExample method="POST" path="/webhook-endpoints" />

Vérifiez que votre serveur répond bien, avec un événement de test signé :

<ApiExample method="POST" path="/webhook-endpoints/{id}/test" />

### Envoyez votre premier message

<ApiExample method="POST" path="/messages" />

La réponse est immédiate (`202`, statut `queued`) : l'envoi réel est asynchrone. Suivez le statut avec `GET /messages/{id}` ou, mieux, avec vos webhooks.

<Callout type="note" title="Pourquoi un template ?">
Un message libre (`type: text`) n'est accepté que dans la fenêtre de 24 heures suivant un message du destinataire. Un template approuvé fonctionne à tout moment. Voir [Envoyer des messages](/docs/guides/send-messages).
</Callout>

### Simulez une réponse du client

Sans téléphone, faites « arriver » un message : votre webhook `message.received` se déclenche exactement comme en production.

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

</Steps>

## Et ensuite

- [Authentification et clés](/docs/authentication) : portées, rotation, bonnes pratiques.
- [Webhooks](/docs/guides/webhooks) : vérifier la signature, dédoublonner, rejouer.
- [Fiabilité](/docs/guides/reliability) : idempotence et reprises.
- [Passer en production](/docs/guides/usage-billing) : plan, quotas, coûts.
