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
/api/v1/sms/sendEl 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
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| to | string | sí | Número en formato E.164 (+14155550100). Un número nacional se interpreta en el país del móvil que envía |
| message | string | sí | Texto del mensaje, hasta 10.000 caracteres (unos 66 SMS en GSM-7). Los mensajes largos se envían como SMS concatenados |
| deviceId | string | no | Móvil que se usa. Si no lo indicas, elegimos el que tenga la cola más corta |
| reference | string | no | Tu propio identificador, que se devuelve en los webhooks de este mensaje |
Petición
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
{
"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.
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
/api/v1/conversations/:id/messagesDevuelve el hilo en orden cronológico. El conversationId llega en el webhook received. limit admite de 1 a 100; por defecto, 20.
{
"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
/api/v1/messages/:idDevuelve 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.
{
"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
}