Inicio Precios Funcionalidades Reseñas NEW Developers

Validar numero WhatsApp

Verifica si un numero de telefono tiene WhatsApp activo antes de enviar mensajes. Optimiza tus campanas y evita envios fallidos.

Para que sirve

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:

Filtrar contactos

Limpia tu base de datos de numeros que no tienen WhatsApp antes de lanzar campanas.

Optimizar envios

Evita mensajes fallidos que consumen creditos y reducen la tasa de entrega.

Proteger la cuenta

Reduce el riesgo de baneo al no enviar a numeros invalidos de forma masiva.


Validar numero

POST /api/validate/whatsapp

Verifica si un numero de telefono esta registrado en WhatsApp. Requiere una cuenta vinculada como puente de validacion.

Parametros
ParametroTipoEstadoDescripcion
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 +.

Respuestas

Numero tiene WhatsApp (200)
{
  "status": 200,
  "message": "Number is registered on WhatsApp",
  "data": {
    "jid": "34612345678@s.whatsapp.net",
    "phone": "+34612345678"
  }
}
Numero NO tiene WhatsApp (404)
{
  "status": 404,
  "message": "Number is not registered on WhatsApp",
  "data": false
}
Cuenta no conectada (403)
{
  "status": 403,
  "message": "WhatsApp account is not connected",
  "data": false
}

Formato JID

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.

TipoFormatoEjemplo
Usuario individual {telefono_sin_+}@s.whatsapp.net 34612345678@s.whatsapp.net
Grupo {id_grupo}@g.us 120363012345678@g.us

Caso de uso tipico

El flujo recomendado antes de una campana masiva es:

  1. Importar contactos: Carga tu lista de numeros de telefono desde un Excel o CSV.
  2. Validar en lote: Recorre cada numero llamando a /api/validate/whatsapp y marca los que devuelven status: 200.
  3. Filtrar invalidos: Descarta los numeros que devuelven status: 404 (no tienen WhatsApp).
  4. Enviar campana: Usa solo los numeros validados para tu envio masivo con /api/send/whatsapp.bulk.

Ejemplos de codigo

Validacion individual
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.")
Validacion en lote (loop)
$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)}")

Prompt para IA

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.»