← All action domains

Settings

22 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 disposition

dispositions.createwriteadmin only

Add a call outcome to the end of the list. Attach actions from the shared Actions registry to have picking it fire them automatically — sending an SMS, tagging the contact, dropping a voicemail, enrolling in a campaign, and so on. Those actions send real messages and spend the account's own Twilio/Mailgun credit every time an agent picks the outcome, so an outcome with a send attached is a recurring cost, not a label. Created switched on unless is_active is false.

Parameters

FieldTypeRequiredDescription
namestringrequiredThe outcome label, e.g. “Callback requested”.
descriptionstringoptionalWhat this outcome means, in your own words. Shown as the hint on the outcome and read by the AI when it suggests an outcome from a call transcript.
colorstringoptionalHex chip color shown next to the outcome. Default: "#64748b"
is_activebooleanoptionalThe “Show in the dialer” switch. true offers the outcome to agents after a call; false creates it switched off, so it can be set up (actions and all) before anyone can pick it. Default: true
actionsobject[]optionalActions to run when an agent picks this outcome. Default: []
actions[].typestringrequiredAction type from the shared registry, e.g. send_sms.
actions[].configmap of string → objectoptionalThe action's own settings — see the Actions registry for its fields. Default: {}

Example

curl -X POST https://app.chirply.io/api/v1/actions/dispositions.create \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Example"
  }'
Test with your API key

Over MCP the same operation is the tool dispositions_create at https://app.chirply.io/api/mcp, same bearer token, same input.

Delete a disposition

dispositions.deletewriteconfirmadmin only

Permanently delete a call outcome and the actions attached to it. Calls already logged against it keep their record; the outcome just stops being offered.

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

FieldTypeRequiredDescription
idstring (uuid)requiredThe disposition to delete.

Example

curl -X POST https://app.chirply.io/api/v1/actions/dispositions.delete \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool dispositions_delete at https://app.chirply.io/api/mcp, same bearer token, same input.

List call dispositions

dispositions.listread

List the call outcomes agents pick after a call — “Connected”, “Left voicemail”, “Not interested”, and any custom ones — in display order, with the actions each one fires.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
active_onlybooleanoptionaltrue hides dispositions that have been switched off. Default: false

Example

curl -X POST https://app.chirply.io/api/v1/actions/dispositions.list \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "limit": 25,
    "offset": 0
  }'
Test with your API key

Over MCP the same operation is the tool dispositions_list at https://app.chirply.io/api/mcp, same bearer token, same input.

Edit a disposition

dispositions.updatewriteadmin only

Rename a disposition, recolor it, switch it on or off for the dialer, or replace the actions it fires. Omitted fields are left alone; supplying `actions` REPLACES the whole list.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe disposition to edit.
namestringoptionalNew outcome label, e.g. “Callback requested”. Must be unique in the account.
descriptionstringoptionalWhat this outcome means, in your own words. Shown as the hint on the outcome and read by the AI when it suggests an outcome from a call transcript.
colorstringoptionalNew hex chip color shown next to the outcome, e.g. “#64748b”.
is_activebooleanoptionalThe “Show in the dialer” switch. false hides it from the dialer without deleting it; calls already logged against it keep their record.
actionsobject[]optionalREPLACES the whole list of actions this outcome fires. Some of these send real SMS or drop real voicemails on its own provider account every time an agent picks the outcome — pass [] to strip them.
actions[].typestringrequiredAction type from the shared registry, e.g. send_sms.
actions[].configmap of string → objectoptionalThe action's own settings — see the Actions registry for its fields. Default: {}

Example

curl -X POST https://app.chirply.io/api/v1/actions/dispositions.update \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool dispositions_update at https://app.chirply.io/api/mcp, same bearer token, same input.

Authorize a provider connection

integrations.authorizereadadmin only

Get an account-bound browser link for OpenRouter, Google Cloud, DigitalOcean, Cloudflare or Resend authorization. A signed-in account manager must review and consent at the provider. Approval replaces the previous connection; future AI, email and cloud operations bill the connected provider account. This call grants no access and incurs no provider charges.

Parameters

