List your messages and whether they were delivered. Filter by batch, status, period or number.
https://telcomw.com/api/v3/sms/delivery-reportsSend the filters in the URL (query parameters). Your API key goes in the X-API-Key header.
| Parameter | Sent in | Required | Description |
X-API-Key |
header | YES | Your API key, sent as a header. You can also send it as Authorization: Bearer YOUR_API_KEY. |
batch_id |
query | NO | Only the messages of one send. Without it the report covers the last 7 days. |
status |
query | NO | pending, delivered or failed. |
from |
query | NO | The first day, like 2026-11-01. |
to |
query | NO | The last day, like 2026-11-05. The period can be one year at most. |
to_number |
query | NO | A phone number, or the start of one. |
sender_id |
query | NO | Only the messages sent as this sender ID. |
order |
query | NO | desc (newest first, the default) or asc. |
page |
query | NO | The page number, starting at 1. |
per_page |
query | NO | Messages in a page, 1 to 100. The default is 50. |
curl --location --request GET 'https://telcomw.com/api/v3/sms/delivery-reports?batch_id=k3m9x2p7q1ab&status=delivered&page=1&per_page=50' \ --header 'X-API-Key: YOUR_API_KEY'
curl --location --request GET "https://telcomw.com/api/v3/sms/delivery-reports?batch_id=k3m9x2p7q1ab&status=delivered&page=1&per_page=50" ^ --header "X-API-Key: YOUR_API_KEY"
<?php
$headers = [
'X-API-Key: YOUR_API_KEY',
];
$ch = curl_init('https://telcomw.com/api/v3/sms/delivery-reports?batch_id=k3m9x2p7q1ab&status=delivered&page=1&per_page=50');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
print_r(json_decode($response, true));
const axios = require('axios');
axios.request({
method: 'get',
url: 'https://telcomw.com/api/v3/sms/delivery-reports',
params: {
'batch_id': 'k3m9x2p7q1ab',
'status': 'delivered',
'page': '1',
'per_page': '50'
},
headers: {
'X-API-Key': 'YOUR_API_KEY'
}
}).then((res) => console.log(res.data))
.catch((err) => console.error(err.response ? err.response.data : err.message));
import requests
params = {
'batch_id': 'k3m9x2p7q1ab',
'status': 'delivered',
'page': '1',
'per_page': '50'
}
headers = {
'X-API-Key': 'YOUR_API_KEY'
}
response = requests.request('GET', 'https://telcomw.com/api/v3/sms/delivery-reports', params=params, headers=headers)
print(response.json())
The response is JSON.
{
"success": true,
"request_id": "req_5f2c9a1d0e7b4a63",
"data": {
"summary": {
"total": 3,
"pending": 1,
"delivered": 2,
"failed": 0
},
"messages": [
{
"message_id": "ke4wz6fydbtj",
"batch_id": "k3m9x2p7q1ab",
"to": "265999123456",
"sender_id": "WGIT",
"message": "Our sale starts today. Visit us!",
"status": "delivered",
"sent_at": "2026-11-02T08:15:02.000Z",
"delivered_at": "2026-11-02T08:15:09.000Z"
}
],
"pagination": {
"page": 1,
"per_page": 50,
"total": 2,
"pages": 1
},
"period": null
}
}
| Field | Description |
data.summary | How many messages match your filters, by status. The numbers count the filters, not only this page. |
data.messages[].status | pending: not delivered yet. delivered: the phone received it. failed: it could not be delivered. |
data.messages[].sent_at | When the message was sent (UTC). |
data.messages[].delivered_at | When it was delivered (UTC), null until then. |
data.pagination | The page, the page size, the total of messages and the number of pages. |