API Gratuita de Enlaces de WhatsApp para Desarrolladores
Genera enlaces de WhatsApp, valida usernames y números de teléfono y crea códigos QR con simples peticiones HTTP GET. Sin clave de API, sin registro, gratis. Todos los endpoints devuelven JSON (el endpoint QR devuelve una imagen), envían cabeceras CORS y pueden llamarse directamente desde el navegador.
Endpoints
URL base: https://whatsusernames.link. Todos los endpoints son GET.
GET /api/v1/username-link?username=joao.silva&key=AB12&text=helloEnlace de WhatsApp + enlace corto a partir de un username (key y texto predefinido opcionales).
GET /api/v1/phone-link?phone=351912345678&text=helloEnlace oficial wa.me click-to-chat a partir de un número de teléfono internacional.
GET /api/v1/validate/username?username=joao.silvaComprueba si un username es estructuralmente válido.
GET /api/v1/validate/key?key=AB12Comprueba si una Username Key es válida (4-8 letras/números).
GET /api/v1/validate/phone?phone=351912345678Comprueba si un número de teléfono es válido para enlaces de WhatsApp.
GET /api/v1/qr?username=joao.silva&format=svg&color=25d366Código QR (PNG o SVG) para un enlace de username o teléfono. Tamaño y colores personalizables.
GET /api/v1/openapi.jsonDescripción OpenAPI 3.1 de esta API, legible por máquinas.
API de la Business Platform
URL base: https://whatsusernames.link. Estos endpoints son POST con cuerpo JSON, para la WhatsApp Business Platform / Cloud API (BSUID, usernames de negocio, resolución de contactos, normalización de webhooks). Mismo CORS, límites de uso y formato de error que los endpoints de arriba.
POST /api/v1/business/bsuid/validateCuerpo
{ "bsuid": "US.13491208655302741918" }Comprueba si un Business-Scoped User ID (BSUID) es estructuralmente válido.
POST /api/v1/business/bsuid/parseCuerpo
{ "bsuid": "US.ENT.11815799212886844830" }Parsea un BSUID: código de país, id y flag de cuenta padre (parent).
POST /api/v1/business/username/validateCuerpo
{ "username": "joao.silva" }Comprueba si un username de la WhatsApp Business Platform es estructuralmente válido.
POST /api/v1/business/contact/resolveCuerpo
{ "username": "joao.silva" }Resuelve un contacto a partir de exactamente uno de bsuid, phone o username, en un formato unificado.
POST /api/v1/business/webhook/normalizeCuerpo
{ "entry": [{ "changes": [{ "value": { "messages": [...], "contacts": [...] } }] }] }Normaliza un payload de webhook en bruto de la WhatsApp Cloud API (mensajes o estados) en un formato de evento consistente.
Ejemplos
curl
curl "https://whatsusernames.link/api/v1/username-link?username=joao.silva"JavaScript (fetch)
const res = await fetch(
"https://whatsusernames.link/api/v1/username-link?username=joao.silva"
);
const data = await res.json();
console.log(data.link); // https://wa.me/joao.silvacurl (API de la Business Platform)
curl -X POST "https://whatsusernames.link/api/v1/business/bsuid/validate" \
-H "Content-Type: application/json" \
-d '{"bsuid": "US.13491208655302741918"}'Límites de uso
60 peticiones por minuto por IP en los endpoints JSON, 20 por minuto en el endpoint QR. Las respuestas incluyen las cabeceras X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Reset; superar el límite devuelve HTTP 429 con cabecera Retry-After. Las peticiones idénticas se sirven desde la caché CDN y no cuentan para el límite.
Errores
Los errores son siempre JSON con un código estable legible por máquinas: por ejemplo, un username inválido devuelve HTTP 400 con un cuerpo como el de abajo. Los códigos nunca cambian dentro de la v1.
{
"error": {
"code": "username_length",
"message": "Username must be 3-35 characters."
}
}Sobre los enlaces wa.me de username
La función de usernames de WhatsApp está en despliegue regional por fases, y los enlaces wa.me/<username> pueden aún no abrir un chat para todas las cuentas. El endpoint username-link incluye un campo notice con el estado actual. Los enlaces por número de teléfono (wa.me/<teléfono>) están oficialmente documentados y funcionan para todos hoy.