5 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.
Acquisition sources
attribution.acquisition_outcomesread
Read first-touch acquisition channels, sources and campaigns from contacts' saved attribution, with new leads, noncanceled appointments and confirmed live-mode invoice, funnel and connected Stripe collections in an explicit UTC window. Group by channel, source or campaign; absent evidence stays unknown and unlinked payments stay unattributed. Mirrored payment intents are deduplicated and currencies stay separate. Counts are period activity, not one acquisition cohort or proof an ad caused a payment. No manual source costs are assigned to campaigns. Read-only; makes no ad-provider calls, changes no contacts and charges nobody.
Parameters
Field
Type
Required
Description
from
string (date)
required
Inclusive UTC start date, YYYY-MM-DD.
through
string (date)
required
Inclusive UTC end date, YYYY-MM-DD. Maximum window is 366 days.
group_by
"channel" | "source" | "campaign"
optional
First-touch grouping: channel; channel plus UTM source (ad network fallback); or channel plus source plus campaign name/ID. Missing acquisition evidence stays unknown. Never uses the contact's operational creation source. Default: "channel"
Over MCP the same operation is the tool attribution_acquisition_outcomes at https://app.chirply.io/api/mcp, same bearer token, same input.
Record source cost
attribution.record_spendwriteadmin only
Record one manually verified source cost, currency, UTC date and evidence reference for reporting. Does not create ads, charge an account or transmit anything to an ad platform. Duplicate source/date/currency/reference combinations are rejected. Entries remain in the audit history; correct an error by voiding the entry and recording a replacement with a new reference. Owner/admin only.
Parameters
Field
Type
Required
Description
source
string
required
Exact contact source key to assign this cost to, such as website or facebook_lead_ad. This is a manual assignment, not inferred campaign attribution.
spent_on
string (date)
required
UTC calendar date the cost was incurred, YYYY-MM-DD.
currency
"usd" | "eur" | "gbp" | "cad" | "aud"
required
Currency of this cost. Supported currencies use two decimal places; no exchange conversion occurs.
amount_minor
integer
required
Cost in minor units: 1250 means 12.50. Zero records a verified zero-cost day. This records a cost and does not charge an ad account.
reference
string
required
Unique evidence reference within this source, date and currency, such as an ad-account ID plus invoice or export row ID. Reusing it is rejected to prevent duplicates.
note
string
optional
Optional provenance or explanation of how this source was assigned. Never paste credentials. Default: ""
Over MCP the same operation is the tool attribution_record_spend at https://app.chirply.io/api/mcp, same bearer token, same input.
Revenue by Source
attribution.revenue_by_sourceread
Which lead source made the account money: collected revenue (invoices, funnels, and connected Stripe, deduped so the same charge is never counted twice) grouped by each PAYING CONTACT's recorded source, for an optional date range. Attribution is single-touch: every payment counts toward the one source stamped on the contact when it was created — no fractional multi-touch. Each source also carries its paying-contact count, refunds, and a first-touch UTM campaign breakdown from the contact's earliest tracked website visit. Three totals are reported separately and should not be conflated: knownSourceCents is money from a real acquisition channel; importedCents is money from contacts an importer created (Stripe customer sync, file import, API), which records how the record arrived and says nothing about what acquired the customer; unattributedCents is money on payments with no linked contact. A workspace that imported its customers can legitimately show zero known-source revenue. Read-only; changes nothing and charges nobody.
Parameters
Field
Type
Required
Description
from
string (date-time)
optional
Inclusive start of the collection window as an ISO 8601 timestamp. Filters by when the money was collected, not when the contact was created. Omit for all history.
to
string (date-time)
optional
Exclusive end of the collection window as an ISO 8601 timestamp. Omit to continue through now.
Over MCP the same operation is the tool attribution_revenue_by_source at https://app.chirply.io/api/mcp, same bearer token, same input.
Source outcomes and costs
attribution.source_outcomesread
Read leads created, noncanceled appointments booked and collected revenue by the contact's currently recorded source in an explicit UTC window. Only live-mode payments are included. Revenue stays separated by currency and deduplicates mirrored Stripe charges. Costs are manually entered evidence, not synchronized ad-platform spend; absent costs are unknown. Returns the latest 100 cost entries. Counts describe activity during the same period, not a single acquisition cohort; revenue/cost ratios are observational and exclude service costs. Read-only; makes no ad-provider calls and charges nobody.
Parameters
Field
Type
Required
Description
from
string (date)
required
Inclusive UTC start date, YYYY-MM-DD.
through
string (date)
required
Inclusive UTC end date, YYYY-MM-DD. Maximum window is 366 days.
Over MCP the same operation is the tool attribution_source_outcomes at https://app.chirply.io/api/mcp, same bearer token, same input.
Void source cost
attribution.void_spendwriteadmin only
Exclude an erroneous manually recorded cost from future source-outcome totals while preserving its original values and who voided it. Changes reporting only; it does not refund money or change an ad account. A replacement uses a new evidence reference. Owner/admin only.
Parameters
Field
Type
Required
Description
entry_id
string (uuid)
required
The cost entry ID returned by source_outcomes or record_spend.