Aller au contenu

Démarrage rapide

Cinq requêtes, en cURL, JavaScript et Python. À la fin tu as une clé, une liste de contacts et un webhook qui te prévient quand un lead est qualifié.

  • Tu es propriétaire ou admin de ton espace WhatSetter. La page API le dit : Seuls les propriétaires et admins peuvent gérer les clés API.
  • Tu as curl, Node.js 18 ou plus récent, ou Python 3 avec requests.
  • L’URL de base est https://app.whatsetter.com/api/v1.
  1. Ouvre Paramètres, puis API & MCP.
  2. Clique sur Créer une clé.
  3. Renseigne Nom de la clé (par exemple Sync CRM) et choisis les Permissions : Accès complet, ou Personnalisé pour cocher les scopes un par un.
  4. Clique sur Créer la clé.
  5. Copie la clé. La fenêtre le dit : Copie ta clé maintenant. Elle ne sera plus jamais affichée. Puis clique sur J’ai enregistré ma clé.

Range-la dans une variable d’environnement, jamais dans ton code :

Terminal window
export WHATSETTER_API_KEY="ws_live_…"

GET /me ne demande aucun scope. Il te dit quel espace et quelles permissions la clé possède.

Terminal window
curl https://app.whatsetter.com/api/v1/me \
-H "Authorization: Bearer $WHATSETTER_API_KEY"
{
"data": {
"team_id": "6b0c1d2e3f405162738a",
"key": {
"id": "66f1a2b3c4d5e6f7a8b9c0d1",
"name": "Sync CRM",
"scopes": ["leads:read", "leads:write", "lists:write", "webhooks:manage"]
}
}
}

Un 401 invalid_api_key signifie que la clé est mal copiée ou révoquée. Un 401 missing_api_key signifie que l’en-tête ne nous est pas parvenu.

GET /leads demande leads:read. Filtre par status, campaign_id, phone, source ou since, et pagine avec limit (1 à 100) et cursor.

Terminal window
curl "https://app.whatsetter.com/api/v1/leads?status=qualified&limit=10" \
-H "Authorization: Bearer $WHATSETTER_API_KEY"
{
"data": [
{
"id": "66f1a2b3c4d5e6f7a8b9c0d1",
"phone": "33612345678",
"name": "Julien",
"status": "qualified",
"qualified": true,
"qualified_at": "2026-09-18T09:12:41.000Z",
"campaign_id": "acme-france-1-ab12",
"source": "list",
"tags": ["hot"],
"messages_count": 14,
"last_message_at": "2026-09-18T09:12:00.000Z",
"last_message_direction": "inbound"
}
],
"pagination": { "has_more": false, "next_cursor": null }
}

L’objet lead est raccourci ici. Quand has_more vaut true, renvoie next_cursor dans cursor pour obtenir la page suivante.

Deux appels : POST /lists crée une liste vide, puis POST /lists/{id}/leads y pousse jusqu’à 500 contacts par appel. Les deux demandent lists:write. Les numéros sont dédupliqués dans le lot et contre la liste.

Terminal window
# 1. Créer la liste
curl -X POST https://app.whatsetter.com/api/v1/lists \
-H "Authorization: Bearer $WHATSETTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Sync CRM, leads chauds"}'
# 2. Y pousser des contacts (remplace LIST_ID par l'id de l'étape 1)
curl -X POST https://app.whatsetter.com/api/v1/lists/LIST_ID/leads \
-H "Authorization: Bearer $WHATSETTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"leads":[{"phone":"+33612345678","name":"Julien","custom_variables":{"ville":"Lyon"}}]}'
{
"data": {
"imported": 1,
"duplicates_in_list": 0,
"rejected": [],
"lead_ids": ["66f1a2b3c4d5e6f7a8b9c0d2"]
}
}

POST /webhooks demande webhooks:manage. L’endpoint doit être en HTTPS.

Terminal window
curl -X POST https://app.whatsetter.com/api/v1/webhooks \
-H "Authorization: Bearer $WHATSETTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://ton-serveur.com/webhooks/whatsetter","events":["contact.qualified","contact.not_qualified"]}'
{
"data": {
"id": "66f1c0ffee00000000000abc",
"url": "https://ton-serveur.com/webhooks/whatsetter",
"events": ["contact.qualified", "contact.not_qualified"],
"active": true,
"description": null,
"secret_prefix": "whsec_3f9a",
"secret": "whsec_3f9a…",
"last_delivery_at": null,
"last_delivery_status": null,
"created_at": "2026-09-19T10:00:00.000Z"
}
}

Le secret n’apparaît que dans cette réponse. Stocke-le : tu en as besoin pour vérifier la signature de chaque livraison. Envoie-toi ensuite un événement de test signé avec POST /webhooks/{id}/test.