Outreach streams

The 35 MCP tools in Outreach streams, granted with the outreach scope under Customer CRM.

To let an assistant use these tools, grant Customer CRM on the consent screen, or just Outreach streams under its Fine-tune. The scope is outreach. Read tools work with Read only or Read & write access; write tools only with Read & write.

Your assistant doesn't see these tools straight away. It finds them with search_tools or describe_tools, and runs one with use_tool, passing its name and arguments. Most assistants do this for you: just ask for what you want.

What your assistant is told about this group

Messages to your EXISTING customers by SMS, WhatsApp and email. A stream has a brief, an agent that handles replies, and a message (written by AI for each person, or fixed). People join it from CRM workflows, the leads list or add_outreach_people. Drafts wait for approval unless the stream sends automatically. approve_outreach_drafts, release_outreach_draft and send_outreach_follow_up reach REAL CUSTOMERS: show the user the drafts and get their go-ahead first. Spreadsheets are uploaded on the stream's page. A sequence sends later steps (set_outreach_steps) until the person engages; stop_outreach_person stops them for one person; preview_outreach_step shows what the AI might write for a step not yet due. A newsletter sends its message to its members (list_outreach_members) on a schedule; send_outreach_issue_now and skip_outreach_issue change what goes when. A survey asks one question and records each answer. A stream lives on: cancel_outreach_pending stops what's in progress without ending it, close_outreach_stream stops new people joining, and archive_outreach_stream takes a closed stream off the list. Advisers can also run an IRESS protection quote as themselves (request_iress_quote) and follow the client up with Nurture with AI (start_nurture_from_iress_quote).

The descriptions below are the ones your assistant reads, so they're written for it. When a connection covers more than one organisation, the assistant passes org (the organisation's slug, from list_orgs) to say which one.

list_outreach_streams

Read List outreach streams

The org's outreach streams (outbound SMS / WhatsApp / email to existing customers), newest first. status narrows to active or closed (canceled is only on older streams). Archived streams (archived_at set) are left out unless include_archived is true.

Arguments

FieldTypeDescription
status string One of: "active", "canceled", "closed"
include_archived boolean
limit integer
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

get_outreach_stream

Read Get an outreach stream

One stream: its settings and message, pipeline counters (analysed, skipped, sent, errors), the outcome funnel in distinct people (replied, booked, applications, bound) and how many drafts are waiting for approval. in_progress is what cancel_outreach_pending would stop. context_blocks lists what a fixed message can use as {{ blocks.<handle>... }}: each attached block's handle, whether it's stale, and the paths into its latest data with a sample value.

Arguments

FieldTypeDescription
id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

list_outreach_people

Read List people on an outreach stream

The people on a stream, one entry per person with a row per channel (status, draft, errors, reply/booking flags), 50 per page. row_status filters on any channel row ("ready" = drafts waiting for approval, "errored" = analysis or send failures); query searches name, contact details, drafts and data; sort is line, customer or status.

Arguments

FieldTypeDescription
stream_id required string
row_status string One of: "pending_analysis", "analyzing", "ready", "analysis_failed", "skipped", "excluded", "pending_send", "sending", "sent", "send_failed", "canceled", "scheduled", "errored"
source string One of: "upload", "typed", "workflow", "leads", "widget"
query string
sort string One of: "line", "customer", "status"
dir string One of: "asc", "desc"
page integer
issue_number integer A newsletter: only that issue's rows (0: people turned away as they joined). Omit for every row.
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

get_outreach_person

Read Get one person on an outreach stream

Every channel row for the person a row belongs to: drafts, statuses, errors and the data their drafts were written from.

Arguments

FieldTypeDescription
stream_id required string
row_id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

create_outreach_stream

Write Create an outreach stream

Creates an outreach stream (empty: people join afterwards). Next, set_outreach_message sets what people receive; until then the AI drafts a message per person from the brief.

Arguments

