13 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.
Close
live_chat.closewriteconfirm
Close a website live-chat conversation and prevent more visitor, AI, or teammate messages. Its transcript is retained, but the current UI cannot reopen 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 live_chat_close at https://app.chirply.io/api/mcp, same bearer token, same input.
Save changes
live_chat.configure_widgetwriteadmin only
Update a live-chat widget's complete branding, visitor intake, AI handoff, white-label link, and device placement. Existing live conversations keep their transcript; published embeds use the changes immediately.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
Live-chat widget to configure.
name
string
optional
Internal widget name shown to the team.
ai_agent_id
string (uuid) (or null)
optional
Active AI agent to connect, or null for human-only chat.
view_type
"both" | "desktop" | "mobile" | "none"
optional
Devices on which the launcher appears; none hides it everywhere.
settings
object
optional
Brand, intake, AI, copy, and white-label settings for the widget.
settings.primaryColor
string
optional
Primary brand color as a hex value, used on the launcher, header, and visitor bubbles.
settings.launcherLabel
string
optional
Short text shown beside the chat icon on the website launcher.
The website corner where the launcher and panel appear.
settings.heading
string
optional
Title in the chat panel header.
settings.welcomeMessage
string
optional
First message every visitor sees before starting a chat.
settings.offlineMessage
string
optional
Message shown when AI cannot answer and the team must follow up.
settings.handoffMessage
string
optional
Message shown when AI passes the visitor to a human teammate.
settings.logoUrl
string (or null)
optional
Public HTTPS URL for the logo shown in the chat header, or null to remove it.
settings.avatarUrl
string (or null)
optional
Public HTTPS URL for the avatar beside AI and team replies, or null to use the default icon.
settings.collectName
"off" | "optional" | "required" | boolean
optional
Whether the chat asks for a visitor name: off, optional, or required. Legacy true means required and false means off.
settings.collectEmail
"off" | "optional" | "required" | boolean
optional
Whether the chat asks for email: off, optional, or required. Collected emails create or match CRM contacts; legacy booleans remain accepted.
settings.collectPhone
"off" | "optional" | "required" | boolean
optional
Whether the chat asks for a phone number: off, optional, or required. Collected numbers are normalized and create or match CRM contacts.
settings.smsContinuation
boolean
optional
Keep the conversation going by text: when a visitor who shared a phone number is no longer on the page (their chat widget stopped polling), team replies to that chat are delivered as a real SMS from the account's own number — billed to the org's own Twilio account — instead of waiting in the closed tab. Exactly one channel per reply: visitors still in the chat only see it in the widget, and numbers that opted out of SMS are never texted. Defaults to on whenever phone collection is on.
settings.aiEnabled
boolean
optional
Whether the connected AI agent answers first; humans can still take over.
settings.showPoweredBy
boolean
optional
Whether a powered-by link appears at the bottom of the chat.
settings.poweredByText
string
optional
Label for the powered-by link, such as Powered by Acme.
settings.poweredByUrl
string (or null)
optional
Destination URL for the powered-by link, or null for unlinked text.
settings.copy
object
optional
Editable visitor-facing copy. Override any fields to translate or rewrite the widget while omitted fields retain English defaults.
settings.copy.aiStatus
string
optional
Status shown while the AI agent owns the chat.
settings.copy.humanStatus
string
optional
Status shown while a teammate owns the chat.
settings.copy.waitingStatus
string
optional
Status shown while the visitor waits for the team.
settings.copy.closedStatus
string
optional
Status shown after the conversation is closed.
settings.copy.closeLabel
string
optional
Accessible label for the close-chat button.
settings.copy.startHeading
string
optional
Heading above the visitor details form.
settings.copy.namePlaceholder
string
optional
Placeholder in the visitor name field.
settings.copy.emailPlaceholder
string
optional
Placeholder in the visitor email field.
settings.copy.phonePlaceholder
string
optional
Placeholder in the visitor phone field.
settings.copy.optionalSuffix
string
optional
Text appended to optional-field placeholders, including any desired leading space.
settings.copy.startButton
string
optional
Button text that starts a conversation.
settings.copy.startingButton
string
optional
Button text while a conversation is starting.
settings.copy.thinkingStatus
string
optional
Inline status while AI prepares a reply.
settings.copy.sendingStatus
string
optional
Inline status while a message is sending.
settings.copy.messagePlaceholder
string
optional
Placeholder in the open-chat message composer.
settings.copy.closedPlaceholder
string
optional
Placeholder in the composer after a chat closes.
settings.copy.newChatLabel
string
optional
Button shown after a chat is closed so the visitor can start a new one.
settings.copy.sendLabel
string
optional
Accessible label for the send-message button.
settings.copy.startError
string
optional
Fallback error shown when a chat session cannot start.
settings.copy.sendError
string
optional
Fallback error shown when a visitor message cannot be sent.
settings.copy.textNotice
string
optional
Notice shown in the thread when SMS continuation applies; {phone} is replaced with the visitor's number.
The website corner where the launcher and panel appear.
settings.heading
string
optional
Title in the chat panel header.
settings.welcomeMessage
string
optional
First message every visitor sees before starting a chat.
settings.offlineMessage
string
optional
Message shown when AI cannot answer and the team must follow up.
settings.handoffMessage
string
optional
Message shown when AI passes the visitor to a human teammate.
settings.logoUrl
string (or null)
optional
Public HTTPS URL for the logo shown in the chat header, or null to remove it.
settings.avatarUrl
string (or null)
optional
Public HTTPS URL for the avatar beside AI and team replies, or null to use the default icon.
settings.collectName
"off" | "optional" | "required" | boolean
optional
Whether the chat asks for a visitor name: off, optional, or required. Legacy true means required and false means off.
settings.collectEmail
"off" | "optional" | "required" | boolean
optional
Whether the chat asks for email: off, optional, or required. Collected emails create or match CRM contacts; legacy booleans remain accepted.
settings.collectPhone
"off" | "optional" | "required" | boolean
optional
Whether the chat asks for a phone number: off, optional, or required. Collected numbers are normalized and create or match CRM contacts.
settings.smsContinuation
boolean
optional
Keep the conversation going by text: when a visitor who shared a phone number is no longer on the page (their chat widget stopped polling), team replies to that chat are delivered as a real SMS from the account's own number — billed to the org's own Twilio account — instead of waiting in the closed tab. Exactly one channel per reply: visitors still in the chat only see it in the widget, and numbers that opted out of SMS are never texted. Defaults to on whenever phone collection is on.
settings.aiEnabled
boolean
optional
Whether the connected AI agent answers first; humans can still take over.
settings.showPoweredBy
boolean
optional
Whether a powered-by link appears at the bottom of the chat.
settings.poweredByText
string
optional
Label for the powered-by link, such as Powered by Acme.
settings.poweredByUrl
string (or null)
optional
Destination URL for the powered-by link, or null for unlinked text.
settings.copy
object
optional
Editable visitor-facing copy. Override any fields to translate or rewrite the widget while omitted fields retain English defaults.
settings.copy.aiStatus
string
optional
Status shown while the AI agent owns the chat.
settings.copy.humanStatus
string
optional
Status shown while a teammate owns the chat.
settings.copy.waitingStatus
string
optional
Status shown while the visitor waits for the team.
settings.copy.closedStatus
string
optional
Status shown after the conversation is closed.
settings.copy.closeLabel
string
optional
Accessible label for the close-chat button.
settings.copy.startHeading
string
optional
Heading above the visitor details form.
settings.copy.namePlaceholder
string
optional
Placeholder in the visitor name field.
settings.copy.emailPlaceholder
string
optional
Placeholder in the visitor email field.
settings.copy.phonePlaceholder
string
optional
Placeholder in the visitor phone field.
settings.copy.optionalSuffix
string
optional
Text appended to optional-field placeholders, including any desired leading space.
settings.copy.startButton
string
optional
Button text that starts a conversation.
settings.copy.startingButton
string
optional
Button text while a conversation is starting.
settings.copy.thinkingStatus
string
optional
Inline status while AI prepares a reply.
settings.copy.sendingStatus
string
optional
Inline status while a message is sending.
settings.copy.messagePlaceholder
string
optional
Placeholder in the open-chat message composer.
settings.copy.closedPlaceholder
string
optional
Placeholder in the composer after a chat closes.
settings.copy.newChatLabel
string
optional
Button shown after a chat is closed so the visitor can start a new one.
settings.copy.sendLabel
string
optional
Accessible label for the send-message button.
settings.copy.startError
string
optional
Fallback error shown when a chat session cannot start.
settings.copy.sendError
string
optional
Fallback error shown when a visitor message cannot be sent.
settings.copy.textNotice
string
optional
Notice shown in the thread when SMS continuation applies; {phone} is replaced with the visitor's number.
Over MCP the same operation is the tool live_chat_create_widget at https://app.chirply.io/api/mcp, same bearer token, same input.
Delete widget
live_chat.delete_widgetwriteconfirmadmin only
Permanently delete a live-chat widget, all visitor sessions, and every message transcript it collected. The installed launcher stops working and 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 live_chat_delete_widget at https://app.chirply.io/api/mcp, same bearer token, same input.
Install live chat
live_chat.embed_snippetread
Get the one-line script tag that installs a live-chat widget on a website — paste it into the site's HTML just before </body> — plus the widget's standalone chat page URL. This is the LIVE-CHAT loader (/embed/chat.js and /c/<key>); the click-to-call loader returned by widgets.embed_snippet is a different script and will not open a chat panel, so do not substitute one for the other. The launcher only renders once the widget is published and the site has been added as an allowed origin, so the returned status and origin list are the two things to check when it does not appear. Read-only.
Over MCP the same operation is the tool live_chat_embed_snippet at https://app.chirply.io/api/mcp, same bearer token, same input.
Read live chat
live_chat.getread
Read one website chat and its complete ordered transcript, including visitor, AI, teammate, and system messages. Reads only and does not change ownership.
Over MCP the same operation is the tool live_chat_get at https://app.chirply.io/api/mcp, same bearer token, same input.
Open live chat
live_chat.get_widgetread
Fetch one branded website live-chat widget with everything its builder shows: its publication status, the AI agent connected to it, which devices the launcher appears on, its full normalized live-chat settings (brand colors, launcher label and position, panel heading, welcome/offline/handoff messages, visitor name/email/phone intake, white-label powered-by link, and every piece of editable visitor-facing copy), the websites it is allowed to appear on, and its install snippet. Live chat only — a click-to-call widget's id returns not-found here, because its settings are a completely different shape; read those with widgets.get. Read-only: it changes nothing, sends nothing, and returns no visitor transcripts (use live_chat.get for those).
Over MCP the same operation is the tool live_chat_list_widgets at https://app.chirply.io/api/mcp, same bearer token, same input.
Send reply
live_chat.replywriteconfirm
SENDS A REAL LIVE-CHAT MESSAGE to the website visitor immediately. The reply appears in their open widget, moves ownership to the human team, assigns the acting user when there is one, and pauses AI. When the widget's "keep the conversation going by text" setting is on and the visitor shared a phone number but has since left the page, the reply is ALSO delivered to them as a real SMS from the account's own number — billed to the org's own Twilio account (the result reports texted_to when that happened; visitors still on the page, or numbers opted out of SMS, are never texted). There is no draft or undo.
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
Live-chat session to reply to.
body
string
required
Message text the website visitor will receive immediately.
Over MCP the same operation is the tool live_chat_reply at https://app.chirply.io/api/mcp, same bearer token, same input.
Publish widget
live_chat.set_widget_statuswriteconfirmadmin only
Publish or unpublish a live-chat widget. Publishing makes the installed launcher visible on every allowed website; unpublishing removes it on the loader's next refresh without deleting conversations.
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
Live-chat widget to publish or unpublish.
published
boolean
required
true publishes the widget; false returns it to draft.
Over MCP the same operation is the tool live_chat_set_widget_status at https://app.chirply.io/api/mcp, same bearer token, same input.
Take over
live_chat.take_overwrite
Move a waiting or AI-handled website chat to human control and assign it to the acting user when there is one. AI stops answering until someone explicitly hands the chat back.