Reportes

Reportes de envíos SMS
Generar Reporte de Envíos
POST /reports/generate
Detalle de Reporte
POST /reports/details

Generar Reporte de Envíos

POST https://api.smsmasivos.com.mx/reports/generate
Genera un reporte de todos los envíos dentro de un rango de fechas. La respuesta incluye todos los mensajes del período sin paginación. El endpoint tiene un límite de peticiones por cuenta (código report_05 al excederlo); usa rangos amplios en lugar de consultas frecuentes.
Parameters
start_datestringrequerido
Fecha de inicio del rango (YYYY-MM-DD, zona horaria America/Mexico_City). No debe ser posterior a end_date.
end_datestringrequerido
Fecha de fin del rango (YYYY-MM-DD, zona horaria America/Mexico_City)
sandboxintegeropcional
1 para consultar envíos de prueba (sandbox), 0 para envíos reales. Por defecto 0.

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
report_01 / report_02Falta start_date o end_date.Envía ambas fechas.
report_03start_date es posterior a end_date.Corrige el rango.
report_05Límite de peticiones de reporte excedido.Usa rangos de fechas amplios en lugar de consultas frecuentes; contacta a soporte si necesitas más capacidad.

El éxito responde report_04 con el arreglo report.

curl -X POST https://api.smsmasivos.com.mx/reports/generate \
  -H "Content-Type: application/json" \
  -H "apikey: TU_API_KEY" \
  -d '{
    "start_date": "2026-07-01",
    "end_date": "2026-07-15"
  }'
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.smsmasivos.com.mx/reports/generate');
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([
    'start_date' => '2026-07-01',
    'end_date' => '2026-07-15'
]));
$response = curl_exec($ch);
curl_close($ch);
echo $response;
import requests

response = requests.post(
    'https://api.smsmasivos.com.mx/reports/generate',
    headers={
        'Content-Type': 'application/json',
        'apikey': 'TU_API_KEY'
    },
    json={
        'start_date': '2026-07-01',
        'end_date': '2026-07-15'
    }
)
print(response.json())
const response = await fetch('https://api.smsmasivos.com.mx/reports/generate', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'apikey': process.env.SMSMASIVOS_API_KEY
  },
  body: JSON.stringify({
    start_date: '2026-07-01',
    end_date: '2026-07-15'
  })
});
const data = await response.json();
console.log(data);
const axios = require('axios');

const { data } = await axios.post(
  'https://api.smsmasivos.com.mx/reports/generate',
  {
    start_date: '2026-07-01',
    end_date: '2026-07-15'
  },
  {
    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/reports/generate')
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 = {
  start_date: '2026-07-01',
  end_date: '2026-07-15'
}.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
{
    start_date = "2026-07-01",
    end_date = "2026-07-15"
};

var response = await client.PostAsJsonAsync(
    "https://api.smsmasivos.com.mx/reports/generate",
    payload
);
var result = await response.Content.ReadFromJsonAsync<JsonElement>();
Console.WriteLine(result);
OkHttpClient client = new OkHttpClient();

String json = "{"
    + "\"start_date\":\"2026-07-01\","
    + "\"end_date\":\"2026-07-15\""
    + "}";

Request request = new Request.Builder()
    .url("https://api.smsmasivos.com.mx/reports/generate")
    .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": "report_generated",
  "status": 200,
  "code": "report_04",
  "report": [
    {
      "name": "Campaña Black Friday",
      "created_date": "2026-07-15 09:00:00",
      "reference": "abc123def456ghi789jkl",
      "number": "525512345678",
      "message": "Aprovecha nuestras ofertas de Black Friday!",
      "sent_date": "2026-07-15 09:00:01",
      "status": "0",
      "operator": "Telcel",
      "type": "SMS"
    }
  ]
}
{
  "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"
}

Detalle de Reporte

POST https://api.smsmasivos.com.mx/reports/details
Obtiene el desglose detallado de un reporte de campaña específico
Parameters
campaign_idintegerrequerido
ID de la campaña
sandboxintegeropcional
1 = consultar una campaña de envíos de prueba (sandbox)

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
details_02campaign_id ausente o no numérico.Envía el identificador numérico de la campaña.
details_03La campaña no existe o no pertenece a tu cuenta.Verifica el campaign_id con /campaigns.
details_04La campaña aún se está procesando.Espera a que termine y reintenta.

El éxito responde details_01 con efectividad y totales por estado.

curl https://api.smsmasivos.com.mx/reports/details \
  -d campaign_id=100 \
  -d sandbox=100
const Reporte = await sms.reportes.create({
  campaign_id: 100,
  sandbox: 100,
})
Reporte = sms.reportes.create(
    campaign_id=100,
    sandbox=100,
)
Reporte, err := client.Reportes.Create(ctx, &sms.ReporteParams{
    CampaignId: sms.Int(100),
    Sandbox: sms.Int(100),
})
Response
{
  "success": true,
  "message": "report_generated",
  "status": 200,
  "code": "details_01",
  "details": {
    "effectiveness": 95.5,
    "totals": 1000,
    "delivered": 955,
    "failed": 30,
    "pending": 10,
    "not_charged": 5
  }
}
{
  "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
messagestring
Mensaje de estado
statusinteger
codestring
Código de respuesta
reportarray<object>
Objeto de respuesta
{
  "success": true,
  "message": "report_generated",
  "status": 200,
  "code": "report_04",
  "report": []
}