API v2 (bêta)
Vérifications de numéros
Une vérification de numéros détermine quels numéros de téléphone ont un compte WhatsApp, sans rien leur envoyer. Nettoyez une liste avant une campagne, ou vérifiez le numéro d'un nouvel inscrit avant de lui écrire. Les vérifications faites avec l'API sont les mêmes que les listes de la page Vérification de numéros du tableau de bord.
| Opération | Endpoint | Scope |
|---|---|---|
| Lancer une vérification | POST /api/v2/number-checks | contacts |
| Lister les vérifications | GET /api/v2/number-checks | contacts |
| Obtenir une vérification | GET /api/v2/number-checks/{id} | contacts |
| Obtenir les résultats | GET /api/v2/number-checks/{id}/results | contacts |
Lancer une vérification demande un forfait qui inclut la vérification de numéros ; sinon, la réponse est 403 plan_required. La lecture des vérifications fonctionne avec n'importe quel forfait.
Lancer une vérification#
https://wbiztool.com/api/v2/number-checksCorps: JSON (application/json)
Les numéros sont mis en file d'attente, et la réponse est 201 avec la vérification au statut pending. Un numéro WhatsApp connecté de votre espace de travail les vérifie dans les minutes qui suivent. Interrogez la vérification jusqu'à ce que status vaille completed, puis lisez les résultats.
Corps
numbersarray of stringsobligatoireLes numéros à vérifier, de 1 à 10 000 entrées. Écrivez-les au format international avec
+(+919876543210). Un numéro sans indicatif de pays reçoit celui de l'espace de travail. Les doublons sont vérifiés une seule fois, et les entrées qui ne sont pas des numéros de téléphone sont ignorées.namestringfacultatifUn nom pour la vérification, jusqu'à 500 caractères, tel qu'affiché sur la page Vérification de numéros. Par défaut :
API checksuivi de la date et de l'heure en UTC, commeAPI check 2026-10-18 10:40.
curl -X POST https://wbiztool.com/api/v2/number-checks \
-H "Authorization: Bearer $WBIZTOOL_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: october-leads" \
-d '{
"name": "October leads",
"numbers": ["+919876543210", "+447700900123", "+14155550123"]
}'import os
import time
import requests
API = "https://wbiztool.com/api/v2"
headers = {"Authorization": f"Bearer {os.environ['WBIZTOOL_API_KEY']}"}
check = requests.post(f"{API}/number-checks", headers=headers, timeout=60, json={
"name": "October leads",
"numbers": ["+919876543210", "+447700900123", "+14155550123"],
}).json()
print("Skipped entries:", check["skipped"])
while check["status"] != "completed":
time.sleep(30)
check = requests.get(f"{API}/number-checks/{check['id']}", headers=headers, timeout=30).json()
print(check["counts"])
params = {"limit": 100}
while True:
page = requests.get(f"{API}/number-checks/{check['id']}/results",
headers=headers, params=params, timeout=30).json()
for result in page["data"]:
print(result["number"], result["status"])
if not page["next_cursor"]:
break
params["cursor"] = page["next_cursor"]// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const API = "https://wbiztool.com/api/v2";
const headers = { Authorization: `Bearer ${process.env.WBIZTOOL_API_KEY}`, "Content-Type": "application/json" };
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
let check = await (await fetch(`${API}/number-checks`, {
method: "POST",
headers,
body: JSON.stringify({ name: "October leads", numbers: ["+919876543210", "+447700900123", "+14155550123"] }),
})).json();
while (check.status !== "completed") {
await sleep(30000);
check = await (await fetch(`${API}/number-checks/${check.id}`, { headers })).json();
}
const params = new URLSearchParams({ limit: "100" });
while (true) {
const page = await (await fetch(`${API}/number-checks/${check.id}/results?${params}`, { headers })).json();
for (const result of page.data) console.log(result.number, result.status);
if (!page.next_cursor) break;
params.set("cursor", page.next_cursor);
}<?php
$ch = curl_init('https://wbiztool.com/api/v2/number-checks');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('WBIZTOOL_API_KEY'), 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'name' => 'October leads',
'numbers' => ['+919876543210', '+447700900123', '+14155550123'],
]),
CURLOPT_RETURNTRANSFER => true,
]);
$check = json_decode(curl_exec($ch), true);
curl_close($ch);
// Save $check['id'], then poll GET /api/v2/number-checks/{id} until status is completed.
echo $check['id'] . ' ' . $check['status'] . ' skipped: ' . $check['skipped'];Réponse (201) :
{
"id": 51207,
"name": "October leads",
"status": "pending",
"counts": { "total": 3, "pending": 3, "on_whatsapp": 0, "not_on_whatsapp": 0, "cancelled": 0 },
"created_at": "2026-10-18T10:40:02.511Z",
"skipped": 0
}
skipped indique combien d'entrées n'étaient pas un numéro de téléphone (du texte, moins de 7 ou plus de 15 chiffres) : elles ne sont pas vérifiées et ne comptent pas dans votre forfait.
Limites du forfait#
Votre forfait fixe combien de numéros vous pouvez vérifier (voir Limites du forfait) :
- Par vérification : une vérification ne peut pas contenir plus de numéros que le nombre prévu par le forfait. Au-delà, elle est refusée avec
too_many_numbers, aveccountetlimit. - Par période de facturation : l'ensemble des vérifications, depuis l'API et le tableau de bord, ne peut pas non plus le dépasser. Une vérification qui le dépasserait est refusée avec
number_check_quota_reached, avecrequested,usedetlimit. - Un forfait sans limite n'a ni l'une ni l'autre. L'API accepte au plus 10 000 numéros par requête, quel que soit le forfait.
- Une vérification refusée ne met rien en file d'attente. Découpez la liste, attendez la période suivante, ou passez à un forfait supérieur.
Erreurs au lancement d'une vérification#
| HTTP | Code | Quand |
|---|---|---|
400 | validation_failed | numbers manque, est vide ou n'est pas une liste de chaînes, ou name est vide ou trop long |
403 | plan_required | Le forfait n'inclut pas la vérification de numéros |
422 | no_valid_numbers | Aucune des entrées n'est un numéro de téléphone ; skipped indique combien il y en avait |
422 | too_many_numbers | Plus de 10 000 entrées, ou plus de numéros que le forfait n'en autorise par vérification |
422 | number_check_quota_reached | La vérification dépasserait les numéros du forfait pour cette période de facturation |
Lister les vérifications#
https://wbiztool.com/api/v2/number-checksLes vérifications de l'espace de travail, les plus récentes d'abord, par pages (limit de 1 à 100, 25 par défaut, et cursor), y compris celles lancées depuis le tableau de bord. Chacune est une Vérification de numéros.
curl https://wbiztool.com/api/v2/number-checks \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
Obtenir une vérification#
https://wbiztool.com/api/v2/number-checks/{id}La vérification et sa progression. Interrogez-la toutes les 30 secondes environ jusqu'à ce que status vaille completed.
curl https://wbiztool.com/api/v2/number-checks/51207 \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
{
"id": 51207,
"name": "October leads",
"status": "processing",
"counts": { "total": 3, "pending": 1, "on_whatsapp": 1, "not_on_whatsapp": 1, "cancelled": 0 },
"created_at": "2026-10-18T10:40:02.511Z"
}
Une vérification qui n'existe pas répond 404 number_check_not_found.
La vérification demande un numéro WhatsApp de l'espace de travail connecté par code QR ou code d'association, et attend pendant que vos numéros envoient des messages. Une vérification peut rester pending ou processing un certain temps ; voir Comment fonctionne la vérification.
Obtenir les résultats#
https://wbiztool.com/api/v2/number-checks/{id}/resultsLes numéros de la vérification et ce qui a été trouvé, par pages (limit de 1 à 100, 25 par défaut, et cursor). Vous pouvez les lire pendant que la vérification tourne : les numéros pas encore vérifiés sont pending.
curl "https://wbiztool.com/api/v2/number-checks/51207/results?limit=100" \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
{
"data": [
{ "number": "14155550123", "on_whatsapp": null, "status": "pending", "checked_at": null },
{ "number": "447700900123", "on_whatsapp": false, "status": "not_on_whatsapp", "checked_at": "2026-10-18T10:42:57.204Z" },
{ "number": "919876543210", "on_whatsapp": true, "status": "on_whatsapp", "checked_at": "2026-10-18T10:42:51.880Z" }
],
"next_cursor": null
}
| Champ | Type | Description |
|---|---|---|
number | string | Le numéro vérifié : ses chiffres avec l'indicatif du pays, sans +. |
on_whatsapp | boolean or null | true ou false une fois vérifié ; null tant qu'il est en attente ou s'il a été annulé. |
status | string | pending, on_whatsapp, not_on_whatsapp ou cancelled (arrêté avant d'être vérifié). |
checked_at | string or null | Quand il a été vérifié. |
L'objet Vérification de numéros#
| Champ | Type | Description |
|---|---|---|
id | integer | L'identifiant de la vérification. |
name | string | Son nom. |
status | string | pending (rien de vérifié pour l'instant), processing (une partie vérifiée) ou completed (plus rien à vérifier). |
counts | object | total, pending, on_whatsapp, not_on_whatsapp et cancelled. |
created_at | string | Quand elle a été lancée. |
skipped | integer | Uniquement dans la réponse à Lancer une vérification : les entrées qui n'étaient pas un numéro de téléphone. |
Voir aussi#
- Vérification de numéros dans le tableau de bord
- Forfaits et facturation
- Erreurs
