← All action domains

Call tracking

20 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 number to a pool

call_tracking.add_number_to_poolwriteconfirmadmin only

Add one of the organization's phone numbers to a DNI pool. It becomes a rotating tracking number: the DNI script hands it to a visitor, and a call to it is attributed to that visitor's source. THIS REPOINTS A LIVE BUSINESS PHONE LINE — the number's inbound routing switches to the campaign engine, so it stops reaching whoever answers it today, and it starts being shown to strangers on a public web page. If the number is already assigned elsewhere in call tracking, this silently moves it. Provision the number first with the telephony tools.

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
pool_idstring (uuid)requiredThe pool to add the number to.
phone_number_idstring (uuid)requiredThe phone_numbers row to add.
labelstringoptionalA name for this number in reports.

Example

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

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

Archive a campaign

call_tracking.archive_campaignwriteconfirmadmin only

Archive a call-tracking campaign. Its tracking numbers stop routing to it (calls fall through to the team bridge) and it drops out of the active list. The call history is kept. Reversible by setting status back to active.

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 campaign to archive.

Example

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

Make a number a tracking number

call_tracking.assign_numberwriteconfirmadmin only

Point one of the organization's existing phone numbers at a call-tracking campaign. THIS REPOINTS A LIVE BUSINESS PHONE LINE: it switches that number's inbound routing away from whatever answers it today (the team, an IVR, an AI receptionist) to the campaign engine, so the very next real caller is routed by the campaign's destination list instead. If the number is already assigned elsewhere in call tracking, this silently re-points it. Does not buy a number — provision one first with the telephony tools, then assign it here.

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
phone_number_idstring (uuid)requiredThe phone_numbers row to use as a tracking number.
campaign_idstring (uuid)requiredThe campaign this number should route to.
labelstringoptionalA name for this number in reports, e.g. 'Billboard I-35'.

Example

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

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

Call-tracking stats

call_tracking.call_statsread

Headline numbers over a recent window: total tracked calls, how many were answered, how many converted, and the running revenue / payout / margin. Optionally scoped to one campaign. Read-only.

Parameters

FieldTypeRequiredDescription
campaign_idstring (uuid)optionalOnly this campaign; omit for all campaigns.
daysintegeroptionalHow many days back to count (1–365). Default: 30

Example

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

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

Create call-tracking campaign

call_tracking.create_campaignwriteadmin only

Create a call-tracking campaign. Set the ordered list of destinations calls should route to (`route_to`), how a call counts as a conversion, and any geo / repeat-caller filters. Creating a campaign costs nothing and places no calls; it starts in 'draft' unless you set a status. Point a tracking number at it with call_tracking.assign_number to go live.

Parameters

