Message history, receipts and replies
Every send with its full lifecycle, including read receipts, which SMS can never give you. Replies from your customers land in the inbox.
Sent messages
GEThttps://api.mobilesasa.com/api/v1/whatsapp/messages
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
| account_uuid | uuid | No | Filter to one number. |
| status | string | No | One of queued, sent, delivered, read, failed. |
| search | string | No | Match against recipient numbers or message text. |
| page / page_size | int | No | Standard pagination. |
# Paste your token once (it starts with mbs_):
export MOBILESASA_TOKEN="mbs_your_token_here"
curl "https://api.mobilesasa.com/api/v1/whatsapp/messages?status=read&page=1" \
-H "Authorization: Bearer $MOBILESASA_TOKEN"Response
{
"success": true,
"data": {
"messages": [
{
"uuid": "7c31…",
"msisdn": "254712345678",
"body": "Hi Jane, your February statement is ready. Balance: KES 128,400.",
"template_name": "t1234_statement_ready",
"tracking_id": "a0f3…",
"status": "read",
"cost": 2.5,
"source": "api",
"sent_at": "2026-10-10T09:32:12Z",
"delivered_at": "2026-10-10T09:32:15Z",
"read_at": "2026-10-10T09:40:02Z",
"created_at": "2026-10-10T09:32:11Z"
},
{
"uuid": "8d42…",
"msisdn": "254733000002",
"body": "…",
"template_name": "t1234_statement_ready",
"tracking_id": "b1e4…",
"status": "failed",
"error": "(131026) Message undeliverable",
"cost": 2.5,
"refunded_at": "2026-10-10T09:32:20Z",
"source": "api",
"created_at": "2026-10-10T09:32:11Z"
}
],
"total": 412,
"page": 1,
"page_size": 50
}
}Status lifecycle
queued: accepted and charged, awaiting dispatch to Meta.sent: one tick. Accepted by WhatsApp.delivered: two ticks. Reached the recipient's device.read: blue ticks. The recipient opened it.failed: not deliverable (not a WhatsApp user, policy rejection, expired token…).errorcarries Meta's reason andrefunded_atconfirms the charge went back to your wallet.
Statuses update in near-real time as Meta's webhooks arrive. Poll this endpoint or reconcile in batches, whichever suits your system.
user_id on a message
When Meta hides the recipient's phone number behind a WhatsApp username, messages and replies carry a
user_id (a business-scoped user ID) and msisdn may be empty. See usernames.Replies (inbox)
GEThttps://api.mobilesasa.com/api/v1/whatsapp/inbox
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
| account_uuid | uuid | No | Filter to one number. |
| search | string | No | Match against sender numbers or message text. |
| page / page_size | int | No | Standard pagination. |
# Paste your token once (it starts with mbs_):
export MOBILESASA_TOKEN="mbs_your_token_here"
curl "https://api.mobilesasa.com/api/v1/whatsapp/inbox" \
-H "Authorization: Bearer $MOBILESASA_TOKEN"Response
{
"success": true,
"data": {
"messages": [
{
"uuid": "3e9a…",
"account_name": "Mobile Sasa",
"msisdn": "254712345678",
"msg_type": "text",
"body": "Yes, confirm my appointment",
"received_at": "2026-10-10T09:41:30Z"
},
{
"uuid": "4fab…",
"account_name": "Mobile Sasa",
"msisdn": "",
"user_id": "4040…",
"msg_type": "button",
"body": "Yes",
"received_at": "2026-10-10T09:42:01Z"
}
],
"total": 87,
"page": 1,
"page_size": 50
}
}msg_type is text, button (a quick-reply tap; body is the button text), image, document, audio or reaction. On the Mobile Sasa number you see replies to your own messages only. Replying from the API is a template send; a free-form reply window (24 hours after the customer writes) is on the roadmap.