Skip to content
WeZend

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

StatusMeaning
queuedAccepted and waiting for a worker. Quota is already counted at this point.
sendingHanded to a vendor, no response yet.
sentThe vendor accepted it. Not proof it arrived.
deliveredConfirmed by a delivery receipt (SMS/RCS) or engagement and bounce feedback (email).
bouncedEmail only — the receiving server rejected it.
failedGave up. failed_reason says why, in language safe to show a user.
suppressedNever 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.
scheduledWaiting for its scheduled_at time.
cancelledA 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