Skip to content

Message streams

Every email sends on a message stream. Streams come in two types:

Type For Unsubscribes
transactional One-to-one mail: receipts, resets, notifications Not applied: always delivers
broadcast One-to-many marketing Applied: unsubscribed recipients are blocked

Teams get a default stream of each type automatically. Sends without a stream_id use the default transactional stream; broadcasts ride a broadcast stream, so unsubscribed contacts are skipped without any work on your side.

The type is the point: unsubscribes only block broadcast-stream mail: someone who opted out of your newsletter still gets their password reset. Bounce, complaint, and manual suppressions block every stream.

Create additional streams to separate traffic classes (and report on them independently):

Terminal window
curl https://api.sendsignal.dev/streams \
-H "Authorization: Bearer ss_..." -H "Content-Type: application/json" \
-d '{"name": "Digest", "stream_type": "broadcast", "description": "Weekly digest"}'
  • GET /streams / GET /streams/{id}: list and inspect (type, default flag, archived state).
  • PATCH /streams/{id}: rename, change description, or assign a dedicated IP pool (ip_pool_id; empty string clears it).
  • POST /streams/{id}/archive and /unarchive: retire a stream without deleting history.

Send on a specific stream by passing its id as stream_id on POST /emails, and slice reporting per stream with GET /emails?stream_id=… and GET /stats/emails?stream_id=….