API Verifikasi Nomor
Hasil verifikasi nomor WhatsApp (API)
Baca hasil verifikasi nomor per halaman, difilter berdasarkan tugas atau status. Gunakan untuk mengekspor nomor yang terdaftar di WhatsApp, membersihkan nomor tidak valid dari daftar kontak Anda, atau menyinkronkan hasil ke CRM Anda.
https://wbiztool.com/api/v1/verification/results/Tanpa filter, endpoint ini mengembalikan setiap verifikasi di workspace Anda, dari yang terbaru. Termasuk tugas yang dibuat dari halaman dashboard Number verification (Verifikasi nomor), tidak hanya yang dibuat melalui API.
Contoh singkat#
curl "https://wbiztool.com/api/v1/verification/results/?campaign_id=4521&status=verified&limit=100&offset=0" \
-H "Authorization: Bearer YOUR_API_KEY"import requests
response = requests.get(
"https://wbiztool.com/api/v1/verification/results/",
headers={"Authorization": "Bearer YOUR_API_KEY"},
params={"campaign_id": 4521, "status": "verified", "limit": 100, "offset": 0},
timeout=60,
)
result = response.json() # read the body even when the HTTP code is 4xx or 5xx
if result["status"] == "success":
print(f"{result['returned_count']} of {result['total_count']} results")
for item in result["results"]:
print(item["number"], item["status"])
else:
print(f"Failed ({response.status_code}):", result["message"])// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const url = new URL("https://wbiztool.com/api/v1/verification/results/");
url.search = new URLSearchParams({ campaign_id: "4521", status: "verified", limit: "100", offset: "0" });
const response = await fetch(url, {
headers: { Authorization: "Bearer YOUR_API_KEY" },
});
const result = await response.json(); // read the body even when the HTTP code is 4xx or 5xx
if (result.status === "success") {
console.log(`${result.returned_count} of ${result.total_count} results`);
for (const item of result.results) {
console.log(item.number, item.status);
}
} else {
console.error(`Failed (${response.status}):`, result.message);
}<?php
$query = http_build_query([
'campaign_id' => 4521,
'status' => 'verified',
'limit' => 100,
'offset' => 0,
]);
$ch = curl_init('https://wbiztool.com/api/v1/verification/results/?' . $query);
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($result['status'] ?? '') === 'success') {
echo $result['returned_count'] . ' of ' . $result['total_count'] . " results\n";
foreach ($result['results'] as $item) {
echo $item['number'] . ': ' . $item['status'] . "\n";
}
} else {
echo 'Failed: ' . ($result['message'] ?? 'no response');
}Parameter request#
Semua parameter dikirim di query string.
Autentikasi
AuthorizationheaderwajibBearer YOUR_API_KEY, menggunakan key dari Settings → API keys (Pengaturan → Kunci API). Anda dapat mengirim key sebagai parameter queryapi_key, tetapi header menjaga key tidak tercatat di log server dan proxy.
Filter dan paginasi
campaign_idintegeropsionalHanya kembalikan nomor dari tugas verifikasi ini. ID ini harus merupakan tugas verifikasi di workspace yang sama dengan API key. Hilangkan untuk mendapatkan hasil dari semua tugas.
statusstringopsionalHanya kembalikan nomor dengan status ini:
pending,verified, atauinvalid. Nilai lain diabaikan dan tidak ada filter status yang diterapkan, termasukunknown, sehinggastatus=unknownmengembalikan semua status. Nilai peka huruf besar-kecil:Verifieddiabaikan dan mengembalikan semua status.limitintegeropsionalJumlah hasil per halaman. Default
100. Gunakan nilai 1 atau lebih.offsetintegeropsionalJumlah hasil yang dilewati. Default
0. Harus 0 atau lebih.
Respons#
Request yang berhasil mengembalikan HTTP 200:
{
"status": "success",
"total_count": 2,
"returned_count": 2,
"limit": 100,
"offset": 0,
"has_more": false,
"results": [
{
"id": 88215,
"campaign_id": 4521,
"campaign_name": "Website leads - September",
"number": "14155550123",
"status": "verified",
"checked_at": "2026-09-16T10:16:26.730114+00:00",
"created_at": "2026-09-16T10:15:00.483101+00:00"
},
{
"id": 88213,
"campaign_id": 4521,
"campaign_name": "Website leads - September",
"number": "919876543210",
"status": "verified",
"checked_at": "2026-09-16T10:16:12.204551+00:00",
"created_at": "2026-09-16T10:15:00.482913+00:00"
}
]
}
| Field | Tipe | Deskripsi |
|---|---|---|
status | string | "success". Error mengembalikan "error". |
total_count | integer | Jumlah hasil yang cocok dengan filter Anda, di semua halaman. |
returned_count | integer | Jumlah hasil dalam respons ini. |
limit | integer | limit yang digunakan. |
offset | integer | offset yang digunakan. |
has_more | boolean | true jika offset + limit kurang dari total_count, artinya masih ada halaman berikutnya. |
results | array | Hasilnya, dari yang terbaru. |
results[].id | integer | ID data verifikasi ini. |
results[].campaign_id | integer atau null | ID tugas tempat nomor ini berada. |
results[].campaign_name | string atau null | Nama tugas tersebut. |
results[].number | string | Nomor telepon yang sudah dibersihkan. |
results[].status | string | pending, verified, invalid, atau unknown untuk pemeriksaan yang dibatalkan. |
results[].checked_at | string atau null | Waktu nomor diperiksa, atau null selama masih pending. |
results[].created_at | string | Waktu nomor ditambahkan. |
Timestamp menggunakan ISO 8601 dalam UTC dengan offset +00:00. Untuk arti setiap status, lihat Nilai status nomor.
Error#
Error mengembalikan body JSON dengan status bernilai "error" dan kode error HTTP:
{ "status": "error", "message": "Campaign not found" }
| HTTP | Pesan | Cara memperbaikinya |
|---|---|---|
405 | Only GET method allowed | Kirim request GET. |
401 | API key required | Tambahkan header Authorization: Bearer YOUR_API_KEY. |
401 | Invalid API key | Pastikan key tersebut ada dan belum dihapus atau dinonaktifkan. |
404 | Campaign not found | campaign_id tidak ada, bukan tugas verifikasi, atau milik workspace lain. |
500 | Internal server error: … | Biasanya campaign_id, limit, atau offset bukan bilangan bulat, offset bernilai negatif, atau offset + limit bernilai negatif. |
Membaca semua halaman#
Tambahkan offset sebesar limit sampai has_more bernilai false.
import requests
numbers, offset, limit = [], 0, 500
while True:
response = requests.get(
"https://wbiztool.com/api/v1/verification/results/",
headers={"Authorization": "Bearer YOUR_API_KEY"},
params={"campaign_id": 4521, "status": "verified", "limit": limit, "offset": offset},
timeout=60,
)
result = response.json()
if result["status"] != "success":
raise RuntimeError(result["message"])
numbers += [item["number"] for item in result["results"]]
if not result["has_more"]:
break
offset += limit
print(len(numbers), "numbers are on WhatsApp")// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const numbers = [];
const limit = 500;
let offset = 0;
while (true) {
const url = new URL("https://wbiztool.com/api/v1/verification/results/");
url.search = new URLSearchParams({ campaign_id: "4521", status: "verified", limit: String(limit), offset: String(offset) });
const response = await fetch(url, { headers: { Authorization: "Bearer YOUR_API_KEY" } });
const result = await response.json();
if (result.status !== "success") throw new Error(result.message);
numbers.push(...result.results.map((item) => item.number));
if (!result.has_more) break;
offset += limit;
}
console.log(numbers.length, "numbers are on WhatsApp");Tips#
- Hapus duplikat berdasarkan
idsaat membaca per halaman. Hasil diurutkan berdasarkan waktu pembuatan, dari yang terbaru. Nomor dari tugas yang sama memiliki timestamp yang hampir sama dan verifikasi baru dapat ditambahkan selama Anda membaca halaman, sehingga sebuah baris bisa muncul di dua halaman atau terlewat. Memfilter berdasarkancampaign_iddan menunggu tugas selesai dapat mengurangi hal ini. - Tunggu sampai selesai sebelum mengekspor. Periksa Status verifikasi sampai
overall_statusbernilaicompleted, atau tangani hasilpendingdi kode Anda. - Bersihkan daftar kontak Anda dengan mengekspor
status=invaliddan menghapus nomor-nomor tersebut sebelum kampanye berikutnya. - Ukuran halaman: tidak ada
limitmaksimum, tetapi halaman yang sangat besar menghasilkan respons yang besar dan lambat.
