Inicio rápido
Generá una clave en Panel → API. Enviá la clave en X-API-Key. En el navegador, la cookie de sesión se envía automáticamente.
curl -X POST https://TU-DOMINIO/api/messages -H "X-API-Key: sms_TU_CLAVE" -H "Content-Type: application/json" -d '{"phone":"595981234567","message":"Hola desde NexoSMS"}'simulado. En producción, aceptado indica recepción por la API de Winsap, no entrega final al dispositivo.Autenticación
Usá X-API-Key para integraciones externas. Guardá la clave en el servidor de tu aplicación. Cada clave accede sólo a los datos de su usuario y puede revocarse desde el panel.
Endpoints
/api/auth/registerCrear cuenta con nombre, correo y contraseña de al menos 10 caracteres.
/api/auth/loginIniciar sesión y recibir una cookie segura.
/api/meConsultar usuario y saldo.
/api/messagesEnviar un SMS individual: phone, message.
/api/dashboardMétricas y actividad reciente.
/api/contactsListar contactos.
/api/contactsImportar hasta 2000 contactos: contacts: [{phone,name,variables}].
/api/contacts/:idEliminar un contacto.
/api/campaignsListar campañas.
/api/campaignsCrear campaña: name, body, recipients y scheduledAt opcional.
/api/campaigns/:idVer detalle y destinatarios.
/api/campaigns/:idEditar nombre, mensaje y horario de una campaña pendiente o pausada.
/api/campaigns/:id/pauseDetener una campaña en curso o programada.
/api/campaigns/:id/cancelCancelar definitivamente una campaña.
/api/campaigns/:idEliminar la campaña y su lista de destinatarios (no se puede si está enviando).
/api/campaigns/:id/runProcesar hasta 20 destinatarios; con now: true reanuda o envía sin esperar el horario. Repetir hasta remaining=0.
/api/campaigns/processProcesar campañas programadas que ya vencieron.
/api/reportsHistorial filtrable: from, to, campaign, status.
/api/walletSaldo, movimientos, paquetes y compras.
/api/ordersCrear link de pago por la cantidad de SMS elegida: credits (Gs. 130 por SMS, compra mínima 1.000 SMS).
/api/orders/verify-pendingVerificar pagos pendientes y acreditar los confirmados.
/api/orders/:id/verifyVerificar pago y acreditar créditos si fue confirmado.
/api/optoutsListar números excluidos. Nunca se les envía SMS.
/api/optoutsExcluir números: phone o phones: [].
/api/optouts/:idQuitar un número de la lista de exclusión.
/api/keysListar claves sin revelar secretos.
/api/keysCrear clave API: name. Se muestra una sola vez.
/api/keys/:idRevocar una clave.
Ejemplo de campaña
{
"name": "Recordatorio de citas",
"body": "Hola {nombre}, tu cita es el {fecha}.",
"scheduledAt": "2026-10-12T13:00:00Z",
"recipients": [
{
"phone": "595981234567",
"name": "María",
"variables": {
"fecha": "12/10"
}
}
]
}El procesamiento se realiza en lotes de hasta 20 destinatarios. El panel revisa campañas pendientes mientras está abierto. Para ejecutar sin el panel abierto, un programador externo debe invocar POST /api/campaigns/process periódicamente con una clave de la cuenta.
Personalización e importación
El mensaje admite {nombre}, {numero} y las claves de variables de cada destinatario. En el panel podés importar Excel o CSV. Las columnas adicionales se convierten en variables en minúsculas, reemplazando espacios por guiones bajos. También podés pegar líneas como 0981234567,María.
Estados y créditos
El costo se estima por segmentos: 160 caracteres GSM o 70 Unicode en un SMS; los mensajes largos usan segmentos de 153 o 67 caracteres. El saldo se reserva antes del envío y se devuelve si Winsap rechaza la solicitud. Los estados incluyen pendiente, simulado, aceptado y fallido.
La compra crea un link de Winsap para pagar con tarjeta o QR. Volver del checkout no acredita saldo: la plataforma verifica el pago, el monto y el link antes de acreditar.
Errores
Los errores devuelven JSON con un campo error. Códigos: 400 datos inválidos, 401 autenticación, 402 saldo insuficiente, 403 permisos, 404 recurso no encontrado y 422 número excluido, 429 límite de solicitudes (ver encabezado Retry-After) y 503 integración aún no activada.