FieldTypeRequiredDescription
provider"openrouter" | "google-cloud" | "digitalocean" | "cloudflare" | "resend"requiredProvider to authorize without manually copying an API key.
projectstringoptionalGoogle Cloud project ID. Required for google-cloud; the approving Google identity must have access to this project.

Example

curl -X POST https://app.chirply.io/api/v1/actions/integrations.authorize \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "openrouter"
  }'
Test with your API key

Over MCP the same operation is the tool integrations_authorize at https://app.chirply.io/api/mcp, same bearer token, same input.

Connect an integration

integrations.connectwriteadmin only

Save this account's own credentials for a provider's single canonical connection, creating the connection or updating it. Named, multi-account, agency-managed, and verify-before-store providers (the tenant's own Stripe) are rejected here and must use their dedicated manager, so the exact connection is explicit and its keys are checked with the provider before anything is written. Secret fields are encrypted with AES-256-GCM before storage and can never be read back; OMIT a secret to keep the one already stored. Connecting Twilio also auto-creates the API Key + Voice app the softphone needs, connecting Mailgun reconciles the inbound route and delivery webhooks in the tenant's Mailgun account, and connecting Cloudflare verifies the token and turns on automatic DNS for custom domains. Charges from these providers bill to the tenant's own account.

Parameters

FieldTypeRequiredDescription
provider"twilio" | "mailgun" | "resend" | "openrouter" | "openai" | "outscraper" | … 16 morerequiredWhich provider to connect.
valuesmap of string → stringrequiredField key → value, e.g. {"account_sid":"AC…","auth_token":"…"}. Call integrations.get for the field list. Omit a secret to keep the stored one; a blank non-secret clears it.

Example

curl -X POST https://app.chirply.io/api/v1/actions/integrations.connect \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "twilio",
    "values": {}
  }'
Test with your API key

Over MCP the same operation is the tool integrations_connect at https://app.chirply.io/api/mcp, same bearer token, same input.

Provider connection methods

integrations.connection_methodsreadadmin only

Read the first-party connection audit: OAuth availability, API-key alternatives, setup links and provider restrictions. Reports registered Cloudflare/Resend apps separately from customer consent. Makes no provider changes and reveals no credentials.

Parameters

No parameters — POST an empty body.

Example

curl -X POST https://app.chirply.io/api/v1/actions/integrations.connection_methods \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{}'
Test with your API key

Over MCP the same operation is the tool integrations_connection_methods at https://app.chirply.io/api/mcp, same bearer token, same input.

Diagnose incoming email

integrations.diagnose_emailreadadmin only

Check, end to end, why replies to this account's email are or aren't arriving in Conversations, and report each link in the chain: the Mailgun connection, whether receiving is switched on, whether the domain's MX actually delivers to Mailgun, whether the inbound route exists, whether another route in the Mailgun account outranks it and calls stop() (which silently swallows every reply), whether the webhook signing key is stored, and whether mail Mailgun recently accepted for the domain actually matched that inbound route. Read-only — it inspects the Mailgun account and changes nothing. Costs nothing and sends nothing. Run integrations.test on Mailgun afterwards to repair whatever this finds.

Parameters

No parameters — POST an empty body.

Example

curl -X POST https://app.chirply.io/api/v1/actions/integrations.diagnose_email \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{}'
Test with your API key

Over MCP the same operation is the tool integrations_diagnose_email at https://app.chirply.io/api/mcp, same bearer token, same input.

Disconnect an integration

integrations.disconnectwriteconfirmadmin only

Delete this account's single canonical connection to a provider, including its stored credentials. Named, multi-account, and agency-managed providers are rejected here and must be disconnected in their dedicated manager so the target is explicit. Everything that runs on a removed connection stops immediately — disconnecting Twilio kills calling and SMS, Mailgun kills email, OpenRouter kills the AI features.

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

FieldTypeRequiredDescription
provider"twilio" | "mailgun" | "resend" | "openrouter" | "openai" | "outscraper" | … 16 morerequiredWhich provider to disconnect.

Example

curl -X POST https://app.chirply.io/api/v1/actions/integrations.disconnect \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "twilio"
  }'
Test with your API key

Over MCP the same operation is the tool integrations_disconnect at https://app.chirply.io/api/mcp, same bearer token, same input.

