Core APIs
Message status, history & resend
Look up a message, search delivery history, resend or cancel a queued message.
Get a single message
curl https://api.wezend.com/v1/messages/msg_01H8... \
-H "X-API-Key: $WEZEND_API_KEY"
{
"message_id": "msg_01H8...",
"status": "delivered",
"channel": "sms",
"to": "+4512345678",
"fallback_used": false,
"sent_at": "2026-07-08T10:00:01.000Z",
"delivered_at": "2026-07-08T10:00:04.000Z",
"cost": 0.045,
"currency": "EUR"
}
What each status means
| Status | Meaning |
|---|---|
queued | Accepted and waiting for a worker. Quota is already counted at this point. |
sending | Handed to a vendor, no response yet. |
sent | The vendor accepted it. Not proof it arrived. |
delivered | Confirmed by a delivery receipt (SMS/RCS) or engagement and bounce feedback (email). |
bounced | Email only — the receiving server rejected it. |
failed | Gave up. failed_reason says why, in language safe to show a user. |
suppressed | Never sent: the recipient is on your suppression list for that channel — or the account has not confirmed its email address yet, in which case failed_reason says so. |
scheduled | Waiting for its scheduled_at time. |
cancelled | A scheduled message you cancelled before it ran. |
Email delivered lags, by design. SMS and RCS get a carrier delivery receipt, so delivered arrives seconds after sent. Email has no equivalent: it counts as delivered from engagement and the absence of a bounce, not from an SMTP handshake. A successful email send therefore sits at sent for a while, and a campaign showing delivered: 0 minutes after sending is normal rather than broken.
failed_reason is written for a human. A transport fault reads as something actionable — "temporarily undeliverable, retry shortly" — rather than exposing internal detail; the underlying error is kept in our logs for diagnosis.
Search history
GET /v1/messages/history supports search (matches recipient, body or vendor message ID), status, channel, page and limit (max 100/page) query parameters.
Resend
POST /v1/messages/:id/resend creates a new message to the same recipient with the same content — it runs through the same balance, suppression and budget checks as a fresh send.
Cancel a scheduled message
DELETE /v1/messages/:id cancels a message that's still queued (i.e. scheduled ahead via scheduled_at and not yet dispatched). Returns 409 if it has already been sent.
One platform. Every customer interaction.
Replace your patchwork of messaging APIs, CDP and automation tools with a single engagement platform built for scale.
No credit card required · EU data residency · 99.99% uptime SLA