API para recibir SMS: lee las respuestas entrantes
Lee los SMS que te responden, sin recibir webhooks.
Última actualización
GET
/api/v1/messages/inboundDevuelve los SMS recibidos en el orden en que llegaron a DroidSender. Es la alternativa al webhook received cuando no tienes un servidor que acepte peticiones: basta con un script que se ejecute cada minuto.
| Parámetro | Para qué sirve |
|---|---|
| since | fecha ISO 8601: los que llegaron a partir de ese momento |
| cursor | el nextCursor de la respuesta anterior; tiene prioridad sobre since |
| limit | de 1 a 100; 50 por defecto |
| from | solo los de un número, en cualquier formato |
| deviceId | solo los que recibió un móvil |
| reference | solo las respuestas a envíos con esta referencia |
{
"messages": [
{
"id": "msg_01H8Z",
"from": "+14155550100",
"message": "SÍ",
"receivedAt": "2026-08-14T10:30:44.000Z",
"conversationId": "conv_9f21",
"deviceId": "dev_oppo_cph2577",
"inReplyTo": {
"id": "msg_01H8X",
"reference": "appointment_8841",
"body": "¿Puedes confirmar tu cita de mañana a las 10:00? Responde SÍ",
"sentAt": "2026-08-14T09:02:11.000Z"
}
}
],
"nextCursor": "MjAyNi0wOC0xNFQxMDozMDo0NS4xMjNafG1zZ18wMUg4Wg",
"hasMore": false
}Leer cada minuto
curl "https://api.droidsender.com/api/v1/messages/inbound?since=2026-08-14T00:00:00Z" \
-H "X-API-Key: DS-live-your-key"import pathlib, requests
# se ejecuta cada minuto (cron); guarda el cursor entre ejecuciones
state = pathlib.Path("cursor.txt")
params = {"cursor": state.read_text()} if state.exists() else {"since": "2026-08-14T00:00:00Z"}
while True:
r = requests.get(
"https://api.droidsender.com/api/v1/messages/inbound",
headers={"X-API-Key": "DS-live-your-key"},
params=params,
).json()
for m in r["messages"]:
print(m["from"], m["message"], (m["inReplyTo"] or {}).get("reference"))
state.write_text(r["nextCursor"])
if not r["hasMore"]:
break
params = {"cursor": r["nextCursor"]}// guarda nextCursor donde prefieras (base de datos, archivo)
let cursor = await loadSavedCursor();
do {
const url = new URL("https://api.droidsender.com/api/v1/messages/inbound");
if (cursor) url.searchParams.set("cursor", cursor);
const r = await fetch(url, { headers: { "X-API-Key": "DS-live-your-key" } }).then((x) => x.json());
for (const m of r.messages) await handleReply(m);
cursor = r.nextCursor;
await saveCursor(cursor);
if (!r.hasMore) break;
} while (true);Un SMS aparece aquí hasta 10 segundos después de llegar. Leerlo no marca la conversación como leída. El historial importado al conectar un móvil no se incluye, igual que en el webhook.