API di verifica numeri
Risultati della verifica dei numeri WhatsApp (API)
Leggi i risultati della verifica dei numeri pagina per pagina, filtrati per attività o per stato. Usala per esportare i numeri presenti su WhatsApp, rimuovere i numeri non validi dal tuo elenco contatti o sincronizzare i risultati con il tuo CRM.
https://wbiztool.com/api/v1/verification/results/Senza filtri, restituisce tutte le verifiche del tuo spazio di lavoro, dalla più recente. Sono incluse le attività create dalla pagina Verifica Numero della dashboard, non solo quelle create tramite l'API.
Esempio rapido#
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');
}Parametri della richiesta#
Tutti i parametri vanno nella query string.
Autenticazione
AuthorizationheaderobbligatorioBearer YOUR_API_KEY, usando una chiave da Impostazioni → Chiavi API. In alternativa puoi passare la chiave come parametro di queryapi_key, ma l'header evita che finisca nei log del server e dei proxy.
Filtri e paginazione
campaign_idintegerfacoltativoRestituisce solo i numeri di questa attività di verifica. Deve essere un'attività di verifica dello stesso spazio di lavoro della chiave API. Omettilo per ottenere i risultati di tutte le attività.
statusstringfacoltativoRestituisce solo i numeri con questo stato:
pending,verifiedoinvalid. Qualsiasi altro valore viene ignorato e non viene applicato alcun filtro per stato, compresounknown, quindistatus=unknownrestituisce tutti gli stati. I valori distinguono tra maiuscole e minuscole:Verifiedviene ignorato e restituisce tutti gli stati.limitintegerfacoltativoRisultati per pagina. Valore predefinito
100. Usa un valore pari o superiore a 1.offsetintegerfacoltativoQuanti risultati saltare. Valore predefinito
0. Deve essere pari o superiore a 0.
Risposta#
Una richiesta riuscita restituisce 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"
}
]
}
| Campo | Tipo | Descrizione |
|---|---|---|
status | string | "success". Gli errori restituiscono "error". |
total_count | integer | Risultati che corrispondono ai tuoi filtri, su tutte le pagine. |
returned_count | integer | Risultati presenti in questa risposta. |
limit | integer | Il limit utilizzato. |
offset | integer | L'offset utilizzato. |
has_more | boolean | true se offset + limit è minore di total_count, cioè se c'è un'altra pagina. |
results | array | I risultati, dal più recente. |
results[].id | integer | ID di questo record di verifica. |
results[].campaign_id | integer or null | ID dell'attività a cui appartiene il numero. |
results[].campaign_name | string or null | Nome di quell'attività. |
results[].number | string | Il numero di telefono ripulito. |
results[].status | string | pending, verified, invalid, oppure unknown per una verifica annullata. |
results[].checked_at | string or null | Quando è stato verificato il numero, oppure null finché è in attesa. |
results[].created_at | string | Quando è stato aggiunto il numero. |
I timestamp sono in formato ISO 8601 in UTC con l'offset +00:00. Per il significato di ogni stato, vedi Valori di stato dei numeri.
Errori#
Gli errori restituiscono un corpo JSON con status impostato su "error" e un codice di errore HTTP:
{ "status": "error", "message": "Campaign not found" }
| HTTP | Messaggio | Come risolvere |
|---|---|---|
405 | Only GET method allowed | Invia una richiesta GET. |
401 | API key required | Aggiungi l'header Authorization: Bearer YOUR_API_KEY. |
401 | Invalid API key | Verifica che la chiave esista e non sia stata eliminata o disattivata. |
404 | Campaign not found | Il campaign_id non esiste, non è un'attività di verifica oppure appartiene a un altro spazio di lavoro. |
500 | Internal server error: … | Di solito campaign_id, limit o offset non è un numero intero, offset è negativo, oppure offset + limit è negativo. |
Leggere tutte le pagine#
Aumenta offset di limit finché has_more non è 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");Suggerimenti#
- Elimina i duplicati in base a
iddurante la paginazione. I risultati sono ordinati per data di creazione, dal più recente. I numeri della stessa attività hanno timestamp quasi identici e nuove verifiche possono essere aggiunte mentre scorri le pagine, quindi una riga può comparire su due pagine o essere saltata. Filtrare percampaign_ide attendere il completamento dell'attività riduce il problema. - Attendi il completamento prima di esportare. Controlla Stato della verifica finché
overall_statusnon ècompleted, oppure gestisci nel tuo codice i risultatipending. - Ripulisci il tuo elenco contatti esportando
status=invalide rimuovendo quei numeri prima della prossima campagna. - Dimensione della pagina: non c'è un
limitmassimo, ma una pagina molto grande produce una risposta pesante e lenta.