Open an integration

integrations.getread

Fetch one provider's connection status plus the exact fields its connect form takes — use this before integrations.connect so you know which keys to send. Never returns a stored credential, only whether each secret is set. When manageOnly is set, integrations.connect will refuse this provider and manageHref names the screen that owns its credentials: agency-supplied connections, providers with named or multiple connections, and providers whose keys are verified with the provider before they are stored (the tenant's own Stripe).

Parameters

FieldTypeRequiredDescription
provider"twilio" | "mailgun" | "resend" | "openrouter" | "openai" | "outscraper" | … 16 morerequiredWhich provider to inspect.

Example

curl -X POST https://app.chirply.io/api/v1/actions/integrations.get \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "twilio"
  }'
Test with your API key

Over MCP the same operation is the tool integrations_get at https://app.chirply.io/api/mcp, same bearer token, same input.

Get the Zapier invite

integrations.get_zapier_inviteread

Return the Zapier invite link this account is offered — Chirply's own, or the agency's white-labelled integration where one has been set up — plus how many triggers, actions and searches it exposes. Some accounts are offered no link at all: an agency decides whether the client accounts it creates are shown Zapier, and when that decision is off this reports so instead of returning a URL. That is a decision about what Chirply displays, NOT an access control — it revokes nothing and disconnects nothing, and anyone already holding the link keeps using the integration normally. Reading this costs nothing, connects nothing and grants nobody access on its own: after accepting an invite, an owner or admin still has to approve the connection to a specific account from inside Zapier, and Zaps then run against the REST API, which is plan-gated.

Parameters

No parameters — POST an empty body.

Example

curl -X POST https://app.chirply.io/api/v1/actions/integrations.get_zapier_invite \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{}'
Test with your API key

Over MCP the same operation is the tool integrations_get_zapier_invite at https://app.chirply.io/api/mcp, same bearer token, same input.

List integrations

integrations.listread

List every provider this account can connect — telephony (Twilio), email (Mailgun, Resend), AI (OpenRouter, ElevenLabs, fal.ai, Replicate, Firecrawl), commerce and marketing (the tenant's own Stripe, Shopify, Klaviyo, BookFunnel, GoHighLevel, Outscraper, PayPal, Facebook & Instagram), and infrastructure (Cloudflare for automatic DNS, Supabase app backends) — with whether it's connected, whether it's fully configured, its last status, and the callback URLs it needs. Stored credentials are NEVER returned — secrets are reported only as set/not set.

Parameters

No parameters — POST an empty body.

Example

curl -X POST https://app.chirply.io/api/v1/actions/integrations.list \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{}'
Test with your API key

Over MCP the same operation is the tool integrations_list at https://app.chirply.io/api/mcp, same bearer token, same input.

Request access

integrations.request_accesswriteconfirm

Ask the Chirply team to switch on an integration that isn't open to everyone yet — the “Request access” button on a limited-availability tile. Meta (Facebook / Instagram) is the case this exists for: until Facebook finishes reviewing Chirply it only works for accounts we have added to our developer list, so connecting it first requires a human at Chirply to add you. This FILES A REAL SUPPORT TICKET on behalf of the signed-in user AND EMAILS THE CHIRPLY TEAM, then answers back through Support. Asking twice is harmless: while a ticket for the same provider is still open it reports that and files nothing new — which is exactly why this exists rather than support.file_bug, whose free-text title would defeat that de-duplication and leave the team with a pile of identical requests.

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

FieldTypeRequiredDescription
providerstringrequiredWhich provider to ask for, by its id from integrations.list — e.g. 'meta'. Providers that are generally available have nothing to request and are refused.

Example

curl -X POST https://app.chirply.io/api/v1/actions/integrations.request_access \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "example"
  }'
Test with your API key

Over MCP the same operation is the tool integrations_request_access at https://app.chirply.io/api/mcp, same bearer token, same input.

Test an integration

integrations.testwriteadmin only

