31 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.
Ad visits and other arrivals
tracking.acquisition_historyread
Read individual recorded website arrivals with their source, channel, campaign and timestamp, newest first. Later retargeting visits remain separate and never replace the contact's original source. Reads page-view acquisition evidence independently of ordinary browsing events; legacy rows use their recorded UTM/referrer when no explicit arrival marker exists. Each arrival carries url: the safe reopenable address for that visit, with its recorded query preserved and sensitive parameters stripped, or null when the stored address cannot be reopened. Filter by contact, resolved person, browser or site. Results follow the event retention window (395 days by default) and collection consent/limits; these are observed website arrivals, not ad impressions or a verified platform engagement report. Use nextOffset to load more; null means no more matching rows. Read-only, sends no messages and incurs no advertising cost.
Parameters
Field
Type
Required
Description
limit
integer
optional
Max rows to return (1–100). Default: 25
offset
integer
optional
Rows to skip. Default: 0
contact_id
string (uuid)
optional
Only recorded arrivals linked to this CRM contact.
person_id
string (uuid)
optional
Only recorded arrivals for this resolved visitor across browsers.
visitor_id
string (uuid)
optional
Only recorded arrivals for this individual browser.
Over MCP the same operation is the tool tracking_acquisition_history at https://app.chirply.io/api/mcp, same bearer token, same input.
Add allowed website
tracking.add_originwriteconfirmadmin only
Allow a website address to report tracking data against this site. THIS GRANTS THAT DOMAIN WRITE ACCESS TO THIS ORGANIZATION'S CRM: anything served from that origin can create page views and, while 'Match form fills to contacts' and 'Add new people as contacts' are on, create real contact records. Add only hosts the tenant actually controls — a typo'd or attacker-supplied origin is a standing injection route into the CRM, and nothing else re-checks it. Add every host the script legitimately runs on: apex, www, and staging. Removing it again is tracking.remove_origin.
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
site_id
string (uuid)
required
The tracking site to allow it on.
origin
string
required
Website address, e.g. 'https://www.acme.com'. A bare host works too.
Over MCP the same operation is the tool tracking_add_origin at https://app.chirply.io/api/mcp, same bearer token, same input.
Visitor identity totals
tracking.browser_summaryread
Count recorded browsers on one website in a time range: identified and unknown browser records, distinct matched CRM contacts, and distinct fingerprints on unknown browsers. A contact may use multiple browsers; fingerprints estimate device identity and traffic may include bots. Counts include every matching row, without a recent-list cap. Read-only; sends no messages and incurs no provider charges.
Parameters
Field
Type
Required
Description
site_id
string (uuid)
required
The tracked website or directory whose visitors to count.
since
string (date-time)
required
Include browsers last seen at or after this UTC timestamp.
Over MCP the same operation is the tool tracking_browser_summary at https://app.chirply.io/api/mcp, same bearer token, same input.
Test installation
tracking.check_installread
Check whether a tracked website's script is actually working, and explain why not if it isn't. Reports whether any beacon has ever arrived, when the last one did, and the specific blocker when one exists (collection paused, or no allowed website addresses so everything is being ignored). Read-only — it inspects what has already been received rather than fetching the site.
Over MCP the same operation is the tool tracking_check_install at https://app.chirply.io/api/mcp, same bearer token, same input.
Add a website
tracking.create_sitewriteadmin only
Register a website for tracking and mint its public embed key. Collection FAILS CLOSED: until at least one allowed origin is added (pass `origin`, or call tracking.add_origin), the script records nothing. Creating a site costs nothing and sends nothing.
Parameters
Field
Type
Required
Description
name
string
required
What to call this website here, e.g. 'Acme marketing site'.
origin
string
optional
First website address allowed to report, e.g. 'https://www.acme.com'. A bare host works too.
status
"active" | "paused" | "archived"
optional
'active' collects; 'paused' serves the script but records nothing. Default: "active"
Over MCP the same operation is the tool tracking_create_site at https://app.chirply.io/api/mcp, same bearer token, same input.
Delete a session recording
tracking.delete_replaywriteconfirmadmin only
PERMANENTLY delete one session recording and the stored video-like event data behind it. Cannot be undone. Use it to honour a visitor's erasure request, or to drop a recording that captured something it shouldn't have.
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 tracking_delete_replay at https://app.chirply.io/api/mcp, same bearer token, same input.
Delete a website
tracking.delete_sitewriteconfirmadmin only
Permanently delete a tracked website, along with every visitor and event recorded for it. The embed key stops working, so the script left on the site becomes a no-op. Contacts and their timeline entries are NOT deleted. 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 tracking_delete_site at https://app.chirply.io/api/mcp, same bearer token, same input.
Bot traffic visibility
tracking.get_bot_visibilityread
Report whether this workspace is currently hiding bot traffic from its visitor screens. When hideBots is true, visits whose recorded browser identity is an identified or suspected crawler, unfurler or script are left out of the Live Visitors board, the Activity Log's website visits and every count above them, and the Traffic & Sources report defaults to its Exclude bots filter. Nothing stops being collected and nothing is deleted at any setting — the evidence stays on every row, the report's estimated bot share is still measured before the filter, and turning it off restores every hidden row. Visits with no recorded browser identity are never hidden, because rows that predate user-agent capture carry none and hiding those would remove real history. Read-only: changes nothing and costs nothing.
Over MCP the same operation is the tool tracking_get_bot_visibility at https://app.chirply.io/api/mcp, same bearer token, same input.
Open a heat map
tracking.get_heatmapread
Fetch one page's heat map: which elements get clicked and how often (keyed by CSS selector, so it stays correct across screen sizes), the scroll-depth curve in 5% bands, and optionally the raw click density grid. Aggregate counts only — a heat map cannot be traced back to an individual visitor. Read-only, and free.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The heat map page id, from tracking.list_heatmap_pages.
include_grid
boolean
optional
Also return the click density grid — x is permille of page width (0-999), y is document pixels divided by 10. Large; leave off unless you are drawing the picture yourself.
grid_limit
integer
optional
Busiest grid buckets to return when include_grid is set. Default 1000.
Over MCP the same operation is the tool tracking_get_heatmap at https://app.chirply.io/api/mcp, same bearer token, same input.
Open a visitor
tracking.get_personread
Fetch one resolved visitor (person) with their whole story across every device: totals, first-touch attribution, the individual browsers folded into them, known IP addresses, and their most recent page views and form fills. This is the 'everything this person has ever done on our sites' view behind a visitor row. contactVia says how contactId was reached: "identified" is stored on the person, "friender" was resolved at read time from the recipient FRIENDER reported for the link they arrived on — an unverified provider claim about who a link was addressed to, not a sign-in. providerReferrer names the FRIENDER account that sent that link, when the provider reported one. Read-only.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The person's id (from tracking.list_people).
include_events
boolean
optional
Include the unified event timeline across all their browsers. Default: true
Over MCP the same operation is the tool tracking_get_person at https://app.chirply.io/api/mcp, same bearer token, same input.
Open a session recording
tracking.get_replayread
Fetch one session recording's details — who, which page, how long, how big, and when it expires — plus the link to watch it. Does NOT return the recorded events themselves: a recording is megabytes of DOM mutations that only the player can render, and it is not something a model can usefully read. Read-only, and free.
Over MCP the same operation is the tool tracking_get_replay at https://app.chirply.io/api/mcp, same bearer token, same input.
Open a tracked website
tracking.get_siteread
Fetch one tracking source by id. External websites include their allowed origins and exact install snippet. The system-owned 'Hosted pages' source has hosted_pages=true and covers platform-hosted websites, funnels, invoices, payment pages, and receipts automatically; no snippet or allowed-origin setup is required.
Over MCP the same operation is the tool tracking_get_site at https://app.chirply.io/api/mcp, same bearer token, same input.
Open a browser seen
tracking.get_visitorread
Fetch ONE BROWSER with its attribution and, optionally, its 50 most recent events — the 'what did this browser read?' view behind a contact record. This is a single browser, not the whole human: for everything one person has ever done across all their devices, use tracking.get_person, which is what the app's Visitor page shows. When the browser was never identified but FRIENDER reported the recipient of the link it arrived on, and that recipient matches exactly one contact, the match is returned as friender_contact_id with contact_via="friender"; that is an unverified provider claim about who a link was addressed to, not a sign-in, and a forwarded link means the reader may be somebody else. contact_via="identified" means contact_id was stored by a signed token or an identify/form submission. Read-only.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The visitor's id.
include_events
boolean
optional
Include this visitor's 50 most recent events. Default: true
Over MCP the same operation is the tool tracking_get_visitor at https://app.chirply.io/api/mcp, same bearer token, same input.
Copy install snippet
tracking.install_snippetread
For an EXTERNAL website, return the one-line <script> tag shown by the Copy button. Never instruct a user to install this on the system-owned 'Hosted pages' source: platform-hosted websites, funnels, invoices, payment pages, and receipts are tracked automatically and require no snippet.
Over MCP the same operation is the tool tracking_install_snippet at https://app.chirply.io/api/mcp, same bearer token, same input.
List website activity
tracking.list_eventsread
List recorded website activity — page views, form fills, identifications, and custom events — newest first with pagination. Each event includes trafficClassification (status, label, confidence, agent and reason): identified_bot is a self-reported crawler, suspected_bot is an automation signature, likely_human is an estimate, and unknown means insufficient event-time evidence. Browser names are spoofable; provider identity is not verified. Legacy events remain unknown. Includes recorded_url to reopen its safe saved query. FRIENDER identify events expose identity_provider, provider_name, provider_profile and provider_referrer (sender name and fb_profile_url) in props as unverified link-recipient reports. Page views also include props.chirply_url_parameters: filtered URL parameter names mapped to arrays of distinct values, including custom parameters, retained per event rather than overwritten across visits. Sensitive names/values are excluded; capture is bounded to 64 names, 8 values per name, 500 characters per value and 8192 characters aggregate. Each event includes its own utm/referrer and props.chirply_acquisition when captured by the current tracker: v=1 with touch=null marks ordinary navigation; a touch object records that arrival's source, campaign, landing path and time. These are individual recorded arrivals, not changes to the contact's original acquisition source. Legacy rows retain raw UTM/referrer evidence. Filter by site, visitor, contact, kind, or URL path. Read-only; recorded events follow the platform's retention window (395 days by default).
Parameters
Field
Type
Required
Description
limit
integer
optional
Max rows to return (1–100). Default: 25
offset
integer
optional
Rows to skip. Default: 0
site_id
string (uuid)
optional
Only events on this tracked website.
visitor_id
string (uuid)
optional
Only events from this browser.
person_id
string (uuid)
optional
Only events from this resolved person (visitor), across all their browsers.
Over MCP the same operation is the tool tracking_list_events at https://app.chirply.io/api/mcp, same bearer token, same input.
List heat maps
tracking.list_heatmap_pagesread
List the pages that have a click/scroll heat map, busiest first, with view and click counts, rage-click totals, and how far down the page half of visitors reached. Heat is kept separately per screen size (mobile/tablet/desktop) because a phone and a desktop render different layouts — filter by `device` to compare like with like. Read-only, and free.
Parameters
Field
Type
Required
Description
limit
integer
optional
Max rows to return (1–100). Default: 25
offset
integer
optional
Rows to skip. Default: 0
site_id
string (uuid)
optional
Only pages of this tracked website.
device
"mobile" | "tablet" | "desktop"
optional
Only heat maps captured on this screen size.
path
string
optional
Only the page at this exact path, e.g. '/pricing'.
Over MCP the same operation is the tool tracking_list_origins at https://app.chirply.io/api/mcp, same bearer token, same input.
List visitors
tracking.list_peopleread
List website visitors grouped as PEOPLE rather than browsers — one entry per resolved human, folding together every device and anonymous session stitched to them. Newest activity first, with each person's visit count, device count, and a link to their contact. contactVia says how that link was reached: "identified" means it is stored on the person (a signed token or an identify/form submission), while "friender" means it was resolved at read time from the recipient FRIENDER reported for the link they arrived on — an unverified provider claim about who a link was addressed to, not a sign-in, since a forwarded link means the reader may be somebody else. The identified filter matches only the stored kind. Read-only.
Parameters
Field
Type
Required
Description
limit
integer
optional
Max rows to return (1–100). Default: 25
offset
integer
optional
Rows to skip. Default: 0
site_id
string (uuid)
optional
Only people who have visited this tracked website.
identified
boolean
optional
true = only people matched to a contact; false = only still-anonymous people.
query
string
optional
Match against a known IP address the person has been seen at.
Over MCP the same operation is the tool tracking_list_people at https://app.chirply.io/api/mcp, same bearer token, same input.
List session recordings
tracking.list_replaysread
List session recordings — replayable captures of what a visitor did on a tracked page — newest first, with who it was (when identified), which page, how long, and whether the recording was cut off. Filter to one site, contact, or person. Recording is opt-in per site and off by default. Read-only, and free.
Parameters
Field
Type
Required
Description
limit
integer
optional
Max rows to return (1–100). Default: 25
offset
integer
optional
Rows to skip. Default: 0
site_id
string (uuid)
optional
Only recordings from this tracked website.
contact_id
string (uuid)
optional
Only recordings of this contact.
person_id
string (uuid)
optional
Only recordings of this resolved person.
identified
boolean
optional
true = only recordings linked to a contact; false = only anonymous ones.
min_seconds
integer
optional
Only recordings at least this many seconds long. Useful for skipping bounces, which are mostly empty.
Over MCP the same operation is the tool tracking_list_replays at https://app.chirply.io/api/mcp, same bearer token, same input.
List tracked websites
tracking.list_sitesread
List the organization's tracking sources, newest first. A source with hosted_pages=true is the system-owned 'Hosted pages' source for platform-hosted websites, funnels, invoices, payment pages, and receipts; it is tracked automatically and never needs an install snippet. Other sources are external websites that require the tracking script. Returns no visitor data.
Parameters
Field
Type
Required
Description
limit
integer
optional
Max rows to return (1–100). Default: 25
offset
integer
optional
Rows to skip. Default: 0
status
"active" | "paused" | "archived"
optional
Only sites in this status. 'paused' sites still serve the script but record nothing.
Over MCP the same operation is the tool tracking_list_sites at https://app.chirply.io/api/mcp, same bearer token, same input.
Browsers & fingerprints
tracking.list_visitorsread
List individual BROWSERS seen on a tracked website — the rows the app labels "Browsers seen" — most recently active first, with their page-view counts and first-touch attribution (first referrer, landing page, and campaign parameters). One row is one browser, so the same human on a laptop and a phone appears twice; for one row per resolved person use tracking.list_people, which is what the app's own Visitors list shows. Filter by site, contact, person, identified/unknown status, fingerprint availability, last-seen timestamp and a search term matching IP, fingerprint, browser key or device user agent. Includes fingerprint, browser key and device evidence for every row. Read-only; sends no messages and incurs no provider charges.
Parameters
Field
Type
Required
Description
limit
integer
optional
Max rows to return (1–100). Default: 25
offset
integer
optional
Rows to skip. Default: 0
site_id
string (uuid)
optional
Only visitors of this tracked website.
contact_id
string (uuid)
optional
Only browsers linked to this contact.
person_id
string (uuid)
optional
Only browsers that belong to this resolved person (visitor).
identified
boolean
optional
true = only visitors linked to a contact; false = only anonymous ones.
fingerprint
"present" | "missing"
optional
Filter to browsers with a recorded device fingerprint, or those without one. Fingerprints are estimates, not proof of human identity.
query
string
optional
Search by IP, fingerprint, browser key or device user agent.
since
string (date-time)
optional
Only browsers last seen at or after this UTC timestamp; omit for all-time history.
Over MCP the same operation is the tool tracking_list_visitors at https://app.chirply.io/api/mcp, same bearer token, same input.
Live visitors
tracking.live_visitorsread
Who is on the organization's tracked websites right now, plus the most recent visitors. Each row includes trafficClassification with status, label, confidence, agent and reason: identified_bot (self-reported crawler), suspected_bot (automation signature), likely_human (browser estimate) or unknown. Neither browser identity nor reported engagement proves a human; provider identities are unverified. Includes: the page each person is reading, how long that page and the current session have been open, how many pages are in the current session, when activity last arrived, which visitors are known contacts, and first/latest-source attribution badges with channel and UTM/campaign details even for anonymous visitors. A visitor matched to a contact who has paid also carries that person's money — lifetime value net of refunds and monthly run rate in integer cents, their payment and live-subscription counts, and how many connected Stripe accounts they have paid — so a customer browsing your pricing page is distinguishable from a stranger; the field is absent for anyone who has never paid. Returns everyone with a live open-tab lease followed by the most-recently-seen visitors up to the limit, regardless of how long ago they left. Read-only.
Parameters
Field
Type
Required
Description
site_id
string (uuid)
optional
Only visitors of this tracked website.
limit
integer
optional
Max visitors to return (1–100). Default: 50
active_only
boolean
optional
Only people with at least one open browser tab whose presence lease is still live. Default: false
hide_bots
boolean
optional
Whether to leave crawler, unfurler and script traffic out of the rows AND the counts. Omit to follow the workspace's own saved setting, which is what its screens show; pass true or false to override it for this call only, without changing the setting. Read tracking.get_bot_visibility to see what the workspace chose.
Over MCP the same operation is the tool tracking_live_visitors at https://app.chirply.io/api/mcp, same bearer token, same input.
Merge visitors
tracking.merge_peoplewriteconfirmadmin only
Merge two resolved visitors (people) into one, for when they are really the same human seen as two and the automatic stitching missed it. Every browser, page view and form fill from the second is moved onto the first, their counts are recombined, and the second visitor is deleted. Contacts and their timelines are untouched. 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.
Parameters
Field
Type
Required
Description
survivor_id
string (uuid)
required
The visitor to KEEP. Its contact link, if any, is the one that survives.
Over MCP the same operation is the tool tracking_merge_people at https://app.chirply.io/api/mcp, same bearer token, same input.
Website tracking
tracking.overviewread
The Website tracking landing screen's headline numbers, for the WHOLE account rather than one site: total visitors ever seen across every tracked website, how many of them are matched to a CRM contact, and how many are on the sites right now. Also lists each tracked website with its own lifetime and live counts, split into the tenant's own installed sites and the system-owned 'Hosted pages' source. These are LIFETIME totals with no date window — tracking.stats answers a single site over the last 1–90 days and cannot reproduce these numbers, and tracking.live_visitors only ever answers 'in the last few minutes'. Read-only.
Parameters
Field
Type
Required
Description
include_archived
boolean
optional
Include archived tracked websites. The app's landing screen hides them, so this is false by default. Default: false
Over MCP the same operation is the tool tracking_overview at https://app.chirply.io/api/mcp, same bearer token, same input.
Remove allowed website
tracking.remove_originwriteconfirmadmin only
Stop accepting tracking data from one website address. Takes effect on the next page view; already-recorded data is kept. Removing the last origin stops collection entirely.
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
The allowed-origin row's id (from tracking.list_origins).
Over MCP the same operation is the tool tracking_remove_origin at https://app.chirply.io/api/mcp, same bearer token, same input.
Start a heat map over
tracking.reset_heatmapwriteconfirmadmin only
PERMANENTLY delete one page's heat map — every click position, element count and scroll sample for it. There is no per-click history behind these totals, so this cannot be undone and the data cannot be rebuilt. The honest use is after a redesign, when the old clicks describe a layout that no longer exists. Collection continues from zero on the next visit.
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 tracking_reset_heatmap at https://app.chirply.io/api/mcp, same bearer token, same input.
Bots hidden
tracking.set_bot_visibilitywriteadmin only
Turn this workspace's bot-traffic filter on or off. It is remembered until it is changed again, and it applies to everyone in the workspace at once: the Live Visitors board and page, the Activity Log's website visits, every visitor count above those lists, and the Traffic & Sources report's default filter. Setting it to true hides visits whose recorded browser identity is an identified or suspected crawler, unfurler or script; setting it to false shows them again, still labelled with what they are. This changes DISPLAY only and is fully reversible — no tracking is switched off, no stored visit, page view or contact is altered or deleted, no message is sent and nothing is charged. Visits with no recorded browser identity stay visible at either setting. Owner or admin only, because it changes what a visitor total means for every teammate reading it.
Parameters
Field
Type
Required
Description
hide_bots
boolean
required
True hides crawler, unfurler and script traffic from visitor lists, the activity log and their counts. False shows it again, badged as bot traffic.
Over MCP the same operation is the tool tracking_set_bot_visibility at https://app.chirply.io/api/mcp, same bearer token, same input.
Record sessions I can watch back
tracking.set_replaywriteconfirmadmin only
TURN SESSION RECORDING ON OR OFF for a tracked website. When on, the script captures what real visitors do on the tenant's pages — mouse movement, clicks, scrolling and DOM changes — and stores it so anyone on the team can replay the visit at tracking.get_replay. Everything a visitor types is masked in their browser before it is ever sent, and pages listed in the site's excluded paths are never recorded, but this is still the most privacy-consequential switch in the product: it is OFF BY DEFAULT and deliberately opt-in, and whoever turns it on is taking on whatever their own privacy policy and local law require them to disclose. Recordings are deleted automatically once they reach retention_days old (default 30). Turning it off stops new recordings immediately; recordings already captured are kept until they age out — delete those with tracking.delete_replay. It is split out of tracking.update_site precisely so it cannot be flipped as a side effect of editing some other setting.
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
The tracked website whose session recording to change.
enabled
boolean
required
true starts recording real visitors' sessions on this website; false stops new recordings.
retention_days
integer
optional
How many days a recording is kept before it deletes itself (1–365). Defaults to the site's current value, which starts at 30. Shorter is kinder to visitors and cheaper to store. Omit to leave it alone.
Over MCP the same operation is the tool tracking_set_replay at https://app.chirply.io/api/mcp, same bearer token, same input.
Website tracking stats
tracking.statsread
Headline numbers for a tracked website over a recent window: page views, unique visitors seen, how many were identified as contacts, and the busiest pages. Read-only.
Over MCP the same operation is the tool tracking_stats at https://app.chirply.io/api/mcp, same bearer token, same input.
Traffic & Sources
tracking.traffic_reportread
Read historical website traffic for a date range: exact visitors (tracked browsers), reconstructed visits, page views, daily trend, destination websites and arrival sources, plus a paginated visit list. Includes paid, organic, other and unattributed visit totals, the same visits split by the fine-grained arrival channel behind each bucket (channelKinds, e.g. organic_search / meta_social / direct), source/type breakdowns and per-visit classification evidence. Filter by website, destination hostname, source, traffic channel and bot_filter (all, exclude_bots, bots_only, likely_human). Exclude bots removes entire visits with identified or suspected automation evidence; unknown visits stay included. Every aggregate, source attribution, daily chart and paginated visit follows the bot filter. trafficQuality reports unfiltered totals and per-status counts within the same date/site/source/channel scope, so bot share remains measurable after exclusion; visits expose trafficStatus. The strongest event-time signal in the retained visit before the report end determines its status, including earlier pages before the range start. Legacy evidence stays unknown; likely human is an estimate, not verified identity. Traffic type comes from the same classifier the contact records use, then rolls up into four columns. Paid requires a recognized ad-click ID or a paid medium on a known ad network; a Meta click ID alone does not establish paid status, because Meta stamps one on organic post links too — that visit reads meta_social. Organic covers search and answer engines, unpaid social posts, and direct arrivals that carried no referrer and no campaign tag, since nobody buys a click that arrives carrying nothing; channelKind separates them. Other covers email, SMS, affiliate links and referrals from other websites. Unknown means only that the visit resumed after an inactivity break with no new arrival evidence. A recorded arrival or the site's inactivity threshold begins a visit; source and channel are the visit's original event evidence, never a contact's latest source. Only retained, recorded page views count; unknown sources remain explicit. Read-only: no messages sent and no provider spend. Requires Website Visitors access.
Parameters
Field
Type
Required
Description
from
string (date-time)
required
Inclusive start timestamp, with timezone offset.
to
string (date-time)
required
Exclusive end timestamp, with timezone offset.
timezone
string
optional
IANA timezone for daily traffic totals, such as America/Chicago. Default: "UTC"
site_id
string (uuid)
optional
Restrict to one tracked website in this workspace.
host
string
optional
Destination hostname from a website breakdown row. A leading www. is ignored: www.example.com and example.com are reported as one website, example.com.
source
string
optional
Exact source key returned by this report, including its prefix; for example utm:facebook or ref:google.com.
channel
"paid" | "organic" | "other" | "unknown"
optional
Filter arrival traffic type: paid (ad-click ID or paid medium), organic (search, answer engines, unpaid social, and direct arrivals), other (email, SMS, affiliate and website referrals), or unknown (a session resumed after an inactivity break with no new arrival evidence). Classification reads the visit's own original arrival evidence, never the visitor's latest source.
Omit or use all for all visits. exclude_bots removes entire visits with identified or suspected bot evidence but retains unknowns. bots_only includes both bot categories; likely_human includes browser estimates only, not verified humans. Uses strongest event-time evidence in the reconstructed visit before the range end, never the visitor's latest browser identity. All totals, attribution, charts and pagination follow this filter; trafficQuality remains before this filter for the same date/site/source/channel scope.
offset
integer
optional
Visit row offset. Aggregated totals always include all matching visits. Default: 0
limit
integer
optional
Number of individual visits to return per page, from 1 to 100. Default: 50
Over MCP the same operation is the tool tracking_traffic_report at https://app.chirply.io/api/mcp, same bearer token, same input.
Edit tracking settings
tracking.update_sitewriteconfirmadmin only
Rename a tracked website, pause or resume collection, or change how it behaves. Omitted fields are left alone. Setting status to 'paused' stops all collection immediately without the tenant editing their website's HTML. This covers every control on the site's settings screen EXCEPT session replay — screen recording is turned on and off through tracking.set_replay, which requires an explicit human approval.
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
The tracking site to edit.
name
string
optional
New display name.
status
"active" | "paused" | "archived"
optional
'active' collects; 'paused' records nothing.
track_forms
boolean
optional
Auto-capture submissions of forms already on the site. Never reads password, card, or hidden fields.
identify_from_forms
boolean
optional
Turn an email or phone captured from a form into a CRM identification, linking that browser's whole visit history to the contact.
create_contacts
boolean
optional
Allow an identification to CREATE a contact when no existing one matches. Off means only already-known people are ever linked.
mask_query
boolean
optional
Strip query strings from stored URLs. Campaign parameters (utm_*, gclid, fbclid) are still captured separately, so attribution is not lost.
respect_dnt
boolean
optional
Honour the visitor's Do Not Track / Global Privacy Control signal.
heatmaps
boolean
optional
Collect click and scroll heat maps for this site's pages. Aggregate counts only — no keystrokes, no session recording, and no way to trace a heat map back to one person.
session_minutes
integer
optional
Minutes of inactivity that start a new session (1–1440).
exclude_paths
string[]
optional
Path prefixes never recorded, e.g. ['/account', '/checkout']. Replaces the whole list. Anything whose path starts with one of these is dropped at ingest — pageviews, form captures, heat maps and recordings alike.
exclude_ips
string[]
optional
Internet addresses whose traffic is ignored entirely, e.g. ['203.0.113.42'] — usually the tenant's own office, so their team browsing their own site doesn't inflate the numbers. Replaces the whole list; up to 50 entries. Matched LITERALLY, not as CIDR ranges, and IPv6 is accepted. Anything that isn't address-shaped is discarded silently.