Key Takeaways
- TypeScript parse DLR maps message.status from GET /messages/{id} or webhooks — not fetch() success as delivered.
- Use fetch/undici over HTTPS/JSON. Not an npm “Complete SMS SDK” product.
- Dedupe webhook event ids. Confirm enums in Developer Center.
- Failed DLR does not refund operator airtime.
- Free is a lifetime SMS cap on the platform.
TypeScript parse DLR on an android sms gateway api is status mapping after the SIM fired. Delivery reports · Send OTP. Docs: Developer Center.
REST only — not a Complete TypeScript SDK. Devices and send volume.
Pending → Delivered (when the carrier says so)
Accepted is not delivered
{
"campaignId": 17,
"accepted": 1,
"scheduledAt": null,
"messages": [
{
"id": 41822,
"number": "+14155552671",
"text": "Your verification code is 481920",
"type": "sms",
"status": "Pending",
"campaignId": 17,
"deviceId": 3
}
]
}If Node marks the user notified on HTTP 200, you will debug OTPs that never left a Doze-killed phone.
How to parse DLR in TypeScript
- Persist
messages[].id. - GET or webhook.
- Map
status. - Do not treat DLR as MFA success.
curl -X GET "https://app.sms-gateway.app/api/v1/messages/41822" \
-H "Authorization: Bearer $SMS_GATEWAY_API_KEY"Status map
| You see | Means | Your row |
|---|---|---|
| Pending | Queued / not yet radio | sent_pending |
| Delivered | Carrier DLR when provided | delivered |
| Failed | Radio or SMSC gave up | failed — inspect; no blind resend |
fetch sketch
// Sketch only — confirm JSON in Developer Center
export async function getDlr(apiKey: string, id: number) {
const res = await fetch(`https://app.sms-gateway.app/api/v1/messages/${id}`, {
headers: { Authorization: `Bearer ${apiKey}` },
});
if (!res.ok) throw new Error(`dlr_http_${res.status}`);
return res.json() as Promise<{ status?: string; number?: string }>;
}Prefer webhooks
{
"id": "evt_01K2F8QW3N4RXB7M",
"type": "message.delivered",
"createdAt": "2026-08-12T14:04:09Z",
"apiVersion": "2026-08-12",
"data": {
"message": {
"id": 41823,
"number": "+14155552671",
"text": "Your verification code is 481920",
"status": "Delivered",
"campaignId": 17,
"deviceId": 3,
"metadata": { "orderId": "1234" },
"sentAt": "2026-08-12T14:04:02Z",
"deliveredAt": "2026-08-12T14:04:09Z"
}
}
}Next steps
Staff SMS → GET id → assert status enum matches docs. Downloads. Free: 300 SMS lifetime.
Related product pages
Jump to the live product docs for this topic—not another long-form article.
- SMS delivery reports (DLR)Delivery status tracking
- SMS API documentationLive endpoint reference
- device and SMS volume pricingPlans and allowances
- Android SMS gateway product guideDefinition, product, and how to buy





