← All action domains

Dashboard

12 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.

Read Active Ads

dashboard.active_adsreadadmin only

Read which ads are ACTUALLY RUNNING across connected Meta and Google advertiser accounts, including ads created outside Chirply. Every ad carries a `delivery` verdict: `running` is true only when the campaign, the ad set and the ad itself are all switched on, the ad set's schedule is open, and the ad account can spend — and `label`/`detail` say which of those is blocking it when it is not. A separate `delivering` flag is true only when the advertiser actually reported impressions for that ad in the reporting window: `running` is what the switches and the schedule permit, `delivering` is evidence that it happened, and only a delivering ad is labelled "Delivering" rather than "Running now". This matters because Meta never revokes `ACTIVE`: a boosted post whose run window closed months ago still reports ACTIVE at all three levels, so a raw enabled/active status from the Marketing API means almost nothing on its own. Also returns internal links to each Meta ad in Chirply, creative details, publishing page and shared budgets when available; Meta includes last-30-days ad performance in each advertiser timezone: spend, impressions, clicks and leads, plus Meta's own click rate (`ctr`, a percentage), `costPerClick`, `costPerLead`, attributed `purchases`, sales `revenue` and `roas` (sales ÷ spend), all money in the account currency's major unit — each null when Meta reported nothing to divide by or no purchase tracking. Running ads sort first. Defaults to running ads only — pass filter `all` for every loaded ad. Filters apply to up to 100 loaded ads and 100 Performance Max groups per account; truncation and reporting errors remain explicit. Reads only, without changing ads or spending money; independent of dashboard date filters.

Parameters

FieldTypeRequiredDescription
filter"running" | "not_running" | "all" | "recent" | "no_delivery" | "ended" | … 1 moreoptionalWhich loaded ads to return: `running` (default) only ads that can deliver right now, `not_running` only ads that are switched on but blocked, `all` every loaded ad, `recent` ads with Meta impressions or spend in the last 30 days, `no_delivery` ads with no Meta delivery row, `ended` ads whose ad-set schedule has closed, `unknown` ads whose performance could not be verified. Recent spend is history and does not mean the ad is running now. Default: "running"
searchstringoptionalSearch loaded ad names and IDs, publishing pages, campaigns and advertiser accounts. Default: ""

Example

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

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

Dashboard layout

dashboard.get_layoutread

Read your saved dashboard arrangement — which widgets are on it, in what order, each preferred width in a 12-column grid, compact-view flags, and which you have hidden. The browser adapts widths to its available space, expands incomplete rows to fill the canvas, and aligns card tops and bottoms within each row. Also returns every widget this account could show and the widths each one supports, which is what dashboard.set_layout accepts. Personal to you: it does not affect or reveal what teammates see. Omit tab_id for Overview or pass a personal custom tab ID. Custom tabs start empty; Overview starts with its default widgets. Changes nothing.

Parameters

FieldTypeRequiredDescription
tab_idstring (uuid)optionalPersonal custom dashboard tab UUID returned by dashboard.tabs_list, or a fresh UUID for creation. Reuse the creation UUID when retrying.

Example

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

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

Overview tiles

dashboard.get_overview_tilesread

Read which headline numbers your dashboard's Overview widget shows, left to right, and every tile you could choose instead — contacts, new contacts, revenue, MRR, open pipeline, deals won, calls, texts, emails, open conversations, running ads, form submissions, AI employees, AI runs and calls, tasks due, appointments and more — with what each counts and whether it follows the dashboard's date filter. Up to 10 tiles; the default row is contacts, lists, autoresponders, broadcasts, livevisitors. Personal to you: it does not affect or reveal what teammates see. Omit tab_id for Overview or pass a personal custom tab ID. Returns the choice, not the numbers — those come from each domain's own capabilities. Changes nothing.

Parameters

FieldTypeRequiredDescription
tab_idstring (uuid)optionalPersonal custom dashboard tab UUID returned by dashboard.tabs_list, or a fresh UUID for creation. Reuse the creation UUID when retrying.

Example

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

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

What needs attention

dashboard.operationsread

