# Compte, historique et clés

> Index de la documentation : https://wahasend.com/docs/fr/llms.txt · Tout en un fichier : https://wahasend.com/docs/fr.md · URL de base de l'API : https://app.wahasend.com/api/v1

Qui vous êtes, ce qui a été envoyé, et vos clés. Tous les produits y ont accès et peuvent créer des clés d'API (voir [Quels produits utilisent l'API](https://wahasend.com/docs/fr/authentication.md)).

<a id="me"></a>

### Votre compte

`GET /api/v1/me`

L'organisation, ses produits et fonctions actifs, et si une clé existe. Un moyen rapide de tester une clé.

- Débloqué par: tous les produits
- Clé du compte seulement

**Exemple**

curl:

```bash
curl https://app.wahasend.com/api/v1/me \
  -H "X-API-Key: $WAHASEND_API_KEY"
```

JavaScript:

```js
const res = await fetch('https://app.wahasend.com/api/v1/me', {
  headers: { 'X-API-Key': process.env.WAHASEND_API_KEY },
});
const data = await res.json();
```

Python:

```python
import os
import requests

r = requests.get(
    "https://app.wahasend.com/api/v1/me",
    headers={"X-API-Key": os.environ["WAHASEND_API_KEY"]},
)
print(r.json())
```

**Réponse 200**

```json
{
  "success": true,
  "id": "2c7d0e19-4b8a-4f63-9e21-7a5c3d9b1f08",
  "name": "Aminetou Sall",
  "email": "aminetou@example.com",
  "memberRole": "admin",
  "organization": {
    "id": "2c7d0e19-4b8a-4f63-9e21-7a5c3d9b1f08",
    "name": "Kaba Shop",
    "requireTwoFactor": false
  },
  "products": [
    "developer"
  ],
  "features": [
    "send",
    "batch",
    "api",
    "otp",
    "media",
    "webhooks"
  ],
  "maxNumbers": null,
  "webhookUrl": "https://example.com/hooks/wahasend",
  "hasApiKey": true,
  "apiKeyPreview": "3f9c1a7b2e4d***",
  "…": "…"
}
```

<a id="messages"></a>

### Historique des messages

`GET /api/v1/messages`

Messages partis par envois texte, lots, campagnes, OTP, rappels et assistants, les plus récents d'abord.

- Débloqué par: tous les produits
- Clé du compte seulement

> Les messages OTP affichent `[OTP MESSAGE]` au lieu du code. Les envois de médias apparaissent avec leur légende ou une étiquette comme `[image] https://…`.

> `wahaMessageId` est l'identifiant WhatsApp une fois le message parti (null avant) ; `containerId` est le numéro d'envoi (null sur les anciennes lignes).

**Paramètres de requête**

| Champ | Type | Obligatoire | Description |
| --- | --- | --- | --- |
| `type` | "alert" \| "bulk" \| "otp" | non | Filtrer par type. |
| `status` | string | non | `queued`, `sending`, `sent`, `delivered`, `read` ou `failed`. |
| `search` | string | non | Partie du destinataire ou du texte. |
| `page` | number | non | Par défaut 1. |
| `limit` | number | non | Par défaut 50, 100 max. |

**Exemple**

curl:

```bash
curl "https://app.wahasend.com/api/v1/messages?status=failed&limit=20" \
  -H "X-API-Key: $WAHASEND_API_KEY"
```

JavaScript:

```js
const res = await fetch('https://app.wahasend.com/api/v1/messages?status=failed&limit=20', {
  headers: { 'X-API-Key': process.env.WAHASEND_API_KEY },
});
const data = await res.json();
```

Python:

```python
import os
import requests

r = requests.get(
    "https://app.wahasend.com/api/v1/messages?status=failed&limit=20",
    headers={"X-API-Key": os.environ["WAHASEND_API_KEY"]},
)
print(r.json())
```

**Réponse 200**

```json
{
  "success": true,
  "total": 1,
  "page": 1,
  "limit": 20,
  "messages": [
    {
      "id": "4f0c6a1e-2b7d-4c1a-9e35-7d8f2a6b1c90",
      "type": "alert",
      "recipient": "22212345678",
      "content": "Your order #1042 is ready for pickup.",
      "status": "failed",
      "priority": "normal",
      "error": "Message delivery failed (ACK 0)",
      "sentAt": null,
      "deliveredAt": null,
      "createdAt": "2026-09-30T10:30:10.000Z",
      "wahaMessageId": "true_22212345678@c.us_3EB0C767D26A1D2E5A8F",
      "containerId": "6d2b9c1e-8f4a-4e37-a5c2-1b9e7d3f0a64"
    }
  ]
}
```

<a id="stats"></a>

### Compteurs

`GET /api/v1/stats`

Totaux de tous les messages, par statut et par type, plus les dernières 24 heures et 7 jours.

- Débloqué par: tous les produits
- Clé du compte seulement

**Exemple**

curl:

```bash
curl https://app.wahasend.com/api/v1/stats \
  -H "X-API-Key: $WAHASEND_API_KEY"
```

JavaScript:

```js
const res = await fetch('https://app.wahasend.com/api/v1/stats', {
  headers: { 'X-API-Key': process.env.WAHASEND_API_KEY },
});
const data = await res.json();
```

Python:

```python
import os
import requests

r = requests.get(
    "https://app.wahasend.com/api/v1/stats",
    headers={"X-API-Key": os.environ["WAHASEND_API_KEY"]},
)
print(r.json())
```

**Réponse 200**

```json
{
  "success": true,
  "totalMessages": 1247,
  "sent": 30,
  "delivered": 1150,
  "failed": 47,
  "alerts": 900,
  "bulk": 320,
  "otp": 27,
  "last24h": 58,
  "last7d": 412
}
```

<a id="regenerate-key"></a>

### Remplacer la clé du compte

`POST /api/v1/me/regenerate-key`

Crée une nouvelle clé de compte ; l'ancienne cesse de fonctionner aussitôt. `POST /me/generate-key` fait de même la première fois (409 `CONFLICT` si une clé existe déjà).

- Débloqué par: tous les produits (`api`)
- Clé du compte seulement

**Exemple**

curl:

```bash
curl -X POST https://app.wahasend.com/api/v1/me/regenerate-key \
  -H "X-API-Key: $WAHASEND_API_KEY"
```

JavaScript:

```js
const res = await fetch('https://app.wahasend.com/api/v1/me/regenerate-key', {
  method: 'POST',
  headers: { 'X-API-Key': process.env.WAHASEND_API_KEY },
});
const data = await res.json();
```

Python:

```python
import os
import requests

r = requests.post(
    "https://app.wahasend.com/api/v1/me/regenerate-key",
    headers={"X-API-Key": os.environ["WAHASEND_API_KEY"]},
)
print(r.json())
```

**Réponse 200**

```json
{
  "success": true,
  "apiKey": "wn_8c1f…64 hex characters…",
  "warning": "Save this new API key now. Your old key has been invalidated."
}
```

**Erreurs possibles**

- [`PRODUCT_REQUIRED`](https://wahasend.com/docs/fr/errors.md#product_required) (403): This feature is not included in your products.

<a id="regenerate-number-key"></a>

### Remplacer une clé de numéro

`POST /api/v1/session/:containerId/regenerate-key`

Nouvelle clé pour un numéro ; l'ancienne cesse de fonctionner. `POST /session/:containerId/generate-key` crée la première.

- Débloqué par: tous les produits (`api`)
- Clé du compte seulement

**Paramètres de chemin**

| Champ | Type | Obligatoire | Description |
| --- | --- | --- | --- |
| `containerId` | uuid | oui | Le numéro, voir `GET /session/list`. |

**Exemple**

curl:

```bash
curl -X POST https://app.wahasend.com/api/v1/session/6d2b9c1e-8f4a-4e37-a5c2-1b9e7d3f0a64/regenerate-key \
  -H "X-API-Key: $WAHASEND_API_KEY"
```

JavaScript:

```js
const res = await fetch('https://app.wahasend.com/api/v1/session/6d2b9c1e-8f4a-4e37-a5c2-1b9e7d3f0a64/regenerate-key', {
  method: 'POST',
  headers: { 'X-API-Key': process.env.WAHASEND_API_KEY },
});
const data = await res.json();
```

Python:

```python
import os
import requests

r = requests.post(
    "https://app.wahasend.com/api/v1/session/6d2b9c1e-8f4a-4e37-a5c2-1b9e7d3f0a64/regenerate-key",
    headers={"X-API-Key": os.environ["WAHASEND_API_KEY"]},
)
print(r.json())
```

**Réponse 200**

```json
{
  "success": true,
  "apiKey": "waha_V1StGXR8_Z5jdHi6B-myT…",
  "containerId": "6d2b9c1e-8f4a-4e37-a5c2-1b9e7d3f0a64",
  "label": "Shop",
  "warning": "Store this key securely. It cannot be retrieved again."
}
```

**Erreurs possibles**

- [`CONTAINER_NOT_FOUND`](https://wahasend.com/docs/fr/errors.md#container_not_found) (404): WhatsApp number not found.
- [`PRODUCT_REQUIRED`](https://wahasend.com/docs/fr/errors.md#product_required) (403): This feature is not included in your products.
