GET /v1/messages/{id}
Read one message with its delivery timeline.
Scope: messages:read
curl https://api.msgpanda.com/v1/messages/ea62acf4-2973-4fec-884a-ddab50214a48 \
-H "Authorization: Bearer $API_KEY"
{
"id": "ea62acf4-2973-4fec-884a-ddab50214a48",
"to": "919811100010",
"category": "utility",
"kind": "template",
"status": "sent",
"meta_msg_id": "wamid.HBgM…",
"error": null,
"created_at": "2026-11-04T21:16:13+05:30",
"updated_at": "2026-11-04T21:16:14+05:30",
"events": [
{ "kind": "sent", "at": "2026-11-04T21:16:14+05:30", "detail": { "meta_msg_id": "wamid.HBgM…" } }
]
}
Fields
| Field | Notes |
|---|---|
status | Current state — see the table on Send a message |
meta_msg_id | Meta's wamid; null until Meta accepts the message |
error | Reason for a failed status, otherwise null |
events | Append-only timeline: queued, sent, delivered, read, failed |
Listing messages
GET /v1/messages
curl "https://api.msgpanda.com/v1/messages?status=failed&limit=50" \
-H "Authorization: Bearer $API_KEY"
| Query | Default | Notes |
|---|---|---|
status | all | queued, sending, sent, delivered, read, failed |
limit | 200 | Max 500 |
Returns { "messages": [...] }, newest first, without the events array — fetch a single message for the
timeline.
Polling
There is no outbound webhook for delivery events yet. Poll GET /v1/messages/{id} every few seconds
after sending, with backoff: most messages move to sent within a second and to delivered within
seconds. Stop polling once the status is terminal (delivered, read, failed).