What needs attention in this account right now — the triage cards on the default dashboard, read in one call. Returns up to six: Attention Required (everything currently failing, reconciled across appointments, automation runs, unpaid and failed invoices, broken provider connections and AI sessions, with the same total the red badge shows), Automation Health (active workflows, runs, failures and anything stuck running), Inbox & Response Queue (open and unassigned conversations, split by SMS and email), Account & Provider Health (which connected providers — telephony, email, payments — are healthy and which are broken), Lead Capture & Conversion (form views, responses, completion rate and funnel opt-ins), and Campaign Performance (attempted, delivered, opened and clicked). Each card comes back as headline metrics plus named rows, every row carrying the exact screen that resolves it. These are CROSS-DOMAIN reductions, which is why they live here and not in one of the feature domains — no per-domain capability can produce the reconciled attention total. Counting windows: the failure and health cards are as-of-now, while the volume cards (campaigns, lead capture) count over the requested day range. Read-only — it inspects, changes nothing, and sends nothing.

Parameters

FieldTypeRequiredDescription
widgetsarray of ("attention" | "automationhealth" | "inboxqueue" | "providerhealth" | "leadcapture" | "campaignperformance")optionalOnly these cards, e.g. ['attention','providerhealth']. Omit for all six. Narrowing does not make the read cheaper — the underlying load is one batched wave — it just keeps the answer to the point.
daysintegeroptionalHow many days back the volume cards (Campaign Performance, Lead Capture & Conversion) count over, ending now. 1–365, default 30. The failure and health cards ignore this: 'a workflow is failing' and 'this provider is disconnected' are true as of now, not over a window. Default: 30

Example

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

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

Reset dashboard layout

dashboard.reset_layoutwrite

Forget the saved arrangement for tab_id, or Overview when omitted. Custom tabs reset to an empty canvas; Overview goes back to the default: Activity and Overview full width, the Activity Log at two-thirds beside Tasks Due, then Live Visitors, Phone Numbers, Pipeline, Recent Communication, Revenue and Call Volume side by side, then New Contacts, the Activity Calendar beside Generate Leads, and Client accounts where entitled. Personal to you, and affects only where the widgets sit — nothing on them is changed or deleted. Widgets you had hidden come back if they are part of the default; widgets that launched hidden stay off the page until you add them.

Parameters

FieldTypeRequiredDescription
tab_idstring (uuid)optionalPersonal custom dashboard tab UUID returned by dashboard.tabs_list, or a fresh UUID for creation. Reuse the creation UUID when retrying.

Example

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

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

Reset Overview tiles

dashboard.reset_overview_tileswrite

Put your dashboard's Overview widget back on its default tiles — contacts, lists, autoresponders, broadcasts, livevisitors — for tab_id, or Overview when omitted. Personal to you, and only changes which numbers the card draws; nothing on them is changed or deleted.

Parameters

FieldTypeRequiredDescription
tab_idstring (uuid)optionalPersonal custom dashboard tab UUID returned by dashboard.tabs_list, or a fresh UUID for creation. Reuse the creation UUID when retrying.

Example

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

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

Save dashboard layout

dashboard.set_layoutwrite

Rearrange your dashboard: the array order IS the top-to-bottom, left-to-right order of the widgets, `span` is a preferred width out of 12 grid columns, `half_height` selects compact content while card tops and bottoms remain aligned within each row, and `hidden` drops it off the page without deleting anything. The browser adapts widths to its available space and expands incomplete rows to fill the canvas without changing your saved preferences. Width also selects the LAYOUT — most widgets have a compact build and a roomier one (Phone Numbers is a list at a third and a table at two-thirds), so dashboard.get_layout publishes the preferred build for each saved span; narrow cards can use their compact build. Personal to you; teammates' dashboards are unaffected, and no contact, call or pipeline data is touched. Unknown widget ids are ignored, a span the widget has no layout for is snapped to its nearest supported width, and any widget you leave out is kept HIDDEN (available to re-add, not deleted) — so a partial list shows exactly the widgets it names and nothing it doesn't. Call dashboard.get_layout for the valid ids and spans. Pass tab_id to arrange a custom tab, or omit for Overview. An empty layout hides all widgets.

Parameters

