← All action domains

Reports

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

Delete saved report

reports.delete_savedwriteconfirm

Permanently delete a saved report definition. If it was shared, it disappears for the whole account. The underlying data is untouched — only the saved definition is removed — but this cannot be undone. Only the report's creator or an account admin can delete one.

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 saved report to delete.

Example

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

Browse report options

reports.describe_catalogread

List the report catalog: every dataset the report builder can query, with its available dimensions, metrics, and filters. Read this first to build a valid reports.run call.

Parameters

No parameters — POST an empty body.

Example

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

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

Saved reports

reports.list_savedread

List the saved report definitions this caller can see: reports shared with the account plus their own. Account admins (and API keys) see every saved report in the organization.

Parameters

No parameters — POST an empty body.

Example

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

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

Report email schedules

reports.list_schedulesread

List the standing email schedules for saved reports: which saved report, its daily/weekly/monthly cadence, the recipient emails, whether it's on, when it last sent, and any delivery error. Members see the schedules they created; account admins (and API keys) see every schedule. Read-only.

Parameters

No parameters — POST an empty body.

Example

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

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

Run report

reports.runread

Run a custom report over one of the curated datasets — contacts (Contacts), deals (Deals), calls (Calls), messages (Messages), appointments (Appointments), revenue (Revenue) — bucketed by day/week/month or as totals, optionally split by one dimension, with 1–3 metrics and the dataset's filters. Returns table rows and a chart-ready series. Read-only; money figures are integer cents.

Parameters

FieldTypeRequiredDescription
dataset"contacts" | "deals" | "calls" | "messages" | "appointments" | "revenue"requiredWhich curated dataset to report on. One of: contacts (Contacts), deals (Deals), calls (Calls), messages (Messages), appointments (Appointments), revenue (Revenue). Each dataset declares its own dimensions, metrics, and filters — discover them with reports.describe_catalog.
time_bucket"day" | "week" | "month" | "total"optionalHow to bucket time: day, week, month, or total for a single all-period rollup. Default: "day"
dimensionstring (or null)optionalOptionally ONE dataset-specific breakdown (e.g. contacts: source/owner/lifecycle/tag; deals: pipeline/stage/owner/status/contact_source; calls: direction/disposition/rep; messages: channel/origin; appointments: status/event_type/host; revenue: source, totals only). Null for time-only. Default: null
metricsstring[]required1–3 metric keys from the chosen dataset (e.g. deals: created/won/lost/value/won_value/avg_value).
filtersmap of string → stringoptionalOptional filters from the dataset's declared list (e.g. deals: date_basis/pipeline/owner/status). Unknown keys are rejected with the valid choices. Default: {}
range_preset"last_7_days" | "last_30_days" | "last_90_days" | "this_month" | "last_month" | "this_year" | … 2 moreoptionalThe date range: last_7_days, last_30_days, last_90_days, this_month, last_month, this_year, all_time, or custom with range_from/range_to. Default: "last_30_days"
range_fromstringoptionalCustom range start date, YYYY-MM-DD (inclusive). Only with range_preset=custom.
range_tostringoptionalCustom range end date, YYYY-MM-DD (inclusive). Only with range_preset=custom.

Example

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

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

Save report

reports.savewrite

Save a report definition so it can be re-run later, or update an existing saved report when an id is given. Setting shared=true makes it visible to every member of the account. The definition is validated against the report catalog before it is stored. Only the report's creator or an account admin can update one.

Parameters

FieldTypeRequiredDescription
idstring (uuid)optionalAn existing saved report to update. Omit to create a new one.
namestringrequiredThe saved report's name, shown in the saved-reports list.
sharedbooleanoptionaltrue = every account member sees it; false = only you (and admins). Default: false
dataset"contacts" | "deals" | "calls" | "messages" | "appointments" | "revenue"requiredWhich curated dataset to report on. One of: contacts (Contacts), deals (Deals), calls (Calls), messages (Messages), appointments (Appointments), revenue (Revenue). Each dataset declares its own dimensions, metrics, and filters — discover them with reports.describe_catalog.
time_bucket"day" | "week" | "month" | "total"optionalHow to bucket time: day, week, month, or total for a single all-period rollup. Default: "day"
dimensionstring (or null)optionalOptionally ONE dataset-specific breakdown (e.g. contacts: source/owner/lifecycle/tag; deals: pipeline/stage/owner/status/contact_source; calls: direction/disposition/rep; messages: channel/origin; appointments: status/event_type/host; revenue: source, totals only). Null for time-only. Default: null
metricsstring[]required1–3 metric keys from the chosen dataset (e.g. deals: created/won/lost/value/won_value/avg_value).
filtersmap of string → stringoptionalOptional filters from the dataset's declared list (e.g. deals: date_basis/pipeline/owner/status). Unknown keys are rejected with the valid choices. Default: {}
range_preset"last_7_days" | "last_30_days" | "last_90_days" | "this_month" | "last_month" | "this_year" | … 2 moreoptionalThe date range: last_7_days, last_30_days, last_90_days, this_month, last_month, this_year, all_time, or custom with range_from/range_to. Default: "last_30_days"
range_fromstringoptionalCustom range start date, YYYY-MM-DD (inclusive). Only with range_preset=custom.
range_tostringoptionalCustom range end date, YYYY-MM-DD (inclusive). Only with range_preset=custom.

Example

curl -X POST https://app.chirply.io/api/v1/actions/reports.save \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Example",
    "dataset": "contacts",
    "metrics": [
      "example"
    ]
  }'
Test with your API key

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

Email report now

reports.send_scheduled_nowwriteconfirm

Immediately runs one saved report and emails its current results — a REAL email to the given addresses, sent through the workspace's own connected email account (Mailgun/Resend, on the org's bill). Up to 20 addresses per send. Only works on a saved report the caller can see: one shared with the workspace, one they saved themselves, or any of them for a workspace admin. Omit recipients to use the ones saved on the report's email schedule. Does not move the schedule's clock: the next scheduled send still happens on time.

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
saved_report_idstring (uuid)requiredThe saved report to run and email. Ids come from reports.list_saved.
recipientsstring[]optionalWhere to send it. Omit to use the recipients saved on the report's email schedule.

Example

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

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

Email this report on a schedule

reports.set_schedulewrite

Create or update the ONE standing email schedule for a saved report: cadence ('daily' sends every day (UTC); 'weekly' sends every Monday (UTC); 'monthly' sends on the 1st of each month (UTC) — all UTC), the addresses it goes to, and whether it's on. Enabling it means the report's CURRENT results are emailed to those addresses automatically — real email through the workspace's own connected email account (Mailgun/Resend, on the org's bill) — until it is paused. No email is sent by this call itself. Only the schedule's creator or a workspace admin can change an existing one.

Parameters

FieldTypeRequiredDescription
saved_report_idstring (uuid)requiredThe saved report to email. Ids come from reports.list_saved; the caller must be able to see the report.
cadence"daily" | "weekly" | "monthly"optionalHow often it goes out: 'daily' sends every day (UTC); 'weekly' sends every Monday (UTC); 'monthly' sends on the 1st of each month (UTC). Periods are UTC. Default: "weekly"
recipientsstring[]requiredThe email addresses the report is delivered to (up to 20). Invalid or duplicate addresses are dropped; more than 20 is refused rather than truncated.
enabledbooleanoptionaltrue starts sending on schedule (needs at least one valid recipient); false pauses without losing the configuration. Default: true

Example

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

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