105 operations. Call each with POST https://app.chirply.io/api/v1/actions/<name> and a bearer token; the response is { "data": { "action", "summary", "result" } }. A read badge means the operation changes nothing; write requires the credential’s write scope.
Add a step or objection handler
call_scripts.add_stepwriteadmin only
Add one entry to a call script. A 'step' is appended to the end of the ordered path through the call; an 'objection' is a handler and must name which objection it answers. Titles and bodies may use fields such as {{first_name | "there"}}; any tag the script cannot fill is saved as written and listed back in unknown_fields.
Parameters
Field
Type
Required
Description
script_id
string (uuid)
required
The script to add to.
kind
"step" | "objection"
optional
'step' is part of the ordered path through the call; 'objection' is a handler reached for when the customer pushes back. Default: "step"
title
string
required
Short name for this part, e.g. “Open + reason for the call”. May use fields, filled from the person on the call when it connects: {{first_name}}, {{company_name}}, {{industry}}, {{deal.stage}}, {{custom.<key>}} and the rest listed by call_scripts.fields. Add a fallback for blanks with {{first_name | "there"}}.
body
string
optional
The words, or the beats to hit. This is what a rep reads on screen mid-call. May use fields, filled from the person on the call when it connects: {{first_name}}, {{company_name}}, {{industry}}, {{deal.stage}}, {{custom.<key>}} and the rest listed by call_scripts.fields. Add a fallback for blanks with {{first_name | "there"}}.
Over MCP the same operation is the tool call_scripts_add_step at https://app.chirply.io/api/mcp, same bearer token, same input.
Read where a live call is in its script
call_scripts.assist_readingread
Take one reading of a call in progress: which step of its script the conversation appears to be in, and whether the customer just raised an objection the script has a handler for. Reads the call's transcript only — it never speaks to the customer and changes nothing about the call. Requires the script to have assist switched on and the number to have transcription on. Uses and bills its own OpenRouter account.
Parameters
Field
Type
Required
Description
call_id
string (uuid)
required
The live call to read.
script_id
string (uuid)
optional
Read against this script instead of the call's default.
Over MCP the same operation is the tool call_scripts_create at https://app.chirply.io/api/mcp, same bearer token, same input.
Delete a call script
call_scripts.deletewriteconfirmadmin only
Permanently delete a call script and every step and objection handler in it. This cannot be undone. Any call queue or phone number pointing at it simply stops offering a script.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool call_scripts_delete at https://app.chirply.io/api/mcp, same bearer token, same input.
Delete a step or objection handler
call_scripts.delete_stepwriteconfirmadmin only
Permanently delete one entry from a call script. This cannot be undone. The remaining entries keep their order.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool call_scripts_delete_step at https://app.chirply.io/api/mcp, same bearer token, same input.
Insert field
call_scripts.fieldsread
List every field a call script step can use — the contact's own details, their open deal, their history as a customer, the rep and the account, then this account's contact custom fields — each with the exact tag to write (for example {{first_name}}) and an example value. This is the list behind the editor's Insert field picker. Read-only.
Parameters
Field
Type
Required
Description
query
string
optional
Only fields whose tag, name or group contains every word of this, e.g. “deal” or “first”.
Over MCP the same operation is the tool call_scripts_fields at https://app.chirply.io/api/mcp, same bearer token, same input.
Open the script for this call
call_scripts.for_callread
Answer “which script is this live call on?” in one hop: the script the call opens with by default (taken from the call queue it was dialed from, then from the line it is on), every other script a rep could switch to, and the latest AI assist reading already taken on the call. This is exactly what the in-call script panel paints itself from. Step titles and bodies come back PERSONALIZED — every field such as {{first_name}} or {{deal.stage}} is filled from the call's own contact (or from contact_id when given), a blank field shows its fallback or nothing, and no raw tag is ever returned; the words as written stay alongside in title_template and body_template, and personalized_for names who they were filled from. Read-only — it never speaks to the customer, changes nothing about the call, and unlike call_scripts.assist_reading it takes no NEW reading, so it costs nothing.
Parameters
Field
Type
Required
Description
call_id
string (uuid) (or null)
optional
The live call to resolve a script for. Omit or pass null to get just the switchable options with no default.
script_id
string (uuid)
optional
Return this script instead of the call's default — what happens when a rep picks a different one from the panel.
contact_id
string (uuid)
optional
Fill the script's fields from this contact instead of the call's own. With script_id and no call_id, this previews a script for a contact before anyone dials.
Over MCP the same operation is the tool call_scripts_list at https://app.chirply.io/api/mcp, same bearer token, same input.
Preview as
call_scripts.previewread
Show exactly what a rep would read: fills every field in a piece of script text — or in every step of a saved script — from one contact, or from the built-in sample person when no contact is given, and lists any tag that can't be filled. This is the editor's Preview as box. Read-only; it saves nothing, calls no one and costs nothing.
Parameters
Field
Type
Required
Description
text
string
optional
Script text to preview, tags and all — e.g. a step you are about to save. Give this or script_id.
script_id
string (uuid)
optional
Preview every step and objection handler of this saved script instead of loose text.
contact_id
string (uuid)
optional
Fill the fields from this contact. Omit to preview with the sample person the editor uses.
Over MCP the same operation is the tool call_scripts_preview at https://app.chirply.io/api/mcp, same bearer token, same input.
Reorder a call script
call_scripts.reorder_stepswriteadmin only
Set the order of a script's steps (or of its objection handlers) by giving their ids in the order you want. Pass every id of that kind — any left out keeps a stale position.
Parameters
Field
Type
Required
Description
script_id
string (uuid)
required
The script to reorder.
ordered_ids
array of (string (uuid))
required
Every entry id of one kind, in the order they should run.
Over MCP the same operation is the tool call_scripts_reorder_steps at https://app.chirply.io/api/mcp, same bearer token, same input.
Edit a call script
call_scripts.updatewriteadmin only
Rename a call script, change what it's for, switch it on or off for calls, or turn the AI assist on or off. Turning assist ON means the AI reads the live transcript of every call using this script and spends this account's own OpenRouter credit doing so; it never speaks to the customer. Omitted fields are left alone.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The script to edit.
name
string
optional
New name.
description
string
optional
New description.
is_active
boolean
optional
false hides it from the in-call picker without deleting it.
assist_enabled
boolean
optional
true lets the AI follow live calls on this script and highlight the rep's place. Requires transcription on the phone number; costs AI credit per call.
Over MCP the same operation is the tool call_scripts_update at https://app.chirply.io/api/mcp, same bearer token, same input.
Edit a step or objection handler
call_scripts.update_stepwriteadmin only
Rewrite one entry of a call script in place. Supplying a field replaces it; the entry keeps its position. Titles and bodies may use fields such as {{first_name | "there"}}; any tag the script cannot fill is saved as written and listed back in unknown_fields.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The step or objection handler to edit.
script_id
string (uuid)
required
The script it belongs to.
kind
"step" | "objection"
optional
'step' is part of the ordered path through the call; 'objection' is a handler reached for when the customer pushes back. Default: "step"
title
string
required
Short name for this part. May use fields, filled from the person on the call when it connects: {{first_name}}, {{company_name}}, {{industry}}, {{deal.stage}}, {{custom.<key>}} and the rest listed by call_scripts.fields. Add a fallback for blanks with {{first_name | "there"}}.
body
string
optional
What the rep reads on screen. May use fields, filled from the person on the call when it connects: {{first_name}}, {{company_name}}, {{industry}}, {{deal.stage}}, {{custom.<key>}} and the rest listed by call_scripts.fields. Add a fallback for blanks with {{first_name | "there"}}.
Over MCP the same operation is the tool call_scripts_update_step at https://app.chirply.io/api/mcp, same bearer token, same input.
Add AI agent to call
calls.add_ai_agentwriteconfirm
Add a selected active AI voice agent as a speaking participant in a live conference call. The agent hears and can speak with everyone in the conference. This bills the account's Twilio voice usage and its configured AI model usage for the additional leg.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool calls_add_ai_agent at https://app.chirply.io/api/mcp, same bearer token, same input.
Add someone to a live call
calls.add_partywriteconfirm
DIAL A THIRD PERSON into a call that is happening right now, escalating it to a conference so all three can talk. This RINGS A REAL PHONE and bills the account's own Twilio for the extra leg.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool calls_add_party at https://app.chirply.io/api/mcp, same bearer token, same input.
Add AI partner to call
calls.attach_partnerwriteconfirm
Connect a speaker-aware AI partner to an existing call, initially listening when human leads. Uses the account's Twilio conference, extra voice leg, per-speaker real-time transcription, ConversationRelay and AI model usage. The AI knows supervisor speech separately from customer speech and supports private coaching.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
call_id
string (uuid)
required
The active call in this account.
agent_id
string (uuid)
required
The active ConversationRelay AI agent to join this call.
lead
"human" | "ai"
optional
human leads while the AI listens and helps when asked; ai lets the AI lead the customer conversation and act on coaching. Default: "human"
goal
string
optional
Optional goal for this specific call. Blank uses the selected agent's saved goals, knowledge and permissions.
Over MCP the same operation is the tool calls_attach_partner at https://app.chirply.io/api/mcp, same bearer token, same input.
Decline
calls.declinewriteconfirm
Decline a still-ringing INBOUND call without answering it, so it falls through to whatever the line does next — voicemail, or the number's fallback. The caller is not hung up on and never hears a rejection. Because a machine caller has no browser leg of its own, this declines the ring for the WHOLE account rather than for one person's softphone: everybody's phone stops, and the caller moves on. That cannot be taken back for this call. Refused once somebody has picked up — end an answered call with calls.hangup instead. To choose the destination yourself, use calls.send_to_voicemail or calls.forward_incoming.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool calls_decline at https://app.chirply.io/api/mcp, same bearer token, same input.
Delete a call
calls.deletewriteconfirm
Permanently delete a call from the log, along with its recorded audio. This cannot be undone.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool calls_delete at https://app.chirply.io/api/mcp, same bearer token, same input.
Delete a recording's audio
calls.delete_recording_audiowriteconfirm
Permanently delete ONLY a call's recorded audio from storage, keeping the call log entry and its transcript. This cannot be undone — the audio is gone.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool calls_delete_recording_audio at https://app.chirply.io/api/mcp, same bearer token, same input.
Drop a missed call
calls.drop_missed_callwriteconfirm
RING A REAL PERSON'S PHONE for a few seconds and hang up before they can answer, so their phone shows a missed call from one of the account's numbers. Whatever that number answers with — an AI receptionist, a phone menu, a ring group — is what they reach when they call it back. This dials a real phone on the account's own Twilio account; a drop nobody answers costs no call minutes, but one answered inside the ring window connects briefly and is billed. Contacts on the do-not-contact list, opted out of calls or voicemail drops, or inside their own quiet hours are skipped rather than dialled. The drop is logged as a call and lands on the contact's timeline.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
contact_id
string (uuid)
optional
The contact to drop a missed call on. Supplies the number to ring and the timeline the drop is recorded on. Give this, or `to_e164`, or both.
to_e164
string
optional
The number to ring, in any format. Defaults to the contact's own phone number.
phone_number_id
string (uuid)
optional
The account line the missed call comes from — and the one they ring back, so point it at whatever should answer them. Defaults to the account's first active number.
ring_seconds
integer
optional
How long their phone rings before the call hangs up, 5–20 seconds (default 10, about two rings). Longer is more noticeable; shorter makes it less likely they answer.
Over MCP the same operation is the tool calls_drop_missed_call at https://app.chirply.io/api/mcp, same bearer token, same input.
Forward a ringing call
calls.forward_incomingwriteconfirm
Forward a still-ringing INBOUND call to another number without answering it. This RINGS A REAL PHONE and bills the account's own Twilio for the forwarded leg. When the receiving line opts into transparent forwarding, the original caller's number is presented.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool calls_forward_incoming at https://app.chirply.io/api/mcp, same bearer token, same input.
Open a call
calls.getread
Fetch one call from the log with its full detail: both numbers, duration, disposition, notes, recording URL (when the audio is still stored) and transcript. Also returns `kind` — what placed the call, e.g. sales_bridge, ai_agent, predictive or manual — and `kind_label`/`kind_description`, the exact badge wording and tooltip the Calls list shows for it. When `kind` is sales_bridge, sales_bridges.list_runs with this call's id finds the dispatch and every agent leg behind it.
Over MCP the same operation is the tool calls_get at https://app.chirply.io/api/mcp, same bearer token, same input.
Call costs
calls.get_costsread
Read one call's current Twilio voice charges across linked legs, stored AI and ConversationRelay cost estimates, and attributed AI-credit debits. Unknown charges stay null. Provider subtotal excludes recording, transcription, conferencing, premium speech and post-call AI provider charges. Credits are separate to avoid double-counting. Queries Twilio read-only; starts no calls, sends no messages and debits no credits.
Parameters
Field
Type
Required
Description
call_id
string (uuid)
required
The call-log record in the current account whose costs to inspect.
Over MCP the same operation is the tool calls_get_costs at https://app.chirply.io/api/mcp, same bearer token, same input.
End a live call
calls.hangupwriteconfirm
END a call that is happening right now, dropping every remaining party. This disconnects real people mid-conversation and cannot be undone.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool calls_hangup at https://app.chirply.io/api/mcp, same bearer token, same input.
Leave call
calls.leave_supervisionwrite
Disconnect only your own supervisor leg while the rep/AI and customer continue their live call. This does not end their conference. Charges for your disconnected leg stop; remaining participants continue normal provider usage.
Parameters
Field
Type
Required
Description
call_id
string (uuid)
required
The active call in this account.
participant_id
string (uuid)
required
Your supervisor participant from calls.supervision_state.
Over MCP the same operation is the tool calls_leave_supervision at https://app.chirply.io/api/mcp, same bearer token, same input.
List calls
calls.listread
List the call log, newest first — inbound and outbound, with duration, disposition, recording state and transcript availability. Every call also carries `kind`: WHAT PLACED IT, so a sales-bridge dispatch, an AI agent's call, a predictive-dialer pass and a number somebody typed into the dialer are told apart instead of all reading as plain outbound calls. Filter by kind, direction, status, contact, line, voicemails, or whether a recording was kept.
Only calls of these kinds — what placed the call. Pass one to match the Calls list's own kind filter, which picks a single kind at a time, or several to group them (e.g. ["sales_bridge","predictive","voice_campaign"] for everything an automation dialed). manual — Someone on your team dialed it — softphone, mobile app, or click-to-call. inbound — Someone called one of your numbers. sales_bridge — A sales bridge rang your agent pool so the first to press 1 got the lead. ai_agent — Your AI voice agent placed or answered the call. queue — Worked from a call queue. predictive — Dialed by a predictive dialer session. voice_campaign — Sent by a voice broadcast campaign. rvm — A voicemail dropped without ringing the phone. call_tracking — Came through a call-tracking number, so the source is attributed. web_widget — A visitor asked to be called back from the website call widget. other — Chirply couldn't tell what placed this call. Omit for every kind. Rows recorded before Chirply tracked this read "other" unless their origin could be backfilled.
contact_id
string (uuid)
optional
Only calls linked to this contact.
phone_number_id
string (uuid)
optional
Only calls on this line.
disposition_id
string (uuid)
optional
Only calls with this disposition.
is_voicemail
boolean
optional
Only (or exclude) voicemail recordings.
has_recording
boolean
optional
true returns only calls whose audio is still stored.
query
string
optional
Text to match in either party's number or the call notes.
Over MCP the same operation is the tool calls_list at https://app.chirply.io/api/mcp, same bearer token, same input.
Active calls
calls.list_activeread
List ongoing calls in this account, including AI and human calls. Members see their own calls; owners and admins can supervise the account. Reading incurs no voice charges.
Over MCP the same operation is the tool calls_list_active at https://app.chirply.io/api/mcp, same bearer token, same input.
List calls with no outcome
calls.list_needing_dispositionread
List calls that have ended but still have no outcome recorded — the review queue. This is where calls taken on a desk phone or the mobile app land, since no browser was open to ask at the time. Read-only; it changes nothing.
Over MCP the same operation is the tool calls_list_needing_disposition at https://app.chirply.io/api/mcp, same bearer token, same input.
Who's available
calls.list_presenceread
List who in this account is currently able to answer an inbound call, and who is not. Covers both the browser phone and registered mobile apps, with each person's name and email and when they were last seen. This is the answer to “why is nobody picking up the main line?” — a number whose inbound routing is set to the team only rings people who are available here, so an empty list means every caller goes to voicemail. Read-only.
Parameters
Field
Type
Required
Description
available_only
boolean
optional
true returns only the people who can actually be rung right now, hiding anyone away or long since gone. Default: false
Over MCP the same operation is the tool calls_list_presence at https://app.chirply.io/api/mcp, same bearer token, same input.
Calls by outcome
calls.outcomes_reportread
Roll up the call log by recorded outcome for a date window: how many calls landed on each outcome (with percentages), total calls, how many were answered (connect rate), how many have an outcome recorded versus still missing one, and a per-teammate breakdown with each person's connect rate and commonest outcome. Spam and voicemail drops are excluded, matching the Calls page. Read-only — it counts existing calls and changes nothing.
Parameters
Field
Type
Required
Description
days
integer
optional
How many days back from now the report covers. Ignored when 'from' is given. Default: 30
from
string (date-time)
optional
Inclusive ISO start of the window; overrides 'days'.
to
string (date-time)
optional
Exclusive ISO end of the window. Defaults to now.
queue_id
string (uuid)
optional
Only calls dialed from this call queue.
rep_id
string (uuid)
optional
Only calls attributed to this team member — the person who placed the call or, for inbound calls, whoever recorded its outcome.
Over MCP the same operation is the tool calls_outcomes_report at https://app.chirply.io/api/mcp, same bearer token, same input.
Place a call
calls.placewriteconfirm
PLACE A REAL OUTBOUND PHONE CALL from one of the account's numbers. This DIALS A REAL PERSON immediately and bills its own Twilio account for the minutes. The call is logged, and when a contact is named the call also lands on that contact's timeline. If the from-number has recording switched on, the call is recorded.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
to_e164
string
required
The number to dial, in any format.
phone_number_id
string (uuid)
required
The line to call from — it supplies the caller ID.
contact_id
string (uuid)
optional
Contact this call is for, so it shows on their timeline.
Over MCP the same operation is the tool calls_place at https://app.chirply.io/api/mcp, same bearer token, same input.
Call with AI
calls.prepare_pairedwriteconfirm
Attach an AI agent and leader choice to a queued browser call before dialing. The browser then joins and the AI must connect before the customer is dialed. Calls bill the account's Twilio voice, conference, per-speaker transcription, ConversationRelay and AI provider usage. Does not dial by itself; the authenticated browser voice connection starts the prepared call.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
call_id
string (uuid)
required
The active call in this account.
agent_id
string (uuid)
required
The active ConversationRelay AI agent joining from the start.
lead
"human" | "ai"
required
human leads while the AI listens and helps when asked; ai lets the AI lead the customer conversation and act on coaching.
goal
string
optional
Optional goal for this specific call. Blank uses the selected agent's saved goals, knowledge and permissions.
Over MCP the same operation is the tool calls_prepare_paired at https://app.chirply.io/api/mcp, same bearer token, same input.
Listen to call
calls.prepare_supervisionwriteconfirm
Prepare a live call for supervision by placing its existing legs in a conference. A direct AI call reconnects its agent with saved context. Owners and admins can supervise other reps; members can supervise their own calls. Conference and any added AI leg/transcription incur the account's provider usage charges. Returns a call reference for an authenticated browser Voice SDK connection using SuperviseCallId; this preparation itself does not open a microphone.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool calls_prepare_supervision at https://app.chirply.io/api/mcp, same bearer token, same input.
Keypad
calls.send_digitswriteconfirm
Play touch tones only to the live recipient to navigate their phone menu. A choice can trigger a real IVR action and existing Twilio voice/conference usage continues. Shared calls keep their AI session and microphone audience. Direct browser calls use the Voice SDK keypad; other ordinary calls are promoted to a conference. Use the same request_id for a retry: delivery is at most once and accepted does not prove the menu acted on it.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
call_id
string (uuid)
required
The connected call to press keys on.
digits
string
required
Keys 0–9, * and #, with w for a half-second pause. Do not send secrets to untrusted recipients.
request_id
string (uuid)
optional
Unique reference for this intentional press; reuse on retries to avoid double selection. A fresh reference is generated when omitted.
Over MCP the same operation is the tool calls_send_digits at https://app.chirply.io/api/mcp, same bearer token, same input.
Send a ringing call to voicemail
calls.send_to_voicemailwriteconfirm
Send a still-ringing INBOUND call straight to voicemail without answering it. The caller hears the account's greeting and can leave a message.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool calls_send_to_voicemail at https://app.chirply.io/api/mcp, same bearer token, same input.
Set a call's outcome
calls.set_dispositionwriteconfirm
Record a call's disposition (outcome) and note, the same as picking one in the power dialer or the call log. Setting a disposition FIRES ITS ATTACHED ACTIONS against the call's contact — which can send real SMS or email, enrol them in a campaign, or move a deal — and runs any automation set to fire when a call outcome is recorded. It is not a passive edit.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
call_id
string (uuid)
required
The call to mark.
disposition_id
string (uuid) (or null)
required
The disposition to apply, or null to clear the outcome.
notes
string
optional
Free-text note about this call, saved alongside the outcome.
Over MCP the same operation is the tool calls_set_disposition at https://app.chirply.io/api/mcp, same bearer token, same input.
Hold
calls.set_holdwrite
Put the other party on hold on a call that is happening right now, or take them off it. On hold they hear hold music instead of this side and cannot hear anything said here. Escalates the call into a conference if it isn't one already (a brief, silent transition). NOTE: the app has no hold button today — this is the same participant-hold the warm-transfer flow uses internally, and for now it is a machine-only control. Trivially reversible by calling again with on_hold=false.
Parameters
Field
Type
Required
Description
call_id
string (uuid)
required
The live call to hold or resume.
on_hold
boolean
optional
true puts the other party on hold; false brings them back. Default: true
Over MCP the same operation is the tool calls_set_hold at https://app.chirply.io/api/mcp, same bearer token, same input.
Who leads
calls.set_leadwriteconfirm
Hand a supervised call to the AI or take the lead yourself. Human mode keeps you leading and lets the AI answer when you address it or ask for input. AI mode allows it to speak to the real customer and use its existing authorized tools; normal provider usage is billed.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
call_id
string (uuid)
required
The active call in this account.
lead
"human" | "ai"
required
human leads while the AI listens and helps when asked; ai lets the AI lead the customer conversation and act on coaching.
Over MCP the same operation is the tool calls_set_lead at https://app.chirply.io/api/mcp, same bearer token, same input.
Mute
calls.set_mutewrite
Mute or unmute THIS side of a call that is happening right now — the account's own leg, exactly like the Mute button on the in-call bar. The other party stays connected and keeps talking; they simply stop hearing you. Escalates the call into a conference if it isn't one already (a brief, silent transition), because muting one participant is a conference operation. Trivially reversible by calling again with muted=false.
Parameters
Field
Type
Required
Description
call_id
string (uuid)
required
The live call to mute or unmute.
muted
boolean
optional
true mutes this side's microphone; false unmutes it. Default: true
Over MCP the same operation is the tool calls_set_mute at https://app.chirply.io/api/mcp, same bearer token, same input.
Available for calls
calls.set_presencewrite
Set whether a member is available to take inbound calls on the browser phone — the softphone's Available/Away switch. A line whose inbound routing is set to the team rings everyone currently available, so switching someone off stops inbound calls reaching them, and switching everybody off means nobody's phone rings and callers fall through to voicemail. Availability lapses on its own about a minute after the browser stops heartbeating, so this is a way to take somebody OFF the rota, not a way to keep them on it.
Parameters
Field
Type
Required
Description
available
boolean
required
true puts them on the rota for inbound team calls; false takes them off.
user_id
string (uuid)
optional
Which member's availability to set. Defaults to the calling user. An API key has no user of its own, so it must name one — deliberately broader than the browser, where a person may only write their own row, so a desk phone or a workforce tool can put an agent on or off the rota.
Over MCP the same operation is the tool calls_set_presence at https://app.chirply.io/api/mcp, same bearer token, same input.
Who hears me
calls.set_supervision_modewriteconfirm
Change your supervisor microphone between listening, private coaching and speaking to everyone. This sends real live audio when unmuted. Coach mode with an AI supports private questions and answers heard only by your connection. AI/model and Twilio announcement usage are billed to the connected providers. Muted transitions and immutable speech channels protect private speech. Existing voice/conference/transcription usage continues. Only your own supervisor connection can be changed.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
call_id
string (uuid)
required
The active call in this account.
participant_id
string (uuid)
required
Your supervisor participant from calls.supervision_state.
mode
"listen" | "coach" | "everyone"
required
listen hears the call with your mic muted; coach speaks only to the selected rep; everyone speaks publicly.
coach_participant_id
string (uuid)
optional
The connected human rep or AI participant to hear private coaching; required for coach mode.
Over MCP the same operation is the tool calls_set_supervision_mode at https://app.chirply.io/api/mcp, same bearer token, same input.
Set the voicemail greeting
calls.set_voicemail_greetingwriteconfirmadmin only
Set one phone number's voicemail greeting. Twilio speaks built-in voices live; ElevenLabs generates and stores finished audio immediately using its own OWN account and SPENDS ITS TTS CREDITS. Recording or uploading a clip is available in the app.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
phone_number_id
string (uuid)
required
The phone number whose voicemail greeting changes.
source
"twilio" | "elevenlabs"
optional
Twilio speaks live, or ElevenLabs generates saved audio and spends credits. Default: "twilio"
greeting
string (or null)
required
The spoken greeting, or null to fall back to the default.
voice
string (or null)
optional
A Twilio <Say> voice from the curated catalog (e.g. 'Polly.Joanna-Neural'). Anything else is ignored.
Over MCP the same operation is the tool calls_set_voicemail_greeting at https://app.chirply.io/api/mcp, same bearer token, same input.
Start in-app call
calls.start_softphonewriteconfirm
Prepare a real outbound VoIP call from the signed-in mobile softphone. The mobile app immediately connects the caller to the recipient through its own Twilio account, so the recipient's phone rings and Twilio bills the account for call minutes.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
to_e164
string
required
The real phone number to call, in any common format.
phone_number_id
string (uuid)
required
The account phone-number id to display as caller ID.
contact_id
string (uuid)
optional
Optional CRM contact id so the call appears on that contact's timeline.
Over MCP the same operation is the tool calls_start_softphone at https://app.chirply.io/api/mcp, same bearer token, same input.
Suggest a call's outcome
calls.suggest_dispositionread
Read a call's transcript and suggest which of the account's own call outcomes fits, with a confidence score and the reason. It only suggests — nothing is saved and no actions fire; pass the answer to calls.set_disposition to apply it. Requires a transcript, so the number must have transcription switched on. Uses and bills its own OpenRouter account.
Over MCP the same operation is the tool calls_supervision_state at https://app.chirply.io/api/mcp, same bearer token, same input.
Transfer a live call
calls.transferwriteconfirm
Blind-transfer a call that is happening right now: DIAL the target and hand the other party straight over, dropping this side. This RINGS A REAL PHONE, bills the account's own Twilio, and cannot be taken back once the transfer lands. Use calls.warm_transfer_start to consult first.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool calls_transfer at https://app.chirply.io/api/mcp, same bearer token, same input.
Cancel a warm transfer
calls.warm_transfer_cancelwriteconfirm
Back out of a consultative transfer: drop the target's leg and take the caller off hold so this side keeps the call.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
call_id
string (uuid)
required
The live call being transferred.
target_call_sid
string
required
The target leg's CallSid, as returned by calls.warm_transfer_start.
Over MCP the same operation is the tool calls_warm_transfer_cancel at https://app.chirply.io/api/mcp, same bearer token, same input.
Complete a warm transfer
calls.warm_transfer_completewriteconfirm
Finish a consultative transfer: take the caller off hold, connect them to the target, and drop this side out of the call. Cannot be taken back.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool calls_warm_transfer_complete at https://app.chirply.io/api/mcp, same bearer token, same input.
Start a warm transfer
calls.warm_transfer_startwriteconfirm
Step one of a consultative transfer on a live call: DIAL the target, put the other party on hold, and let this side speak to the target privately. RINGS A REAL PHONE and bills the account's own Twilio. Finish with calls.warm_transfer_complete or back out with calls.warm_transfer_cancel.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool calls_warm_transfer_start at https://app.chirply.io/api/mcp, same bearer token, same input.
Attach an IVR to a number
ivr.attach_numberwriteadmin only
Point one of the account's phone numbers at this IVR flow, so incoming calls to that line walk the menu. The flow must be live. A line already answering with an AI receptionist, a forward, a conference room or a different IVR is refused rather than silently repointed.
Over MCP the same operation is the tool ivr_attach_number at https://app.chirply.io/api/mcp, same bearer token, same input.
Create an IVR phone menu
ivr.createwrite
Create a new, empty IVR flow and return its id. Deliberately off air and unattached — pointing a live number at a flow with no steps would answer real callers with silence. Draw it with ivr.update, then publish and attach it.
Parameters
Field
Type
Required
Description
name
string
optional
What to call this phone menu. Default: "Untitled IVR"
Over MCP the same operation is the tool ivr_create at https://app.chirply.io/api/mcp, same bearer token, same input.
Delete an IVR phone menu
ivr.deletewriteconfirm
Permanently delete an IVR flow. This cannot be undone. Any line answering with it is first sent back to the team simulring and named in the result. A flow that ANOTHER flow hands calls to is refused, because deleting it would leave that other flow hanging up on real callers.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool ivr_detach_number at https://app.chirply.io/api/mcp, same bearer token, same input.
Generate with AI voice
ivr.generate_prompt_audiowriteconfirm
Speak a line of a phone menu in an ElevenLabs voice and store it, returning the permanent URL to put on that step with ivr.update. SPENDS REAL MONEY: every call renders the text on its OWN ElevenLabs account and consumes its credits, so re-rendering the same line ten times costs ten times — and there is no cached preview to fall back on. Needed because Twilio's built-in <Say> voices cannot speak ElevenLabs: choosing a cloned or premium voice for a menu prompt means rendering it up front and playing the file on the call. Twilio's own voices (Polly, Google) are spoken live and never come through here. Nothing is dialed and no caller hears anything until the URL is saved onto a step and the menu is published.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
text
string
required
Exactly what the caller will hear, e.g. "Thanks for calling. Press 1 for sales, 2 for support." Write it the way it should be spoken — this is rendered verbatim.
voice_id
string
optional
A voice id from its own ElevenLabs account (ai_agents.list_voices). Omit to use the voice saved on the ElevenLabs connection, or the platform default.
Over MCP the same operation is the tool ivr_generate_prompt_audio at https://app.chirply.io/api/mcp, same bearer token, same input.
Open an IVR phone menu
ivr.getread
Fetch one IVR flow: its full node/edge graph as drawn in the builder, whether it is live, any validation issues that would stop it answering a real line, and every phone number currently pointing at it.
Over MCP the same operation is the tool ivr_list at https://app.chirply.io/api/mcp, same bearer token, same input.
Publish an IVR phone menu
ivr.publishwriteconfirm
Put an IVR flow LIVE so it can answer real callers, or take it off air. Publishing is refused when the flow has issues that would misroute a caller (a dead hand-off, a missing or paused AI agent, an unconnected key). TAKING IT OFF AIR CHANGES WHERE CALLS GO: an off-air menu cannot answer, so every line pointing at it is sent back to the team simulring and named in the result.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool ivr_publish at https://app.chirply.io/api/mcp, same bearer token, same input.
Save an IVR phone menu
ivr.updatewrite
Rename an IVR flow and/or replace its node/edge graph — the same graph the visual builder saves, and the one the live call runtime walks for both inbound calls and outbound voice campaigns. The flat greeting/options summary is recompiled automatically. A flow that is already LIVE is refused if the new graph would misroute a real caller.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The IVR flow to save.
name
string
optional
New name for the flow.
flow
object
optional
The complete graph. Replaces the stored one wholesale.
Over MCP the same operation is the tool ivr_update at https://app.chirply.io/api/mcp, same bearer token, same input.
Upload audio
ivr.upload_prompt_audiowrite
Store a recorded clip for one step of a phone menu to play, and get back the permanent URL to put on that step with ivr.update. Send the bytes base64-encoded, up to 10 MB. IT MUST BE PLAYABLE ON A PHONE CALL: WAV, MP3, AIFF, GSM or u-law only — Twilio rejects anything else outright and the caller hears dead air, so a clip in another format is refused here rather than stored. Best results come from 8 kHz mono WAV, which is what the builder's own recorder produces. Costs nothing and calls nobody; it stores one file.
Parameters
Field
Type
Required
Description
audio_base64
string
required
The clip's raw bytes, base64-encoded. A `data:` URL prefix and line breaks are accepted and stripped. Decoded size must be 10 MB or less.
format
"wav" | "mp3" | "aiff" | "gsm" | "ulaw"
optional
What the bytes actually are. Twilio plays only these five; the value chosen here decides the stored file's extension and content type. Default: "wav"
Over MCP the same operation is the tool ivr_upload_prompt_audio at https://app.chirply.io/api/mcp, same bearer token, same input.
Archive a phone number
numbers.archivewriteadmin only
Hide a number from the dialer and every from-number picker WITHOUT releasing it on Twilio or changing its routing — for a line you run elsewhere but want out of the way. Billing continues. Clears the default-outbound preference if it pointed here. Reverse it with numbers.restore.
Parameters
Field
Type
Required
Description
id
string (uuid)
optional
The id of the phone number to archive.
provider_sid
string
optional
For a Twilio number that isn't set up here: its IncomingPhoneNumber SID, hidden from the numbers console only.
Over MCP the same operation is the tool numbers_archive at https://app.chirply.io/api/mcp, same bearer token, same input.
Buy a phone number
numbers.buywriteconfirmadmin only
PURCHASE a phone number on its own Twilio account. This SPENDS REAL MONEY — Twilio bills the tenant an upfront and a monthly fee for the number immediately, and it can only be undone by releasing it. By default the number is also routed into this account (voice + SMS webhooks) and added to the dialer.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
phone_number
string
required
The E.164 number to buy, exactly as returned by numbers.search_available.
configure
boolean
optional
Route voice + SMS into this account and add it to the dialer right away. Default: true
Over MCP the same operation is the tool numbers_buy at https://app.chirply.io/api/mcp, same bearer token, same input.
Set where a number's calls arrive
numbers.configure_routingwriteadmin only
Point one Twilio number's inbound voice and/or SMS webhooks at this account, at a custom https URL, or turn the channel off. This changes configuration on its own Twilio account and takes effect on the next call. Addressed by the Twilio number SID, so it also works for numbers that aren't in the dialer yet.
Parameters
Field
Type
Required
Description
number_sid
string
required
The Twilio IncomingPhoneNumber SID (starts with 'PN').
voice_mode
"chirply" | "custom" | "off"
optional
Where inbound voice goes. Omit to leave voice untouched.
voice_url
string
optional
The https voice webhook, required when voice_mode is 'custom'.
sms_mode
"chirply" | "custom" | "off"
optional
Where inbound SMS goes. Omit to leave SMS untouched.
sms_url
string
optional
The https SMS webhook, required when sms_mode is 'custom'.
Over MCP the same operation is the tool numbers_configure_routing at https://app.chirply.io/api/mcp, same bearer token, same input.
Open a phone number
numbers.getread
Fetch one phone number with every setting on its settings page: label, inbound destination and its target, call recording, transcription, forwarding preferences and missed-call text back.
Over MCP the same operation is the tool numbers_get at https://app.chirply.io/api/mcp, same bearer token, same input.
Look up known line types
numbers.get_line_typeread
Read the cached line type (mobile / landline / VoIP / toll-free) and carrier for one or more phone numbers. Reads the platform's shared lookup cache only, so it is instant and costs nothing; numbers nobody has ever paid to look up simply come back unknown. Use numbers.queue_line_type_lookup to pay for the unknown ones.
Parameters
Field
Type
Required
Description
phones
string[]
required
Phone numbers in any format; they're normalized to E.164.
Over MCP the same operation is the tool numbers_get_line_type at https://app.chirply.io/api/mcp, same bearer token, same input.
Open a number's call & text schedule
numbers.get_schedulereadadmin only
Fetch the ordered timezone-aware windows that decide how one number handles incoming calls and texts. Read-only; the normal number settings remain the fallback outside every matching window.
Over MCP the same operation is the tool numbers_get_schedule at https://app.chirply.io/api/mcp, same bearer token, same input.
List phone numbers
numbers.listread
List the phone numbers this account uses, with each one's inbound destination, recording preferences, missed-call text-back settings and status. Read-only — costs nothing.
Parameters
Field
Type
Required
Description
limit
integer
optional
Max rows to return (1–100). Default: 25
offset
integer
optional
Rows to skip. Default: 0
status
string
optional
Only numbers in this status ('active' or 'archived').
Over MCP the same operation is the tool numbers_list at https://app.chirply.io/api/mcp, same bearer token, same input.
Look up line types (paid)
numbers.queue_line_type_lookupwriteconfirm
Queue phone numbers for a Twilio Lookup line-type check. This SPENDS REAL MONEY — each number not already in the shared cache is billed to its own Twilio account (roughly $0.008 each). Numbers already known, or already queued, are skipped for free. Nothing is queued at all when the account has switched automatic lookup off (numbers.set_auto_line_type_lookup) or has no Twilio connected. Results land asynchronously; read them back with numbers.get_line_type.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool numbers_queue_line_type_lookup at https://app.chirply.io/api/mcp, same bearer token, same input.
Release a phone number
numbers.releasewriteconfirmadmin only
PERMANENTLY release a phone number back to Twilio and remove it from this account. This CANNOT BE UNDONE — the number is gone from the account, anyone who calls it reaches nobody, and it may not be re-purchasable. Billing for it stops. Use numbers.archive instead to simply hide a number you want to keep.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool numbers_restore at https://app.chirply.io/api/mcp, same bearer token, same input.
Scan the database for line types
numbers.scan_line_typeswriteconfirmadmin only
One-time sweep: queue EVERY not-yet-known phone number across this account's contacts and staged leads for a line-type lookup. This SPENDS REAL MONEY — each unknown number is billed to the account's own Twilio (roughly $0.008 each), and a large database can mean thousands of lookups.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool numbers_scan_line_types at https://app.chirply.io/api/mcp, same bearer token, same input.
Search available numbers
numbers.search_availablereadadmin only
Search its own Twilio account for local, toll-free, or mobile numbers available to buy. Filter by country, beginning prefix, locality, digit/keypad-letter pattern, and required voice/SMS/MMS capabilities; use the returned cursor to load every matching page. This only searches — nothing is purchased and nothing is billed.
Parameters
Field
Type
Required
Description
country
string
optional
ISO country code, e.g. 'US' or 'CA'. Default: "US"
number_type
"local" | "toll_free" | "mobile"
optional
Twilio inventory to search: local, toll-free, or mobile numbers. Default: "local"
area_code
string
optional
Legacy US/Canada area-code filter, e.g. '317'. Prefer starts_with.
starts_with
string
optional
Beginning phone-number prefix. Use E.164 such as '+1415' for unambiguous global matching; US/CA/GB/AU national prefixes are also accepted.
contains
string
optional
Digits or keypad letters the number must contain, e.g. '555' or 'CHIRP'. Cannot be combined with starts_with.
locality
string
optional
City or locality to restrict inventory to, where Twilio supports it.
voice_enabled
boolean
optional
Only return numbers that can receive voice calls. Default: false
sms_enabled
boolean
optional
Only return numbers that can receive SMS messages. Default: false
mms_enabled
boolean
optional
Only return numbers that can receive MMS messages. Default: false
cursor
string
optional
Opaque next_cursor returned by the previous search to load its next page.
Over MCP the same operation is the tool numbers_search_available at https://app.chirply.io/api/mcp, same bearer token, same input.
Toggle automatic line-type lookup
numbers.set_auto_line_type_lookupwriteadmin only
Turn automatic line-type lookup on or off for this account. When on, every new phone number that enters the CRM is looked up on its own Twilio account (a small per-number charge) unless the platform already knows it. Stored alongside the Twilio credentials it spends.
Over MCP the same operation is the tool numbers_set_default_outbound at https://app.chirply.io/api/mcp, same bearer token, same input.
Save missed-call text back
numbers.set_missed_call_text_backwriteconfirmadmin only
Enable, disable, or edit one number's missed-call text back. When enabled, every unanswered inbound call immediately sends one REAL SMS from that same number, billed to its own Twilio account. Callers who opted out of SMS are skipped, and webhook retries never send a duplicate for the same call. Two optional gates narrow when it sends: only outside the account's business hours (from the Business profile), and only to callers who aren't already a contact.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The phone number to configure.
enabled
boolean
required
Whether unanswered inbound calls should trigger an automatic SMS.
message
string
required
The SMS body sent to the caller after a missed call.
send_when
"always" | "after_hours"
optional
When the text is allowed to send: 'always' texts every missed call (the default); 'after_hours' texts only while the account's business hours (Settings → Business profile) say the office is CLOSED, so an open office can call back instead. Omit to keep the number's current setting.
unknown_callers_only
boolean
optional
When true, only callers who are NOT already a contact in this account are texted; existing contacts are skipped so a human follow-up isn't preempted. Omit to keep the number's current setting.
Over MCP the same operation is the tool numbers_set_missed_call_text_back at https://app.chirply.io/api/mcp, same bearer token, same input.
Save call & text schedule
numbers.set_schedulewriteconfirmadmin only
Replace one number's complete ordered schedule, interpreted in the account timezone from Business profile. The first local-time window that matches controls both incoming calls and texts; outside it, the normal number settings apply. Enabling static, responder or AI text behavior causes REAL automatic SMS, billed to the tenant's Twilio account, whenever matching messages arrive. Call destinations take effect on the next inbound call.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The phone number whose complete schedule is replaced.
enabled
boolean
required
Master switch; false keeps the saved windows but ignores them.
rules
object[]
required
Ordered windows; the first matching item wins.
rules[].label
string (or null)
optional
Human label such as Business hours, After hours, or Holiday.
Over MCP the same operation is the tool numbers_set_schedule at https://app.chirply.io/api/mcp, same bearer token, same input.
Save inbound text routing
numbers.set_sms_routingwriteconfirmadmin only
Choose what one number does with incoming SMS outside scheduled windows. Inbox stores the message without replying; static immediately sends fixed text; autoresponder runs one attached keyword rule (or all active rules when no id is supplied); ai_agent automatically replies from the chosen agent using the thread and its Brain. Static, responder and AI modes SEND REAL SMS from the tenant's own Twilio account and incur carrier charges when a message arrives.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The phone number to configure.
mode
"inbox" | "static" | "autoresponder" | "ai_agent"
required
inbox | static | autoresponder | ai_agent.
static_reply
string (or null)
optional
Fixed automatic reply required for static mode.
autoresponder_id
string (uuid) (or null)
optional
Specific SMS responder, or null for all active SMS responders.
Over MCP the same operation is the tool numbers_set_sms_routing at https://app.chirply.io/api/mcp, same bearer token, same input.
Stop using a number in this account
numbers.stop_using_in_chirplywriteadmin only
Reverse of 'use in this account': clear this account's voice + SMS routing on Twilio and remove the number from the dialer. The number stays on the Twilio account and keeps billing — this does not release it. Clears the default-outbound preference if it pointed here.
Over MCP the same operation is the tool numbers_stop_using_in_chirply at https://app.chirply.io/api/mcp, same bearer token, same input.
Save a number's settings
numbers.update_settingswriteadmin only
Update any setting on one phone number's settings page: its internal label, which teammates can use the line, where incoming calls go (team simulring, direct voicemail, an AI receptionist, an IVR phone menu, a blind forward, or a conference room), how long the team rings and where unanswered team calls go, destination targets, call recording, transcription and recording announcements, transparent-forward caller ID, and whether it is the account's default outbound caller ID. Omitted fields are left alone. Does not touch Twilio's own webhook routing — use numbers.configure_routing for that.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The phone number to edit.
friendly_name
string (or null)
optional
Internal label shown in the dialer and pickers.
assigned_to
string (uuid) (or null)
optional
Legacy single-person assignment, from team.list_members, or null for a shared line. Setting this replaces the full assigned_user_ids list. Omit to leave assignment unchanged; use assigned_user_ids to choose multiple people.
assigned_user_ids
array of (string (uuid))
optional
Every teammate whose softphone should offer this line, from team.list_members. Pass an empty list to share it with the whole team. Managers can still use every line. With multiple people, new inbound messages remain unassigned for the team. Omit to leave assignment unchanged.
record_calls
boolean
optional
Record calls on this number (audio is stored in the platform's own R2 bucket).
transcribe_calls
boolean
optional
Transcribe calls on this number using Twilio's transcription.
recording_announce
boolean
optional
Play a 'this call may be recorded' announcement before connecting.
forward_original_caller_id
boolean
optional
When forwarding a ringing call, show the ORIGINAL caller's number.
script_id
string (uuid) (or null)
optional
The call script that opens beside the phone for calls on this line, or null for none. Whether the AI follows the conversation is set on the script itself, not here.
Over MCP the same operation is the tool numbers_update_settings at https://app.chirply.io/api/mcp, same bearer token, same input.
Use a Twilio number in this account
numbers.use_in_chirplywriteadmin only
One click: route a Twilio number's voice AND SMS into this account and add it to the dialer so it can place calls and send messages. With route_inbound=false it is added for outgoing calls and texts only and its Twilio routing is left exactly as it is — for a caller-ID or test line that should receive nothing. Changes configuration on the org's own Twilio account only when routing; addressed by the Twilio number SID. Does not buy anything.
Parameters
Field
Type
Required
Description
number_sid
string
required
The Twilio IncomingPhoneNumber SID to start using.
route_inbound
boolean
optional
true (default): point the number's incoming calls AND texts at this account, then add it. false: add it for outgoing calls and texts only, leaving its Twilio routing exactly as it is — use this for a caller-ID or test line that should receive nothing. Default: true
Over MCP the same operation is the tool numbers_use_in_chirply at https://app.chirply.io/api/mcp, same bearer token, same input.
Turn off calling to this country
regions.disable_callingwriteconfirmadmin only
SWITCHES OFF calling to one country on its own Twilio account. Every call placed to it after this is refused before it is dialed, for every user in the account — including calls made by dialers, campaigns and AI agents. Use it to close down a destination that is being abused or is not needed; it takes effect immediately.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
country
string
optional
ISO 3166-1 alpha-2 country code to switch off, e.g. “MX”. Give this or `phone`.
phone
string
optional
Any phone number in the country to switch off. Give this or `country`.
Over MCP the same operation is the tool regions_disable_calling at https://app.chirply.io/api/mcp, same bearer token, same input.
Turn on calling to this country
regions.enable_callingwriteconfirmadmin only
SWITCHES ON INTERNATIONAL CALLING to one country on its own Twilio account, immediately and for every user in the account. Calls placed after this are billed by Twilio at that country's international rates, which can be many times the domestic rate. Premium-rate and known toll-fraud number ranges stay OFF unless they are asked for by name — those are the ranges that turn a compromised account into a very large bill, so enabling them is a separate, deliberate decision.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
country
string
optional
ISO 3166-1 alpha-2 country code to switch on, e.g. “MX”. Give this or `phone`.
phone
string
optional
Any phone number in the country to switch on — typically the number a call just failed to reach. Give this or `country`.
include_high_risk
boolean
optional
Also allow premium-rate and known toll-fraud ranges in that country. Leave false unless someone has explicitly asked for them; this is the setting fraud runs up bills through. Default: false
Over MCP the same operation is the tool regions_enable_calling at https://app.chirply.io/api/mcp, same bearer token, same input.
Check calling to a country
regions.get_callingread
Answers whether its own Twilio account is allowed to call one particular country, named either by ISO code or by giving any phone number in it. Reading is free; when a phone number is given its country is resolved through a Twilio Lookup requested without any billable data packages, so that is free as well.
Parameters
Field
Type
Required
Description
country
string
optional
ISO 3166-1 alpha-2 country code, e.g. “MX”. Give this or `phone`.
phone
string
optional
Any phone number in the country to ask about, in any format. Its country is resolved for you. Give this or `country`.
Over MCP the same operation is the tool regions_get_calling at https://app.chirply.io/api/mcp, same bearer token, same input.
Countries you can call
regions.list_callingread
Lists every country with whether its own Twilio account is currently allowed to call it. A brand new Twilio account can only call its own country, and calls to anywhere switched off are refused before they are placed — this is what that setting says right now. Reads its own Twilio account and costs nothing. Note this is the CALLING list only; Twilio keeps texting permissions on a separate switch it publishes no API for, so use regions.texting_status for that.
Parameters
Field
Type
Required
Description
enabled_only
boolean
optional
Return only the countries calling is already switched on for, instead of all ~240. Default: false
search
string
optional
Filter by country name or ISO code, e.g. “mex” or “MX”.
Over MCP the same operation is the tool regions_list_calling at https://app.chirply.io/api/mcp, same bearer token, same input.
Why texting this country is blocked
regions.texting_statusread
Explains a blocked international TEXT (Twilio error 21408) and says exactly who can unblock it and where. Unlike calling, Twilio publishes no API for messaging geo-permissions — it states they cannot be changed programmatically, for security reasons — so neither Chirply nor any agent can switch a country on, and there is no endpoint to read the current setting from either. This returns the country the number belongs to, the Twilio console page that owns the setting, and the account SID that page has to be opened against, so a human can finish it in about thirty seconds. Costs nothing.
Parameters
Field
Type
Required
Description
phone
string
optional
The number a text failed to reach, in any format. Its country is resolved for you. Give this or `country`.
country
string
optional
ISO 3166-1 alpha-2 country code, e.g. “MX”. Give this or `phone`.
Over MCP the same operation is the tool regions_texting_status at https://app.chirply.io/api/mcp, same bearer token, same input.
Create a sales bridge
sales_bridges.createwriteadmin only
Create a sales bridge: a name, the line to call from, an optional whisper played to the agent who answers, an optional SMS sent to each agent on dispatch, and the pool of agent phones to ring. Creating it dials nobody — use sales_bridges.start_run for that.
Parameters
Field
Type
Required
Description
name
string
required
What to call this sales bridge.
phone_number_id
string (uuid) (or null)
optional
The line used as caller ID when dialing agents and the lead.
whisper_message
string (or null)
optional
Lead-context whisper spoken to the agent before connecting. Merge fields allowed.
whisper_voice
string (or null)
optional
A curated Twilio <Say> voice for the whisper. Anything else is ignored.
agent_sms
string (or null)
optional
Optional SMS sent to each PSTN agent on dispatch. Merge fields allowed.
dial_timeout
integer
optional
Seconds to ring each agent, clamped to 5–120. Defaults to 30.
record_calls
boolean
optional
Record the bridged call. Default: false
recording_announce
boolean
optional
Announce that the call may be recorded. Default: false
is_active
boolean
optional
A paused bridge refuses to start runs. Default: true
agents
object[]
optional
The agent pool, in ring order. Each row needs a number or a member. Default: []
agents[].e164
string (or null)
optional
The agent's phone number.
agents[].user_id
string (uuid) (or null)
optional
A member's id, to ring their browser softphone instead.
Over MCP the same operation is the tool sales_bridges_create at https://app.chirply.io/api/mcp, same bearer token, same input.
Delete a sales bridge
sales_bridges.deletewriteconfirmadmin only
Permanently delete a sales bridge and its agent pool. This cannot be undone. Past runs are removed with it.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool sales_bridges_get at https://app.chirply.io/api/mcp, same bearer token, same input.
Open a sales bridge run
sales_bridges.get_runread
Fetch one sales-bridge run with every agent leg it dialed and how each leg ended, plus `call_id` — the call-log row for the bridged conversation, which calls.get returns with `kind: "sales_bridge"`. Read-only; it dials nobody.
Over MCP the same operation is the tool sales_bridges_list at https://app.chirply.io/api/mcp, same bearer token, same input.
List sales bridge runs
sales_bridges.list_runsread
List recent sales-bridge dispatches with their outcome — ringing, claimed, bridged, completed, no answer, failed or canceled — and which agent won each one. This is the whole history of what the bridge has dialed, not just what one screen happens to show: every run is here as soon as it starts. Each run carries `call_id`, the call-log row for the bridged conversation (that row's `kind` is `sales_bridge`), so a run can be followed into the call log and a call followed back to its run with the `call_id` filter. Read-only; it dials nobody.
Only runs dispatched for this contact — their sales-bridge history.
call_id
string (uuid)
optional
Only the run behind this call-log row. Use it to answer "which bridge placed this call, and who else was rung?" for any call whose `kind` is sales_bridge.
lead_e164
string
optional
Only runs dispatched to this lead's phone number, in any format — it is normalized to E.164 before matching.
Over MCP the same operation is the tool sales_bridges_list_runs at https://app.chirply.io/api/mcp, same bearer token, same input.
Start a sales bridge
sales_bridges.start_runwriteconfirm
Dispatch a sales bridge for one lead RIGHT NOW: it RINGS EVERY AGENT IN THE POOL simultaneously and, on the first press of 1, bridges that agent to the lead. This places multiple REAL CALLS and bills the account's own Twilio for every leg, plus an SMS per agent when the bridge has one. Numbers on the do-not-contact list are refused. Follow the dispatch with sales_bridges.get_run; the bridged conversation lands in the call log as a call whose `kind` is `sales_bridge`.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
sales_bridge_id
string (uuid)
required
The sales bridge to run.
lead_e164
string
optional
The lead's phone number. Required unless contact_id is given.
contact_id
string (uuid)
optional
A contact to call — their stored phone is used and the run is linked to them.
Over MCP the same operation is the tool sales_bridges_update at https://app.chirply.io/api/mcp, same bearer token, same input.
Upload whisper audio
sales_bridges.upload_whisper_audiowriteadmin only
Attach a pre-recorded whisper clip to a sales bridge — the audio played privately to the AGENT who answers, before they are bridged to the lead; the lead never hears it. The clip is stored permanently in the account's storage and REPLACES any whisper recording the bridge already had, which cannot be recovered. From the next run onward the recording is played instead of the spoken whisper_message text. Uploading dials nobody and sends nothing — sales_bridges.start_run is what places calls.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The sales bridge the whisper clip belongs to.
audio_base64
string
required
The clip's raw bytes, base64-encoded. A `data:` URL prefix and line breaks are accepted and stripped. Decoded size must be 10 MB or less.
format
"wav" | "mp3" | "aiff" | "gsm" | "ulaw"
optional
What the bytes actually are. Twilio plays only these five; the value chosen here decides the stored file's extension and content type. Default: "wav"
Over MCP the same operation is the tool sales_bridges_upload_whisper_audio at https://app.chirply.io/api/mcp, same bearer token, same input.
Save Twilio credentials
telephony.connect_twiliowriteconfirmadmin only
Connect (or update) its own Twilio account. Every call, message and number purchase made here is billed to these credentials, so pointing them at a different account changes who pays. The auth token and API-key secret are encrypted before storage; leaving either blank on an update keeps the stored value.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
account_sid
string
required
Twilio Account SID (starts with 'AC').
auth_token
string
optional
Twilio auth token. Required on first connect; blank keeps the stored one.
api_key_sid
string
optional
Optional API Key SID (starts with 'SK'), used by the browser softphone.
api_key_secret
string
optional
Optional API Key secret. Blank keeps the stored one.
twiml_app_sid
string
optional
Optional TwiML App SID (starts with 'AP') for browser-phone routing.
Over MCP the same operation is the tool telephony_connect_twilio at https://app.chirply.io/api/mcp, same bearer token, same input.
Check the Twilio connection
telephony.get_connectionread
Report whether this account has connected its own Twilio account, and the connection's current status. Never returns the auth token or API key secret — those are stored encrypted and are not readable.
Over MCP the same operation is the tool telephony_test_connection at https://app.chirply.io/api/mcp, same bearer token, same input.
Add contacts to a campaign
voice_campaigns.add_recipientswriteconfirm
Enqueue more contacts into an existing voice campaign. On a RUNNING campaign they WILL BE CALLED — real calls billed to the account's own Twilio — as soon as the dispatcher reaches them. Contacts already on the campaign, and contacts without a dialable number, are skipped.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
campaign_id
string (uuid)
required
The campaign to add to.
contact_ids
array of (string (uuid))
optional
Explicit contacts to enqueue.
list_id
string (uuid)
optional
Enqueue every contact on this saved list.
lifecycle
string
optional
Enqueue every contact with a phone in this lifecycle stage.
scheduled_at
string (date-time)
optional
When to dial them. Defaults to the campaign's own start time.
Over MCP the same operation is the tool voice_campaigns_add_recipients at https://app.chirply.io/api/mcp, same bearer token, same input.
Call one contact with a menu or message
voice_campaigns.call_contactwriteconfirm
Place a single outbound IVR (or spoken-message) call to one contact. This CALLS A REAL PERSON and bills the account's own Twilio. Implemented as a one-recipient campaign so it goes through the same dispatcher — quiet hours, do-not-contact and pacing all apply, and the same IVR runtime walks the flow.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
contact_id
string (uuid)
required
The contact to call.
from_phone_number_id
string (uuid)
required
The line to call from.
ivr_menu_id
string (uuid)
optional
An IVR flow to run on answer. Omit to speak a message instead.
Over MCP the same operation is the tool voice_campaigns_call_contact at https://app.chirply.io/api/mcp, same bearer token, same input.
Create a voice campaign
voice_campaigns.createwriteconfirm
Create and LAUNCH an outbound voice campaign. This CALLS REAL PEOPLE — every contact in the chosen audience is dialed from its own Twilio account and billed to it, starting immediately unless a future start time is given. Content is either an IVR phone menu (the live runtime walks the same flow the builder draws), a spoken message, or an AI agent. Every answered call also offers a keypad opt-out (“press 9 to be removed”) unless opt_out_enabled is false — that is the only way somebody being dialed can stop the calls, so leave it on. Uploading pre-recorded broadcast audio is only possible in the app.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
name
string
required
What to call this campaign.
from_phone_number_id
string (uuid)
required
The line to call from.
content_kind
"ivr" | "tts" | "ai"
optional
What the callee hears: an IVR menu, a spoken message, or an AI agent. Default: "tts"
ivr_menu_id
string (uuid)
optional
The IVR flow to run when content_kind is 'ivr'.
tts_message
string
optional
The message to speak when content_kind is 'tts'.
hybrid_audio_asset_id
string (uuid)
optional
For TTS content, a reusable prerecorded audio asset to play after the merge-personalized introduction.
hybrid_pause_seconds
integer
optional
Whole-second transition pause between the personalized intro and recording. Default: 0
intro_tts_provider
"twilio" | "elevenlabs"
optional
How hybrid introductions are spoken. ElevenLabs renders one clip per recipient and spends the account's credits. Default: "twilio"
intro_tts_voice_id
string
optional
ElevenLabs voice id for personalized hybrid introductions.
ai_agent_id
string (uuid)
optional
The AI agent to hand answered calls to when content_kind is 'ai'.
ai_goal
string (or null)
optional
Per-campaign goal overriding the AI agent's standing goals.
voicemail_message
string (or null)
optional
A different script to leave when a machine answers.
voicemail_timing
"immediate" | "after_beep"
optional
Play as soon as AMD classifies the machine, or wait for its greeting and beep to finish. Default: "after_beep"
uncertain_action
"live" | "voicemail" | "hangup"
optional
Which branch to use when answering-machine detection is uncertain. Default: "live"
wait_for_detection
boolean
optional
For IVR campaigns, wait for AMD before playing prompts or accepting keypresses; this adds a brief pause for live people. Default: false
tts_voice
string (or null)
optional
A curated Twilio <Say> voice. Anything else falls back to the default.
sms_followup_text
string (or null)
optional
Optional SMS sent after the call connects.
audience_kind
"lifecycle" | "list" | "contacts"
optional
How the audience is chosen. Default: "lifecycle"
list_id
string (uuid)
optional
The saved list, when audience_kind is 'list'.
lifecycle
string
optional
Restrict to this lifecycle stage, when audience_kind is 'lifecycle'.
contact_ids
array of (string (uuid))
optional
Explicit contacts, when audience_kind is 'contacts'.
scheduled_at
string (date-time)
optional
ISO 8601 start time. Omit to start dialing right now.
timezone
string
optional
IANA timezone used for quiet hours and per-recipient scheduling. Default: "UTC"
machine_detection
boolean
optional
Detect answering machines. Always on for AI campaigns. Default: false
record
boolean
optional
Record the calls. Default: false
respect_quiet_hours
boolean
optional
Hold calls outside the quiet-hours window below. Default: false
quiet_start_local
string
optional
Earliest local dial time (HH:MM). Default: "08:00"
quiet_end_local
string
optional
Latest local dial time (HH:MM). Default: "21:00"
max_concurrency
integer
optional
Simultaneous calls, clamped to 1–100. Default: 10
opt_out_enabled
boolean
optional
Whether the callee is offered a key to press to be removed from the list. On by default. Ignored for content_kind 'ivr', where the opt-out is an Unsubscribe action node inside the menu instead. Default: true
opt_out_digit
string
optional
The single keypad digit 0–9 the callee presses to opt out. Defaults to 9. Default: "9"
What that keypress actually stops: 'call' and 'rvm' (the default — they are on a call saying stop calling me), plus optionally 'sms' and 'email'. An empty array falls back to the voice default rather than announcing a key that does nothing. Default: ["call","rvm"]
opt_out_prompt
string (or null)
optional
What the callee HEARS, with {{digit}} standing in for the key — e.g. "To be removed from our list, press {{digit}} at any time.". null uses that default. This sentence is read to every person the campaign reaches, so it is the one line nobody on the team hears before a stranger does.
Over MCP the same operation is the tool voice_campaigns_create at https://app.chirply.io/api/mcp, same bearer token, same input.
Delete a voice campaign
voice_campaigns.deletewriteconfirm
Permanently delete a voice campaign, its recipient queue and its stored broadcast audio. This cannot be undone. A running campaign stops.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool voice_campaigns_delete at https://app.chirply.io/api/mcp, same bearer token, same input.
Open a voice campaign
voice_campaigns.getread
Fetch one voice campaign with its content (IVR menu, spoken message, recorded audio or AI agent), schedule, quiet-hours and concurrency settings, and its recipient tallies.
Over MCP the same operation is the tool voice_campaigns_list_recipients at https://app.chirply.io/api/mcp, same bearer token, same input.
Save opt-out settings
voice_campaigns.set_opt_outwriteconfirm
Change how somebody being dialed by a running voice campaign can get off the list — whether the “press a key to be removed” offer is made at all, which key, what pressing it stops (calls, voicemail drops, texts, emails), and the exact sentence read to them. This is deliberately editable WHILE the campaign dials, because “I set the wrong key and it's calling people right now” needs fixing in the next thirty seconds. Changes apply to calls placed from now on; anyone already dialed keeps whatever they heard. TURNING IT OFF REMOVES THE ONLY WAY A CALLEE CAN STOP THE CALLS — the campaign itself keeps running. Campaigns that play an IVR menu opt people out through an Unsubscribe action node in the menu instead, and are refused here.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The campaign whose opt-out settings change.
opt_out_enabled
boolean
optional
Whether the callee is offered a key to press to be removed from the list. Turning this OFF on a running campaign removes the only way a person being dialed can stop the calls — the campaign keeps going either way.
opt_out_digit
string
optional
The single keypad digit 0–9 the callee presses to opt out. Defaults to 9.
What that keypress actually stops: 'call' and 'rvm' (the default — they are on a call saying stop calling me), plus optionally 'sms' and 'email'. An empty array falls back to the voice default rather than announcing a key that does nothing.
opt_out_prompt
string (or null)
optional
What the callee HEARS, with {{digit}} standing in for the key — e.g. "To be removed from our list, press {{digit}} at any time.". null uses that default. This sentence is read to every person the campaign reaches, so it is the one line nobody on the team hears before a stranger does.
Over MCP the same operation is the tool voice_campaigns_set_opt_out at https://app.chirply.io/api/mcp, same bearer token, same input.
Start, pause or cancel a campaign
voice_campaigns.set_statuswriteconfirm
Change a voice campaign's status. Setting it to 'running' STARTS OR RESUMES DIALING REAL PEOPLE and billing the account's own Twilio. 'paused' holds the queue; 'canceled' stops it for good and marks every not-yet-dialed recipient as skipped, which cannot be undone.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The campaign to change.
status
"running" | "paused" | "canceled"
required
running resumes dialing, paused holds, canceled stops it permanently.