Verify this account's single canonical stored connection against the provider with a FREE, read-only call (account metadata, a domain list, a token check — it never sends a message, generates content, or spends the account's balance), then record the outcome on that connection (connected / error). Named, multi-account, agency-managed, and verify-before-store providers (the tenant's own Stripe) are rejected here and must be tested in their dedicated manager. Testing Mailgun also REPAIRS inbound email — it re-creates the missing route or webhook and re-checks the domain's MX. A dead Facebook grant is stamped 'needs_reauth' so the UI offers Reconnect. BookFunnel is webhook-only with no credential to check, so its result reports when the last reader event arrived rather than claiming verification.

Parameters

FieldTypeRequiredDescription
provider"twilio" | "mailgun" | "resend" | "openrouter" | "openai" | "outscraper" | … 16 morerequiredWhich connection to test.

Example

curl -X POST https://app.chirply.io/api/v1/actions/integrations.test \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "twilio"
  }'
Test with your API key

Over MCP the same operation is the tool integrations_test at https://app.chirply.io/api/mcp, same bearer token, same input.

Account settings

org.getread

Read this account's profile: its name, URL slug, status, what kind of account it is (a plain Account, or a White-Label / Reseller / Agency Partner once those upgrades are bought), its entitlements, its own saved branding, the brand it is actually shown under (`effective_brand` — a white-label agency's own, its agency's for a client account, otherwise the platform's, with `white_labelled`), and its seat usage — members, owners, and pending invites.

Parameters

No parameters — POST an empty body.

Example

curl -X POST https://app.chirply.io/api/v1/actions/org.get \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{}'
Test with your API key

Over MCP the same operation is the tool org_get at https://app.chirply.io/api/mcp, same bearer token, same input.

Workspaces

org.listread

List every account the signed-in person can switch into — what the account picker in the sidebar shows — with each one's name, kind (a top-level account or a client account under one), the caller's role in it, and which one is currently active. org.get only ever describes the ACTIVE account, so this is the only way to find out what else exists. Soft-deleted (cancelled) accounts are left out, exactly as the picker leaves them out. Read-only.

Parameters

No parameters — POST an empty body.

Example

curl -X POST https://app.chirply.io/api/v1/actions/org.list \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{}'
Test with your API key

Over MCP the same operation is the tool org_list at https://app.chirply.io/api/mcp, same bearer token, same input.

Switch account

org.switchwrite

Move the signed-in person into a different account, the way picking one from the sidebar's account switcher does. Everything afterwards — records, settings, billing, every later action — belongs to the new account, so this changes what all subsequent work operates on. Only accounts the person is actually a member of are accepted, and a superadmin who was viewing a tenant stops doing so. THE APP MUST BE RELOADED for the change to show: the switch is stored in a cookie, but pages already open still hold the previous account's data in memory. Changes no records in either account.

Parameters

FieldTypeRequiredDescription
org_idstring (uuid)requiredThe account to move into, from org.list. Must be one the caller belongs to.

Example

curl -X POST https://app.chirply.io/api/v1/actions/org.switch \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "org_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool org_switch at https://app.chirply.io/api/mcp, same bearer token, same input.

Zapier for your clients

zapier.get_client_settingread

Read the one Zapier decision an agency makes for the client accounts it creates, and what it currently resolves to: off (no Zapier link on their screens), Chirply's own invite link, or the agency's white-labelled integration on the $50/month self-serve tier or the $100/month plus one-time $999 done-for-you tier. Also reports whether Chirply still owes a done-for-you setup and what the agency's own invite URL is. Reads configuration only — it changes nothing, charges nothing, and does not affect any Zap that is already running.

Parameters

No parameters — POST an empty body.

Example

curl -X POST https://app.chirply.io/api/v1/actions/zapier.get_client_setting \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{}'
Test with your API key

Over MCP the same operation is the tool zapier_get_client_setting at https://app.chirply.io/api/mcp, same bearer token, same input.

Zapier business recipes

zapier.list_recipesread

Read three practical Zapier build guides: assigning new inquiries, maintaining a booking ledger and handing won deals to delivery. Each includes field mapping, deduplication and a test-before-enable checklist. These are instructions, not installed Zaps. Reading them creates nothing, enables nothing, sends nothing and costs nothing; executing configured actions later may trigger account workflows or send data to other apps.

Parameters

No parameters — POST an empty body.

Example

