Webhooks

Suscripción y gestión de webhooks: la URL de tu servidor a la que SMS Masivos envía la confirmación de entrega de tus mensajes y las respuestas de tus clientes.

Estos endpoints solo configuran tu webhook. Los eventos que después recibirá tu servidor (payloads, códigos de estatus y reintentos) están documentados en la guía de Webhooks.

Obtener Configuración de Webhook
POST /webhook/get
Registrar Webhook
POST /webhook/add
Cambiar Estado de Webhook
POST /webhook/status
Eliminar Webhook
POST /webhook/delete

Obtener Configuración de Webhook

POST https://api.smsmasivos.com.mx/webhook/get
Devuelve la URL y estado actual del webhook configurado en la cuenta
curl https://api.smsmasivos.com.mx/webhook/get
const Webhook = await sms.webhooks.create()
Webhook = sms.webhooks.create()
Webhook, err := client.Webhooks.Create(ctx, nil)
Response
{
  "success": true,
  "result": {
    "url": "https://example.com/webhook",
    "status": "1"
  },
  "status": 200,
  "code": "webhook_01"
}
{
  "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"
}

Registrar Webhook

POST https://api.smsmasivos.com.mx/webhook/add
Registra una nueva URL de webhook para recibir notificaciones de eventos (envíos, DLR, respuestas).

Requisitos de la URL que registres:

  • Debe ser pública: no se aceptan hosts locales ni direcciones de redes privadas. Recomendamos usar HTTPS.
  • Al registrarla se verifica con una petición GET: cualquier respuesta que no sea 404 la aprueba (timeout de 5 segundos, sin seguir redirecciones); si no, el registro se rechaza con add_webhook_06.
  • Debe aceptar peticiones HEAD: antes de entregar cada evento se comprueba que la URL responde.
  • Debe responder HTTP 200 rápidamente cuando reciba un evento. El método de entrega (GET o POST) se configura en el panel.

Los payloads que recibirá tu servidor, los códigos de estatus de entrega y la política de reintentos están en la guía de Webhooks.

Parameters
urlstringrequerido
URL pública del webhook (se recomienda HTTPS). No se aceptan hosts locales ni redes privadas. Se verifica con una petición GET al registrarla.
statusenumrequerido
Estado del webhook: '0' = deshabilitado, '1' = habilitado01

Además de los errores globales de autenticación (auth_*, ver Errores y límites), este endpoint puede responder:

Códigos de error

CódigoCuándo ocurreQué hacer
add_webhook_02 / add_webhook_03URL ausente, con formato inválido o apuntando a un host no permitido.Usa una URL pública válida.
add_webhook_04 / add_webhook_05status ausente o distinto de 0/1.Envía "1" (habilitado) o "0" (deshabilitado).
add_webhook_06Tu URL no respondió a la verificación.Asegúrate de que responda (cualquier código excepto 404) en menos de 5 segundos, sin redirecciones.
add_webhook_07 / add_webhook_08Error al guardar la configuración.Reintenta; si persiste, contacta a soporte.

El éxito responde add_webhook_01.

curl -X POST https://api.smsmasivos.com.mx/webhook/add \
  -H "Content-Type: application/json" \
  -H "apikey: TU_API_KEY" \
  -d '{"url": "https://miapp.com/webhooks/sms-masivos", "status": "1"}'
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.smsmasivos.com.mx/webhook/add');
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([
    'url' => 'https://miapp.com/webhooks/sms-masivos',
    'status' => '1'
]));
$response = curl_exec($ch);
curl_close($ch);
echo $response;
import requests
response = requests.post(
    'https://api.smsmasivos.com.mx/webhook/add',
    headers={'Content-Type': 'application/json', 'apikey': 'TU_API_KEY'},
    json={'url': 'https://miapp.com/webhooks/sms-masivos', 'status': '1'}
)
print(response.json())
const response = await fetch('https://api.smsmasivos.com.mx/webhook/add', {
  method: 'POST',
  headers: {'Content-Type': 'application/json', 'apikey': process.env.SMSMASIVOS_API_KEY},
  body: JSON.stringify({url: 'https://miapp.com/webhooks/sms-masivos', status: '1'})
});
const data = await response.json();
console.log(data);
require 'net/http'; require 'json'
uri = URI('https://api.smsmasivos.com.mx/webhook/add')
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 = {url: 'https://miapp.com/webhooks/sms-masivos', status: '1'}.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 { url = "https://miapp.com/webhooks/sms-masivos", status = "1" };
var response = await client.PostAsJsonAsync("https://api.smsmasivos.com.mx/webhook/add", payload);
var result = await response.Content.ReadFromJsonAsync<JsonElement>();
Console.WriteLine(result);
OkHttpClient client = new OkHttpClient();
String json = "{\"url\":\"https://miapp.com/webhooks/sms-masivos\",\"status\":\"1\"}";
Request request = new Request.Builder()
    .url("https://api.smsmasivos.com.mx/webhook/add")
    .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());
Response
{
  "success": true,
  "message": "url_added_success",
  "status": 200,
  "code": "add_webhook_01"
}
{
  "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"
}

Cambiar Estado de Webhook

POST https://api.smsmasivos.com.mx/webhook/status
Activa o desactiva el webhook configurado
Parameters
statusstringrequerido
Estado del webhook: '0' = deshabilitado, '1' = habilitado

Además de los errores globales de autenticación (auth_*, ver Errores y límites), este endpoint puede responder:

Códigos de error

CódigoCuándo ocurreQué hacer
status_webhook_02 / status_webhook_03status ausente o distinto de 0/1.Envía "1" (habilitar) o "0" (deshabilitar).
status_webhook_04No se pudo actualizar.Verifica que tengas un webhook registrado con /webhook/get.

El éxito responde status_webhook_01.

curl https://api.smsmasivos.com.mx/webhook/status \
  -d status=value
const Webhook = await sms.webhooks.create({
  status: 'value',
})
Webhook = sms.webhooks.create(
    status="value",
)
Webhook, err := client.Webhooks.Create(ctx, &sms.WebhookParams{
    Status: sms.String("value"),
})
Response
{
  "success": true,
  "message": "url_added_success",
  "status": 200,
  "code": "add_webhook_01"
}
{
  "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"
}

Eliminar Webhook

POST https://api.smsmasivos.com.mx/webhook/delete
Elimina la URL y estado del webhook configurado
curl https://api.smsmasivos.com.mx/webhook/delete
const Webhook = await sms.webhooks.create()
Webhook = sms.webhooks.create()
Webhook, err := client.Webhooks.Create(ctx, nil)
Response
{
  "success": true,
  "message": "url_added_success",
  "status": 200,
  "code": "add_webhook_01"
}
{
  "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.

Atributos
successboolean
resultobject
statusinteger
codestring
Código de respuesta
Objeto de respuesta
{
  "success": true,
  "result": {},
  "status": 200,
  "code": "webhook_01"
}