History & status
List sent messages, filter them, and check delivery status.
List messages
Retrieve a paginated history of messages, filtered by status, recipient, sender, date range, or a full-text search on the body.
GET/api/v1/messages
Query params
page
integer
Page number (default 1)
page_size
integer
Results per page (default 20, max 100)
status
string
queued | sent | delivered | failed
phone
string
Filter by recipient phone
sender_id
string
Filter by sender ID UUID
search
string
Full-text search on message body
date_from
ISO 8601
Start of date range (e.g. 2026-05-01T00:00:00Z)
date_to
ISO 8601
End of date range
campaign_id
string
Filter messages sent by a specific campaign ID
curl -X GET "https://timisha-solutions-api.salamu.co.ke/api/v1/messages?status=delivered&phone=%2B254712345678&page_size=50" \
-H "Authorization: Bearer YOUR_API_TOKEN"Get a message
Fetch a single message by its UUID to read its current status and metadata.
GET/api/v1/messages/{uuid}
curl -X GET "https://timisha-solutions-api.salamu.co.ke/api/v1/messages/msg-uuid" \
-H "Authorization: Bearer YOUR_API_TOKEN"200: OK
{
"success": true,
"data": {
"uuid": "msg-uuid",
"to": "+254712345678",
"message": "Your OTP is 483920. Valid for 10 minutes.",
"sender_id": "MYAPP",
"status": "delivered",
"parts": 1,
"created_at": "2026-05-11T09:00:00Z"
}
}Message statuses
Every message moves through these states as it is dispatched and confirmed:
queued, accepted and placed in the send queue.sent, handed off to the carrier or SMSC.delivered, carrier confirmed delivery to the handset.failed, carrier returned a terminal failure (number inactive, wrong NPI, and similar).expired, message TTL elapsed before delivery.
Delivery is asynchronous
A message returns
queued on send and reaches delivered or a terminal state once the carrier reports back. Poll this endpoint or list history filtered by status to track progress.