curl -X POST https://app.chirply.io/api/v1/actions/zapier.list_recipes \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{}'
Test with your API key

Over MCP the same operation is the tool zapier_list_recipes at https://app.chirply.io/api/mcp, same bearer token, same input.

Save your Zapier invite link

zapier.set_branded_appwriteadmin only

Record the agency's OWN Zapier integration — its name and the public-invite URL from their own Zapier developer account — so their client accounts are shown that link instead of Chirply's. Only accepted on a paid Zapier white-label tier, because on the free modes there is no integration of the agency's for the link to point at. Costs nothing and sends nothing; it changes which URL Chirply prints on a screen. The URL must be a zapier.com public-invite link, which is what Zapier's own Sharing screen gives you.

Parameters

FieldTypeRequiredDescription
invite_urlstringrequiredThe agency's own integration's public-invite URL, copied from Zapier's Sharing screen — https://zapier.com/developer/public-invite/<id>/<key>/. Pass an empty string to clear it, which stops client accounts being offered any link until a new one is saved.
app_namestringoptionalWhat the agency's integration is called inside Zapier, used in the on-screen wording. Omit to leave it unchanged.

Example

curl -X POST https://app.chirply.io/api/v1/actions/zapier.set_branded_app \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "invite_url": "https://example.com"
  }'
Test with your API key

Over MCP the same operation is the tool zapier_set_branded_app at https://app.chirply.io/api/mcp, same bearer token, same input.

Save Zapier choice

zapier.set_client_modewriteconfirmowner only

Set the single Zapier choice an agency makes for the client accounts it creates. THIS SPENDS REAL MONEY on two of the three values. 'off' is free and shows no Zapier link on any client account's screens — it hides a link and nothing more: it does not revoke anything, does not disconnect existing Zaps, and anyone who already has the invite link can still use the integration. 'self_serve' COMMITS THE AGENCY TO $50 PER MONTH to white-label the integration and do all of the setup themselves in their own Zapier developer account, with Chirply providing instructions and no other help. 'done_for_you' COMMITS THEM TO $100 PER MONTH PLUS A ONE-TIME $999 SETUP FEE — $1,099 on the first charge — for Chirply to build the integration in their Zapier developer account and maintain it. The Stripe products for both tiers are not created yet, so this records the decision, marks it awaiting billing, and files a support ticket for a human to complete the sale; it does not charge a card by itself.

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

FieldTypeRequiredDescription
mode"off" | "self_serve" | "done_for_you"requiredWhat client accounts get. 'off' — no Zapier link on their screens, free, and the default under a white label. 'self_serve' — $50/month, the agency white-labels the integration and does every part of the setup themselves in their own Zapier developer account. 'done_for_you' — $100/month plus a one-time $999 setup fee, Chirply builds it in their Zapier account and maintains it.
accept_chargesbooleanoptionalRequired to be true for the two paid values, as an explicit acknowledgement of the recurring price and any one-time setup fee. Ignored for 'off', which is free. Default: false

Example

curl -X POST https://app.chirply.io/api/v1/actions/zapier.set_client_mode \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "off"
  }'
Test with your API key

Over MCP the same operation is the tool zapier_set_client_mode at https://app.chirply.io/api/mcp, same bearer token, same input.

Zapier setup instructions

zapier.setup_guideread

Return the step-by-step instructions for building a white-labelled Zapier integration in the agency's OWN Zapier developer account: the account to create, the OAuth endpoints and scopes to configure against Chirply, where the catalog of triggers, actions and searches comes from, the branding steps, and where to paste the resulting invite link back. This is what the $50/month self-serve tier buys — Chirply supplies the information and does none of the work, does not submit the integration for review, does not maintain it, and does not support it. Reading it costs nothing and changes nothing.

Parameters

No parameters — POST an empty body.

Example

curl -X POST https://app.chirply.io/api/v1/actions/zapier.setup_guide \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{}'
Test with your API key

Over MCP the same operation is the tool zapier_setup_guide at https://app.chirply.io/api/mcp, same bearer token, same input.

The machine-readable version of this page is GET https://app.chirply.io/api/v1/actions?domain=settings — same operations, with full JSON Schemas. Authentication, errors and rate limits are covered in the API documentation home.