SMS Masivos
Envío de SMS individuales, por lotes y programados. Una sola petición a POST /sms/send acepta varios destinatarios separados por coma, con remitente personalizado, programación de fecha y acortador de URLs integrado.
¿Envías códigos de verificación, login o 2FA? Usa Verificación OTP (POST /v2/otp), no este endpoint. /sms/send no tiene prioridad de red ni manejo de códigos.
Para volúmenes grandes envía lotes de números en una sola petición en lugar de una petición por destinatario: reduce overhead HTTP y evita saturar la API. Consulta la guía SMS Masivos y las Buenas prácticas de envío.
Enviar SMS
¿Envías códigos de verificación, login o 2FA? No uses este endpoint. /sms/send es para marketing y notificaciones: sin prioridad de red ni manejo de códigos. En pruebas parecerá funcionar, pero en producción tus códigos llegarán tarde o no llegarán. Para verificación usa POST /v2/otp.
Envía un mensaje SMS a uno o múltiples destinatarios. El mensaje se envía sin acentos para garantizar compatibilidad con todas las operadoras.
country_code). Con find_country_code en 1, cada número debe tener 12 dígitos con el código de país incluido.á por a y ñ por n), por lo que el mensaje siempre se envía en alfabeto GSM-7.channel es 2.52 para México). No requerido si se usa find_country_code.Origen del código de país:
0: se toma decountry_code1: se extrae de cada número (los números deben tener 12 dígitos con el país incluido)
01YYYY-MM-DD HH:MM:SS, zona horaria America/Mexico_City). Debe ser futura. No disponible en modo sandbox.1 = modo de prueba: ejecuta todas las validaciones y genera referencias, pero no entrega el mensaje ni consume créditos. Límite de 1000 envíos de prueba por día. No admite envíos programados.01Canal de entrega:
1: SMS2: RCS
RCS requiere el parámetro sender con un remitente RCS vinculado a la cuenta y no es compatible con flash.
121 = SMS flash (se muestra directamente en pantalla sin guardarse). La compatibilidad depende del dispositivo y operador. No compatible con RCS (channel: 2).011 = acortar la URL del mensaje automáticamente. El mensaje debe contener exactamente una URL: sin URL o con más de una, la petición se rechaza.01curl -X POST https://api.smsmasivos.com.mx/sms/send \
-H "Content-Type: application/json" \
-H "apikey: TU_API_KEY" \
-d '{
"numbers": "5512345678",
"message": "Hola {nombre}, tu pedido esta confirmado.",
"sender": "MiEmpresa"
}'
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.smsmasivos.com.mx/sms/send');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'apikey: ' . getenv('SMSMASIVOS_API_KEY')
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'numbers' => '5512345678',
'message' => 'Hola {nombre}, tu pedido esta confirmado.',
'sender' => 'MiEmpresa'
]));
$response = curl_exec($ch);
curl_close($ch);
echo $response;
import requests
response = requests.post(
'https://api.smsmasivos.com.mx/sms/send',
headers={
'Content-Type': 'application/json',
'apikey': 'TU_API_KEY'
},
json={
'numbers': '5512345678',
'message': 'Hola {nombre}, tu pedido esta confirmado.',
'sender': 'MiEmpresa'
}
)
print(response.json())
const response = await fetch('https://api.smsmasivos.com.mx/sms/send', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'apikey': process.env.SMSMASIVOS_API_KEY
},
body: JSON.stringify({
numbers: '5512345678',
message: 'Hola {nombre}, tu pedido esta confirmado.',
sender: 'MiEmpresa'
})
});
const data = await response.json();
console.log(data);
const axios = require('axios');
const { data } = await axios.post(
'https://api.smsmasivos.com.mx/sms/send',
{
numbers: '5512345678',
message: 'Hola {nombre}, tu pedido esta confirmado.',
sender: 'MiEmpresa'
},
{
headers: {
'Content-Type': 'application/json',
'apikey': process.env.SMSMASIVOS_API_KEY
}
}
);
console.log(data);
require 'net/http'
require 'json'
uri = URI('https://api.smsmasivos.com.mx/sms/send')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri.path, {
'Content-Type' => 'application/json',
'apikey' => ENV['SMSMASIVOS_API_KEY']
})
request.body = {
numbers: '5512345678',
message: 'Hola {nombre}, tu pedido esta confirmado.',
sender: 'MiEmpresa'
}.to_json
response = http.request(request)
puts JSON.parse(response.body)
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("apikey", "TU_API_KEY");
var payload = new
{
numbers = "5512345678",
message = "Hola {nombre}, tu pedido esta confirmado.",
sender = "MiEmpresa"
};
var response = await client.PostAsJsonAsync(
"https://api.smsmasivos.com.mx/sms/send",
payload
);
var result = await response.Content.ReadFromJsonAsync<JsonElement>();
Console.WriteLine(result);
OkHttpClient client = new OkHttpClient();
String json = "{"
+ "\"numbers\":\"5512345678\","
+ "\"message\":\"Hola {nombre}, tu pedido esta confirmado.\","
+ "\"sender\":\"MiEmpresa\""
+ "}";
Request request = new Request.Builder()
.url("https://api.smsmasivos.com.mx/sms/send")
.post(RequestBody.create(json, MediaType.parse("application/json")))
.addHeader("apikey", "TU_API_KEY")
.build();
Response response = client.newCall(request).execute();
System.out.println(response.body().string());
{ "success": true, "message": "sent_messages", "status": 200, "code": "sms_11", "total_messages": 2, "references": [ { "reference": "abc123def456ghi789jkl", "number": "525512345678" }, { "reference": "xyz987uvw654rst321mno", "number": "525598765432" } ], "credit": 3 }
{ "success": false, "message": "Parámetros inválidos.", "status": 400, "code": "<string>" }
{ "success": false, "message": "API Key inválida o no existe.", "status": 401, "code": "auth_05" }
{ "success": false, "message": "La dirección IP no está autorizada para acceder.", "status": 403, "code": "auth_04" }
{ "success": false, "message": "Demasiadas solicitudes. Límite: 100 mensajes/segundo (producción) o 100/día (sandbox).", "status": 429, "code": "rate_01" }
{ "success": false, "message": "Error interno del servidor. Contacta a soporte con el request_id.", "status": 500, "code": "server_01", "request_id": "550e8400-e29b-41d4-a716-446655440000" }
Enviar SMS
curl https://api.smsmasivos.com.mx/sms/send?numbers=5512345678&message=Hola desde SMS Masivos!
const SMS Masivo = await sms.smsmasivos.list({ numbers: '5512345678', message: 'Hola desde SMS Masivos!' })
SMS Masivo = sms.smsmasivos.list(numbers="5512345678", message="Hola desde SMS Masivos!")
SMS Masivo, err := client.Smsmasivos.List(ctx, nil)
{ "success": true, "message": "sent_messages", "status": 200, "code": "sms_11", "total_messages": 1, "references": [ { "reference": "abc123def456ghi789jkl", "number": "525512345678" } ], "credit": 1.5, "campaignId": 12345 }
{ "success": false, "message": "Parámetros inválidos.", "status": 400, "code": "<string>" }
{ "success": false, "message": "API Key inválida o no existe.", "status": 401, "code": "auth_05" }
{ "success": false, "message": "La dirección IP no está autorizada para acceder.", "status": 403, "code": "auth_04" }
{ "success": false, "message": "Demasiadas solicitudes. Límite: 100 mensajes/segundo (producción) o 100/día (sandbox).", "status": 429, "code": "rate_01" }
{ "success": false, "message": "Error interno del servidor. Contacta a soporte con el request_id.", "status": 500, "code": "server_01", "request_id": "550e8400-e29b-41d4-a716-446655440000" }
Objeto de respuesta
Estructura de la respuesta que devuelven estos endpoints.
{ "success": true, "message": "sent_messages", "status": 200, "code": "sms_11", "total_messages": 1, "references": [], "credit": 1.5, "campaignId": 12345 }