Contacts
Lisez et alimentez votre CRM depuis vos outils : formulaire de site, logiciel de caisse, ERP… Les contacts créés ici apparaissent dans Contacts.
Lister les contacts
| Champ | Type | Description |
|---|---|---|
tagoptionnel | string | Ne renvoie que les contacts dont les tags contiennent cette valeur. |
searchoptionnel | string | Recherche dans le nom ou le numéro. |
limitoptionnel | integer | Nombre de contacts par page (1 à 1 000). Sans limit, tous les contacts sont renvoyés. |
offsetoptionnel | integer | Nombre de contacts à sauter (pagination). Défaut : 0. |
curl -X POST https://api.whatixo.com/api/whatsapp/contacts \
-H "x-api-key: $WHATIXO_API_KEY" -H "Content-Type: application/json" \
-d '{"tag":"vip","limit":100,"offset":0}'// Parcourir tout le CRM, page par page
let offset = 0, page;
do {
page = await whatixo('/whatsapp/contacts', { limit: 500, offset });
for (const c of page.contacts) console.log(c.phone, c.name, c.tags);
offset += page.count;
} while (page.hasMore);offset = 0
while True:
page = whatixo("/whatsapp/contacts", {"limit": 500, "offset": offset})
for c in page["contacts"]:
print(c["phone"], c.get("name"), c.get("tags"))
offset += page["count"]
if not page.get("hasMore"):
break{
"success": true,
"count": 2,
"total": 214,
"offset": 0,
"hasMore": true,
"contacts": [
{
"id": "c5f1…",
"phone": "243812345601",
"name": "Aline Mukendi",
"tags": "clients,vip",
"attributes": { "ville": "Kinshasa" },
"leadTemperature": "HOT",
"messagesReceived": 12,
"messagesRead": 10,
"linksClicked": 3,
"lastActivityAt": "2026-11-03T16:30:00.000Z",
"createdAt": "2026-10-02T09:12:00.000Z"
}
]
}
total, offset et hasMore ne sont présents que si vous passez limit.
Lire un contact
| Champ | Type | Description |
|---|---|---|
phonerequis | string | Numéro international du contact. |
curl -X POST https://api.whatixo.com/api/whatsapp/contacts/info \
-H "x-api-key: $WHATIXO_API_KEY" -H "Content-Type: application/json" \
-d '{"phone":"243812345601"}'
Réponse : {"success":true,"contact":{…}}, ou 404 si le contact n’existe pas.
Créer ou mettre à jour un contact
Si un contact avec ce numéro existe, il est mis à jour ; sinon il est créé. Idéal pour synchroniser un formulaire ou une boutique.
| Champ | Type | Description |
|---|---|---|
phonerequis | string | Numéro international (6 à 20 chiffres). |
nameoptionnel | string | Nom affiché (120 caractères max). |
tagsoptionnel | string | string[] | "clients,vip" ou ["clients","vip"]. Remplace les tags existants. Un tag peut démarrer une séquence ; le retirer l’arrête. |
attributesoptionnel | object | Données libres : {"ville":"Goma","commande":"1042"}. |
curl -X POST https://api.whatixo.com/api/whatsapp/contacts/upsert \
-H "x-api-key: $WHATIXO_API_KEY" -H "Content-Type: application/json" \
-d '{
"phone": "243812345601",
"name": "Aline Mukendi",
"tags": ["clients", "newsletter"],
"attributes": { "ville": "Kinshasa", "source": "site-web" }
}'// Exemple : formulaire de contact de votre site
whatixo('/whatsapp/contacts/upsert', [
'phone' => $_POST['telephone'],
'name' => $_POST['nom'],
'tags' => ['prospects', 'site-web'],
'attributes' => ['message' => $_POST['message']],
]);whatixo("/whatsapp/contacts/upsert", {
"phone": "243812345601",
"name": "Aline Mukendi",
"tags": ["clients", "newsletter"],
"attributes": {"ville": "Kinshasa"},
})Réponse : {"success":true,"contact":{…}}. Si la limite de contacts de votre forfait est atteinte : 402 {"code":"PLAN_LIMIT","feature":"crm"}.
Vérifier des numéros
Indique si des numéros possèdent un compte WhatsApp, avant d’envoyer.
| Champ | Type | Description |
|---|---|---|
deviceIdrequis | string | Numéro connecté utilisé pour la vérification. |
phonesrequis | string[] | Liste de numéros internationaux. |
{ "deviceId": "8f2c1a7e-4b9d-4e21-9a6f-3c5d7e1b2a90", "phones": ["243812345601", "243000000000"] }
{
"success": true,
"results": [
{ "phone": "243812345601", "exists": true, "jid": "243812345601@s.whatsapp.net" },
{ "phone": "243000000000", "exists": false }
]
}
Vérifiez par lots raisonnables (quelques dizaines de numéros par appel) : des vérifications massives peuvent paraître suspectes à WhatsApp.
Photo de profil
{ "deviceId": "8f2c1a7e-4b9d-4e21-9a6f-3c5d7e1b2a90", "phone": "243812345601" }
{ "success": true, "pictureUrl": "https://pps.whatsapp.net/v/t61…" }
Si le contact n’a pas de photo ou la masque, l’API répond 500 avec un message explicite. L’URL renvoyée est temporaire : téléchargez l’image si vous devez la conserver.