API de verificación de números
Crear una verificación de números de WhatsApp (API)
Comprueba si una lista de números de teléfono está registrada en WhatsApp antes de enviarles mensajes. Úsala para limpiar listas de contactos importadas, validar los números de registro o eliminar números que solo darían error.
https://wbiztool.com/api/v1/verification/create/Cuerpo: JSON (application/json)
La solicitud crea una tarea de verificación y devuelve un campaign_id de inmediato. Después, uno de tus números de WhatsApp conectados comprueba los números en segundo plano. Usa el campaign_id con Estado de la verificación para seguir el progreso, o con Resultados de la verificación para leer los resultados.
Ejemplo rápido#
curl -X POST https://wbiztool.com/api/v1/verification/create/ \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"campaign_name": "Website leads - September",
"numbers": ["919876543210", "+91 98765 43211", "14155550123"]
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/verification/create/",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"campaign_name": "Website leads - September",
"numbers": ["919876543210", "+91 98765 43211", "14155550123"],
},
timeout=60,
)
result = response.json() # read the body even when the HTTP code is 4xx or 5xx
if result["status"] == "success":
print("Task created, campaign_id", result["campaign_id"])
print("Accepted numbers:", result["numbers_submitted"])
else:
print(f"Failed ({response.status_code}):", result["message"])// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v1/verification/create/", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
campaign_name: "Website leads - September",
numbers: ["919876543210", "+91 98765 43211", "14155550123"],
}),
});
const result = await response.json(); // read the body even when the HTTP code is 4xx or 5xx
if (result.status === "success") {
console.log("Task created, campaign_id", result.campaign_id);
console.log("Accepted numbers:", result.numbers_submitted);
} else {
console.error(`Failed (${response.status}):`, result.message);
}<?php
$payload = [
'campaign_name' => 'Website leads - September',
'numbers' => ['919876543210', '+91 98765 43211', '14155550123'],
];
$ch = curl_init('https://wbiztool.com/api/v1/verification/create/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($result['status'] ?? '') === 'success') {
echo 'Task created, campaign_id ' . $result['campaign_id'];
} else {
echo 'Failed: ' . ($result['message'] ?? 'no response');
}Sustituye YOUR_API_KEY por una clave de Configuración → Claves API. La clave determina a qué espacio de trabajo pertenece la tarea.
Parámetros de la solicitud#
Cabecera
AuthorizationheaderobligatorioBearer YOUR_API_KEY. La clave debe estar activa y no eliminada. Esta API no necesitaclient_id.Content-TypestringobligatorioDebe ser
application/json. Con cualquier otro tipo de contenido,numbersno se lee y recibesNumbers array is required.
Cuerpo
numbersarray of stringsobligatorioLos números de teléfono que quieres comprobar, cada uno con su código de país, por ejemplo
919876543210para un número de India. Antes de comprobarlo, cada número se limpia:- se eliminan los espacios,
+,-y los paréntesis - se elimina un
0inicial - el resultado solo debe contener dígitos y tener al menos 10 dígitos
Los números que no cumplen estas condiciones se descartan sin avisar. Los duplicados no se eliminan, así que cada copia se comprueba por separado.
- se eliminan los espacios,
campaign_namestringopcionalUn nombre para encontrar la tarea en el panel. Si lo omites, el nombre es
API Verificationseguido de la fecha y hora del servidor en IST (UTC+5:30), por ejemploAPI Verification 20260916_154500. Los nombres pueden tener hasta 500 caracteres. No envíesnull: los nombres más largos o nulos fallan con HTTP500.
Respuesta#
Una solicitud correcta devuelve HTTP 200:
{
"status": "success",
"message": "Verification task created successfully",
"campaign_id": 4521,
"numbers_count": 3,
"numbers_submitted": ["919876543210", "919876543211", "14155550123"]
}
| Campo | Tipo | Descripción |
|---|---|---|
status | string | "success". Los errores devuelven "error". |
message | string | Verification task created successfully. |
campaign_id | integer | ID de la tarea de verificación. Úsalo con Estado de la verificación y Resultados de la verificación. |
numbers_count | integer | Cuántos números se aceptaron después de la limpieza. |
numbers_submitted | array of strings | Los números limpios que se van a comprobar. Compáralos con lo que enviaste para ver qué números se descartaron. |
Todos los números aceptados empiezan como pending. La tarea también aparece en la página Verificación de Números de tu panel. Su tarjeta puede seguir mostrando Procesando... después de terminar, así que usa Estado de la verificación para conocer el estado real.
Errores#
Los errores devuelven un cuerpo JSON con status con valor "error" y un código de error HTTP:
{ "status": "error", "message": "No valid phone numbers found" }
| HTTP | Mensaje | Cómo solucionarlo |
|---|---|---|
405 | Only POST method allowed | Envía una solicitud POST. |
401 | API key required | Añade la cabecera Authorization: Bearer YOUR_API_KEY. |
401 | Invalid API key | Comprueba que la clave existe y que no se ha eliminado ni desactivado. |
403 | Verification feature not available for your plan | Tu plan no incluye la verificación de números. Mejora tu plan. |
400 | Numbers array is required | Envía numbers como un array JSON no vacío, con Content-Type: application/json. |
400 | No valid phone numbers found | Ninguno de los números tenía 10 dígitos o más después de la limpieza. Incluye el código de país. |
400 | Request contains N numbers but your plan allows only M verifications | Tu plan limita cuántos números puede contener una solicitud. Divide la lista en solicitudes más pequeñas. |
500 | Internal server error: … | Normalmente el cuerpo JSON no es válido, por ejemplo por una coma final. |
Cómo se comprueban los números#
La tarea se pone en cola
La API guarda cada número aceptado como
pendingy responde de inmediato.Un número de WhatsApp conectado los comprueba
Los números se comprueban de 10 en 10 como máximo usando un número de WhatsApp conectado en la configuración de WhatsApp. Cada número pasa a
verifiedsi está registrado en WhatsApp, o ainvalidsi no lo está. Las comprobaciones solo se ejecutan en un número conectado que no esté ocupado enviando mensajes, así que durante una campaña grande pueden esperar hasta que termine el envío.Lees los resultados
Consulta periódicamente Estado de la verificación hasta que
overall_statusseacompletedy luego lee los números en esa misma respuesta o en Resultados de la verificación.
Consejos#
- Incluye siempre el código de país. Un número local de 10 dígitos sin él supera la comprobación de longitud, pero se comprueba tal cual está escrito, así que el resultado no corresponderá al número que querías.
- No uses el prefijo internacional
00. Solo se elimina un0inicial, así que00919876543210se comprueba como0919876543210. Envía919876543210. - Elimina tú mismo los duplicados antes de enviar, para no gastar en repeticiones el límite por solicitud de tu plan.
- Revisa
numbers_submittedpara encontrar los números que se descartaron por ser demasiado cortos o contener letras. - Listas grandes: si alcanzas el límite por solicitud, envía varias tareas más pequeñas y haz seguimiento de cada
campaign_id.
¿Es tu primera vez con la verificación de números? Consulta la guía de verificación de números.