FieldTypeDescription
kind string The stream's shape. mailshot: one message (fixed or AI) to everyone, with no link, opener, IRESS quotes or follow-up. conversation (default): an AI opener the agent follows through, with an optional link, opener, quotes and one follow-up nudge. sequence: the message then later steps (set_outreach_steps), each a while after the one before, stopping when the person engages (stop_on); no follow_up_after_days; people join from lists, the leads list or workflows (enrol_outreach); marketing. reminder: messages placed around a date each person has (a renewal): step 1 at offset_days, later steps at theirs (set_outreach_steps), each sent at send_at_local_time; people join from a list (date_column) or workflows and the leads list (date_field). Service (default) or first-party marketing; it stops only on an opt-out unless stop_on says more. newsletter: the message (fixed with context blocks, or AI) to every member on a schedule, each run an issue; people join from lists, the leads list or workflows and stay until they unsubscribe or are removed (nothing else stops it; no follow-up or opener); marketing. survey: one question (survey) with at most one reminder step (set_outreach_steps), which stops when they reply; the agent records the answer; no link or opener; service (default) or first-party marketing. reminder, newsletter and survey aren't available to most organisations yet and are refused; offer conversation, sequence or mailshot. One of: "conversation", "sequence", "mailshot", "reminder", "newsletter", "survey"
date_column string Reminder only: the column of an uploaded list that holds each person's date (e.g. "Renewal date"; ISO, UK day-first or "12 March 2027"). "" clears it.
date_field string Reminder only: the key of a lead field holding a date (list_crm_fields), read for people a workflow or the leads list enrols. "" clears it.
offset_days integer Reminder only: where its first message sits around each person's date, in days: -30 is thirty days before, 0 the day itself, 1 the day after (a year either side at most; default -7).
send_at_local_time string Reminder and newsletter: the time of day its messages (or issues) send, "HH:MM" in the org's time zone (default "10:00").
schedule object Newsletter only: when its issues go, at send_at_local_time in the org's time zone. {cadence: "weekly", weekday: "tuesday"}, {cadence: "fortnightly", weekday: "tuesday"}, {cadence: "monthly", day: 1} (1 to 31, a short month's last day for a day it hasn't, or "last"), or {cadence: "monthly", week: "first", weekday: "tuesday"} (first, second, third, fourth or last). starts_on ("YYYY-MM-DD"): no issue before it, and the week a fortnightly one counts from.
schedule.cadence string One of: "weekly", "fortnightly", "monthly"
schedule.weekday string One of: "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"
schedule.day integer or string
schedule.week string One of: "first", "second", "third", "fourth", "last"
schedule.starts_on string
skip_if_unchanged boolean Newsletter only: skip an issue (it's recorded as skipped) when every context block its message uses is unchanged since the last issue went, so the same articles aren't sent twice. Default true.
survey object Survey only: its question. question_key: the lead field each answer is kept in (list_crm_fields; created when the org hasn't one, e.g. recommend_score). question: the question as the org asks it. answer_type: nps (0 to 10), rating (1 to 5), yes_no or text. follow_up_question (optional, not for text): asked after a low score (6 or under, 1 or 2, a no), its answer kept as <question_key>_comment. The agent asks, confirms and records each answer as a fact and a "Survey response" outcome.
survey.question_key string
survey.question string
survey.answer_type string One of: "nps", "rating", "yes_no", "text"
survey.follow_up_question string
reenter_after_finishing boolean Sequence only: when a workflow enrols someone whose run has finished (every step sent, or stopped), start them on it again from step 1. Default false: once per person.
stop_on array of string Sequence and reminder: what stops a person's later steps. reply, link (they opened their link or chatted on its page), quote_or_booking (they started a quote or booked from it). An opt-out always stops them. Default: all three; a reminder's, none.
purpose string What the messages are for, checked against each person's consent as they join, while drafts wait and at send. service: about their enquiry, quote or policy (no selling; any kind may be service, but not a stream whose link opens a quote form or that gets IRESS quotes; a reminder's and a survey's default). first_party_marketing (default): the org's own products. third_party_marketing: another company's offers, only to people who agreed to them, and only where the org's consent policy allows it. One of: "service", "first_party_marketing", "third_party_marketing"
name required string
brief required string What the stream is for, in the org's words: the AI drafts from it.
goal required string One of: "engagement", "bookings", "sales", "other"
channels required array of string
all_channels boolean Message each person on every listed channel, not just the first that reaches them.
agent_id required string The agent that handles replies; it needs an enabled deployment on every channel.
auto_send boolean false (default) holds every draft for approval.
pace_per_hour integer
follow_up_after_days integer 0 = no follow-up nudge.
follow_up_quote_original boolean
whatsapp_template_id string For WhatsApp: the approved template (an id from list_whatsapp_templates) the first message goes out on. Omit to use the org's "Outreach first message" template.
cta_url string Where each person's link goes: any page carrying the org's quote form or chat (its mini-site, or its own website with the embeds). Each person gets their own short link with a token added; {{cta_link}} places it in a fixed message, drafted ones include it. "" removes the link.
custom_opener boolean When someone opens their link, the chat writes them a greeting from their context and opener_brief. false: the page's usual greeting.
opener_brief string What the custom opener should do, e.g. "welcome them back and connect the product to the cover they hold". Needed when custom_opener is on.
iress_quotes boolean Get each person a fresh IRESS whole-of-market quote before drafting, and write a check-in giving them the new price (needs IRESS market quoting and drafted messages). Nothing else is sent to them about it.
quote_assumptions object What a quote assumes where a person's record doesn't say (the message says so). Defaults: age 40, Office Manager, non-smoker, male when the name doesn't tell, £250,000 cover over 20 years.
quote_assumptions.age integer
quote_assumptions.occupation string An occupation on the insurers' list
quote_assumptions.smoker boolean
quote_assumptions.sex string One of: "male", "female"
quote_assumptions.cover_amount integer Pounds
quote_assumptions.term_years integer
sender_user_id string Write the messages as this team member (a user id of an active member) instead of the AI agent: drafted in their voice, sent under their name, each held for approval (auto_send must be off). "" puts the agent back.
reply_to_email string Send replies straight to this email inbox instead of the agent (the AI never sees them). Needs an email-only stream with no follow-up, and not a conversation (its replies always go to the agent). "" sends replies to the agent again.
from_name string The name its emails come from (e.g. the organisation's), in place of the agent's or the team member's it's written as. The address doesn't change. "" uses that default again.
reply_email_template string The email design everything sent once the person has replied wears (the agent's answers and the team's from the inbox): "builtin:<key>" (e.g. "builtin:plain" or "builtin:gmail", so replies read like a normal email), "custom:<id>" (list_email_templates) or "" for the same design as the outreach emails. Email streams whose replies come to the agent only (not with reply_to_email).
context_block_ids array of string Context blocks the drafts may draw on (list_context_blocks), in order; a fetched block is read at its latest. Replaces the list; omit to leave it.
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

update_outreach_stream

Write Update an outreach stream

Changes a stream's settings: name, brief, goal, channels, reply agent, send gate and follow-up. Every field is required, as on the stream's settings form: read the stream first and send the current values for anything unchanged. A stream's kind and purpose are fixed when it's created and can't be changed here: for a different one, create a new stream. Its kind decides what applies: a mailshot has no link, opener, quotes or follow-up (send cta_url "", custom_opener false and follow_up_after_days 0), and a sequence has follow_up_after_days 0. Switching auto_send on means future drafts go to REAL CUSTOMERS without review: confirm with the user.

Arguments

FieldTypeDescription
reenter_after_finishing boolean Sequence only (see create_outreach_stream). Omit to leave it.
date_column string Reminder only: the column of an uploaded list that holds each person's date (e.g. "Renewal date"; ISO, UK day-first or "12 March 2027"). "" clears it; omit to leave it.
date_field string Reminder only: the key of a lead field holding a date (list_crm_fields), read for people a workflow or the leads list enrols. "" clears it; omit to leave it.
offset_days integer Reminder only: where its first message sits around each person's date, in days: -30 is thirty days before, 0 the day itself, 1 the day after (a year either side at most; omit to leave it).
send_at_local_time string Reminder and newsletter: the time of day its messages (or issues) send, "HH:MM" in the org's time zone (omit to leave it).
schedule object Newsletter only: when its issues go, at send_at_local_time in the org's time zone. {cadence: "weekly", weekday: "tuesday"}, {cadence: "fortnightly", weekday: "tuesday"}, {cadence: "monthly", day: 1} (1 to 31, a short month's last day for a day it hasn't, or "last"), or {cadence: "monthly", week: "first", weekday: "tuesday"} (first, second, third, fourth or last). starts_on ("YYYY-MM-DD"): no issue before it, and the week a fortnightly one counts from.
schedule.cadence string One of: "weekly", "fortnightly", "monthly"
schedule.weekday string One of: "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"
schedule.day integer or string
schedule.week string One of: "first", "second", "third", "fourth", "last"
schedule.starts_on string
skip_if_unchanged boolean Newsletter only: skip an issue (it's recorded as skipped) when every context block its message uses is unchanged since the last issue went, so the same articles aren't sent twice. Default true.
survey object Survey only: its question. question_key: the lead field each answer is kept in (list_crm_fields; created when the org hasn't one, e.g. recommend_score). question: the question as the org asks it. answer_type: nps (0 to 10), rating (1 to 5), yes_no or text. follow_up_question (optional, not for text): asked after a low score (6 or under, 1 or 2, a no), its answer kept as <question_key>_comment. The agent asks, confirms and records each answer as a fact and a "Survey response" outcome.
survey.question_key string
survey.question string
survey.answer_type string One of: "nps", "rating", "yes_no", "text"
survey.follow_up_question string
stop_on array of string Sequence and reminder: what stops a person's later steps (see create_outreach_stream). Replaces the list; omit to leave it.
id required string
name required string
brief required string What the stream is for, in the org's words: the AI drafts from it.
goal required string One of: "engagement", "bookings", "sales", "other"
channels required array of string
all_channels boolean Message each person on every listed channel, not just the first that reaches them.
agent_id required string The agent that handles replies; it needs an enabled deployment on every channel.
auto_send boolean false (default) holds every draft for approval.
pace_per_hour integer
follow_up_after_days integer 0 = no follow-up nudge.
follow_up_quote_original boolean
whatsapp_template_id string For WhatsApp: the approved template (an id from list_whatsapp_templates) the first message goes out on. Omit to use the org's "Outreach first message" template.
cta_url string Where each person's link goes: any page carrying the org's quote form or chat (its mini-site, or its own website with the embeds). Each person gets their own short link with a token added; {{cta_link}} places it in a fixed message, drafted ones include it. "" removes the link.
custom_opener boolean When someone opens their link, the chat writes them a greeting from their context and opener_brief. false: the page's usual greeting.
opener_brief string What the custom opener should do, e.g. "welcome them back and connect the product to the cover they hold". Needed when custom_opener is on.
iress_quotes boolean Get each person a fresh IRESS whole-of-market quote before drafting, and write a check-in giving them the new price (needs IRESS market quoting and drafted messages). Nothing else is sent to them about it.
quote_assumptions object What a quote assumes where a person's record doesn't say (the message says so). Defaults: age 40, Office Manager, non-smoker, male when the name doesn't tell, £250,000 cover over 20 years.
quote_assumptions.age integer
quote_assumptions.occupation string An occupation on the insurers' list
quote_assumptions.smoker boolean
quote_assumptions.sex string One of: "male", "female"
quote_assumptions.cover_amount integer Pounds
quote_assumptions.term_years integer
sender_user_id string Write the messages as this team member (a user id of an active member) instead of the AI agent: drafted in their voice, sent under their name, each held for approval (auto_send must be off). "" puts the agent back.
reply_to_email string Send replies straight to this email inbox instead of the agent (the AI never sees them). Needs an email-only stream with no follow-up, and not a conversation (its replies always go to the agent). "" sends replies to the agent again.
from_name string The name its emails come from (e.g. the organisation's), in place of the agent's or the team member's it's written as. The address doesn't change. "" uses that default again. Omit to leave it.
reply_email_template string The email design everything sent once the person has replied wears (the agent's answers and the team's from the inbox): "builtin:<key>" (e.g. "builtin:plain" or "builtin:gmail", so replies read like a normal email), "custom:<id>" (list_email_templates) or "" for the same design as the outreach emails. Email streams whose replies come to the agent only (not with reply_to_email). Omit to leave it (it is dropped when email is, or once replies go to reply_to_email).
context_block_ids array of string Context blocks the drafts may draw on (list_context_blocks), in order; a fetched block is read at its latest. Replaces the list; omit to leave it.
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

set_outreach_message

Write Set an outreach stream's message

What people on the stream receive (on a sequence, reminder or survey: step 1, its first message; the later steps are set_outreach_steps): message_mode "drafted" (the AI writes one per person from the brief) or "fixed" (message_body with merge fields, and message_subject for email). message_format "text" (simple formatting: **bold**, [link](url), ## headings, lists; no HTML tags) or, on an email-only stream, "html" (the email body's own markup, inside the email design; values are filled in escaped). email_template is "builtin:<key>", "custom:<id>" or "" for the agent's own. redraft_waiting rewrites drafts still waiting for approval (hand-edited drafts are kept). A fixed message can use the stream's context blocks by handle: {{ blocks.<handle>.text }} for a block's text, and a fetched block's data by path, e.g. {{ blocks.news.items[0].title }} or {% for item in blocks.news.items limit: 3 %}{{ item.title }} {% endfor %} (get_outreach_stream lists the handles and paths). Only attached blocks; an unknown path, a missing or empty value PRINTED (guard it with {% if ... %} or | default:), or a block that's missed two refreshes stops that person's message. Values are filled in again just before sending.

Arguments

FieldTypeDescription
id required string
message_mode required string One of: "drafted", "fixed"
message_body string
message_subject string
message_format string One of: "text", "html"
email_template string
redraft_waiting boolean
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

set_outreach_steps

Write Set an outreach sequence's steps

A sequence, reminder or survey stream's later messages, step 2 and on, in order: replaces the steps it has (step 1 is the stream's own message, set_outreach_message). Each step is sent delay_minutes (60 to 129600) after the step before it went (or, with send_at_local_time on a whole-days delay, that many days after the day it went at that time, in the org's time zone), unless the person engaged in a way the stream stops on, opted out or was stopped. A reminder's steps take offset_days instead (from each person's date: -7 a week before, 0 on the day, 1 the day after), kept in date order and each after step 1's; {{anchor_date}} and {{days_until}} are merge fields. content_mode "fixed": message_body (merge fields and {{ blocks.<handle> }} as in set_outreach_message, written as text) and message_subject for email. "drafted": the AI writes it from brief, added to the stream's brief. At most 10 messages including step 1 (a survey: its question and one reminder, which stops when they reply). [] removes every later step. People waiting on a step get it on the new delay and time. Quiet hours still hold any send until they end. Later steps go through the stream's approval gate like the first: on an auto_send stream they go to REAL CUSTOMERS without review.

Arguments

FieldTypeDescription
id required string
steps required array of object
steps[].delay_minutes integer Sequence: after the step before it was sent, e.g. 4320 for 3 days.
steps[].send_at_local_time string Sequence, optional: "HH:MM" in the org's time zone, for a delay of whole days (a multiple of 1440). 4320 with "09:00" goes 3 days after the day the step before went, at 9am. Leave out for the exact delay.
steps[].offset_days integer Reminder: days from each person's date, e.g. -7, 0 or 1.
steps[].content_mode required string One of: "fixed", "drafted"
steps[].message_subject string
steps[].message_body string
steps[].brief string For a drafted step: what this message does.
steps[].thread string Email: "reply" (default) sends it in the thread the person's previous step started, "Re:" its subject unless the step has its own; "new" starts a thread (and a fixed one needs message_subject). Texts and WhatsApp always carry on the same conversation. One of: "reply", "new"
steps[].quote_previous boolean With thread "reply": quote the previous step's email below, as a mail client would.
steps[].whatsapp_template_id string Needed on a stream that sends WhatsApp: the approved template (list_whatsapp_templates) the step goes out on when the person's 24-hour window is closed. Inside it, the same words go as a message.
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

set_outreach_landing

Write Set where an outreach stream's quote link lands

Gives each person on the stream their own quote link ({{quote_link}} in a fixed message; drafted messages include it themselves). journey_id is the journey whose quote form opens; blank turns the link off. prefill maps spreadsheet column headers to the journey's question keys, so matching answers are filled in. The link only greets them from their row: it never signs them in or links the chat to their record.

Arguments

FieldTypeDescription
id required string
journey_id string
prefill object
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

set_outreach_columns

Write Set how an outreach stream may use each column

For every AI-written message to people on the stream (drafted intros, and the chat greeting when they open their quote link): columns maps a column header to { use, note }. use "mention" (fine to say, the default), "background" (shapes the message but is never said, e.g. premium or cover amount) or "never" (not given to the AI at all, e.g. health notes). note says what the column means. Replaces the stream's rules as a whole.

Arguments

FieldTypeDescription
id required string
columns required object
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

add_outreach_people

Write Add people to an outreach stream

Adds people by hand (each needs a name, email or phone; notes feed their draft). On a service stream, or a first-party marketing stream where the org accepts a soft opt-in, consent_attested must be true: the user confirms these are the org's EXISTING customers, which is what makes contacting them lawful, and it is recorded against them. Ask the user to confirm that explicitly. Otherwise (third-party marketing, or no soft opt-ins) nothing can be attested: only people with consent on record are messaged, the rest are skipped. If the stream auto-sends, their drafts go out without review. Spreadsheet uploads happen on the stream page.

Arguments

FieldTypeDescription
stream_id required string
consent_attested boolean
people required array of object
people[].name string
people[].email string
people[].phone string
people[].notes string
people[].date string On a reminder stream: the date its messages are placed around, e.g. 2027-03-12.
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

approve_outreach_drafts

Write Approve outreach drafts

SENDS TO REAL CUSTOMERS. Approves the held drafts of the given people (line_number from list_outreach_people; every channel row of each) and sends them now. Show the user the drafts and get their go-ahead first. Already-handled lines are skipped, never sent twice.

Arguments

FieldTypeDescription
stream_id required string
line_numbers required array of integer
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

release_outreach_draft

Write Approve and send one outreach draft

SENDS TO A REAL CUSTOMER. Approves one held draft (one channel row) and sends it now. Show the user the draft and get their go-ahead first.

Arguments

FieldTypeDescription
stream_id required string
row_id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

edit_outreach_draft

Write Edit an outreach draft

Rewrites one held draft (a row in status ready) before it is approved. draft_subject and email_template apply to email rows; a step sent as a reply keeps its thread's "Re:" subject, so needs none. Hand-edited drafts are never rewritten by the AI.

Arguments

FieldTypeDescription
stream_id required string
row_id required string
draft_message required string
draft_subject string
email_template string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

redraft_outreach_draft

Write Redraft an outreach draft

Has the AI rewrite a person's held drafts (rows in status ready) on an AI-drafted stream, the way the stream drafts everyone, with optional instructions for this person (e.g. "mention their renewal is next month, keep it under 60 words"). row_id is any of the person's rows: every one of their drafts still waiting, on every channel, is rewritten; their sent, approved or failed rows are left alone, as is a draft already redrafted 10 times (listed in capped_row_ids). The stream's brief still governs; the instructions are added for this person only and can't override a channel's length limit or the drafting rules. They're kept on each row, so later redrafts use them too: omit instructions to keep the ones stored on row_id, pass "" to clear them. The new drafts are written in the background (status pending_analysis until each is ready).

Arguments

FieldTypeDescription
stream_id required string
row_id required string
instructions string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

retry_outreach_analysis

Write Retry a failed outreach draft

Drafts a person again whose outreach draft failed to be written (rows in status analysis_failed, with the reason in error_message): a model timeout, a context block that has since refreshed, a message since fixed. row_id is any of the person's rows: every one of their failed rows, on every channel, goes back through drafting as it stands (status pending_analysis until each is ready), then the stream's approval or auto-send like any new draft. If the person's details are what's wrong, correct them with correct_outreach_person_data instead, which re-drafts the row too.

Arguments

FieldTypeDescription
stream_id required string
row_id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

correct_outreach_person_data

Write Correct a person's outreach data

Fixes the data a person's drafts are written from (e.g. a mistyped phone number on a skipped row): data maps the row's existing column names to new values. The person is re-analysed and redrafted, then goes through the stream's approval gate again. Rows already sent keep their original data.

Arguments

FieldTypeDescription
stream_id required string
row_id required string
data required object
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

exclude_outreach_row

Write Exclude an outreach row

Parks one channel row so it is never sent, at any stage before it sends (restore_outreach_row undoes it). remove_outreach_people removes whole people.

Arguments

FieldTypeDescription
stream_id required string
row_id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

remove_outreach_people

Write Remove people from an outreach stream

Takes the given people (line_number from list_outreach_people; every channel row of each) off a stream's list before anything is sent to them, at any stage from waiting for a draft to queued to send. Anything already sending or sent is left alone. restore_outreach_row puts a row back.

Arguments

FieldTypeDescription
stream_id required string
line_numbers required array of integer
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

restore_outreach_row

Write Restore an excluded outreach row

Brings an excluded channel row back into the stream.

Arguments

FieldTypeDescription
stream_id required string
row_id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

send_outreach_follow_up

Write Send an outreach follow-up now

SENDS TO A REAL CUSTOMER. Fires a sent row's one follow-up nudge now instead of on schedule. Refused in quiet hours, after a reply, or if it already had its follow-up. Confirm with the user first.

Arguments

FieldTypeDescription
stream_id required string
row_id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

stop_outreach_person

Write Stop an outreach sequence for one person

No later step of a sequence, reminder or survey goes to this person (row_id: any of their rows, from list_outreach_people or get_outreach_person). A step already written for them and not yet sent is taken off the list. Their replies still reach the agent.

Arguments

FieldTypeDescription
stream_id required string
row_id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

preview_outreach_step

Write Preview an AI step not yet written for one person

The AI writes a preview of a later step of a sequence, reminder or survey for one person (row_id: any of their rows, from list_outreach_people or get_outreach_person), before the step is due. Nothing is saved or sent: when the step comes due the AI writes it again. Only an AI-written step still to come for them; it costs one draft against the stream's cost ceiling. channel: one their sequence goes on (default: the first).

Arguments

FieldTypeDescription
stream_id required string
row_id required string
position required integer The step's number: 1 is the first message
channel string One of: "whatsapp", "sms", "email"
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

list_outreach_members

Read List a newsletter's members

The people on a newsletter stream's list, newest first, 50 per page: status "subscribed" (default), "left" (with why: unsubscribed, no_consent, blocked or removed) or "all"; query searches name, email and phone. Each has the line_number remove_outreach_people takes, the channels issues go to them on and the last issue they were sent.

Arguments

FieldTypeDescription
stream_id required string
status string One of: "subscribed", "left", "all"
query string
page integer
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

send_outreach_issue_now

Write Send a newsletter issue now

A newsletter stream's next issue goes now, outside its schedule, to everyone subscribed, whether or not its context blocks changed (scheduled issues carry on as planned). Its drafts go through the stream's gate: on an auto_send stream they reach REAL CUSTOMERS without review, so confirm with the user first.

Arguments

FieldTypeDescription
stream_id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

skip_outreach_issue

Write Skip a newsletter's next issue

A newsletter stream's next scheduled issue doesn't go (it's kept on its record as skipped by hand) and the one after becomes next. Call again to skip that one too.

Arguments

FieldTypeDescription
stream_id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

close_outreach_stream

Write Close an outreach stream

Stops new people joining; people already on it carry on. Reopen with reopen_outreach_stream. Manager or owner.

Arguments

FieldTypeDescription
id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

reopen_outreach_stream

Write Reopen an outreach stream

Lets people join a closed stream again. Manager or owner.

Arguments

FieldTypeDescription
id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

archive_outreach_stream

Write Archive an outreach stream

Takes a closed stream off the streams list (list_outreach_streams leaves it out unless include_archived). Nothing else changes: anything still in progress on it finishes (cancel_outreach_pending stops that). Close it first. Unarchive with unarchive_outreach_stream. Manager or owner.

Arguments

FieldTypeDescription
id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

unarchive_outreach_stream

Write Unarchive an outreach stream

Puts an archived stream back on the streams list, as it was (a closed one stays closed: reopen_outreach_stream reopens it, and unarchives it too). Manager or owner.

Arguments

FieldTypeDescription
id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

cancel_outreach_pending

Write Cancel what's in progress on an outreach stream

Stops everything on the stream that hasn't gone out: drafts being written or waiting, queued sends, reminders waiting for their date, and later steps and follow-ups due. A message already sending still goes. The stream itself carries on (an active one keeps taking people, who start fresh). Can't be undone: tell the user what will stop and confirm first. Manager or owner.

Arguments

FieldTypeDescription
id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

list_iress_quotes

Read List IRESS quotes

Protection quotes advisers ran on IRESS from the platform, newest first: the client, the cover, the cheapest price and whether a Nurture with AI follow-up has started. An adviser sees their own; owners and managers see the organisation's.

Arguments

FieldTypeDescription
limit integer
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

get_iress_quote

Read Get an IRESS quote

One IRESS quote: its status (pricing: ask again shortly), each insurer's monthly price, cheapest first, and those that couldn't quote.

Arguments

FieldTypeDescription
quote_id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

request_iress_quote

Write Run an IRESS quote

Asks IRESS to price level term life cover (single life, monthly) for a client, as the calling adviser with their saved IRESS login (IRESS's test environment needs none). The client becomes a lead and the quote an application. Pricing runs in the background: poll get_iress_quote. Nothing is sent to the client. The organisation needs its FCA reference number set.

Arguments

FieldTypeDescription
first_name required string
last_name required string
email string The client's email: this or phone is required
phone string
date_of_birth required string YYYY-MM-DD
sex required string One of: "male", "female"
smoker required boolean Used nicotine in the last 12 months
ever_smoked boolean If not a smoker: ever used nicotine
date_last_smoked string If they used to: the month they stopped, YYYY-MM
occupation required string Origo occupation label or code (e.g. Gardener)
height_cm number
weight_kg number
cover_amount required number Life cover in pounds
term_years required integer
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

start_nurture_from_iress_quote

Write Follow up an IRESS quote with Nurture with AI

Starts a Nurture with AI follow-up from an IRESS quote the calling adviser ran, and returns the follow-up page where they choose the prices to send, check the AI's draft and send it (nothing reaches the client from here). The first time, it sets Nurture with AI up for the organisation.

Arguments

FieldTypeDescription
quote_id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

Stuck, or something missing?

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

Contact us