SMS events and live stream
Receive signed lifecycle webhooks and resume live dashboard updates safely.
Workspace webhook endpoints can subscribe to sms.received, sms.accepted, sms.sent, sms.delivered, sms.delivery_failed, sms.submission_unknown, sms.opted_out, and sms.opted_in.
Organization-wide endpoints receive every SMS event. Agent-filtered endpoints receive only events for conversations associated with one of their configured agents. SMS events do not require a voice agent or session ID.
Payloads include message text by default. Set contentMode: "metadata_only" on the webhook endpoint to omit it. Webhook requests are signed with the endpoint/workspace Standard Webhooks secret; deduplicate on webhook-id and return 2xx quickly.
Message bodies, consent proof, and raw webhook bodies are excluded from logs, traces, analytics, and error reporting.
Live event stream
GET /v1/sms/stream is a server-sent event stream for dashboard clients. Event data includes message_id, conversation_id, status, and occurred_at. On reconnect, send the last SSE ID in Last-Event-ID; Speko catches up from PostgreSQL before subscribing to live Redis events.
The stream is a UI synchronization channel, not a replacement for signed customer webhooks or message reads. Re-read the message or conversation after each event.