Outreach streams

Follow an outreach stream's progress from your own systems, and get people into one by sending them as leads.

An outreach stream contacts a list of people for your firm, by WhatsApp, SMS or email, with a message written for each person (or one fixed message), and has the conversation with whoever replies. Streams are set up in the dashboard under Outreach. This guide covers following a stream's progress from your own systems.

You need a server-only application (see Access tokens). Outreach streams must be switched on for your organisation. If they aren't, every stream answers 404.

Get a stream's progress#

Find the stream's id in the dashboard (it's in the stream's address), then:

sh
curl https://subcontext.com/api/v1/outreach/streams/0199a3c2-8900-7ebb-9b3c-b02132435465 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
json
{
  "data": {
    "id": "0199a3c2-8900-7ebb-9b3c-b02132435465",
    "name": "Mortgage renewals, October",
    "status": "active",
    "goal": "bookings",
    "channels": ["whatsapp", "email"],
    "all_channels": false,
    "follow_up_after_days": 3,
    "auto_send": true,
    "pace_per_hour": 40,
    "message_mode": "drafted",
    "awaiting_approval_count": 0,
    "rows_count": 420,
    "analysed_count": 418,
    "skipped_count": 12,
    "sent_count": 396,
    "errored_count": 2,
    "outcomes": { "replied": 88, "booked": 31, "applications": 9, "bound": 4 },
    "total_cost_pence": 1454,
    "cost_ceiling_pence": 3950,
    "budget_exceeded": false,
    "created_at": "2026-10-01T09:00:00+01:00"
  }
}

What the numbers mean:

Field What it counts
rows_count People in the stream.
analysed_count People whose message has been prepared.
skipped_count People left out because there's no way to reach them on the stream's channels, or no consent to.
sent_count People messaged.
errored_count Messages that couldn't be prepared or sent.
awaiting_approval_count Messages waiting for someone at your firm to approve them (when auto_send is false).
outcomes People who replied, booked an appointment, started an application, and bought (bound).

The stream's settings:

  • status: active, closed (no new people; those in it carry on) or cancelled (stopped for good).
  • goal: what the stream is for (bookings, sales, engagement, other).
  • channels: in order of preference. Each person is messaged on the first one that reaches them, or on all of them when all_channels is true.
  • follow_up_after_days: a follow-up to people who haven't replied (0 for none).
  • pace_per_hour: the most messages sent an hour.
  • total_cost_pence and cost_ceiling_pence: what the stream's AI work has cost so far, and its limit, in whole pence. They're metered in US dollars, so they're converted at the day's exchange rate and rounded to the nearest penny. When the limit is reached, budget_exceeded is true and the stream stops preparing messages.

A stream's numbers change as it runs. Polling every few minutes is enough.

Getting people into a stream#

There's no request that adds people to a stream directly. People reach a stream as leads, where their consent to be contacted is recorded with them:

  1. Send each person as a lead to one of your firm's campaigns, with the consent they gave.
  2. A workflow on the campaign (set up in the dashboard, with the action Add to an outreach stream) puts them in the stream.

Then follow what happens to each person with the lead's progress and events, and the stream as a whole with the request above.

Stuck, or something missing?

Get in touch and a person on the team will help.

Contact us