Sending

Tracking delivery

Every message goes through a lifecycle. Watch it land in the dashboard, query it via API, or subscribe to webhooks.

Lifecycle

StatusMeaning
queuedWe've accepted the message. Worker hasn't picked it up yet.
sendingWorker is actively calling the provider.
sentProvider accepted it. Message is on its way.
deliveredProvider confirmed delivery to the carrier or recipient.
failedProvider rejected it. failureReason tells you why.
bouncedEmail only — recipient address rejected the message.

In the dashboard

Go to Messages. Last 100 sends are listed newest-first with channel, recipient, status pill, source (API or dashboard), and cost. Click any row to see the full event timeline.

Via the API

Get a single message:

curl
curl https://api-raven-cloud.autotribes.app/v1/admin/messages/$MESSAGE_ID \
  -H "Authorization: Bearer eyJ..." \
  -H "X-App-Name: raven-cloud" \
  -H "X-Tenant-Slug: acme-co"

List recent messages:

curl
curl 'https://api-raven-cloud.autotribes.app/v1/admin/messages?limit=100' \
  -H "Authorization: Bearer eyJ..." \
  -H "X-App-Name: raven-cloud" \
  -H "X-Tenant-Slug: acme-co"

Event timeline

Every status change is recorded as a discrete event with the raw provider payload preserved. The single-message endpoint includes the full timeline:

json
{
  "id": "8ad4f7c2-...",
  "channel": "sms",
  "status": "delivered",
  "to": "+254722000000",
  "providerMessageId": "ATXid_a1b2c3d4",
  "costCurrency": "KES",
  "costAmount": 0.8,
  "events": [
    { "eventType": "queued",    "occurredAt": "2026-05-01T10:23:18.114Z" },
    { "eventType": "sending",   "occurredAt": "2026-05-01T10:23:18.142Z" },
    { "eventType": "sent",      "occurredAt": "2026-05-01T10:23:18.302Z" },
    { "eventType": "delivered", "occurredAt": "2026-05-01T10:23:21.882Z" }
  ]
}

Webhooks

SHIPPING SOON

Outbound webhooks are in active development. Today, status changes from the provider are recorded into the event timeline. When webhooks ship, you'll subscribe to message.delivered,message.bounced, etc. and get a signed POST to your endpoint.