Inicio Precios Funcionalidades Reseñas NEW Developers

Enviar SMS via API

Guia completa para enviar mensajes SMS individuales y masivos a traves de la API REST.

Resumen

La API de WhatsBoost ofrece dos endpoints para el envio de SMS:

Tipo Endpoint Descripcion
Individual POST /api/send/sms Envia un unico SMS a un destinatario. Ideal para notificaciones, alertas y confirmaciones.
Masivo POST /api/send/sms.bulk Envia SMS a multiples destinatarios creando una campana. Ideal para marketing, avisos y comunicaciones grupales.
Dos modos de envio

Cada endpoint soporta dos modos de envio fundamentalmente diferentes. Debes elegir uno en cada peticion mediante el parametro mode:

Modo devices — Dispositivo Android

Tu telefono Android vinculado actua como pasarela de envio. El SMS sale directamente desde la tarjeta SIM del dispositivo, como si lo enviaras manualmente.

  • Requiere un dispositivo Android con la app de WhatsBoost instalada y vinculado a tu cuenta.
  • El coste es el de tu operador movil (segun tu plan de telefonia).
  • El remitente sera tu numero de telefono real.
  • Requiere suscripcion premium activa.
  • Parametro necesario: device (ID del dispositivo).
Modo credits — Pasarela SMS / Creditos

El SMS se envia a traves de una pasarela SMS profesional (Twilio, Vonage, etc.) o a traves de un dispositivo global de un partner. Se descuentan creditos de tu saldo.

  • No necesitas un telefono Android propio.
  • El coste se descuenta de tu saldo de creditos. Las tarifas varian segun el pais destino.
  • El remitente depende de la pasarela configurada (puede ser un shortcode, alphanumeric sender, etc.).
  • Parametro necesario: gateway (ID de la pasarela o nombre del dispositivo partner).

Envio individual — POST /api/send/sms

Envia un unico mensaje SMS a un destinatario. La URL completa del endpoint es:

POST //whatsboost.netapi/send/sms
Parametros
Parametro Tipo Estado Descripcion
secret string Obligatorio Tu API Key de 40 caracteres. Consulta la guia de autenticacion.
phone string Obligatorio Numero de telefono del destinatario en formato internacional E.164. Debe incluir el codigo de pais sin el signo +. Ejemplos: 34612345678 (Espana), 5215512345678 (Mexico), 573001234567 (Colombia). El sistema valida automaticamente que el numero sea un movil valido.
message string Obligatorio Texto del mensaje SMS. Soporta spintax para variaciones automaticas (ver mas abajo). La longitud minima y maxima esta configurada por el sistema. Los mensajes pueden ser revisados por moderacion automatica con IA si esta activada en el sistema.
mode string Obligatorio Modo de envio. Valores posibles: devices (envio a traves de tu dispositivo Android) o credits (envio a traves de pasarela SMS/creditos).
device string Condicional Obligatorio si mode=devices. Identificador unico del dispositivo Android (DID). Lo encuentras en Dashboard > Dispositivos. Es un hash unico asignado al vincular tu telefono.
gateway string|int Condicional Obligatorio si mode=credits. Puede ser un numero entero (ID de la pasarela SMS configurada por el administrador) o una cadena de texto (nombre del dispositivo global de un partner). Consulta los gateways disponibles con el endpoint /api/get/rates.
sim int Opcional Ranura SIM a utilizar. Solo aplica cuando mode=devices. Valores: 1 (SIM 1, por defecto) o 2 (SIM 2). Si el dispositivo no es dual SIM, usa 1.
priority int Opcional Prioridad del mensaje. 1 = alta (envio inmediato, se salta la cola), 2 = normal (entra en la cola de envio). Por defecto: 1 (alta). Solo aplica cuando mode=devices.
shortener int Opcional ID del servicio de acortamiento de URL. Si se proporciona, todas las URLs detectadas en el mensaje seran acortadas automaticamente antes del envio. Consulta los shorteners disponibles con /api/get/shorteners.
Spintax: variaciones automaticas de texto

