Iniciar sesión

API para enviar SMS: POST /sms/send desde tu Android

El endpoint que pone un SMS en la cola de uno de tus móviles.

Última actualización

POST/api/v1/sms/send

El mensaje entra en la cola del dispositivo y sale por orden de llegada. La respuesta no espera al envío: queued significa aceptado.

Cuerpo de la petición

CampoTipoObligatorioDescripción
tostringsíNúmero en formato E.164 (+14155550100). Un número nacional se interpreta en el país del móvil que envía
messagestringsíTexto del mensaje, hasta 10.000 caracteres (unos 66 SMS en GSM-7). Los mensajes largos se envían como SMS concatenados
deviceIdstringnoMóvil que se usa. Si no lo indicas, elegimos el que tenga la cola más corta
referencestringnoTu propio identificador, que se devuelve en los webhooks de este mensaje

Petición

bash
curl -X POST https://api.droidsender.com/api/v1/sms/send \
  -H "Content-Type: application/json" \
  -H "X-API-Key: DS-live-your-key" \
  -d '{
    "to": "+14155550100",
    "message": "Tu cita del 10/08 a las 11:15 está confirmada.",
    "deviceId": "dev_oppo_cph2577",
    "reference": "appointment_8841"
  }'

Respuesta

json
{
  "id": "msg_01H8X2",
  "status": "queued",
  "to": "+14155550100",
  "deviceId": "dev_oppo_cph2577",
  "reference": "appointment_8841",
  "segments": 1,
  "encoding": "GSM-7",
  "quota": { "used": 128, "included": 2000, "remaining": 1872 },
  "deviceOnline": true,
  "createdAt": "2026-08-16T14:22:05Z"
}

Reintentar sin enviar dos veces

Envía una cabecera Idempotency-Key. Si repites una petición con la misma clave, recibes la respuesta original en lugar de un segundo SMS. Las claves duran 72 horas; un cuerpo distinto con la misma clave devuelve 409 idempotency_conflict.

bash
curl -X POST https://api.droidsender.com/api/v1/sms/send \
  -H "X-API-Key: DS-live-your-key" \
  -H "Idempotency-Key: appointment_8841_reminder" \
  -H "Content-Type: application/json" \
  -d '{ "to": "+14155550100", "message": "Recordatorio" }'

Leer una conversación

GET/api/v1/conversations/:id/messages

Devuelve el hilo en orden cronológico. El conversationId llega en el webhook received. limit admite de 1 a 100; por defecto, 20.

json
{
  "conversationId": "conv_9f21",
  "phone": "+14155550100",
  "deviceId": "dev_oppo_cph2577",
  "messages": [
    {
      "id": "msg_01H8X",
      "direction": "outbound",
      "body": "Tu cita del 10/08 a las 11:15 está confirmada.",
      "status": "delivered",
      "reference": "appointment_8841",
      "at": "2026-08-14T09:02:11Z"
    },
    {
      "id": "msg_01H8Z",
      "direction": "inbound",
      "body": "El jueves por la mañana, si puede ser.",
      "status": "delivered",
      "reference": null,
      "at": "2026-08-14T10:30:44Z"
    }
  ]
}

Consultar un mensaje más tarde

GET/api/v1/messages/:id

Devuelve el estado actual de un mensaje que has enviado. Úsalo para cuadrar los datos cuando no ha llegado un webhook. Los mensajes recibidos se obtienen con GET /messages/inbound.

json
{
  "id": "msg_01H8X2",
  "status": "delivered",
  "to": "+14155550100",
  "deviceId": "dev_oppo_cph2577",
  "segments": 1,
  "encoding": "GSM-7",
  "reference": "appointment_8841",
  "createdAt": "2026-08-16T14:22:05Z",
  "deliveredAt": "2026-08-16T14:22:41Z",
  "error": null
}

Tus preferencias de cookies

Usamos cookies esenciales para que el sitio funcione. Con tu consentimiento, también usamos cookies de analítica y de publicidad para entender las visitas y medir nuestros anuncios. Puedes cambiar tu elección cuando quieras en la Configuración de cookies. Política de cookies