API v2 (бета)
Проверки номеров
Проверка номеров выясняет, у каких номеров телефонов есть аккаунт WhatsApp, ничего им не отправляя. Очистите список перед кампанией или проверьте номер нового клиента, прежде чем ему писать. Проверки, созданные через API, — те же самые списки, что на странице Проверка номеров в панели.
| Операция | Endpoint | Область доступа |
|---|---|---|
| Запуск проверки | POST /api/v2/number-checks | contacts |
| Список проверок | GET /api/v2/number-checks | contacts |
| Получение проверки | GET /api/v2/number-checks/{id} | contacts |
| Получение результатов | GET /api/v2/number-checks/{id}/results | contacts |
Для запуска проверки нужен тариф, включающий проверку номеров; иначе ответ — 403 plan_required. Чтение проверок работает на любом тарифе.
Запуск проверки#
https://wbiztool.com/api/v2/number-checksТело запроса: JSON (application/json)
Номера ставятся в очередь, и ответ — 201 с проверкой в статусе pending. Подключённый номер WhatsApp вашего рабочего пространства проверяет их в течение следующих минут. Опрашивайте проверку, пока status не станет completed, а затем прочитайте результаты.
Тело запроса
numbersarray of stringsобязательноНомера для проверки, от 1 до 10 000 элементов. Пишите их в международном формате с
+(+919876543210). Номер без кода страны получает код страны рабочего пространства. Повторы проверяются один раз, а элементы, которые не являются номерами телефонов, пропускаются.namestringнеобязательноНазвание проверки, до 500 символов, как оно показывается на странице «Проверка номеров». По умолчанию:
API checkи дата и время в UTC, напримерAPI 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'];Ответ (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 — сколько элементов не были номерами телефонов (текст, меньше 7 или больше 15 цифр): они не проверяются и не учитываются в вашем тарифе.
Лимиты тарифа#
Ваш тариф определяет, сколько номеров можно проверить (см. Лимиты тарифа):
- На одну проверку: в проверке не может быть больше номеров, чем позволяет тариф. При превышении проверка отклоняется с
too_many_numbers, сcountиlimit. - За расчётный период: все проверки вместе, из API и из панели, тоже не могут превысить лимит. Проверка, которая его превысила бы, отклоняется с
number_check_quota_reached, сrequested,usedиlimit. - У тарифа без лимита нет ни того, ни другого. API принимает не больше 10 000 номеров за запрос на любом тарифе.
- Отклонённая проверка ничего не ставит в очередь. Разделите список, дождитесь следующего периода или перейдите на тариф выше.
Ошибки при запуске проверки#
| HTTP | Код | Когда |
|---|---|---|
400 | validation_failed | numbers отсутствует, пуст или не является списком строк, или name пусто или слишком длинное |
403 | plan_required | Тариф не включает проверку номеров |
422 | no_valid_numbers | Ни один элемент не является номером телефона; skipped показывает, сколько их было |
422 | too_many_numbers | Больше 10 000 элементов или больше номеров, чем тариф позволяет на одну проверку |
422 | number_check_quota_reached | Проверка превысила бы лимит номеров тарифа за этот расчётный период |
Список проверок#
https://wbiztool.com/api/v2/number-checksПроверки рабочего пространства, сначала самые новые, страницами (limit от 1 до 100, по умолчанию 25, и cursor), включая запущенные в панели. Каждая — это Number check.
curl https://wbiztool.com/api/v2/number-checks \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
Получение проверки#
https://wbiztool.com/api/v2/number-checks/{id}Проверка и её ход. Опрашивайте её примерно каждые 30 секунд, пока status не станет 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"
}
Проверка, которой не существует, возвращает 404 number_check_not_found.
Для проверки нужен номер WhatsApp рабочего пространства, подключённый по QR-коду или коду привязки, и она ждёт, пока ваши номера отправляют сообщения. Проверка может какое-то время оставаться в статусе pending или processing; см. Как идёт проверка.
Получение результатов#
https://wbiztool.com/api/v2/number-checks/{id}/resultsНомера проверки и то, что о них выяснено, страницами (limit от 1 до 100, по умолчанию 25, и cursor). Их можно читать, пока проверка идёт: ещё не проверенные номера имеют статус 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
}
| Поле | Тип | Описание |
|---|---|---|
number | string | Проверенный номер: цифры с кодом страны, без +. |
on_whatsapp | boolean or null | true или false после проверки; null, пока ожидает или если отменён. |
status | string | pending, on_whatsapp, not_on_whatsapp или cancelled (остановлен до проверки). |
checked_at | string or null | Когда он был проверен. |
Объект Number check#
| Поле | Тип | Описание |
|---|---|---|
id | integer | ID проверки. |
name | string | Её название. |
status | string | pending (ещё ничего не проверено), processing (часть проверена) или completed (проверять больше нечего). |
counts | object | total, pending, on_whatsapp, not_on_whatsapp и cancelled. |
created_at | string | Когда она была запущена. |
skipped | integer | Только в ответе на Запуск проверки: элементы, которые не были номерами телефонов. |
Связанные материалы#
- Проверка номеров в панели
- Тарифы и оплата
- Ошибки