El sistema soporta spintax, una sintaxis que permite definir variantes de texto separadas por el caracter | dentro de llaves. El sistema elige una variante aleatoria en cada envio, lo que hace que cada mensaje sea ligeramente diferente. Esto es util para evitar filtros de spam y para personalizar comunicaciones.

Spintax en el mensaje Posibles resultados
{Hola|Buenos dias|Hey} Juan "Hola Juan", "Buenos dias Juan", "Hey Juan"
Tu pedido {esta listo|ha sido preparado} "Tu pedido esta listo", "Tu pedido ha sido preparado"
{Gracias|Muchas gracias} por tu {compra|pedido} 4 combinaciones posibles: "Gracias por tu compra", "Muchas gracias por tu pedido", etc.
Formato de numero de telefono (E.164)

El parametro phone debe contener el numero en formato internacional, incluyendo el codigo de pais. No incluyas el signo +, espacios ni guiones. El sistema valida automaticamente que sea un numero de telefono movil valido.

Pais Codigo Ejemplo local Formato para la API
Espana+34612 345 67834612345678
Mexico+5255 1234 56785215512345678
Colombia+57300 123 4567573001234567
Argentina+5411 1234 5678541112345678
Estados Unidos+1(555) 123-456715551234567
Reino Unido+447911 123456447911123456
Limites del mensaje y moderacion IA

El sistema aplica validaciones automaticas al contenido del mensaje:

  • Longitud minima: El mensaje debe tener al menos la cantidad minima de caracteres configurada por el administrador del sistema.
  • Longitud maxima: Si hay un limite maximo configurado (mayor a 0), los mensajes que lo excedan seran rechazados con un error 400.
  • Moderacion con IA: Si la moderacion automatica esta activada en el sistema, el contenido del mensaje sera analizado antes del envio. Los mensajes con contenido inapropiado seran rechazados con un error 400 y se registraran en el log de moderacion.
Ejemplo de envio individual
# Envio con modo dispositivo Android
curl -X POST //whatsboost.netapi/send/sms \
  -d "secret=TU_API_KEY" \
  -d "phone=34612345678" \
  -d "message=Hola, tu pedido #1234 esta listo para recoger." \
  -d "mode=devices" \
  -d "device=TU_DEVICE_ID" \
  -d "sim=1" \
  -d "priority=1"

# Envio con modo creditos/pasarela
curl -X POST //whatsboost.netapi/send/sms \
  -d "secret=TU_API_KEY" \
  -d "phone=34612345678" \
  -d "message=Hola, tu pedido #1234 esta listo para recoger." \
  -d "mode=credits" \
  -d "gateway=1"
<?php
$apiKey  = getenv("WHATSBOOST_API_KEY");
$baseUrl = "//whatsboost.netapi/send/sms";