FieldTypeRequiredDescription
tab_idstring (uuid)optionalPersonal custom dashboard tab UUID returned by dashboard.tabs_list, or a fresh UUID for creation. Reuse the creation UUID when retrying.
layoutobject[]requiredThe widgets in the order you want them, e.g. [{id:'pipeline',span:6},{id:'activity',span:6},{id:'leads',hidden:true}].
layout[].idstringrequiredWidget id, e.g. 'activity', 'pipeline', 'comms'.
layout[].spanintegeroptionalPreferred width in grid columns out of 12 — 3 is a quarter, 4 a third, 6 a half, 8 two-thirds, 9 three-quarters, 12 full width. Snapped to the nearest width this widget supports. The browser can widen it to fit a narrow screen or complete its row; the saved preference is preserved. Defaults to its usual size.
layout[].hiddenbooleanoptionalTrue to take this widget off the dashboard.
layout[].half_heightbooleanoptionalTrue for compact view: renders the widget's compact content where available while retaining the same top and bottom edges as its visual row. The historical field name remains for API compatibility. Defaults to the usual content build.

Example

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

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

Save Overview tiles

dashboard.set_overview_tileswrite

Choose the headline numbers on your dashboard's Overview widget: the array order IS the left-to-right order of the tiles, at most 10. Unknown ids and repeats are ignored and reported back; tiles past the 10th are dropped. Personal to you — teammates' dashboards are unaffected — and no contact, deal, call or ad data is touched; it only changes which numbers the card draws. Call dashboard.get_overview_tiles for the valid ids. Pass tab_id for a custom dashboard tab, or omit for Overview. To take the card off the page entirely use dashboard.set_layout with hidden: true.

Parameters

FieldTypeRequiredDescription
tab_idstring (uuid)optionalPersonal custom dashboard tab UUID returned by dashboard.tabs_list, or a fresh UUID for creation. Reuse the creation UUID when retrying.
tilesstring[]requiredThe tiles in the order you want them, left to right, e.g. ['revenue','openpipeline','calls','runningads','aiemployees'].

Example

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

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

Add dashboard tab

dashboard.tabs_createwrite

Create a personal empty dashboard tab in this account. Add widgets with dashboard.set_layout using its tab_id. Reuse id on retries. Changes only your saved view; sends no messages and spends no money.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredPersonal custom dashboard tab UUID returned by dashboard.tabs_list, or a fresh UUID for creation. Reuse the creation UUID when retrying.
namestringrequiredVisible tab name, 1–40 characters, such as Sales or Advertising.

Example

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

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

Delete dashboard tab

dashboard.tabs_deletewriteconfirm

Permanently delete your custom dashboard tab and its saved widget arrangement. The underlying contacts, ads and activity remain intact. Built-in tabs and teammates' views are unaffected. No messages are sent and no money is spent.

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)requiredPersonal custom dashboard tab UUID returned by dashboard.tabs_list, or a fresh UUID for creation. Reuse the creation UUID when retrying.

Example

curl -X POST https://app.chirply.io/api/v1/actions/dashboard.tabs_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 dashboard_tabs_delete at https://app.chirply.io/api/mcp, same bearer token, same input.

List dashboard tabs

dashboard.tabs_listread

Read your personal custom dashboard tabs in this account. Each has an independent widget layout accessible with tab_id in dashboard.get_layout. Does not reveal teammates' tabs or change data.

Parameters

No parameters — POST an empty body.

Example

curl -X POST https://app.chirply.io/api/v1/actions/dashboard.tabs_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 dashboard_tabs_list at https://app.chirply.io/api/mcp, same bearer token, same input.

Rename dashboard tab

dashboard.tabs_renamewrite

Rename one of your personal custom dashboard tabs. Preserves its widgets and affects no teammate's view. Sends no messages and spends no money.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredPersonal custom dashboard tab UUID returned by dashboard.tabs_list, or a fresh UUID for creation. Reuse the creation UUID when retrying.
namestringrequiredVisible tab name, 1–40 characters, such as Sales or Advertising.

Example

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

Over MCP the same operation is the tool dashboard_tabs_rename 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=dashboard — same operations, with full JSON Schemas. Authentication, errors and rate limits are covered in the API documentation home.