Enviar SMS desde tu CRM no requiere migrar de herramienta. La API REST de SMS Masivos recibe un POST a /sms/send con tu apikey, los números y el mensaje, y responde con una referencia por destinatario. El patrón es el mismo para HubSpot, Salesforce, Pipedrive o Zoho: tomas el contacto, mapeas su teléfono al campo numbers y disparas el envío.
La API REST de SMS Masivos es un servicio HTTP que permite a cualquier sistema con conexión a internet enviar mensajes SMS mediante una llamada a /sms/send. Si tu CRM guarda teléfonos de clientes, ya tienes lo difícil: el dato. Lo que falta es una pieza de código que convierta ese dato en un envío.
El patrón: el CRM tiene los datos, la API hace el envío
Cuando un cliente pide una cita, compra en línea o deja un carrito abandonado, la información queda en tu CRM. El SMS es la acción de salida: avisar, confirmar, recordar o cobrar. La API convierte ese flujo en una llamada HTTP que tu backend dispara sin intervención manual.
El ciclo completo: el contacto se actualiza en el CRM, tu integración lee su teléfono, arma el request y la API entrega el mensaje. No duplicas datos ni pegas números en un panel; es el mismo patrón que ya exploramos para campañas por API REST en marketing.
Lo que necesitas antes de escribir código
Tres cosas. Primera, una cuenta con créditos: la compra mínima es de 500 SMS. Segunda, tu API key: se genera desde el panel y viaja en el header apikey de cada request. Tercera, un remitente personalizado si quieres que el mensaje salga con tu nombre o el de tu marca en lugar del remitente corto de 5 dígitos; es opcional, se contrata por separado y admite hasta 11 caracteres.
La referencia completa de la API está en api-docs/v2. Para una vista general del producto, la página de API SMS la resume.
La llamada base: POST /sms/send
El endpoint vive en https://api.smsmasivos.com.mx/sms/send. Un envío mínimo son dos campos: numbers y message. Así se ve con curl:
curl -X POST "https://api.smsmasivos.com.mx/sms/send" \
-H "apikey: TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"numbers": "525512345678,525598765432",
"message": "Hola {nombre}, tu pedido #12345 esta confirmado. Gracias por tu compra!",
"sender": "MiEmpresa",
"country_code": "52"
}'Observa el formato: numbers acepta varios destinatarios en un mismo string, separados por coma y con el prefijo 52. El message admite variables entre llaves para personalizar con datos del contacto. Si quieres probar el flujo sin gastar créditos, agrega "sandbox": 1 al body: la API valida el request en modo prueba y no consume saldo. La tabla resume los parámetros:
| Parámetro | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| numbers | string | Sí | Destinatarios separados por coma, con código de país (mínimo 10 caracteres) |
| message | string | Sí | Contenido del mensaje. Viaja sin acentos: la API lo normaliza para garantizar compatibilidad con todas las operadoras |
| sender | string | No | Remitente alfanumérico de máximo 11 caracteres. Si se omite, usa el default de la cuenta |
| country_code | string | No | Código de país (default "52" para México) |
La respuesta 200 confirma el envío y trae una referencia por mensaje:
{
"success": true,
"message": "sent_messages",
"status": 200,
"code": "sms_11",
"total_messages": 2,
"references": [
{ "reference": "abc123def456ghi789jkl", "number": "525512345678" },
{ "reference": "xyz987uvw654rst321mno", "number": "525598765432" }
],
"credit": 3.0
}Guarda esas references: son tu rastro para conciliar cada envío con los reportes del panel. Si quieres probar el endpoint con tu cuenta, crea tu cuenta y genera tu API key en minutos.
Mapea los contactos de tu CRM al request
Lo único que cambia de CRM a CRM es de dónde sacas el teléfono y con qué formato llega. En HubSpot la propiedad del contacto se llama phone; en Salesforce es el campo estándar Phone del objeto Contact; en Zoho CRM el módulo Contacts tiene Phone y Mobile; en Pipedrive el teléfono vive en el campo phone del person, cuyas docs de API documentan la estructura exacta. En todos el paso es el mismo: lees ese campo, lo normalizas a 10 dígitos con el prefijo 52 y lo pasas a numbers.
Tres reglas que aplican en todos:
- Normaliza el número. 10 dígitos más el prefijo 52. Si conviven "5512345678" y "52 55 1234 5678", unifica antes de enviar.
- Interpola variables del mensaje desde los campos del contacto: {nombre}, {pedido} o {saldo} se reemplazan en cada envío.
- Si tu CRM tiene integración nativa, úsala. SMS Masivos conecta con 21 plataformas por OAuth o API key (HubSpot, Salesforce, Pipedrive y Zoho entre ellas); el índice de integraciones las lista.
¿Tu CRM es HubSpot? El post Enviar SMS desde HubSpot con la API tiene el paso a paso completo con su mapeo de propiedades.
Del envío manual a la automatización con webhooks
El request manual sirve para probar. Para que el SMS se dispare solo, el patrón es el webhook: tu CRM emite un evento (contacto nuevo, pedido pagado, cita creada), tu servidor lo recibe y responde con el POST a /sms/send. El evento viaja en segundos y el envío queda disparado.
Un ejemplo concreto: un lead llena el formulario de tu web, se crea el contacto en el CRM, el webhook avisa a tu backend y el SMS de bienvenida sale sin que nadie lo toque. El post Conoce qué son los webhooks arma este flujo completo. Para probar sin gastar créditos, agrega "sandbox": 1: la API valida en modo prueba y no consume saldo.
Errores comunes y cómo depurarlos
Cuatro respuestas vas a ver más que ninguna otra:
| Código | Qué significa | Qué hacer |
|---|---|---|
| 401 | La API key es inválida, expiró o no se envió | Verifica el header apikey contra la key del panel |
| 400 · sms_02 | El mensaje excede el límite de longitud | Acórtalo o divídelo en dos envíos |
| 400 · sms_07 | Créditos insuficientes | Recarga saldo desde el panel |
| 429 | Superaste el límite de peticiones (500 por minuto en producción) | Reintenta con backoff exponencial |
El código sms_XX dentro del mensaje de error es la clave para depurar: es el mismo identificador que verás en los logs del panel.
Cuánto cuesta enviar SMS por API
El precio por mensaje baja según el volumen: desde $0.13 MXN en alto volumen; en bajo volumen, 500 o más a $0.90, 1,000 o más a $0.77, 10,000 o más a $0.68, 30,000 o más a $0.63 y 80,000 o más a $0.47, todos más IVA. La compra mínima es de 500 mensajes y el saldo no expira: integra primero y crece el volumen después.
Empieza con una prueba piloto desde 500 mensajes a $0.90 + IVA y valida el flujo con contactos reales. Cuando el volumen escale, el precio acompaña: es el modelo de las empresas que envían cientos de miles de mensajes al mes por API. Crea tu cuenta y empieza a integrar hoy.
Preguntas frecuentes
¿Necesito una integración nativa para enviar SMS desde mi CRM?
No. Con la API REST, cualquier CRM capaz de hacer una llamada HTTP puede enviar SMS: solo necesitas la apikey y el teléfono del contacto. Las integraciones nativas (21 plataformas por OAuth o API key) ahorran ese código cuando tu CRM ya está en la lista.
¿Cuántos contactos puedo incluir en un solo request?
El campo numbers acepta varios teléfonos en un mismo string, separados por coma y con el código de país. No hay un máximo publicado en la documentación de la API: el límite práctico lo marca la longitud del request y el rate limit de 500 peticiones por minuto.
¿El remitente personalizado es obligatorio?
No. El parámetro sender es opcional: si no lo envías, el mensaje sale con el remitente default de tu cuenta (el remitente corto de 5 dígitos). Si quieres tu nombre o tu marca como remitente, se contrata por separado y admite hasta 11 caracteres.
¿La API respeta los acentos en el mensaje?
Los mensajes viajan sin acentos: la API los normaliza antes del envío para garantizar compatibilidad con todas las operadoras. Escribe el mensaje sin tildes en el request o deja que la normalización haga su trabajo.
¿Puedo probar la integración sin gastar créditos?
Sí. El parámetro sandbox con valor 1 procesa el envío en modo prueba: la API valida el request y responde como si enviara, pero no consume créditos ni entrega el mensaje. Es la forma segura de probar el flujo de desarrollo.



.webp)
.webp)