// --- Modo dispositivo ---
$params = [
    "secret"   => $apiKey,
    "phone"    => "34612345678",
    "message"  => "Hola, tu pedido #1234 esta listo para recoger.",
    "mode"     => "devices",
    "device"   => "TU_DEVICE_ID",
    "sim"      => 1,
    "priority" => 1
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $baseUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$data = json_decode($response, true);

if ($httpCode === 200) {
    echo "SMS enviado. ID: " . $data["data"]["messageId"];
} else {
    echo "Error ({$httpCode}): " . $data["message"];
}
const API_KEY  = process.env.WHATSBOOST_API_KEY;
const BASE_URL = "//whatsboost.netapi/send/sms";

// --- Modo dispositivo ---
const params = new URLSearchParams({
    secret:   API_KEY,
    phone:    "34612345678",
    message:  "Hola, tu pedido #1234 esta listo para recoger.",
    mode:     "devices",
    device:   "TU_DEVICE_ID",
    sim:      "1",
    priority: "1"
});

const response = await fetch(BASE_URL, {
    method: "POST",
    headers: { "Content-Type": "application/x-www-form-urlencoded" },
    body: params
});

const data = await response.json();

if (response.ok) {
    console.log("SMS enviado. ID:", data.data.messageId);
} else {
    console.error("Error (" + response.status + "):", data.message);
}
import os
import requests

API_KEY  = os.environ["WHATSBOOST_API_KEY"]
BASE_URL = "//whatsboost.netapi/send/sms"

# --- Modo dispositivo ---
params = {
    "secret":   API_KEY,
    "phone":    "34612345678",
    "message":  "Hola, tu pedido #1234 esta listo para recoger.",
    "mode":     "devices",
    "device":   "TU_DEVICE_ID",
    "sim":      1,
    "priority": 1
}

response = requests.post(BASE_URL, data=params)
data = response.json()

if response.status_code == 200:
    print("SMS enviado. ID:", data["data"]["messageId"])
else:
    print("Error (" + str(response.status_code) + "):", data["message"])
Respuesta exitosa (envio individual)
{
    "status": 200,
    "message": "Message has been queued for sending!",
    "data": {
        "messageId": 48291
    }
}

El campo messageId es un identificador unico que puedes usar posteriormente para consultar el estado del mensaje con el endpoint /api/get/message.


Envio masivo — POST /api/send/sms.bulk

Envia SMS a multiples destinatarios de forma simultanea, creando una campana que puedes monitorizar y controlar desde el Dashboard o via API. La URL completa del endpoint es:

POST //whatsboost.netapi/send/sms.bulk
Parametros
Parametro Tipo Estado Descripcion
secret string Obligatorio Tu API Key de 40 caracteres.
campaign string Obligatorio Nombre de la campana. Sera visible en el Dashboard para su seguimiento. Usa un nombre descriptivo, por ejemplo: "Promo Navidad 2025", "Recordatorio citas diciembre".
message string Obligatorio Texto del mensaje SMS. Soporta spintax y variables de plantilla (ver mas abajo). Las mismas validaciones de longitud y moderacion IA aplican.
mode string Obligatorio Modo de envio: devices o credits. Funciona igual que en envio individual.
device string Condicional Obligatorio si mode=devices. ID del dispositivo Android (DID).
gateway string|int Condicional Obligatorio si mode=credits. ID numerico de la pasarela o nombre del dispositivo global del partner.
numbers string Condicional Lista de numeros de telefono separados por comas, en formato internacional E.164. Ejemplo: 34612345678,5215512345678,573001234567. Debes proporcionar numbers y/o groups.
groups string Condicional Lista de IDs de grupos de contactos separados por comas. Ejemplo: 5,12,28. El sistema enviara el mensaje a todos los contactos de esos grupos. Debes proporcionar numbers y/o groups.
sim int Opcional Ranura SIM: 1 (defecto) o 2. Solo aplica con mode=devices.
priority int Opcional Prioridad: 1 = alta, 2 = normal. Solo aplica con mode=devices.
shortener int Opcional ID del servicio de acortamiento de URL. Las URLs del mensaje se acortan antes del envio.
Variables de plantilla para mensajes masivos

En el envio masivo, puedes usar variables dinamicas que se reemplazan automaticamente con los datos de cada contacto. Esto permite personalizar cada mensaje individual dentro de la campana:

Variable Descripcion Ejemplo de salida
{{contact.name}} Nombre del contacto (si proviene de un grupo de contactos). Para numeros manuales, sera el propio numero. Juan Garcia
{{contact.number}} Numero de telefono del destinatario en formato E.164. +34612345678
{{group.name}} Nombre del grupo al que pertenece el contacto. "Unknown" si se envio por numero directo. Clientes VIP
{{date.now}} Fecha actual en formato legible (mes dia, ano). Usa la zona horaria del usuario. March 22, 2026
{{date.time}} Hora actual en formato 12h. Usa la zona horaria del usuario. 02:30 PM

Ejemplo de mensaje con variables y spintax:

{Hola|Buenos dias} {{contact.name}}, te recordamos tu cita del {{date.now}}.
Grupo: {{group.name}}. Responde STOP para darte de baja.
Ejemplo de envio masivo
# Envio masivo por numeros directos (modo dispositivo)
curl -X POST //whatsboost.netapi/send/sms.bulk \
  -d "secret=TU_API_KEY" \
  -d "campaign=Promo Verano 2026" \
  -d "message={Hola|Hey} {{contact.name}}, aprovecha un 20%% de descuento hoy." \
  -d "mode=devices" \
  -d "device=TU_DEVICE_ID" \
  -d "sim=1" \
  -d "priority=2" \
  -d "numbers=34612345678,34698765432,5215512345678"

# Envio masivo por grupos (modo creditos)
curl -X POST //whatsboost.netapi/send/sms.bulk \
  -d "secret=TU_API_KEY" \
  -d "campaign=Recordatorio Citas Marzo" \
  -d "message=Hola {{contact.name}}, recuerda tu cita de manana." \
  -d "mode=credits" \
  -d "gateway=1" \
  -d "groups=5,12"
<?php
$apiKey  = getenv("WHATSBOOST_API_KEY");
$baseUrl = "//whatsboost.netapi/send/sms.bulk";

$params = [
    "secret"   => $apiKey,
    "campaign"  => "Promo Verano 2026",
    "message"  => "{Hola|Hey} {{contact.name}}, aprovecha un 20% hoy.",
    "mode"     => "devices",
    "device"   => "TU_DEVICE_ID",
    "sim"      => 1,
    "priority" => 2,
    "numbers"  => "34612345678,34698765432,5215512345678"
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $baseUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$data = json_decode($response, true);

if ($httpCode === 200) {
    echo "Campana creada: " . $data["message"];
} else {
    echo "Error ({$httpCode}): " . $data["message"];
}
const API_KEY  = process.env.WHATSBOOST_API_KEY;
const BASE_URL = "//whatsboost.netapi/send/sms.bulk";

const params = new URLSearchParams({
    secret:   API_KEY,
    campaign: "Promo Verano 2026",
    message:  "{Hola|Hey} {{contact.name}}, aprovecha un 20% hoy.",
    mode:     "devices",
    device:   "TU_DEVICE_ID",
    sim:      "1",
    priority: "2",
    numbers:  "34612345678,34698765432,5215512345678"
});

const response = await fetch(BASE_URL, {
    method: "POST",
    headers: { "Content-Type": "application/x-www-form-urlencoded" },
    body: params
});

const data = await response.json();

if (response.ok) {
    console.log("Campana creada:", data.message);
} else {
    console.error("Error (" + response.status + "):", data.message);
}
import os
import requests

API_KEY  = os.environ["WHATSBOOST_API_KEY"]
BASE_URL = "//whatsboost.netapi/send/sms.bulk"

params = {
    "secret":   API_KEY,
    "campaign":  "Promo Verano 2026",
    "message":  "{Hola|Hey} {{contact.name}}, aprovecha un 20% hoy.",
    "mode":     "devices",
    "device":   "TU_DEVICE_ID",
    "sim":      1,
    "priority": 2,
    "numbers":  "34612345678,34698765432,5215512345678"
}

response = requests.post(BASE_URL, data=params)
data = response.json()

if response.status_code == 200:
    print("Campana creada:", data["message"])
else:
    print("Error (" + str(response.status_code) + "):", data["message"])
Respuesta exitosa (envio masivo)
{
    "status": 200,
    "message": "Bulk messages has been queued for sending!"
}

A diferencia del envio individual, la respuesta masiva no incluye un messageId por cada mensaje. Se crea una campana que puedes consultar con el endpoint /api/get/sms.campaigns y ver el progreso de envio de cada mensaje individual.


Controlar campanas de forma remota

Una vez creada una campana masiva, puedes pausarla y reanudarla de forma remota sin necesidad de acceder al Dashboard. Esto es util para automatizaciones que necesitan detener temporalmente el envio (por ejemplo, fuera de horario comercial).

Reanudar campana — POST /api/remote/start.sms

Reanuda una campana SMS que esta actualmente pausada. Requiere el permiso start_sms_campaign.

Parametro Tipo Estado Descripcion
secret string Obligatorio Tu API Key.
campaign int Obligatorio ID numerico de la campana a reanudar. Lo obtienes al consultar /api/get/sms.campaigns.
curl -X POST //whatsboost.netapi/remote/start.sms \
  -d "secret=TU_API_KEY" \
  -d "campaign=142"

Respuesta:

{
    "status": 200,
    "message": "SMS campaign has been resumed!"
}
Pausar campana — POST /api/remote/stop.sms

Pausa una campana SMS que esta actualmente activa/en proceso. Requiere el permiso stop_sms_campaign. Los mensajes que ya estan en cola en el dispositivo podrian seguir enviandose hasta que la app procese la senal de pausa.

Parametro Tipo Estado Descripcion
secret string Obligatorio Tu API Key.
campaign int Obligatorio ID numerico de la campana a pausar.
curl -X POST //whatsboost.netapi/remote/stop.sms \
  -d "secret=TU_API_KEY" \
  -d "campaign=142"

Respuesta:

{
    "status": 200,
    "message": "SMS campaign has been paused!"
}

Flujo completo de envio

Comprender el ciclo de vida de un SMS te ayudara a depurar problemas y a entender los estados que veras en el Dashboard y en los webhooks.

Modo devices (dispositivo Android)
1. Peticion API 2. Validacion 3. Cola de envio 4. Push al dispositivo 5. Envio desde SIM 6. Confirmacion
  1. Peticion API: Tu aplicacion envia la solicitud POST con los parametros requeridos.
  2. Validacion: El servidor valida la API Key, los permisos, el formato del numero, la longitud del mensaje, la moderacion IA, y la cuota de tu suscripcion.
  3. Cola de envio: El mensaje se encola con estado pending (1). Si la prioridad es alta (1), el dispositivo lo procesara de inmediato.
  4. Push al dispositivo: El servidor envia una notificacion push (FCM) al dispositivo Android para que recoja los mensajes pendientes.
  5. Envio desde SIM: La app Android en tu telefono lee los mensajes pendientes y los envia uno a uno a traves de la SIM seleccionada, como un SMS convencional.
  6. Confirmacion: El dispositivo reporta al servidor si el mensaje fue enviado correctamente, entregado al destinatario o si fallo. El estado se actualiza y, si tienes webhooks configurados, se dispara una notificacion.
Modo credits (pasarela SMS)
1. Peticion API 2. Validacion 3. Calculo de coste 4. Envio via pasarela 5. Descuento creditos 6. Callback / Webhook
  1. Peticion API: Tu aplicacion envia la solicitud POST.
  2. Validacion: Se validan las credenciales, permisos, formato del numero y contenido del mensaje.
  3. Calculo de coste: El sistema determina el precio del mensaje segun el pais destino y las tarifas de la pasarela seleccionada. Si no tienes suficientes creditos, se rechaza con error 403.
  4. Envio via pasarela: El mensaje se envia instantaneamente a traves de la pasarela SMS configurada (Twilio, Vonage, etc.) o a traves del dispositivo global del partner.
  5. Descuento de creditos: Si el envio es exitoso, se descuenta el coste de tu saldo de creditos.
  6. Callback / Webhook: Si la pasarela soporta callbacks de estado de entrega, el estado se actualiza cuando la pasarela notifica (entregado, fallido, etc.). Los webhooks configurados se disparan en consecuencia.
Estados del mensaje
Codigo Estado Descripcion
1 Pending El mensaje esta en cola, esperando ser procesado por el dispositivo o la pasarela.
2 Sent El mensaje ha sido enviado pero aun no se ha confirmado la entrega al destinatario.
3 Delivered El mensaje fue entregado correctamente al telefono del destinatario.
4 Failed El envio fallo. Posibles causas: numero invalido, dispositivo sin cobertura, pasarela con error, etc.

Errores comunes y solucion

Codigo Mensaje Solucion
400 Invalid Parameters! Faltan parametros obligatorios o tienen formato incorrecto. Verifica que envias secret, phone, message y mode.
400 Invalid phone number! El numero no es un movil valido. Asegurate de incluir el codigo de pais y que sea un numero real.
400 Message is too short! El mensaje no alcanza la longitud minima configurada en el sistema.
400 Message is too long! El mensaje supera la longitud maxima permitida. Reducelo antes de reenviar.
400 We detected inappropriate content in your message! La moderacion IA ha detectado contenido inapropiado. Revisa y modifica el texto del mensaje.
401 Invalid API secret supplied! La API Key no existe o fue eliminada. Verifica que estas usando la key correcta.
403 This API key doesn't have permission... Tu API Key no tiene el permiso sms_send o sms_send_bulk. Edita los permisos desde el Dashboard.
403 Subscription has no permission to use SMS services! Tu plan de suscripcion no incluye el servicio de SMS. Actualiza tu suscripcion.
403 Maximum allowed number of sent messages has been reached! Has alcanzado el limite de envio de tu suscripcion. Espera al siguiente periodo o actualiza tu plan.
403 Not enough credits to send this message! Tu saldo de creditos es insuficiente para el coste del mensaje al pais destino. Recarga creditos.
403 Account is not subscribed to any premium package! No tienes suscripcion activa (necesaria para modo devices). Contrata un plan premium.
404 Device doesn't exist! El device ID proporcionado no pertenece a tu cuenta o no existe. Verificalo en Dashboard > Dispositivos.
404 Specified gateway doesn't exist! El ID de pasarela proporcionado no existe en el sistema. Consulta las pasarelas disponibles con /api/get/rates.
500 Gateway was unable to send your message! La pasarela externa fallo al procesar el envio. Reintenta despues o prueba con otra pasarela.

Para una referencia completa de todos los codigos de error de la API, consulta la seccion Errores y estados.


Prompt para asistentes de IA

Prompt: Integrar envio de SMS con WhatsBoost

Copia y pega este prompt en ChatGPT, Claude, Gemini o tu asistente de IA favorito para que te ayude a implementar el envio de SMS en tu proyecto.

Eres un desarrollador backend experto. Necesito integrar el envio de SMS
usando la API de WhatsBoost. Estos son los detalles tecnicos:

ENVIO INDIVIDUAL:
- Endpoint: POST //whatsboost.netapi/send/sms
- Parametros obligatorios: secret (API Key), phone (E.164), message, mode
- mode=devices: requiere "device" (DID del Android). Opcional: sim (1|2), priority (1|2)
- mode=credits: requiere "gateway" (int ID o string nombre partner)
- Opcional: shortener (int, ID del acortador de URLs)
- Respuesta exitosa: {"status":200, "message":"...", "data":{"messageId":INT}}

ENVIO MASIVO:
- Endpoint: POST //whatsboost.netapi/send/sms.bulk
- Parametros adicionales: campaign (nombre), numbers (comas) y/o groups (IDs comas)
- Variables de plantilla: {{contact.name}}, {{contact.number}}, {{group.name}}, {{date.now}}, {{date.time}}
- Soporta spintax: {opcion1|opcion2|opcion3}

CONTROL DE CAMPANAS:
- POST /api/remote/start.sms (secret + campaign ID) - reanudar
- POST /api/remote/stop.sms (secret + campaign ID) - pausar

Ayudame a:
1. Crear funciones para envio individual y masivo con manejo de errores.
2. Implementar validacion de numeros E.164 antes de enviar.
3. Crear una cola de reintentos para errores transitorios (500).
4. Integrar con [MI CASO DE USO: e-commerce / CRM / chatbot / etc.]

Mi stack tecnologico es: [INDICA TU STACK AQUI]

Siguientes pasos