FieldTypeRequiredDescription
namestringrequiredWhat to call this campaign, e.g. 'Roofing — Google Ads'.
status"draft" | "active" | "paused" | "archived"optional'active' routes live calls; 'draft'/'paused' don't. Default: "draft"
route_toobject[]optionalOrdered destinations to ring. The engine waterfalls through them: each is tried in turn when the previous doesn't answer.
route_to[].e164stringrequiredDestination phone number to ring, in E.164 (e.g. +14045551234).
route_to[].labelstringoptionalA name for this destination, shown in reports.
route_to[].timeoutintegeroptionalSeconds to ring this destination before trying the next one (5–120).
overflow_e164stringoptionalFallback number dialed when every destination fails. Blank = play a goodbye.
ring_timeout_secondsintegeroptionalDefault seconds to ring each destination before moving on (5–120). Default: 20
conversion_type"duration" | "webhook" | "manual"optional'duration' converts a call that stays connected past `conversion_seconds`; 'webhook' waits for a signed POST to /api/ct/conversion; 'manual' waits for someone to mark it. Default: "duration"
conversion_secondsintegeroptionalFor duration conversions: connected seconds that count as a conversion. Default: 60
recording_enabledbooleanoptionalRecord calls on this campaign (dual-channel, stored to the tenant's R2). Recording real callers without consent is regulated in many US states — pair it with recording_announce. Default: true
recording_announcebooleanoptionalPlay 'this call may be recorded' to the caller before connecting. Default: false
geo_mode"allow" | "block"optional'allow' = only listed areas; 'block' = all but listed.
geo_statesstring[]optionalUS state codes for the geo filter, e.g. ['CA','TX'].
geo_area_codesstring[]optionalArea codes for the geo filter.
geo_countriesstring[]optionalISO country codes for the geo filter.
dedupe_window_secondsintegeroptionalTreat a repeat call from the same number within this window as a duplicate (0 = off). Default: 0
dedupe_action"none" | "sticky_route" | "block_payout" | "block_route"optionalWhat to do with a duplicate: 'block_route' rejects it; 'sticky_route'/'block_payout' still connect it. Default: "none"

Example

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

Create a number pool

call_tracking.create_poolwriteadmin only

Create a DNI number pool for a campaign and mint its public embed key. Add tracking numbers to it with call_tracking.add_number_to_pool, then paste the returned snippet on the page. Creating a pool costs nothing; the numbers you add are real Twilio numbers the tenant already pays for.

Parameters

FieldTypeRequiredDescription
campaign_idstring (uuid)requiredThe campaign calls to this pool's numbers belong to.
namestringrequiredWhat to call this pool, e.g. 'Homepage — paid search'.
target_sizeintegeroptionalHow many numbers the pool should hold (size to peak concurrent visitors). Too few and two visitors share a number, which mis-attributes their calls. Default: 10
sticky_ttl_secondsintegeroptionalHow long a visitor keeps the same number (seconds). Default: 1800
allowed_originsstring[]optionalWebsite addresses allowed to request a number. Empty = any origin.

Example

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

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

Open a tracked call

call_tracking.get_callread

Fetch one tracked call by its ct_calls id, with full attribution, routing outcome, and conversion + money fields. The embedded `call` is the call-log row, whose `kind` says what handled the call once it arrived — `call_tracking`, or `ai_agent`/`queue` when an AI agent or a call queue took it.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe tracked call's id (ct_calls.id).

Example

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

Open a call-tracking campaign

call_tracking.get_campaignread

Fetch one call-tracking campaign by id, with its full routing list, geo filter, conversion rule, and the signing secret for its external conversion webhook.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe campaign's id.

Example

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

Copy DNI snippet

call_tracking.get_dni_snippetread

Return the one-line <script> tag that enables dynamic number insertion for a pool. Paste it on the page whose phone numbers should swap per visitor; mark the numbers with data-ct-number.

Parameters

FieldTypeRequiredDescription
pool_idstring (uuid)requiredThe pool whose snippet to return.

Example

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

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

Open a number pool

call_tracking.get_poolread

Fetch one DNI number pool with the tracking numbers in it and the exact <script> snippet to paste on the page whose calls it should attribute.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe pool's id.

Example

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

List tracked calls

call_tracking.list_callsread

List calls that came through tracking numbers, newest first, with their attribution (campaign, source/UTM/keyword, caller state) and outcome (answered, duration, conversion). The embedded `call` is the call-log row, whose `kind` says what handled the call once it arrived — `call_tracking` for a straight tracked call, or `ai_agent`/`queue` when an AI agent or a call queue took it. Filter by campaign, conversion status, or a date window.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
campaign_idstring (uuid)optionalOnly calls on this campaign.
conversion_status"pending" | "converted" | "not_converted" | "rejected"optionalOnly calls in this conversion state.
sincestringoptionalISO timestamp; only calls at or after it.

Example

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

List call-tracking campaigns

call_tracking.list_campaignsread

List this organization's call-tracking campaigns, newest first. A campaign ties tracking numbers to a routing plan and a conversion rule. Returns each campaign's status, conversion rule, and routing settings — not its call log.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
status"draft" | "active" | "paused" | "archived"optionalOnly campaigns in this status.
querystringoptionalText to match in the campaign name.

Example

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

List conversions

call_tracking.list_conversionsread

List conversion signals recorded against tracked calls (duration, webhook, or manual), newest first. Optionally for one campaign or one call.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
campaign_idstring (uuid)optionalOnly conversions on this campaign.
ct_call_idstring (uuid)optionalOnly conversions for this tracked call.

Example

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

List tracking numbers

call_tracking.list_numbersread

List the phone numbers wired as tracking numbers, optionally for one campaign. Each maps a `phone_numbers` row to a campaign (or a DNI pool).

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
campaign_idstring (uuid)optionalOnly tracking numbers for this campaign.

Example

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

List number pools

call_tracking.list_poolsread

List DNI number pools, optionally for one campaign. A pool rotates a set of tracking numbers so each web visitor sees a unique number keyed to their source.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
campaign_idstring (uuid)optionalOnly pools for this campaign.

Example

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

Mark a call converted

call_tracking.mark_conversionwriteconfirmadmin only

Manually mark a tracked call as converted (or rejected). Records a conversion audit entry and — once the pay-per-call money layer is live — is what bills the buyer and credits the publisher for that call. Use for campaigns whose conversion is decided by a human, or to correct an automatic decision.

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
ct_call_idstring (uuid)requiredThe tracked call to mark (ct_calls.id).
convertedbooleanoptionaltrue = converted; false = rejected. Default: true
value_centsintegeroptionalOptional conversion value in cents (for value-based revenue).
notestringoptionalWhy — recorded on the conversion audit entry.

Example

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

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

Pause or resume a campaign

call_tracking.pause_campaignwriteadmin only

Pause a call-tracking campaign (stop routing new calls to it) or resume it. A convenience wrapper over the status field.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe campaign to pause or resume.
pausedbooleanoptionaltrue = pause; false = set active. Default: true

Example

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

Stop tracking on a number

call_tracking.release_numberwriteconfirmadmin only

Detach a tracking number from its campaign or pool and return it to normal team routing. THIS REPOINTS A LIVE BUSINESS PHONE LINE — the next real caller reaches the team instead of the campaign's destinations — and if the number is in a DNI pool, every web visitor currently holding it loses their attribution. The number is not released from Twilio; it just stops being a tracking number. Past calls ARE kept in full: ct_calls rows reference the campaign and the phone number, not this assignment, so reports and recordings survive. What does NOT survive is the tracking-number record itself — its report label ('Billboard I-35') and its publisher attribution are hard-deleted with no undo, and re-assigning the number creates a fresh 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
phone_number_idstring (uuid)requiredThe tracking number to detach.

Example

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

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

Edit call-tracking campaign

call_tracking.update_campaignwriteconfirmadmin only

Edit a call-tracking campaign — its routing list, conversion rule, filters, recording, or status. Omitted fields are left alone, INCLUDING the four geo fields: sending only geo_states leaves the stored area codes, countries and mode as they were. Passing `route_to` REPLACES the whole destination list, and this campaign may be answering live calls right now: repointing it sends every subsequent caller somewhere else, and setting status to 'paused' stops the campaign's tracking numbers connecting anyone at all.

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 campaign to edit.
namestringoptionalNew name.
status"draft" | "active" | "paused" | "archived"optional'active' routes live calls; 'paused' doesn't.
route_toobject[]optionalReplacement ordered destination list (replaces the whole list).
route_to[].e164stringrequiredDestination phone number to ring, in E.164 (e.g. +14045551234).
route_to[].labelstringoptionalA name for this destination, shown in reports.
route_to[].timeoutintegeroptionalSeconds to ring this destination before trying the next one (5–120).
overflow_e164stringoptionalFallback number when every destination fails.
ring_timeout_secondsintegeroptionalDefault seconds to ring each destination before moving on (5–120).
conversion_type"duration" | "webhook" | "manual"optional'duration' converts a call that stays connected past `conversion_seconds`; 'webhook' waits for a signed POST to /api/ct/conversion; 'manual' waits for someone to mark it.
conversion_secondsintegeroptionalFor duration conversions: connected seconds that count as a conversion.
recording_enabledbooleanoptionalRecord calls on this campaign (dual-channel, stored to the tenant's R2). Recording real callers without consent is regulated in many US states — pair it with recording_announce.
recording_announcebooleanoptionalPlay 'this call may be recorded' to the caller before connecting.
routing_strategy"priority" | "round_robin" | "weighted"optionalHow destinations in the same tier are chosen (used with the Layer 3 ring plan).
require_call_confirmationbooleanoptionalRequire a destination to press 1 to accept a call (anti-voicemail).
geo_mode"allow" | "block"optional'allow' = only listed areas; 'block' = all but listed. Omit to keep the campaign's current mode.
geo_statesstring[]optionalReplacement list of US state codes, e.g. ['CA','TX']. Omit to leave the stored states alone; send [] to clear them.
geo_area_codesstring[]optionalReplacement list of area codes. Omit to leave the stored ones alone; send [] to clear them.
geo_countriesstring[]optionalReplacement list of ISO country codes. Omit to leave the stored ones alone; send [] to clear them.
dedupe_window_secondsintegeroptionalTreat a repeat call from the same number within this window as a duplicate (0 = off).
dedupe_action"none" | "sticky_route" | "block_payout" | "block_route"optionalWhat to do with a duplicate: 'block_route' rejects it; 'sticky_route'/'block_payout' still connect it.

Example

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

Edit a number pool

call_tracking.update_poolwriteadmin only

Edit a DNI number pool — its name, status, target size, stickiness, or allowed origins. Omitted fields are left alone. This pool is feeding a live public web page: setting status to 'paused' stops handing out numbers, so visitors fall back to whatever static number the page shows and their calls stop being attributed.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe pool to edit.
namestringoptionalWhat to call this pool, e.g. 'Homepage — paid search'.
status"active" | "paused"optional'paused' stops handing out numbers.
target_sizeintegeroptionalHow many numbers the pool should hold (size to peak concurrent visitors). Too few and two visitors share a number, which mis-attributes their calls.
sticky_ttl_secondsintegeroptionalHow long a visitor keeps the same number (seconds).
allowed_originsstring[]optionalReplacement allow-list of website addresses (replaces the whole list).

Example

curl -X POST https://app.chirply.io/api/v1/actions/call_tracking.update_pool \
  -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 call_tracking_update_pool 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=call_tracking — same operations, with full JSON Schemas. Authentication, errors and rate limits are covered in the API documentation home.