Verifica si un numero de telefono tiene WhatsApp activo antes de enviar mensajes. Optimiza tus campanas y evita envios fallidos.
El endpoint de validacion te permite comprobar si un numero de telefono tiene una cuenta de WhatsApp activa antes de intentar enviarle un mensaje. Esto es especialmente util para:
Limpia tu base de datos de numeros que no tienen WhatsApp antes de lanzar campanas.
Evita mensajes fallidos que consumen creditos y reducen la tasa de entrega.
Reduce el riesgo de baneo al no enviar a numeros invalidos de forma masiva.
POST /api/validate/whatsapp
Verifica si un numero de telefono esta registrado en WhatsApp. Requiere una cuenta vinculada como puente de validacion.
| Parametro | Tipo | Estado | Descripcion |
|---|---|---|---|
secret |
string |
Obligatorio | Tu API Key. Obtenla en Dashboard > API Keys. |
unique |
string |
Obligatorio | Identificador unico de la cuenta WA vinculada que se usara como puente para la validacion. Obtenlo desde GET /api/get/wa.accounts. |
phone |
string |
Obligatorio | Numero de telefono a validar en formato E.164 (ej: +34612345678). Incluye el prefijo del pais con el signo +. |
{
"status": 200,
"message": "Number is registered on WhatsApp",
"data": {
"jid": "34612345678@s.whatsapp.net",
"phone": "+34612345678"
}
}
{
"status": 404,
"message": "Number is not registered on WhatsApp",
"data": false
}
{
"status": 403,
"message": "WhatsApp account is not connected",
"data": false
}
El JID (Jabber ID) es el identificador interno que WhatsApp usa para cada usuario y grupo. Cuando un numero se valida correctamente, la API devuelve el JID correspondiente.
| Tipo | Formato | Ejemplo |
|---|---|---|
| Usuario individual | {telefono_sin_+}@s.whatsapp.net |
34612345678@s.whatsapp.net |
| Grupo | {id_grupo}@g.us |
120363012345678@g.us |
@s.whatsapp.net indica un chat individual (single). El sufijo @g.us indica un grupo (group). Estos JID se usan internamente en WhatsApp y aparecen en webhooks y respuestas de la API.
El flujo recomendado antes de una campana masiva es:
/api/validate/whatsapp y marca los que devuelven status: 200.status: 404 (no tienen WhatsApp)./api/send/whatsapp.bulk.curl -X POST https://tudominio.com/api/validate/whatsapp \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "secret=TU_API_KEY&unique=a1b2c3d4e5f6&phone=+34612345678"
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => "https://tudominio.com/api/validate/whatsapp",
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
"secret" => "TU_API_KEY",
"unique" => "a1b2c3d4e5f6",
"phone" => "+34612345678"
]),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Content-Type: application/x-www-form-urlencoded"]
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
if ($data["status"] === 200) {
echo "El numero TIENE WhatsApp. JID: " . $data["data"]["jid"];
} else {
echo "El numero NO tiene WhatsApp.";
}
const response = await fetch("https://tudominio.com/api/validate/whatsapp", {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
body: new URLSearchParams({
secret: "TU_API_KEY",
unique: "a1b2c3d4e5f6",
phone: "+34612345678"
})
});
const data = await response.json();
if (data.status === 200) {
console.log("Tiene WhatsApp. JID:", data.data.jid);
} else {
console.log("No tiene WhatsApp.");
}
import requests
response = requests.post(
"https://tudominio.com/api/validate/whatsapp",
data={
"secret": "TU_API_KEY",
"unique": "a1b2c3d4e5f6",
"phone": "+34612345678"
}
)
data = response.json()
if data["status"] == 200:
print(f"Tiene WhatsApp. JID: {data['data']['jid']}")
else:
print("No tiene WhatsApp.")
$numeros = ["+34612345678", "+34698765432", "+34655111222"];
$validos = [];
foreach ($numeros as $phone) {
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => "https://tudominio.com/api/validate/whatsapp",
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
"secret" => "TU_API_KEY",
"unique" => "a1b2c3d4e5f6",
"phone" => $phone
]),
CURLOPT_RETURNTRANSFER => true
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
if ($data["status"] === 200) {
$validos[] = $phone;
echo "[OK] $phone tiene WhatsApp\n";
} else {
echo "[--] $phone NO tiene WhatsApp\n";
}
// Delay de 1.5 segundos para evitar rate limit
usleep(1500000);
}
echo "\nNumeros validos: " . count($validos) . " de " . count($numeros);
const numeros = ["+34612345678", "+34698765432", "+34655111222"];
const validos = [];
for (const phone of numeros) {
const response = await fetch("https://tudominio.com/api/validate/whatsapp", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({
secret: "TU_API_KEY",
unique: "a1b2c3d4e5f6",
phone: phone
})
});
const data = await response.json();
if (data.status === 200) {
validos.push(phone);
console.log(`[OK] ${phone} tiene WhatsApp`);
} else {
console.log(`[--] ${phone} NO tiene WhatsApp`);
}
// Delay de 1.5 segundos
await new Promise(r => setTimeout(r, 1500));
}
console.log(`\nValidos: ${validos.length} de ${numeros.length}`);
import requests
import time
numeros = ["+34612345678", "+34698765432", "+34655111222"]
validos = []
for phone in numeros:
response = requests.post(
"https://tudominio.com/api/validate/whatsapp",
data={
"secret": "TU_API_KEY",
"unique": "a1b2c3d4e5f6",
"phone": phone
}
)
data = response.json()
if data["status"] == 200:
validos.append(phone)
print(f"[OK] {phone} tiene WhatsApp")
else:
print(f"[--] {phone} NO tiene WhatsApp")
# Delay de 1.5 segundos para evitar rate limit
time.sleep(1.5)
print(f"\nValidos: {len(validos)} de {len(numeros)}")
Si usas un asistente de IA para integrar la API de WhatsBoost, puedes pasarle este contexto: «POST /api/validate/whatsapp recibe secret, unique (cuenta WA puente) y phone (formato E.164). Si el numero tiene WhatsApp devuelve status 200 con el JID (telefono@s.whatsapp.net). Si no tiene WhatsApp devuelve status 404. Para validacion masiva, usar un delay de 1-2 segundos entre peticiones. El JID de usuarios es telefono@s.whatsapp.net y de grupos es id@g.us.»