Skip to content

Three endpoints cover reporting: totals, time series and country breakdown. All require the sms.read permission and accept the same period filters.

ParameterDefaultDescription
period7dtoday, yesterday, 7d, 30d, this_month, last_month
from / toCustom range YYYY-MM-DD. Use only when period is omitted; the to day is included
sourceapiapi, broadcasts, all
countryISO code filter: US, GB, …
senderFilter by sender ID
phoneSearch by phone number (substring)
statusdelivered, undelivered, pending, expired

GET  /api/v1/sms/stats  · Permission: sms.read

Terminal window
curl "https://restlink23telecom.com/api/v1/sms/stats?period=30d" \
-H "X-API-Key: $API_KEY"
200 OK
{
"status": true,
"stats": {
"total_sent": 1250,
"sent": 1200,
"delivered": 1150,
"undelivered": 30,
"pending": 15,
"expired": 5,
"not_billed": 50,
"failed": 30,
"click_count": 42,
"unique_click_count": 38,
"action_count": 12,
"sent_rate": 96.00,
"delivery_rate": 95.83,
"total_cost": 10.63,
"avg_cost_per_msg": 0.0085,
"currency": "EUR"
},
"period": {"from": "2026-01-14", "to": "2026-02-13"}
}

How the numbers relate:

Sent = Delivered + Undelivered + Pending + Expired
TotalSent = Sent + NotBilled
FieldDescription
total_sentAll messages attempted
sentAccepted by carrier (total_sent − not_billed)
deliveredDelivered to handset (DELIVRD)
undeliveredFailed: UNDELIV, REJECTD, DELETED, UNKNOWN
pendingStill in transit
expiredDelivery timed out — counted separately from undelivered
not_billedAlways 0 for API traffic; for broadcasts: messages never submitted to carrier
failedAlias of undelivered
click_count / unique_click_countLink clicks (broadcast traffic)
action_countRecorded conversions
sent_rate(sent / total_sent) × 100
delivery_rate(delivered / sent) × 100
total_cost / avg_cost_per_msgCost in account currency

GET  /api/v1/sms/stats/daily  · Permission: sms.read

Day-by-day breakdown for charts, sorted by date ascending.

Terminal window
curl "https://restlink23telecom.com/api/v1/sms/stats/daily?period=7d" \
-H "X-API-Key: $API_KEY"

Extra parameters:

ParameterDescription
granularityauto switches to hourly buckets on a single-day range (dates become 2026-02-13T09:00)
countriesComma-separated ISO codes US,GB,DE — also flips sorting to descending
200 OK (one day shown)
{
"status": true,
"daily_stats": [
{
"date": "2026-02-13",
"sent": 195,
"delivered": 188,
"undelivered": 4,
"pending": 1,
"expired": 2,
"not_billed": 3,
"failed": 4,
"click_count": 12,
"cost": 1.66,
"currency": "EUR"
}
],
"period": {"from": "2026-02-07", "to": "2026-02-13"}
}

GET  /api/v1/sms/stats/by-country  · Permission: sms.read

Grouped by destination country, sorted by total_sent descending.

Terminal window
curl "https://restlink23telecom.com/api/v1/sms/stats/by-country?period=30d" \
-H "X-API-Key: $API_KEY"
200 OK (one country shown)
{
"status": true,
"countries": [
{
"country": "United States",
"country_code": "US",
"country_flag": "🇺🇸",
"total_sent": 520,
"sent": 500,
"delivered": 485,
"undelivered": 10,
"pending": 3,
"expired": 2,
"not_billed": 20,
"failed": 10,
"click_count": 25,
"delivery_rate": 97.00,
"cost": 4.25,
"currency": "EUR"
}
]
}