← All action domains

Meta

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

Campaign delivery controls

meta.account_campaign_controlwriteconfirmadmin only

Pause a campaign in a connected Meta account, or resume it and its eligible ads and ad sets, including individually paused ads. Resume can immediately spend the existing real advertising budget. Works for Chirply-built and other Facebook campaigns; preserves budgets and targeting. Returns verified campaign status; partial errors require a refresh before retrying.

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
account_idstringrequiredConnected Meta ad account ID.
campaign_idstringrequiredCampaign in this workspace's connected Meta account.
action"pause" | "resume"requiredPause campaign delivery, or enable the campaign and eligible ads/ad sets. Resume can immediately spend its existing budget; no budget or targeting changes.

Example

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

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

Refresh from Facebook

meta.account_campaigns_readread

Read a page of campaigns with delivery status, exact ad/ad-set counts, a representative creative image, live purchases, attributed revenue, ROAS and ad-spend return from a connected Meta ad account. Ad-spend return excludes non-ad costs and is not profit ROI. Filter source to chirply for campaigns created or duplicated in this account, or external for other Facebook campaigns. Omit source for both. Pass campaign_id to read its ads. A filtered page can be empty with a next cursor. Does not change ads or spend money.

Parameters

FieldTypeRequiredDescription
account_idstringrequiredConnected Meta ad account ID.
delivery"all" | "eligible" | "off" | "ended" | "scheduled" | "unknown" | … 1 moreoptionalFilter this loaded page by current ad eligibility or impressions/spend during reporting dates. Eligible checks campaign, ad set, ad, schedule and advertiser status; it does not prove an impression right now. Counts and filtering are page-scoped; follow the next cursor even when no matches are returned.
source"chirply" | "external"optionalShow only campaigns created or duplicated in this Chirply workspace, or other Facebook campaigns. Omit for both sources. Pagination may include an empty filtered page with a next cursor.
date_preset"today" | "yesterday" | "today_yesterday" | "last_7d" | "last_14d" | "last_28d" | … 8 moreoptionalReporting window in the ad account timezone. Last N days includes today; weeks start Monday. Custom requires since and until. Default: "last_30d"
sincestringoptionalInclusive custom start date, YYYY-MM-DD, in ad account timezone.
untilstringoptionalInclusive custom end date, YYYY-MM-DD, not later than today in ad account timezone.
afterstringoptionalNext-page cursor returned by this report; omit for the first page.
campaign_idstringoptionalOpen one campaign and its ads instead of the account campaign list.

Example

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

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

List Meta ad accounts

meta.ad_accounts_listread

List the account's connected Meta ad accounts, their currency, Business Manager owner, account status, and minimum daily budget. This does not spend money.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0

Example

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

Activate ad — can spend

meta.ad_activatewriteconfirmadmin only

Activate a real Meta ad. If its campaign and ad set are also active, it may immediately deliver to real people and spend the connected organization's money.

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
ad_idstringrequiredMeta ad id to activate.

Example

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

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

View comments

meta.ad_comments_readread

Read the public comments people left on the Facebook and Instagram posts one Meta ad runs on, newest first, with each comment's author, text, time, like count, the replies underneath it, and whether the advertiser's own Page or Instagram account answered. Read live from Meta on every call, all-time rather than a reporting window, and reported per underlying post because a dynamic-creative ad has one post per placement and Meta never merges their comments. Posts whose Facebook Page is not connected to this account, or whose connection lacks permission to read Page content, are returned as unreadable with the reason rather than as zero comments. Publishes nothing: no reply is sent, nothing is hidden, liked or deleted, and no money is spent.

Parameters

FieldTypeRequiredDescription
account_idstringrequiredConnected Meta ad account containing the ad.
campaign_idstringrequiredParent campaign ID, verified against the ad before any comment is read.
ad_idstringrequiredExact Meta ad ID whose underlying Facebook or Instagram post comments are read.
limitintegeroptionalMaximum top-level comments to read per underlying post, newest first. Replies to each are included and do not count toward this limit. Default: 50

Example

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

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

View leads

meta.ad_contacts_readread

Read a page of existing Chirply contacts with this exact Meta ad ID recorded in first or last website attribution or synced Facebook lead-form metadata. Returns names, email, phone and match evidence, scoped to this account and verified ad account/campaign. All-time recorded matches, independent of Meta insight dates; distinct contacts are not equivalent to Meta's aggregate lead events. Does not import contacts, send messages, change ads or spend money.

Parameters

FieldTypeRequiredDescription
account_idstringrequiredConnected Meta ad account containing the ad.
campaign_idstringrequiredParent campaign ID, verified against the ad before reading contacts.
ad_idstringrequiredExact Meta ad ID recorded on the matched contacts.
pageintegeroptionalZero-based page of fifty matched contacts, ordered by creation date and ID. These are all-time recorded matches, independent of the Meta reporting window. Default: 0

Example

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

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

Create paused ad

meta.ad_createwriteconfirmadmin only

Create a real Meta ad in PAUSED state from an existing ad set and creative. It cannot deliver or spend until separately activated in Meta.

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
account_idstringrequiredConnected Meta ad account id, normally beginning with act_.
ad_set_idstringrequiredParent Meta ad-set id.
creative_idstringrequiredMeta creative id to deliver.
namestringrequiredAd name shown in Meta Ads Manager.

Example

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

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

Turn campaign, ad set or ad on or off

meta.ad_object_status_setwriteconfirmadmin only

Turn exactly one campaign, ad set or ad on or off in its connected Meta account. Turning on can immediately spend the existing real ad budget. Parent and child switches are preserved; paused parents still block delivery. Verifies ownership, hierarchy and the resulting status. No budgets or targeting are changed.

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
account_idstringrequiredConnected Meta ad account ID.
campaign_idstringrequiredParent campaign ID used to verify the target hierarchy.
object_idstringrequiredExact campaign, ad set, or ad to change.
level"campaign" | "adset" | "ad"requiredKind of target object; only that object is changed.
status"ACTIVE" | "PAUSED"requiredTurn only this object on or off. ACTIVE may spend existing budget. Parents and children keep their individual settings.

Example

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

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

Pause ad

meta.ad_pausewriteadmin only

Pause a real Meta ad, stopping new delivery and spend as Meta applies the change while retaining the ad and creative.

Parameters

FieldTypeRequiredDescription
ad_idstringrequiredMeta ad id to pause.

Example

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

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

Compare ad performance

meta.ad_performance_listread

Compare each ad's last-30-day spend, impressions, reach, clicks, leads, and cost per lead in one connected Meta ad account. This reads Meta reporting data and does not change delivery or spend money.

Parameters

FieldTypeRequiredDescription
account_idstringrequiredConnected Meta ad account id, normally beginning with act_.

Example

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

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

Resume ad

meta.ad_resume_deliverywriteconfirmadmin only

Resume one ad from a campaign launched by this account, also enabling its ad set and campaign. Can immediately spend real money at existing Meta budgets; other already-enabled ads under these parents may deliver too. Other individually paused ads stay paused. Review and schedules still apply.

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
ad_idstringrequiredMeta ID of the individual Chirply-launched ad to resume with its parents.

Example

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

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

Activate ad set — can spend

meta.ad_set_activatewriteconfirmadmin only

Activate a real Meta ad set. If its campaign and ads are also active, it may immediately begin spending the connected organization's money up to its configured budget.

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
ad_set_idstringrequiredMeta ad-set id to activate.

Example

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

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

Create paused ad set

meta.ad_set_createwriteconfirmadmin only

Create a real PAUSED Meta ad set with a daily budget and targeting. It cannot spend until activated, but its budget becomes live if its campaign and delivery are later activated.

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
account_idstringrequiredConnected Meta ad account id, normally beginning with act_.
campaign_idstringrequiredParent Meta campaign id.
namestringrequiredAd-set name shown in Meta Ads Manager.
daily_budgetintegerrequiredDaily budget in the ad account currency's minor units, such as cents or paise.
billing_eventstringoptionalMeta billing event, normally IMPRESSIONS. Default: "IMPRESSIONS"
optimization_goalstringrequiredMeta optimization goal appropriate for the campaign objective, such as LINK_CLICKS or LEAD_GENERATION.
bid_strategystringoptionalMeta bid strategy. Default: "LOWEST_COST_WITHOUT_CAP"
targetingmap of string → objectrequiredMeta targeting object, including geo_locations and any audience constraints.
promoted_objectmap of string → objectoptionalMeta promoted_object required by objectives such as conversions or lead generation.
start_timestring (date-time)optionalOptional delivery start timestamp.
end_timestring (date-time)optionalOptional delivery end timestamp.

Example

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

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

Pause ad set

meta.ad_set_pausewriteadmin only

Pause a real Meta ad set, stopping new delivery and spend as Meta applies the change while retaining its budget, targeting, and ads.

Parameters

FieldTypeRequiredDescription
ad_set_idstringrequiredMeta ad-set id to pause.

Example

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

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

List Meta ad sets

meta.ad_sets_listread

List ad sets, budgets, optimization goals, schedules, and delivery status in one connected Meta ad account. This does not spend money.

Parameters

FieldTypeRequiredDescription
account_idstringrequiredConnected Meta ad account id, normally beginning with act_.

Example

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

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

List Meta ads

meta.ads_listread

List ads, delivery status, parent campaign/ad set, and creative in one connected Meta ad account. This does not spend money.

Parameters

FieldTypeRequiredDescription
account_idstringrequiredConnected Meta ad account id, normally beginning with act_.

Example

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

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

View ad accounts and Pages

meta.advertising_identity_getreadadmin only

Read its connected ad accounts with account IDs and business portfolio details, and Pages with advertising permission and current profile photos. Inbox routing ownership does not restrict website advertising. Read-only; spends no money and changes no ads or messaging routes.

Parameters

No parameters — POST an empty body.

Example

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

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

Saved audiences

meta.audiences_listread

List every custom audience on one connected Meta ad account — website visitors, lead-form activity, Page and Instagram engagement, and uploaded customer lists — with its rough size and whether Meta considers it ready to advertise to. Use it to pick an audience to retarget or to exclude. Read-only: it creates no audience, changes no delivery, and spends no money.

Parameters

FieldTypeRequiredDescription
account_idstringrequiredConnected Meta ad account id, normally beginning with act_.

Example

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

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

Activate campaign — can spend

meta.campaign_activatewriteconfirmadmin only

Activate a real Meta campaign. If its ad sets and ads are eligible, this may immediately begin spending the connected organization's money according to their budgets.

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
campaign_idstringrequiredMeta campaign id to activate.

Example

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

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

Generate AI recommendations

meta.campaign_analyzewriteconfirmadmin only

Fetch a campaign's current Meta performance and send it to the account's OpenRouter reasoning model for saved recommendations. Billed to its own OpenRouter account. Advice only: never changes ads or budgets. Reuse request_id on retries.

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
account_idstringrequiredConnected Meta ad account ID.
delivery"all" | "eligible" | "off" | "ended" | "scheduled" | "unknown" | … 1 moreoptionalFilter this loaded page by current ad eligibility or impressions/spend during reporting dates. Eligible checks campaign, ad set, ad, schedule and advertiser status; it does not prove an impression right now. Counts and filtering are page-scoped; follow the next cursor even when no matches are returned.
date_preset"today" | "yesterday" | "today_yesterday" | "last_7d" | "last_14d" | "last_28d" | … 8 moreoptionalReporting window in the ad account timezone. Last N days includes today; weeks start Monday. Custom requires since and until. Default: "last_30d"
sincestringoptionalInclusive custom start date, YYYY-MM-DD, in ad account timezone.
untilstringoptionalInclusive custom end date, YYYY-MM-DD, not later than today in ad account timezone.
campaign_idstringrequiredSource campaign belonging to this connected account.
request_idstring (uuid)requiredUnique operation ID. Reuse on retries to prevent duplicate copies or AI charges.

Example

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

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

Create paused campaign

meta.campaign_createwriteconfirmadmin only

Create a real campaign in Meta Ads Manager in PAUSED state. It cannot spend until separately activated, but it permanently creates an external advertising object.

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
account_idstringrequiredConnected Meta ad account id, normally beginning with act_.
namestringrequiredCampaign name shown in Meta Ads Manager.
objectivestringrequiredMeta campaign objective, such as OUTCOME_TRAFFIC, OUTCOME_LEADS, or OUTCOME_SALES.
special_ad_categoriesstring[]optionalApplicable regulated categories such as HOUSING, EMPLOYMENT, CREDIT, or ISSUES_ELECTIONS_POLITICS; empty only when none apply. Default: []

Example

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

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

Archive draft

meta.campaign_draft_archivewriteadmin only

Move one unpublished Magic Ads draft out of the current campaign list and into the reversible archive. This does not delete creative records, contact Meta, change delivery, publish anything, message anyone, or spend money. Published campaigns cannot be archived here.

Parameters

FieldTypeRequiredDescription
draft_idstring (uuid)requiredUnpublished Magic Ads draft to move into the archive.

Example

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

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

Delete permanently

meta.campaign_draft_deletewriteconfirmadmin only

PERMANENTLY delete one unpublished or archived Magic Ads draft and cascade-delete its saved creative metadata from Chirply. This cannot be undone. Generated image files, funnels, and automations remain in their own libraries, and this does not delete or pause anything in Meta. Published campaign records are refused.

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
draft_idstring (uuid)requiredUnpublished or archived Magic Ads draft to permanently delete after explicit confirmation.

Example

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

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

Resume campaign

meta.campaign_draft_getread

Load one tenant-scoped Magic Ads campaign account exactly where it was saved, including its brief, generated plan, creative versions, delivery settings, funnel choice, and automation choice. This is read-only and does not contact Meta or change delivery.

Parameters

FieldTypeRequiredDescription
draft_idstring (uuid)requiredSaved Magic Ads campaign id to reopen in the current account.

Example

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

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

Restore draft

meta.campaign_draft_restorewriteadmin only

Restore one archived Magic Ads draft to the current campaign list with its brief, creative records, and saved builder state intact. This does not contact Meta, change delivery, publish anything, message anyone, or spend money.

Parameters

FieldTypeRequiredDescription
draft_idstring (uuid)requiredArchived Magic Ads draft to return to the current campaign list.

Example

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

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

Save draft

meta.campaign_draft_savewriteadmin only

Create or update a private, tenant-scoped Magic Ads draft with the exact resumable builder state. This stores data in Chirply only; it does not generate media, publish a funnel, contact Meta, launch ads, message leads, or spend money.

Parameters

FieldTypeRequiredDescription
draft_idstring (uuid)optionalExisting draft to update; omit to create a new saved campaign.
campaign_namestringrequiredHuman-readable campaign name shown in the campaign library.
planmap of string → objectoptionalCurrent generated campaign plan, or an empty object when saving before generation. Default: {}
workspacemap of string → objectrequiredExact builder selections to restore, such as intake, creative, targeting, destination, funnel, and automation settings.

Example

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

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

All campaigns

meta.campaign_drafts_listread

List every unarchived Magic Ads campaign in the current account, including drafts and launched campaigns, their objective, destination, creative count, and whether a companion funnel or automation exists. This is read-only and does not contact Meta or change delivery.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMaximum number of recently updated campaign accounts to return. Default: 100
view"active" | "archived"optionalReturn current draft/published campaigns or the reversible archive. Default: "active"

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.campaign_drafts_list \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "limit": 100,
    "view": "active"
  }'
Test with your API key

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

Copy campaign

meta.campaign_duplicatewriteconfirmadmin only

Create a real paused copy of an existing Meta campaign including its ad sets and ads. Permanently creates external advertising objects, but does not activate delivery or spend ad budget. Requires ads management access. Reuse request_id on retries; an uncertain outcome must be checked in Ads Manager before attempting another copy.

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
account_idstringrequiredConnected Meta ad account ID.
delivery"all" | "eligible" | "off" | "ended" | "scheduled" | "unknown" | … 1 moreoptionalFilter this loaded page by current ad eligibility or impressions/spend during reporting dates. Eligible checks campaign, ad set, ad, schedule and advertiser status; it does not prove an impression right now. Counts and filtering are page-scoped; follow the next cursor even when no matches are returned.
date_preset"today" | "yesterday" | "today_yesterday" | "last_7d" | "last_14d" | "last_28d" | … 8 moreoptionalReporting window in the ad account timezone. Last N days includes today; weeks start Monday. Custom requires since and until. Default: "last_30d"
sincestringoptionalInclusive custom start date, YYYY-MM-DD, in ad account timezone.
untilstringoptionalInclusive custom end date, YYYY-MM-DD, not later than today in ad account timezone.
campaign_idstringrequiredSource campaign belonging to this connected account.
request_idstring (uuid)requiredUnique operation ID. Reuse on retries to prevent duplicate copies or AI charges.

Example

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

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

View ad sets and ads

meta.campaign_hierarchy_readread

Read one page of ad sets or ads within a connected campaign, with individual configured and effective delivery status, creative images, ad counts and performance for the chosen account-timezone date range. Optionally restrict ads to one ad set. Does not change delivery or spend money.

Parameters

FieldTypeRequiredDescription
account_idstringrequiredConnected Meta ad account ID.
date_preset"today" | "yesterday" | "today_yesterday" | "last_7d" | "last_14d" | "last_28d" | … 8 moreoptionalReporting window in the ad account timezone. Last N days includes today; weeks start Monday. Custom requires since and until. Default: "last_30d"
sincestringoptionalInclusive custom start date, YYYY-MM-DD, in ad account timezone.
untilstringoptionalInclusive custom end date, YYYY-MM-DD, not later than today in ad account timezone.
afterstringoptionalNext-page cursor returned by this report; omit for the first page.
campaign_idstringrequiredParent campaign in the connected account.
ad_idstringoptionalOpen this exact ad, verified within the campaign and optional ad set, regardless of pagination. Requires level ad.
level"adset" | "ad"requiredRead ad sets in the campaign, or individual ads.
adset_idstringoptionalRestrict ads to this ad set belonging to the parent campaign.

Example

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

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

Saved analysis & copies

meta.campaign_operations_listread

Read the latest thirty saved AI analyses and campaign duplication outcomes for one connected Meta ad account in this account. Does not generate new analysis, change ads, or spend money.

Parameters

FieldTypeRequiredDescription
account_idstringrequiredConnected Meta ad account ID.

Example

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

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

Pause campaign

meta.campaign_pausewriteadmin only

Pause a real Meta campaign, stopping new delivery and spend as Meta applies the status change. The campaign and its configuration remain available to reactivate later.

Parameters

FieldTypeRequiredDescription
campaign_idstringrequiredMeta campaign id to pause.

Example

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

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

How my ads are doing

meta.campaign_resultsread

Report how every Facebook and Instagram campaign this account launched through the app is actually doing: whether each one is still in Meta's review queue, live and delivering, paused, or rejected, plus impressions, people reached, clicks, click-through rate, cost per click, amount spent, leads, and cost per lead for the chosen window — broken down per creative version. Campaigns run directly in Ads Manager are deliberately excluded, because this account did not launch them here. Read-only: it never changes delivery, never turns anything on or off, and never spends money.

Parameters

FieldTypeRequiredDescription
window"today" | "yesterday" | "last_7d" | "last_14d" | "last_30d" | "maximum"optionalReporting window the figures cover: today, yesterday, last_7d, last_14d, last_30d, or maximum for the campaign's whole life. Default: "last_30d"
limitintegeroptionalMaximum number of launched campaigns to report on, most recently launched first. Default: 25

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.campaign_results \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "window": "today",
    "limit": 25
  }'
Test with your API key

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

Resume ads

meta.campaign_resume_adswriteconfirmadmin only

Resume a campaign launched by this account together with all its resumable ads and their ad sets, including individually paused ads. Can immediately spend real money from the connected Meta ad account at existing budgets. Leaves targeting, schedules, rejected and archived ads unchanged; reports partial failures.

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
campaign_idstringrequiredMeta ID of the campaign launched by this account whose ads should resume.

Example

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

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

Build the rest of this campaign

meta.campaign_system_buildwriteconfirmadmin only

Optionally generate and immediately PUBLISH a complete public conversion funnel for one saved Magic Ads draft, mount it below a route on a connected domain, and/or create a PAUSED editable follow-up automation using the exact Facebook Page/form and funnel triggers. AI generation consumes the account's OpenRouter credits. Publishing makes the generated pages public; the workflow does not contact anyone until a person reviews and activates it.

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
draft_idstring (uuid)requiredSaved Magic Ads campaign draft that owns the creatives, funnel, automation, and later Meta ids.
business_namestringrequiredBusiness name used consistently across the generated pages and follow-up copy.
campaign_namestringrequiredCampaign name used to name the generated funnel and automation.
offerstringrequiredThe exact offer the ads and generated funnel must fulfill.
audiencestringrequiredWho should respond to the campaign.
strategystringrequiredApproved campaign strategy the funnel and automation must continue.
form_promisestringrequiredWhat happens after the visitor submits or responds.
campaign_goal"AWARENESS" | "TRAFFIC" | "ENGAGEMENT" | "LEADS" | "SALES" | "APP_PROMOTION"requiredMeta objective the companion funnel should support.
lead_destination"INSTANT_FORM" | "WEBSITE"optionalWhether a lead responds inside Meta or on the generated/existing website. Default: "INSTANT_FORM"
page_idstringrequiredConnected Facebook Page used to narrow the generated workflow trigger.
form_idstringoptionalExisting Meta instant-form id, __auto__ for the form launch will create, or blank when not applicable. Default: ""
current_destination_urlstringoptionalExisting public HTTPS destination, used when no funnel is generated. Default: ""
build_funnelbooleanoptionalGenerate and publish a matching multi-page funnel. Default: true
build_automationbooleanoptionalCreate a paused editable follow-up workflow using every relevant configured channel. Default: true
domain_idstring (uuid)optionalActive connected domain to host the funnel below a collision-safe offer route. Omit for the Chirply-hosted URL.
automation_briefstringoptionalOptional natural-language instructions stored on the workflow canvas and used to shape the safe draft.
brain_scopeobjectoptionalWhich part of the AI Knowledge Brain the generated funnel pages are written from. Use the same scope the ad copy was written with so the page and the ad tell one story.
brain_scope.mode"none" | "all" | "selection"requirednone = write from the brief alone; all = use the whole Knowledge Brain; selection = use only the topics and entries named below.
brain_scope.topic_idsarray of (string (uuid))optionalKnowledge Brain topic ids to use in full, including every entry inside them. Ignored unless mode is 'selection'. Get ids from brain.list_topics. Default: []
brain_scope.item_idsarray of (string (uuid))optionalIndividual knowledge-entry ids to use, for topics not taken in full. Combines with topic_ids. Ignored unless mode is 'selection'. Get ids from brain.list_knowledge. Default: []

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.campaign_system_build \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "draft_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "business_name": "Example",
    "campaign_name": "Example",
    "offer": "example",
    "audience": "example",
    "strategy": "example",
    "form_promise": "example",
    "campaign_goal": "AWARENESS",
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

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

List Meta campaigns

meta.campaigns_listread

List campaigns in one connected Meta ad account. This reads campaign configuration and does not spend money.

Parameters

FieldTypeRequiredDescription
account_idstringrequiredConnected Meta ad account id, normally beginning with act_.

Example

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

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

View comment-to-DM

meta.comment_dm_getreadadmin only

Show the comment-to-DM settings for one connected Instagram account: whether it is on, the keyword a comment must contain, the message that gets sent, and whether each commenter is messaged only once.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredThe connected Instagram account id (or Facebook Page id) whose settings to read.

Example

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

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

Save comment-to-DM

meta.comment_dm_updatewriteconfirmadmin only

Set whether an Instagram direct message is sent automatically to people who comment on this account's posts. Turning this on causes REAL DIRECT MESSAGES TO BE SENT AUTOMATICALLY TO REAL PEOPLE who have not messaged the business first, every time a matching comment is posted, with no further human approval. Instagram permits one such message per comment, within 7 days of it being posted.

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
shared_page_acknowledgedbooleanoptionalSet true only after acknowledging that this Page is connected to another Chirply account and enabling automation may send duplicate messages, replies or comments.
page_idstringrequiredThe connected Instagram account id (or Facebook Page id) these settings apply to.
enabledbooleanrequiredTrue starts auto-messaging commenters immediately. False keeps the settings but sends nothing.
keywordstringoptionalOnly comments containing this text trigger the message. Case-insensitive, matched anywhere in the comment. Omit or leave empty to message everyone who comments.
messagestringoptionalThe direct message to send, word for word. Required when enabled is true.
oncebooleanoptionalTrue (the default) messages each person only once no matter how often they comment.

Example

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

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

List posts you can automate

meta.comment_posts_listread

List the recent posts from one connected Facebook Page and its linked Instagram account, with the id each one is identified by. Use it to find the post id a per-post comment rule targets.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredThe connected Facebook Page id (or linked Instagram account id) whose posts to list. Get valid ids from meta.pages_list.
limitintegeroptionalMaximum posts to return per surface, newest first. Default: 15

Example

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

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

Delete comment rule

meta.comment_rule_deletewriteconfirmadmin only

Permanently delete one comment automation rule. It stops running immediately and cannot be recovered; comments it used to handle fall through to the next matching rule, or to the Page's own comment settings.

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
rule_idstring (uuid)requiredThe rule to delete, from meta.comment_rules_list.

Example

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

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

Save comment rule

meta.comment_rule_savewriteconfirmadmin only

Create or update one comment automation rule on a connected Facebook Page. An active rule causes REAL PUBLIC COMMENT REPLIES and REAL PRIVATE MESSAGES TO BE SENT AUTOMATICALLY TO REAL PEOPLE, from its own connected account, every time a matching comment is posted and with no further human approval. Meta permits one private reply per comment within 7 days, so a rule either sends a fixed message or starts a flow, never both. When several rules match, the most specific one runs: a rule for one post beats a rule for every post, and a keyword rule beats a catch-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
shared_page_acknowledgedbooleanoptionalSet true only after acknowledging that this Page is connected to another Chirply account and enabling automation may send duplicate messages, replies or comments.
page_idstringrequiredThe connected Facebook Page id (or linked Instagram account id) this rule belongs to. Ignored when rule_id is given.
rule_idstring (uuid)optionalOmit to create a new rule. Provide the id from meta.comment_rules_list to replace an existing one.
namestringoptionalOptional label shown in the app, for example 'Launch post - DROP'.
platform"any" | "facebook" | "instagram"optionalWhich surface the rule answers on. 'any' covers Facebook Page comments and the linked Instagram account's comments. Default: "any"
post_idstringoptionalOmit for the Page-wide default. Give a Facebook post id or Instagram media id (from meta.comment_posts_list) to override that one post.
keywordsstring[]optionalAny-of list a comment must contain. Empty means every comment in this scope, which makes the rule its catch-all. Default: []
match_type"contains" | "word" | "exact"optionalHow each keyword is compared, always case-insensitively: anywhere in the comment, as a whole word, or as the entire comment. Default: "contains"
reply_mode"inherit" | "off" | "text" | "ai"optionalThe PUBLIC reply posted under the comment. 'inherit' leaves it to the Page's own comment setting, 'off' posts nothing, 'text' posts reply_text, 'ai' has an AI agent write it. Default: "inherit"
reply_textstringoptionalThe public reply, word for word. Required when reply_mode is 'text'. One variant per line: Meta hides comments that repeat verbatim, so Chirply picks a line per comment.
reply_agent_idstring (uuid)optionalThe AI agent that writes the public reply. Required when reply_mode is 'ai'.
reply_instructionsstringoptionalExtra channel instructions for the AI agent, used only when reply_mode is 'ai'.
dm_mode"off" | "text" | "workflow"optionalThe PRIVATE reply sent to the commenter. 'off' sends nothing, 'text' sends dm_text once, 'workflow' starts a flow whose first conversation step sends the opening message instead. Default: "off"
dm_textstringoptionalThe private message, word for word. Required when dm_mode is 'text'. Text only - Meta does not accept media on a comment private reply.
workflow_idstring (uuid)optionalThe flow this comment enters. Required when dm_mode is 'workflow'. A paused flow is not started.
once_per_actorbooleanoptionalTrue (the default) privately messages each person only once on this Page, however often they comment. Applies to dm_mode 'text'; a flow enrols per comment and is bounded by the comment claim instead. Default: true
priorityintegeroptionalBreaks ties between rules of the same shape; higher wins. Leave at 0 unless two equally specific rules overlap. Default: 0
is_activebooleanoptionalTrue starts running this rule against new comments immediately. False keeps it saved but dormant. Default: true

Example

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

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

View comment rules

meta.comment_rules_listread

List the comment automation rules on one connected Facebook Page: what each one matches (every post or one post, which keywords), what it replies publicly, and whether it sends a private message or starts a flow. Rules cover Messenger and the Page's linked Instagram account together.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredThe connected Facebook Page id (or linked Instagram account id) whose rules to read.

Example

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

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

Connected assets

meta.connected_assetsread

Read this account's connected Facebook profile name, saved permission snapshot, ad accounts and business portfolios, Pages and Instagram IDs. Read live Meta Pixels for the selected connected ad account, including each ID, last-event date, availability and copyable website installation code. The code reports browser PageView events to Meta when installed and allowed by the site's marketing consent; installation and lead/purchase event setup are separate. Returns explicit read errors and a cursor for more than 100 pixels. This read installs nothing, changes no ads, sends no messages and spends no money. Never returns credentials.

Parameters

FieldTypeRequiredDescription
account_idstringoptionalConnected Meta ad account ID, with or without act_. Omit to select the first connected ad account.
pixel_afterstringoptionalOpaque nextPixels cursor returned by an earlier read for the same ad account. Omit for the first 100 pixels.

Example

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

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

Disconnect Facebook

meta.connection_disconnectwriteconfirmadmin only

Disconnect Facebook and Instagram from this account, uninstall Chirply from its Pages, revoke the Meta user grant, and remove locally stored Page/ad assets. Existing CRM contacts and messages remain. Reconnecting is required to restore service.

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
confirmtruerequiredMust be true to confirm the disconnection and Meta grant revocation.

Example

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

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

View Facebook connection

meta.connection_getreadadmin only

Show whether Facebook, Instagram, and WhatsApp are connected to this account, which permissions were granted, and whether Meta requires the owner to reconnect. Tokens and other secrets are never returned.

Parameters

No parameters — POST an empty body.

Example

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

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

Pixels and conversions

meta.conversion_sources_listread

List Meta Pixels (datasets), received custom Pixel events from the last 28 days when pixel_id is supplied, and custom conversions on one connected ad account, with each Pixel's name and whether it has ever received an event. These are what a website campaign optimizes around: the Pixel watching the site, and the thing happening on it that counts as success. Read-only — it creates nothing, changes no delivery, and spends no money.

Parameters

FieldTypeRequiredDescription
account_idstringrequiredConnected Meta ad account id, normally beginning with act_.
pixel_idstringoptionalPixel on this account whose received custom event names should be queried for the last 28 days.

Example

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

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

List Instagram profiles

meta.instagram_accounts_listread

List Instagram Professional profiles linked to this account's Facebook Pages, including current usernames, follower counts, media counts, webhook delivery, and live direct-message access status. This is read-only.

Parameters

No parameters — POST an empty body.

Example

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

Publish image

meta.instagram_image_publishwriteconfirmadmin only

Publish a REAL PUBLIC IMAGE POST to one Instagram Professional account assigned to this account. The image and caption become visible to that account's audience immediately; this does not buy ads but permanently creates external content until someone deletes it in Instagram.

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
instagram_idstringrequiredInstagram Professional account id assigned to this account.
image_urlstring (uri)requiredPublic HTTPS URL Meta can download for the image post.
captionstringoptionalCaption published with the Instagram image, up to 2,200 characters. Default: ""

Example

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

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

List Instagram media

meta.instagram_media_listread

List recent posts from one Instagram Professional profile assigned to this account, including captions, permalinks, likes, and comment counts. This is read-only.

Parameters

FieldTypeRequiredDescription
instagram_idstringrequiredInstagram Professional account id assigned to this account.
limitintegeroptionalMaximum recent media items to return, from 1 to 25. Default: 12

Example

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

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

Create lead form

meta.instant_form_createwriteconfirmadmin only

Create and activate a real Meta instant lead form on a connected Facebook Page, collecting full name, email, and phone. New submissions enter this account and may trigger its contact-created automations. This permanently creates an external Meta object but does not launch an ad or spend ad money.

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
page_idstringrequiredConnected Facebook Page that will own the new instant form.
namestringrequiredForm name shown in Meta's Page and Ads Manager tools.
privacy_policy_urlstring (uri)requiredAdvertiser's public privacy-policy URL shown inside the form.
follow_up_action_urlstring (uri)requiredPublic business website opened from the form's follow-up action.

Example

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

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

Launch status

meta.launch_progress_readread

Read saved launch steps, created Meta object IDs, and the latest failure for a campaign draft in this account. Shows completed, running and uncertain outcomes without creating ads, changing delivery, or spending money. Completed provider steps are reused when the existing launch action is retried with identical settings.

Parameters

FieldTypeRequiredDescription
draft_idstring (uuid)requiredSaved campaign draft in the current workspace whose launch progress should be read.

Example

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

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

Start a fresh launch

meta.launch_resetwriteconfirmadmin only

Reset a failed campaign launch after verifying that its old Meta campaign is archived or deleted. Preserves the draft, settings, creative assets and prior launch history. Does not delete Meta objects, create ads, activate delivery or spend money. A separate launch action and budget approval are still required. Refuses active, uncertain, successful or concurrently changed attempts.

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
draft_idstring (uuid)requiredSaved campaign draft in the current workspace whose launch progress should be read.
run_idstring (uuid)requiredThe failed launch run ID currently displayed; prevents resetting a newer or concurrent attempt.

Example

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

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

Save uploaded creative

meta.lead_campaign_asset_savewriteadmin only

Save an already-public image URL as a durable creative version in a saved Meta campaign draft, preserving the exact copy, direction, and references. This stores metadata but does not generate an image, contact anyone, create a Meta object, or spend ad money.

Parameters

FieldTypeRequiredDescription
draft_idstring (uuid)requiredSaved campaign draft that owns this creative version.
concept_idstringrequiredStable concept id that owns this creative version.
anglestringrequiredHuman-readable strategic angle for this creative version.
primary_textstringoptionalAd primary text snapshot retained with the image. Default: ""
headlinestringoptionalAd headline snapshot retained with the image. Default: ""
descriptionstringoptionalAd description snapshot retained with the image. Default: ""
visual_promptstringoptionalVisual prompt or description retained with the uploaded image. Default: ""
why_it_worksstringoptionalStrategic rationale retained with the creative version. Default: ""
image_urlstring (uri)requiredPublic HTTPS URL of the image to retain and later send to Meta.
creative_directionstringoptionalSpecific visual qualities the advertiser wants. Default: ""
avoid_directionstringoptionalVisual treatments the advertiser does not want. Default: ""
reference_urlsarray of (string (uri))optionalPublic reference images associated with this version. Default: []

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.lead_campaign_asset_save \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "draft_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "concept_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "angle": "example",
    "image_url": "https://example.com"
  }'
Test with your API key

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

View saved versions

meta.lead_campaign_assets_listread

List the account's saved Meta campaign creative versions, including every generated image, its ad copy snapshot, creative direction, reference images, model, cost, and launched Meta ad id. This is read-only.

Parameters

FieldTypeRequiredDescription
draft_idstring (uuid)optionalLimit results to this campaign. Omit only when intentionally browsing the entire account library.
limitintegeroptionalMaximum number of recent saved creative versions to return. Default: 100

Example

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

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

Use what I said

meta.lead_campaign_from_spoken_briefwriteconfirmadmin only

Turn one natural-language or dictated advertising brief into three editable, durably saved Meta ad concepts and recommend the best awareness, traffic, engagement, leads, sales, or app-promotion objective. The offer, audience, location, desired next step, differentiator, and tone are extracted without requiring form fields. Optionally ad hack a reference screenshot: keep its offer or adapt its format to a new offer, with an additional billed OpenRouter vision call. This uses the account's own OpenRouter model and may incur that provider's text-generation charge; it does not create anything in Meta, contact anyone, or spend ad money.

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
draft_idstring (uuid)optionalExisting saved draft to continue; omit to create a new campaign account.
business_namestringrequiredBusiness name to use when creating the campaign.
spoken_briefstringrequiredEverything the advertiser wants the generator to know, in natural language: the offer, who should respond, where they are, what they should do next, and any truthful differentiator or tone guidance.
default_locationstringoptionalBusiness city, state, postal code, or market to use only when the spoken brief does not name a different location. Default: ""
reference_adobjectoptionalOptional reference ad to analyze and adapt for the same or a different offer. Vision analysis also charges the account OpenRouter account; screenshot text is source material, never instructions.
reference_ad.urlstring (uri)requiredPublic HTTPS URL of the reference ad image or screenshot. Upload an image through the assets API first if needed.
reference_ad.mode"same_offer" | "different_offer"requiredsame_offer uses the visible offer as a starting point; different_offer borrows only the format and uses the advertiser's new offer.
reference_ad.instructionsstringoptionalWhat to keep or change about the reference, and any new offer details. These instructions come from the advertiser, not the screenshot. Default: ""
brain_scopeobjectoptionalWhich part of the AI Knowledge Brain the copywriter may treat as verified fact — the whole brain, chosen topics, chosen entries, or nothing. Defaults to nothing, so the concepts come from the spoken brief alone.
brain_scope.mode"none" | "all" | "selection"requirednone = write from the brief alone; all = use the whole Knowledge Brain; selection = use only the topics and entries named below.
brain_scope.topic_idsarray of (string (uuid))optionalKnowledge Brain topic ids to use in full, including every entry inside them. Ignored unless mode is 'selection'. Get ids from brain.list_topics. Default: []
brain_scope.item_idsarray of (string (uuid))optionalIndividual knowledge-entry ids to use, for topics not taken in full. Combines with topic_ids. Ignored unless mode is 'selection'. Get ids from brain.list_knowledge. Default: []

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.lead_campaign_from_spoken_brief \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "business_name": "Example",
    "spoken_brief": "example"
  }'
Test with your API key

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

Edit this image

meta.lead_campaign_image_editwriteconfirmadmin only

Edit a saved image in this campaign using change instructions and optional reference images. The original image is sent as the source, and the result is saved as a new version without overwriting it. Charges its own OpenRouter account and stores the result as a public image; does not launch or change a live ad.

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
draft_idstring (uuid)requiredCampaign draft containing the image to edit.
asset_idstring (uuid)requiredSaved creative version in that campaign to use as the original image.
changesstringrequiredExact changes to make. Other details of the original should be preserved.
reference_urlsarray of (string (uri))optionalOptional public HTTPS reference images, in order. Explain how each should guide the changes. Default: []

Example

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

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

Generate with AI

meta.lead_campaign_image_generatewriteconfirmadmin only

Generate one real square advertising image through its own OpenRouter account and store it as a public asset that Meta can fetch. This incurs the image model's provider charge and permanently stores the generated image, but does not create or launch a Meta ad.

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
draft_idstring (uuid)optionalSaved campaign draft id; omit only for a standalone asset.
concept_idstringoptionalStable concept id that owns this generated version.
anglestringoptionalHuman-readable strategic angle for this creative version.
primary_textstringoptionalAd primary text snapshot to retain with the generated image.
headlinestringoptionalAd headline snapshot to retain with the generated image.
descriptionstringoptionalAd description snapshot to retain with the generated image.
visual_promptstringrequiredTruthful visual direction for a square, text-free lead-ad photograph.
why_it_worksstringoptionalStrategic rationale retained with the saved version.
creative_directionstringoptionalSpecific qualities, composition, mood, subject, or style the advertiser wants.
avoid_directionstringoptionalVisual clichés, subjects, treatments, or details the advertiser explicitly does not want.
reference_urlsarray of (string (uri))optionalUp to six public reference-image URLs used to guide the generation. Default: []

Example

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

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

Launch lead campaign

meta.lead_campaign_launchwriteconfirmadmin only

Create and activate one real Meta awareness, traffic, engagement, leads, sales, or app-promotion campaign with a validated destination, CTA, and placement strategy. This immediately makes the campaign eligible to reach real people and spend the selected ad account's money up to the daily budget; Meta bills the advertiser directly. The campaign is created paused and activated last so an incomplete setup cannot spend.

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
account_idstringrequiredConnected Meta ad account id, normally beginning with act_.
page_idstringrequiredConnected Facebook Page id used as the public ad identity.
form_idstringoptionalActive instant-form id on the selected Facebook Page; required only when lead_destination is INSTANT_FORM. Default: ""
campaign_namestringrequiredCampaign name shown in Meta Ads Manager.
primary_textstringrequiredMain ad copy shown to real people.
headlinestringrequiredAd headline shown under the creative.
descriptionstringoptionalShort supporting description shown when the placement allows it. Default: ""
call_to_action_type"APPLY_NOW" | "BOOK_NOW" | "BUY_NOW" | "CONTACT_US" | "DOWNLOAD" | "GET_OFFER" | … 7 moreoptionalMeta-approved button shown on the real ad, such as LEARN_MORE, GET_QUOTE, or SIGN_UP. Default: "LEARN_MORE"
campaign_goal"AWARENESS" | "TRAFFIC" | "ENGAGEMENT" | "LEADS" | "SALES" | "APP_PROMOTION"optionalAds Manager objective: awareness, traffic, engagement, leads, sales, or app promotion. Default: "LEADS"
lead_destination"INSTANT_FORM" | "WEBSITE"optionalFor a leads objective, collect details in a Meta instant form or optimize for a website conversion. Default: "INSTANT_FORM"
placement_mode"ADVANTAGE_PLUS" | "MANUAL"optionalLet Meta automatically choose placements or restrict delivery to the supplied manual placement ids. Default: "ADVANTAGE_PLUS"
placement_idsarray of ("facebook_feed" | "facebook_story" | "facebook_reels" | "facebook_marketplace" | "facebook_video_feeds" | "facebook_right_column" | … 19 more)optionalManual Facebook, Instagram, Messenger, Audience Network, and Threads placement ids; ignored in Advantage+ mode. Default: []
pixel_idstringoptionalMeta Pixel or dataset id required for sales and website-lead optimization.
conversion_event"LEAD" | "PURCHASE" | "COMPLETE_REGISTRATION" | "CONTACT" | "SCHEDULE" | "SUBSCRIBE" | … 11 moreoptionalWebsite event Meta should optimize for when the campaign uses a Pixel or dataset. Default: "PURCHASE"
custom_event_namestringoptionalExact custom Pixel event name returned by meta.conversion_sources_list for the chosen Pixel. Optimizes for this event instead of conversion_event; do not combine with custom_conversion_id.
custom_conversion_idstringoptionalA custom conversion defined on the ad account, optimized for INSTEAD of conversion_event. Use meta.conversion_sources_list to find its id.
app_idstringoptionalMeta application id required for app-promotion campaigns.
app_store_urlstring (uri)optionalPublic Apple App Store or Google Play URL required for app-promotion campaigns.
image_urlstring (uri)requiredPublic HTTPS image URL Meta can fetch for the ad creative.
website_urlstringoptionalPublic HTTPS destination linked from the ad; optional only for app-promotion campaigns, which use app_store_url instead. Default: ""
daily_budget_minorintegerrequiredMaximum daily budget in the ad account currency's minor units, such as cents; Meta may spend up to this amount per day.
location_keystringoptionalExact Meta location key returned by meta.locations_search. Required when the query matches multiple locations; pass the same query used for that search.
location_querystringrequiredCountry, state/region, city or postal code Meta should resolve for geographic targeting.
country_codestringrequiredTwo-letter ISO country code used to disambiguate the target location.
radius_milesintegeroptionalCity targeting radius from 10 to 50 miles; ignored for whole countries, states/regions and postal-code boundaries. Default: 15
age_minintegeroptionalYoungest target age; ignored for regulated special-ad categories. Default: 25
age_maxintegeroptionalOldest target age; ignored for regulated special-ad categories. Default: 65
special_ad_category"NONE" | "HOUSING" | "EMPLOYMENT" | "CREDIT" | "ISSUES_ELECTIONS_POLITICS"optionalMeta regulated-ad category; never choose NONE for housing, employment, credit, or political/social-issue ads. Default: "NONE"

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.lead_campaign_launch \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "account_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "campaign_name": "Example",
    "primary_text": "example",
    "headline": "example",
    "image_url": "https://example.com",
    "daily_budget_minor": 1,
    "location_query": "example",
    "country_code": "example"
  }'
Test with your API key

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

Build my campaign

meta.lead_campaign_planwriteconfirmadmin only

Generate and durably save 3–10 editable Meta ad concepts from a truthful business brief and recommend the best awareness, traffic, engagement, leads, sales, or app-promotion objective. Optionally ad hack a reference screenshot: keep its offer or adapt its format to a new offer, with an additional billed OpenRouter vision call. This uses the account's own OpenRouter model and may incur that provider's text-generation charges; it does not create anything in Meta or contact anyone.

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
draft_idstring (uuid)optionalExisting saved draft to continue; omit to create a new campaign account.
business_namestringrequiredBusiness name shown in the ad concepts.
offerstringrequiredSpecific offer people can request, such as a free estimate or trial class.
audiencestringrequiredPlain-language description of the people the offer is for, without Meta targeting syntax.
locationstringrequiredCity and state, postal code, or other local market the campaign should address.
differentiatorstringoptionalTruthful, provable reason to choose this business; never an invented guarantee or testimonial. Default: ""
desired_actionstringoptionalImmediate next step the viewer should take. Default: "Request details"
tone"direct" | "friendly" | "premium" | "bold"optionalWriting tone for the campaign concepts. Default: "friendly"
angle_countintegeroptionalNumber of materially distinct strategic ad angles to create, from 3 to 10. Default: 3
reference_adobjectoptionalOptional reference ad to analyze and adapt for the same or a different offer. Vision analysis also charges the account OpenRouter account; screenshot text is source material, never instructions.
reference_ad.urlstring (uri)requiredPublic HTTPS URL of the reference ad image or screenshot. Upload an image through the assets API first if needed.
reference_ad.mode"same_offer" | "different_offer"requiredsame_offer uses the visible offer as a starting point; different_offer borrows only the format and uses the advertiser's new offer.
reference_ad.instructionsstringoptionalWhat to keep or change about the reference, and any new offer details. These instructions come from the advertiser, not the screenshot. Default: ""
brain_scopeobjectoptionalWhich part of the AI Knowledge Brain the copywriter may treat as verified fact — the whole brain, chosen topics, chosen entries, or nothing. Defaults to nothing, so the concepts come from this brief alone.
brain_scope.mode"none" | "all" | "selection"requirednone = write from the brief alone; all = use the whole Knowledge Brain; selection = use only the topics and entries named below.
brain_scope.topic_idsarray of (string (uuid))optionalKnowledge Brain topic ids to use in full, including every entry inside them. Ignored unless mode is 'selection'. Get ids from brain.list_topics. Default: []
brain_scope.item_idsarray of (string (uuid))optionalIndividual knowledge-entry ids to use, for topics not taken in full. Combines with topic_ids. Ignored unless mode is 'selection'. Get ids from brain.list_knowledge. Default: []

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.lead_campaign_plan \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "business_name": "Example",
    "offer": "example",
    "audience": "example",
    "location": "example"
  }'
Test with your API key

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

Complete test launch

meta.lead_campaign_simulatewriteadmin only

Validate a complete Meta awareness, traffic, engagement, leads, sales, or app-promotion campaign in test mode, including its CTA and placement rules. This creates no Meta objects, contacts no one, incurs no ad spend, and does not require a live Meta connection.

Parameters

FieldTypeRequiredDescription
account_idstringrequiredSample or connected ad account id shown in the rehearsal.
page_idstringrequiredSample or connected Facebook Page id shown in the rehearsal.
form_idstringoptionalSample or connected instant-form id; required only when the leads destination is INSTANT_FORM. Default: ""
campaign_namestringrequiredCampaign name to validate in the simulation.
primary_textstringrequiredMain ad copy to validate and show in the test preview.
headlinestringrequiredAd headline to validate and show in the test preview.
descriptionstringoptionalSupporting description to show in the test preview. Default: ""
call_to_action_type"APPLY_NOW" | "BOOK_NOW" | "BUY_NOW" | "CONTACT_US" | "DOWNLOAD" | "GET_OFFER" | … 7 moreoptionalMeta-approved button shown on the ad, such as LEARN_MORE, GET_QUOTE, or SIGN_UP. Default: "LEARN_MORE"
campaign_goal"AWARENESS" | "TRAFFIC" | "ENGAGEMENT" | "LEADS" | "SALES" | "APP_PROMOTION"optionalAds Manager objective: awareness, traffic, engagement, leads, sales, or app promotion. Default: "LEADS"
lead_destination"INSTANT_FORM" | "WEBSITE"optionalFor a leads objective, collect details in a Meta instant form or optimize for a website conversion. Default: "INSTANT_FORM"
placement_mode"ADVANTAGE_PLUS" | "MANUAL"optionalLet Meta automatically choose placements or restrict delivery to the supplied manual placement ids. Default: "ADVANTAGE_PLUS"
placement_idsarray of ("facebook_feed" | "facebook_story" | "facebook_reels" | "facebook_marketplace" | "facebook_video_feeds" | "facebook_right_column" | … 19 more)optionalManual Facebook, Instagram, Messenger, Audience Network, and Threads placement ids; ignored in Advantage+ mode. Default: []
pixel_idstringoptionalMeta Pixel or dataset id required for sales and website-lead optimization.
conversion_event"LEAD" | "PURCHASE" | "COMPLETE_REGISTRATION" | "CONTACT" | "SCHEDULE" | "SUBSCRIBE" | … 11 moreoptionalWebsite event Meta should optimize for when the campaign uses a Pixel or dataset. Default: "PURCHASE"
custom_event_namestringoptionalExact custom Pixel event name returned by meta.conversion_sources_list for the chosen Pixel. Optimizes for this event instead of conversion_event; do not combine with custom_conversion_id.
custom_conversion_idstringoptionalA custom conversion defined on the ad account, optimized for INSTEAD of conversion_event. Use meta.conversion_sources_list to find its id.
app_idstringoptionalMeta application id required for app-promotion campaigns.
app_store_urlstring (uri)optionalPublic Apple App Store or Google Play URL required for app-promotion campaigns.
image_urlstringoptionalOptional public image URL; an empty value uses the built-in test visual. Default: ""
website_urlstringoptionalOptional website URL used only for rehearsal; no request is made to it. Default: ""
daily_budget_minorintegerrequiredSimulated daily budget in minor currency units; no account is charged.
location_keystringoptionalExact Meta location key returned by meta.locations_search. Required when the query matches multiple locations; pass the same query used for that search.
location_querystringrequiredCity, state, or postal code shown in the simulated audience.
country_codestringrequiredTwo-letter ISO country code used to validate the rehearsal.
radius_milesintegeroptionalSimulated targeting radius from 10 to 50 miles. Default: 15
age_minintegeroptionalYoungest simulated target age. Default: 25
age_maxintegeroptionalOldest simulated target age. Default: 65
special_ad_category"NONE" | "HOUSING" | "EMPLOYMENT" | "CREDIT" | "ISSUES_ELECTIONS_POLITICS"optionalRegulated-ad category to exercise during the simulation. Default: "NONE"

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.lead_campaign_simulate \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "account_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "campaign_name": "Example",
    "primary_text": "example",
    "headline": "example",
    "daily_budget_minor": 1,
    "location_query": "example",
    "country_code": "example"
  }'
Test with your API key

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

Launch selected ads

meta.lead_campaign_variations_launchwriteconfirmadmin only

Create and activate one real Meta campaign using the selected awareness, traffic, engagement, leads, sales, or app-promotion objective, then launch every selected saved creative as a separate real ad using the shared CTA and placement strategy. If an instant-form lead destination uses form_id __auto__, this also permanently creates an active Meta form. The campaign becomes eligible to reach real people and spend the selected ad account's money up to the shared daily budget; Meta bills the advertiser directly.

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
draft_idstring (uuid)optionalSaved campaign draft whose creative launch ids should be recorded.
account_idstringrequiredConnected Meta ad account id, normally beginning with act_.
page_idstringrequiredConnected Facebook Page used as the public identity for every ad.
form_idstringoptionalActive instant-form id, or __auto__ to create a form; required only for an instant-form lead destination. Default: ""
form_namestringoptionalName for the new form when form_id is __auto__.
privacy_policy_urlstring (uri)optionalAdvertiser privacy-policy URL required when form_id is __auto__.
campaign_namestringrequiredCampaign name shown in Meta Ads Manager.
call_to_action_type"APPLY_NOW" | "BOOK_NOW" | "BUY_NOW" | "CONTACT_US" | "DOWNLOAD" | "GET_OFFER" | … 7 moreoptionalMeta-approved button shown on every selected real ad in this campaign, such as LEARN_MORE, GET_QUOTE, or SIGN_UP. Default: "LEARN_MORE"
campaign_goal"AWARENESS" | "TRAFFIC" | "ENGAGEMENT" | "LEADS" | "SALES" | "APP_PROMOTION"optionalAds Manager objective: awareness, traffic, engagement, leads, sales, or app promotion. Default: "LEADS"
lead_destination"INSTANT_FORM" | "WEBSITE"optionalFor a leads objective, collect details in a Meta instant form or optimize for a website conversion. Default: "INSTANT_FORM"
placement_mode"ADVANTAGE_PLUS" | "MANUAL"optionalLet Meta automatically choose placements or restrict delivery to the supplied manual placement ids. Default: "ADVANTAGE_PLUS"
placement_idsarray of ("facebook_feed" | "facebook_story" | "facebook_reels" | "facebook_marketplace" | "facebook_video_feeds" | "facebook_right_column" | … 19 more)optionalManual Facebook, Instagram, Messenger, Audience Network, and Threads placement ids; ignored in Advantage+ mode. Default: []
pixel_idstringoptionalMeta Pixel or dataset id required for sales and website-lead optimization.
conversion_event"LEAD" | "PURCHASE" | "COMPLETE_REGISTRATION" | "CONTACT" | "SCHEDULE" | "SUBSCRIBE" | … 11 moreoptionalWebsite event Meta should optimize for when the campaign uses a Pixel or dataset. Default: "PURCHASE"
custom_event_namestringoptionalExact custom Pixel event name returned by meta.conversion_sources_list for the chosen Pixel. Optimizes for this event instead of conversion_event; do not combine with custom_conversion_id.
custom_conversion_idstringoptionalA custom conversion defined on the ad account, optimized for INSTEAD of conversion_event. Use meta.conversion_sources_list to find its id.
app_idstringoptionalMeta application id required for app-promotion campaigns.
app_store_urlstring (uri)optionalPublic Apple App Store or Google Play URL required for app-promotion campaigns.
creativesobject[]requiredOne to twenty selected creative versions, each launched as a separate ad in the shared campaign.
creatives[].audience"all" | "prospecting" | "retargeting"optionalWhich ad set receives this creative: both, new people, or returning people only. Default: "all"
creatives[].destination_urlstring (uri)optionalOptional HTTPS destination for this individual follow-up ad; otherwise uses the campaign destination.
creatives[].asset_idstring (uuid)optionalSaved creative version id to stamp with the resulting Meta ad id.
creatives[].anglestringrequiredStrategic angle used in the Meta creative and ad names.
creatives[].primary_textstringrequiredMain ad copy shown to real people for this version.
creatives[].headlinestringrequiredHeadline shown under this creative.
creatives[].descriptionstringoptionalSupporting description for this creative when placement allows it. Default: ""
creatives[].image_urlstring (uri)requiredSaved public HTTPS image URL Meta fetches for this creative.
retargetingobjectoptionalOptional second ad set aimed at people who already showed interest. Creates real, durable custom audiences on the ad account when sources are supplied.
retargeting.mode"PROSPECTING" | "PROSPECTING_AND_RETARGETING" | "RETARGETING_ONLY"optionalPROSPECTING uses prospecting delivery and ignores saved retargeting sources, audience IDs, converter exclusions and retargeting budget. PROSPECTING_AND_RETARGETING adds a second ad set aimed at people who already reacted, splitting the same daily budget. RETARGETING_ONLY spends the whole budget on them. Default: "PROSPECTING"
retargeting.sourcesarray of ("lead_form_submitted" | "lead_form_opened" | "website_visitors" | "page_engaged" | "instagram_engaged")optionalAudiences to build (or reuse) and target: website_visitors needs a Pixel, lead_form_opened and lead_form_submitted need an existing lead form on the Page, page_engaged and instagram_engaged need no website at all. Default: []
retargeting.daysintegeroptionalHow far back the audience reaches, in days. Meta caps website audiences at 180 days and engagement audiences at 365. Default: 30
retargeting.audience_idsstring[]optionalIds of custom audiences that already exist on the ad account, targeted in addition to any built here. Default: []
retargeting.website_scope"DESTINATION" | "CUSTOM_URL" | "ALL_PIXEL"optionalWebsite visitors: campaign destination page, a custom page, or every page on the selected Pixel. Default: "DESTINATION"
retargeting.website_urlstringoptionalHTTPS page to match when website_scope is CUSTOM_URL. Tracking parameters are ignored.
retargeting.exclude_convertersbooleanoptionalExclude recent instant-form submissions, or the selected website conversion event on the Pixel, from every ad set. Custom conversion rules are not supported by this exclusion. Default: true
retargeting.daily_budget_minorintegeroptionalShare of the campaign's daily budget given to the retargeting ad set, in the account currency's minor units. Defaults to 30%; the total spend never exceeds daily_budget_minor.
website_urlstringoptionalPublic HTTPS destination linked from every ad; optional only for app-promotion campaigns, which use app_store_url instead. Default: ""
daily_budget_minorintegerrequiredShared maximum daily budget in the ad account currency's minor units; Meta may spend up to this amount per day across the ads.
location_keystringoptionalExact Meta location key returned by meta.locations_search. Required when the query matches multiple locations; pass the same query used for that search.
location_querystringrequiredCountry, state/region, city or postal code Meta should resolve for geographic targeting.
country_codestringrequiredTwo-letter ISO country code used to disambiguate the target location.
radius_milesintegeroptionalCity targeting radius from 10 to 50 miles; ignored for whole countries, states/regions and postal-code boundaries. Default: 15
age_minintegeroptionalYoungest target age; ignored for regulated special-ad categories. Default: 25
age_maxintegeroptionalOldest target age; ignored for regulated special-ad categories. Default: 65
special_ad_category"NONE" | "HOUSING" | "EMPLOYMENT" | "CREDIT" | "ISSUES_ELECTIONS_POLITICS"optionalMeta regulated-ad category; never choose NONE for housing, employment, credit, or political/social-issue ads. Default: "NONE"

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.lead_campaign_variations_launch \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "account_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "campaign_name": "Example",
    "creatives": [
      {
        "angle": "example",
        "primary_text": "example",
        "headline": "example",
        "image_url": "https://example.com"
      }
    ],
    "daily_budget_minor": 1,
    "location_query": "example",
    "country_code": "example"
  }'
Test with your API key

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

Create and map field

meta.lead_field_createwriteadmin only

Create a typed contact custom field for one question on a connected Facebook Lead Ads form, then save that form mapping immediately. Future submissions fill the field; matching existing choice fields gain the supplied choices. This changes CRM data only and sends no messages.

Parameters

FieldTypeRequiredDescription
form_idstringrequiredConnected Facebook Lead Ads form id.
question_keystringrequiredQuestion key shown on that form.
labelstringrequiredName of the contact custom field.
type"text" | "textarea" | "number" | "date" | "select" | "multiselect" | … 2 morerequiredStored type and contact editor control; use boolean for Yes/No and select for one choice.
optionsstring[]optionalVisible choices for select or multiselect fields. Required for those two types. Default: []

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.lead_field_create \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "form_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "question_key": "example",
    "label": "example",
    "type": "text"
  }'
Test with your API key

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

Save form settings

meta.lead_form_updatewriteadmin only

Turn CRM capture on or off for one connected Facebook Lead Ads form and map each submitted question into a contact field. Pausing a form causes future submissions from it to be retained as ignored webhook events instead of contacts.

Parameters

FieldTypeRequiredDescription
form_idstringrequiredFacebook Lead Ads form id connected to this account.
enabledbooleanrequiredWhether new submissions from this form may create or enrich contacts.
field_mappingmap of string → objectrequiredQuestion-key to CRM-field mappings; omitted questions use automatic matching.

Example

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

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

Discover forms

meta.lead_forms_discoverwriteadmin only

Read the connected Facebook Pages' Lead Ads form catalogs and questions, then refresh the tenant-scoped form list. Newly discovered forms stay paused until an account manager enables them. This makes Graph API reads but does not create ads, spend money, or contact anyone.

Parameters

No parameters — POST an empty body.

Example

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

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

List Lead Ads forms

meta.lead_forms_listread

List the Facebook Lead Ads forms discovered for this account, optionally narrowed to one Page or searched by form name, including questions, field mappings, capture status, and latest sync health. This only reads the saved form catalog and does not contact leads.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
page_idstringoptionalOptional connected Facebook Page id whose Lead Ads forms should be returned.
searchstringoptionalOptional case-insensitive search text matched against the form name.

Example

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

View original submissions

meta.lead_submissions_listread

Read every saved original Facebook Lead Ads submission attached to one contact, including the source field_data array and readable answers. Earlier contacts without a submission record return their saved contact data as legacy_custom. This returns personal lead information without changing any data.

Parameters

FieldTypeRequiredDescription
contact_idstring (uuid)requiredContact id whose original Facebook submissions should be returned.

Example

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

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

Import existing leads

meta.leads_import_pagewriteconfirmadmin only

Queue a resumable import of all Facebook Lead Ads submissions Meta currently makes available across every form on one connected Page, including forms paused for future capture. New contacts use the Facebook submission time for First added; matched contacts keep their existing First added date and retain the Facebook submission timestamp separately. Creates or enriches CRM contacts without changing future form capture settings or starting live follow-up automations. Existing contacts are matched by phone or email. Sends no messages and spends no provider money.

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
page_idstringrequiredConnected Facebook Page id whose every discovered Lead Ads form should be imported.

Example

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

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

Check Page lead import

meta.leads_import_statusread

Read saved progress and any errors for historical Facebook Lead Ads imports across all forms on a connected Page. Reads Chirply job records only and makes no Facebook request, sends no messages, and changes no contacts.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id whose form import progress should be returned.

Example

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

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

Sync recent leads

meta.leads_sync_recentwriteconfirmadmin only

Import up to 25 recent real submissions from one connected Facebook Lead Ads form. New contacts use their original Facebook submission time for First added by default. This creates or enriches real CRM contacts without starting live follow-up automations or sending messages. Existing form capture settings are unchanged.

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
form_idstringrequiredFacebook Lead Ads form id whose recent submissions should be imported.
limitintegeroptionalMaximum recent submissions to inspect and import, from 1 to 25. Default: 25
first_added"import_time" | "facebook_time" | "facebook_time_overwrite"optionalFirst added date: facebook_time uses the original Meta submission time for new contacts; import_time uses now; facebook_time_overwrite also replaces this date on matched contacts. A missing Meta timestamp fails that lead instead of assigning an inaccurate date. Default: "facebook_time"

Example

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

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

Report conversion to Meta

meta.messenger_app_event_logwriteconfirmadmin only

Immediately sends a real Messenger App Event to Meta for one Page-scoped person, including the Page id, that person's PSID, the event name, optional purchase value and currency, and the two supplied tracking declarations. It sends no Messenger message and charges no money, but the signal can affect Meta analytics, attribution, optimization, and advertising, so an account owner or admin must confirm it.

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
page_idstringrequiredConnected Facebook Page id whose Messenger performance to read or report.
conversation_idstring (uuid)requiredChirply conversation id for the person whose Page-scoped Messenger identity converted.
event_kind"lead" | "purchase" | "custom"requiredMeta App Event to report: lead uses lead_submitted, purchase uses fb_mobile_purchase, and custom uses custom_event_name.
custom_event_namestring (or null)optionalCustom Meta event name when event_kind is custom; ignored for lead and purchase.
valuenumber (or null)optionalNon-negative purchase amount reported to Meta. Required for purchase and ignored for lead or custom events.
currencystring (or null)optionalThree-letter ISO currency code for a purchase value, such as USD. Required for purchase and ignored otherwise.
advertiser_tracking_enabledbooleanoptionalExplicit declaration sent to Meta: true only when advertising tracking is permitted for this event and person. Default: false
application_tracking_enabledbooleanoptionalExplicit declaration sent to Meta: true only when application-level tracking is enabled for this event. Default: false

Example

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

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

Create reusable attachment

meta.messenger_attachment_createwriteconfirmadmin only

Ask Meta to fetch one public HTTPS image, video, audio, or file and create a real reusable attachment id owned by a connected Facebook Page. This sends no message and Chirply persists neither the source URL nor returned id, but the external Meta asset cannot be listed or deleted through the supported Attachment Upload API; copy the returned id immediately and expect it to expire after 90 days.

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
page_idstringrequiredConnected Facebook Page id that will own the reusable Messenger attachment.
type"image" | "video" | "audio" | "file"requiredMessenger attachment type matching the remote media: image, video, audio, or file.
source_urlstringrequiredComplete public HTTPS URL for the image, video, audio, or file Meta should fetch. Private-network hosts and embedded credentials are rejected; Chirply does not retain this URL.

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.messenger_attachment_create \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "type": "image",
    "source_url": "https://example.com"
  }'
Test with your API key

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

View reusable attachment upload

meta.messenger_attachment_upload_inforead

Check whether one connected Facebook Page is ready to create reusable Messenger image, video, audio, and file attachment ids. This reads Page readiness and Meta's provider limits, sends no message, returns no previous attachment ids, and makes no change. Meta's Attachment Upload API does not provide supported list or delete operations, and reusable ids expire after 90 days.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id that will own the reusable Messenger attachment.

Example

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

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

Accept Messenger call

meta.messenger_calling_acceptwriteconfirmadmin only

Accept a real inbound Messenger call to the connected Facebook Page using the provider call id and supplied WebRTC SDP offer. Meta requires acceptance within 60 seconds, and the calling client must remain connected to carry the media.

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
page_idstringrequiredConnected Facebook Page id whose Messenger Calling setup to use.
call_idstringrequiredProvider-owned Messenger call id returned by Meta or a calls webhook.
sdpstringrequiredComplete non-trickle WebRTC SDP offer generated by the calling client, beginning with v=0 and no larger than 128 KiB.

Example

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

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

Start Messenger call

meta.messenger_calling_connectwriteconfirmadmin only

Immediately place a real outbound Messenger audio/video call from the connected Facebook Page to one known person using the supplied WebRTC SDP offer. The person must have live call permission and Meta must report start_call is allowed; the calling client must remain connected to carry the media.

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
page_idstringrequiredConnected Facebook Page id whose Messenger Calling setup to use.
psidstringrequiredPage-scoped Messenger person id already known to this account and Facebook Page.
sdpstringrequiredComplete non-trickle WebRTC SDP offer generated by the calling client, beginning with v=0 and no larger than 128 KiB.

Example

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

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

Prepare Messenger DTMF tone

meta.messenger_calling_dtmf_preparewriteconfirmadmin only

Validate and prepare one RFC4733 touch tone for a real active Messenger call. The returned browser command always uses Meta's required 500 ms duration and 100 ms inter-tone gap; it does not falsely claim that the server injected RTP because the live WebRTC sender exists only in the open softphone, which must consume the command. Meta emits no DTMF webhook.

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
page_idstringrequiredConnected Facebook Page id whose Messenger Calling setup to use.
call_idstringrequiredProvider-owned Messenger call id returned by Meta or a calls webhook.
tone"0" | "1" | "2" | "3" | "4" | "5" | … 6 morerequiredOne RFC4733 touch tone supported by Messenger Calling: a digit from 0 through 9, #, or *.

Example

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

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

View Messenger Calling

meta.messenger_calling_getread

Read one connected Facebook Page's live Meta Calling eligibility, current audio/video/icon/hours/routing settings, webhook and permission readiness, known Messenger people, and recent call events. This sends no message and changes nothing; Meta's messenger_api_calling status remains the authoritative review/availability gate.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id whose Messenger Calling setup to use.

Example

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

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

Update Messenger call media

meta.messenger_calling_media_updatewriteconfirmadmin only

Renegotiate the live audio/video tracks of a real active Messenger call using increasing media versions, the actual browser MediaStreamTrack ids, and a new WebRTC SDP offer containing those ids. This can immediately mute, unmute, enable, or disable camera media for both participants' live call experience.

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
page_idstringrequiredConnected Facebook Page id whose Messenger Calling setup to use.
call_idstringrequiredProvider-owned Messenger call id returned by Meta or a calls webhook.
from_versionintegerrequiredCurrent Messenger call media version.
to_versionintegerrequiredNext Messenger call media version; it must be greater than from_version.
audio_enabledbooleanrequiredWhether the default audio track should be enabled after renegotiation.
video_enabledbooleanrequiredWhether the default video track should be enabled after renegotiation.
audio_track_idstring (or null)optionalActual browser MediaStreamTrack.id for the local audio track; it must match an a=msid line in the supplied SDP offer. Omit only when that track does not exist.
video_track_idstring (or null)optionalActual browser MediaStreamTrack.id for the local video track; it must match an a=msid line in the supplied SDP offer. Omit only when that track does not exist.
sdpstringrequiredComplete non-trickle WebRTC SDP offer generated by the calling client, beginning with v=0 and no larger than 128 KiB.

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.messenger_calling_media_update \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "call_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "from_version": 1,
    "to_version": 1,
    "audio_enabled": true,
    "video_enabled": true,
    "sdp": "example"
  }'
Test with your API key

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

Submit Messenger call metrics

meta.messenger_calling_metrics_submitwriteconfirmadmin only

Submit the finished real Messenger call's end reason and optional browser audio-quality counters to Meta. Meta accepts this once per call, only after the call ends, and only within 24 hours; it changes provider analytics rather than contacting the person.

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
page_idstringrequiredConnected Facebook Page id whose Messenger Calling setup to use.
call_idstringrequiredProvider-owned Messenger call id returned by Meta or a calls webhook.
end_call_reason"Call_End_Accept_After_Hang_Up" | "Caller_Not_Visible" | "Camera_Permission_Denied" | "Client_Error" | "Client_Interrupted" | "Connection_Dropped" | … 16 morerequiredMeta-defined reason that the finished Messenger call ended.
end_call_subreasonstringoptionalOptional concise technical detail about why the Messenger call ended.
call_ended_timenumberrequiredUnix timestamp in seconds when the Messenger call ended.
first_audio_packet_received_timenumberoptionalUnix timestamp in seconds when the first remote audio packet arrived, when known.
audio_statsobjectoptionalOptional browser WebRTC audio-quality counters for Meta's call quality metrics.
audio_stats.jitter_secnumberoptionalInbound audio jitter measured in seconds.
audio_stats.packets_lostnumberoptionalCount of inbound audio packets lost.
audio_stats.packets_receivednumberoptionalCount of inbound audio packets received.
audio_stats.round_trip_time_secnumberoptionalAudio round-trip time measured in seconds.
audio_stats.jitter_buffer_delay_secnumberoptionalTotal audio jitter-buffer delay measured in seconds.
audio_stats.concealed_samplesnumberoptionalCount of audio samples concealed by WebRTC.
audio_stats.silent_concealed_samplesnumberoptionalCount of silently concealed audio samples.
audio_stats.total_samples_duration_secnumberoptionalDuration of all received audio samples in seconds.

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.messenger_calling_metrics_submit \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "call_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "end_call_reason": "Call_End_Accept_After_Hang_Up",
    "call_ended_time": 1
  }'
Test with your API key

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

Check Messenger call permission

meta.messenger_calling_permission_getread

Read Meta's live outbound-calling permission and per-action limits for one known person in a connected Facebook Page's Messenger thread. This sends no message and does not infer permission from Chirply data.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id whose Messenger Calling setup to use.
psidstringrequiredPage-scoped Messenger person id already known to this account and Facebook Page.

Example

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

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

Request Messenger call permission

meta.messenger_calling_permission_requestwriteconfirmadmin only

Send a real Messenger calling_optin template to one known person, asking them to approve outbound calls from the connected Facebook Page. Meta allows at most two permission requests per thread in 24 hours and grants expire after seven days; the person may reject the request.

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
page_idstringrequiredConnected Facebook Page id whose Messenger Calling setup to use.
psidstringrequiredPage-scoped Messenger person id already known to this account and Facebook Page.

Example

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

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

Send Messenger call prompt

meta.messenger_calling_prompt_sendwriteconfirmadmin only

Send a real Messenger call_prompt template that lets one known person call the connected Facebook Page for one to seven days, including when its persistent call icon is hidden. This immediately messages a real person and Meta rejects it until Calling is enabled.

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
page_idstringrequiredConnected Facebook Page id whose Messenger Calling setup to use.
psidstringrequiredPage-scoped Messenger person id already known to this account and Facebook Page.
ttl_daysintegerrequiredNumber of days, from 1 through 7, that the Messenger call prompt remains active.

Example

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

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

Decline Messenger call

meta.messenger_calling_rejectwriteconfirmadmin only

Immediately decline a real inbound Messenger call to the connected Facebook Page. The caller's ringing attempt ends and this action 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

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id whose Messenger Calling setup to use.
call_idstringrequiredProvider-owned Messenger call id returned by Meta or a calls webhook.

Example

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

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

Update Messenger screen share

meta.messenger_calling_screen_share_updatewriteconfirmadmin only

Immediately start, stop, or restore screen-share video in a real active Messenger call by sending Meta's current media_update contract with increasing versions, a browser-created SDP offer, and the exact getDisplayMedia or restored-camera MediaStreamTrack ids. The browser must obtain the person's screen-sharing permission and keep the live WebRTC peer connected; this operation changes what the other participant sees.

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
page_idstringrequiredConnected Facebook Page id whose Messenger Calling setup to use.
call_idstringrequiredProvider-owned Messenger call id returned by Meta or a calls webhook.
from_versionintegerrequiredCurrent Messenger call media version before changing screen sharing.
to_versionintegerrequiredNext Messenger call media version; it must be greater than from_version.
audio_enabledbooleanrequiredWhether the current default audio track remains enabled.
video_enabledbooleanrequiredWhether the display or restored-camera video track should be enabled after this update.
audio_track_idstring (or null)optionalActual browser MediaStreamTrack.id for the local audio track; it must match an a=msid line in the supplied SDP offer. Omit only when that track does not exist.
video_track_idstringrequiredExact browser MediaStreamTrack.id for the selected display track, restored camera track, or disabled display track; it must appear in the SDP offer's a=msid line.
sharingbooleanrequiredTrue when switching to getDisplayMedia output; false when restoring camera or disabling display video.
sdpstringrequiredComplete non-trickle WebRTC SDP offer generated by the calling client, beginning with v=0 and no larger than 128 KiB.

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.messenger_calling_screen_share_update \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "call_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "from_version": 1,
    "to_version": 1,
    "audio_enabled": true,
    "video_enabled": true,
    "video_track_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "sharing": true,
    "sdp": "example"
  }'
Test with your API key

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

End Messenger call

meta.messenger_calling_terminatewriteconfirmadmin only

Immediately terminate a real active Messenger call on the connected Facebook Page. The other participant is disconnected and this action 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

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id whose Messenger Calling setup to use.
call_idstringrequiredProvider-owned Messenger call id returned by Meta or a calls webhook.

Example

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

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

Update Messenger Calling

meta.messenger_calling_update_settingswriteconfirmadmin only

Immediately replace the connected Facebook Page's live Messenger Calling audio, video, call-icon, weekly-hours, timezone, and ring-target settings. META rings Meta's native surface; PARTNERS sends real inbound calls to Chirply's browser softphone and requires the calls webhooks. Meta rejects this operation until the Page and app pass its Calling access/review gate.

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
page_idstringrequiredConnected Facebook Page id whose Messenger Calling setup to use.
audio_enabledbooleanrequiredWhether people may place audio Messenger calls to the Page.
video_enabledbooleanrequiredWhether people may place video Messenger calls to the Page.
icon_enabledbooleanrequiredWhether Messenger displays the persistent call icon in the Page thread.
timezone_idstringrequiredIANA timezone used to interpret the Page's calling hours, such as America/Chicago.
weekly_operating_hoursobject[]requiredZero to seven unique weekday call windows. Omitted weekdays are closed; saving replaces the full weekly schedule.
weekly_operating_hours[].day_of_week"MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | … 1 morerequiredWeekday whose one Messenger calling-hours range is being configured.
weekly_operating_hours[].open_timestringrequiredLocal time when the Page starts accepting Messenger calls that day.
weekly_operating_hours[].close_timestringrequiredLocal time when the Page stops accepting Messenger calls that day.
ring_target"META" | "PARTNERS"requiredWhere inbound calls ring: META for Meta's native experience or PARTNERS for Chirply's open browser softphone and calls webhook.

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.messenger_calling_update_settings \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "audio_enabled": true,
    "video_enabled": true,
    "icon_enabled": true,
    "timezone_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "weekly_operating_hours": [
      {
        "day_of_week": "MONDAY",
        "open_time": "example",
        "close_time": "example"
      }
    ],
    "ring_target": "META"
  }'
Test with your API key

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

List Messenger capabilities

meta.messenger_capabilitiesread

List Meta's current Facebook Messenger Platform features and Chirply's exact implementation state for each one, including supported controls, permission-gated products, Meta previews, policy limits, known build gaps, and retired legacy features. This is read-only and sends no message.

Parameters

FieldTypeRequiredDescription
page_idstringoptionalOptional connected Facebook Page id used to turn each product surface into a Page-scoped Chirply link.
area"messages" | "profile" | "entry_points" | "operations" | "growth" | "commerce" | … 3 moreoptionalOnly return one Messenger product area, such as messages, profile, calling, or analytics.
chirply_status"available" | "setup_required" | "meta_preview" | "meta_limited" | "not_applicable" | "missing"optionalOnly return capabilities with this Chirply implementation or eligibility state.
querystringoptionalCase-insensitive search across capability id, title, description, and eligibility note.
include_retiredbooleanoptionalWhen false, omit features Meta has retired or explicitly prohibits. Default: true

Example

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

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

Ban Messenger person

meta.messenger_conversation_banwriteconfirmadmin only

Immediately applies Meta's ban_user moderation action to one real Page-scoped Messenger person on one connected Facebook Page. This changes the live Page conversation and may prevent further interaction; it sends no message. Meta exposes no current moderation-state read, so verify the intended person and Page before confirming.

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
page_idstringrequiredConnected Facebook Page id that owns the Messenger labels and conversation.
psidstringrequiredPage-scoped Messenger user id (PSID) for a person already known on this exact Facebook Page in the account.
confirmtruerequiredMust be true to confirm applying this moderation action to the live Page conversation.

Example

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

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

Block Messenger person

meta.messenger_conversation_blockwriteconfirmadmin only

Immediately applies Meta's block_user moderation action to one real Page-scoped Messenger person on one connected Facebook Page. This changes the live Page conversation and may prevent further interaction; it sends no message. Meta exposes no current moderation-state read, so verify the intended person and Page before confirming.

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
page_idstringrequiredConnected Facebook Page id that owns the Messenger labels and conversation.
psidstringrequiredPage-scoped Messenger user id (PSID) for a person already known on this exact Facebook Page in the account.
confirmtruerequiredMust be true to confirm applying this moderation action to the live Page conversation.

Example

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

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

Assign Messenger custom label

meta.messenger_conversation_label_assignwriteconfirmadmin only

Immediately assigns one real Page-owned Messenger custom label to one known Page-scoped person in Meta. This changes shared inbox organization but sends no message.

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
page_idstringrequiredConnected Facebook Page id that owns the Messenger labels and conversation.
psidstringrequiredPage-scoped Messenger user id (PSID) for a person already known on this exact Facebook Page in the account.
label_idstringrequiredMeta custom-label id that belongs to the connected Facebook Page.

Example

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

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

Remove Messenger custom label

meta.messenger_conversation_label_removewriteconfirmadmin only

Immediately removes one real Page-owned Messenger custom label from one known Page-scoped person in Meta. This changes shared inbox organization but sends no message.

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
page_idstringrequiredConnected Facebook Page id that owns the Messenger labels and conversation.
psidstringrequiredPage-scoped Messenger user id (PSID) for a person already known on this exact Facebook Page in the account.
label_idstringrequiredMeta custom-label id that belongs to the connected Facebook Page.

Example

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

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

View conversation labels

meta.messenger_conversation_labels_listread

Read the live custom labels attached to one Page-scoped Messenger person on one connected Facebook Page. This changes nothing and sends no message.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id that owns the Messenger labels and conversation.
psidstringrequiredPage-scoped Messenger user id (PSID) for a person already known on this exact Facebook Page in the account.

Example

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

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

Move Messenger conversation to spam

meta.messenger_conversation_move_to_spamwriteconfirmadmin only

Immediately applies Meta's move_to_spam action to one real Page-scoped Messenger person's conversation, moving it to Spam in Meta Business Suite Inbox. This changes a live external inbox and sends no message. Meta documents no restore-from-spam action on this API, so confirm the intended person and Page first.

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
page_idstringrequiredConnected Facebook Page id that owns the Messenger labels and conversation.
psidstringrequiredPage-scoped Messenger user id (PSID) for a person already known on this exact Facebook Page in the account.
confirmtruerequiredMust be true to confirm applying this moderation action to the live Page conversation.

Example

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

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

Unban Messenger person

meta.messenger_conversation_unbanwriteconfirmadmin only

Immediately applies Meta's unban_user moderation action to one real Page-scoped Messenger person on one connected Facebook Page. This changes the live Page conversation and may allow interaction again; it sends no message. Meta exposes no current moderation-state read, so verify the intended person and Page before confirming.

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
page_idstringrequiredConnected Facebook Page id that owns the Messenger labels and conversation.
psidstringrequiredPage-scoped Messenger user id (PSID) for a person already known on this exact Facebook Page in the account.
confirmtruerequiredMust be true to confirm applying this moderation action to the live Page conversation.

Example

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

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

Unblock Messenger person

meta.messenger_conversation_unblockwriteconfirmadmin only

Immediately applies Meta's unblock_user moderation action to one real Page-scoped Messenger person on one connected Facebook Page. This changes the live Page conversation and may allow interaction again; it sends no message. Meta exposes no current moderation-state read, so verify the intended person and Page before confirming.

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
page_idstringrequiredConnected Facebook Page id that owns the Messenger labels and conversation.
psidstringrequiredPage-scoped Messenger user id (PSID) for a person already known on this exact Facebook Page in the account.
confirmtruerequiredMust be true to confirm applying this moderation action to the live Page conversation.

Example

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

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

Create Messenger custom label

meta.messenger_custom_label_createwriteconfirmadmin only

Immediately creates a real Page-owned Messenger custom label in Meta. It sends no message, but the new label becomes available to every app and teammate managing that Page.

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
page_idstringrequiredConnected Facebook Page id that owns the Messenger labels and conversation.
namestringrequiredName for the new Page-owned Messenger custom label.

Example

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

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

Delete Messenger custom label

meta.messenger_custom_label_deletewriteconfirmadmin only

Immediately deletes a real Page-owned Messenger custom label from Meta, removing it from every person who has it. This cannot be undone and sends no message.

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
page_idstringrequiredConnected Facebook Page id that owns the Messenger labels and conversation.
label_idstringrequiredMeta custom-label id that belongs to the connected Facebook Page.

Example

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

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

View Messenger custom label

meta.messenger_custom_label_getread

Read one Page-owned Messenger custom label after verifying that the label belongs to the connected Facebook Page. This changes nothing and sends no message.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id that owns the Messenger labels and conversation.
label_idstringrequiredMeta custom-label id that belongs to the connected Facebook Page.

Example

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

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

List Messenger custom labels

meta.messenger_custom_labels_listread

Read the live custom-label catalog for one connected Facebook Page. This changes nothing and sends no message.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id that owns the Messenger labels and conversation.

Example

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

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

Send human support reply

meta.messenger_human_agent_sendwriteconfirm

SENDS A REAL FACEBOOK MESSENGER HUMAN_AGENT REPLY. This is only for a literal support reply written and approved by a real person within seven days of that person's last Page message; it pauses automation on the conversation, reaches the recipient immediately with no undo, and must never carry automated, unrelated, or marketing content. Chirply requires an explicit human-authored attestation, while Meta separately requires HUMAN_AGENT App Review 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

FieldTypeRequiredDescription
page_idstringrequiredConnected numeric Facebook Page id that owns the Messenger product setup.
conversation_idstring (uuid)requiredAccount-owned Facebook Messenger conversation whose Page and recipient Chirply resolves server-side.
textstringrequiredLiteral support reply written by the approving human; no merge fields, automation, unrelated content, or marketing.
human_authoredtruerequiredMust be true to attest that a real person wrote and is approving this support reply now.

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.messenger_human_agent_send \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "conversation_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "text": "example",
    "human_authored": true
  }'
Test with your API key

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

Prepare Login Connect contact

meta.messenger_login_connect_identity_preparewriteadmin only

Derive Meta's Page-specific Login Connect login_id on Chirply's server and attach the website's authenticated app-scoped user id to one CRM contact. This stores no PSID and sends no message; the identity remains unable to send until Meta's signed user_messenger_contact opt-in webhook is captured.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected numeric Facebook Page id selected during website login.
contact_idstring (uuid)requiredCRM contact id authenticated by the calling website session.
asidstringrequiredApp-scoped user id returned by this Meta app's successful Facebook Login callback.

Example

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

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

Send Login Connect message

meta.messenger_login_connect_initial_message_sendwriteconfirmadmin only

Immediately sends one real Facebook Messenger message to the CRM contact through Meta recipient.login_id. Chirply requires a signed user_messenger_contact opt-in for the same Page and contact, enforces Meta's 24-hour first-message deadline, records the consent basis, and permanently fences duplicate or indeterminate sends.

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
page_idstringrequiredConnected numeric Facebook Page id sending the consented first message.
contact_idstring (uuid)requiredExact CRM contact id already bound to this Login Connect identity.
identity_idstring (uuid)requiredOpaque Chirply Login Connect identity id already bound to this Page and CRM contact; Meta's login_id remains server-only.
textstringrequiredInitial Messenger message, which must match what the person agreed to receive.
consent_basisstringrequiredAudit note describing the disclosure and content the person agreed to receive.
quick_repliesobject[]optionalOptional Messenger quick replies shown under the consented first message (maximum 13). Default: []
quick_replies[].type"text" | "user_phone_number" | "user_email"optionalMessenger quick-reply kind: text, user_phone_number, or user_email. Default: "text"
quick_replies[].titlestringoptionalVisible label for a text quick reply; ignored for phone/email profile replies. Default: ""
quick_replies[].payloadstringoptionalStable Bot Flow value returned for a text quick reply; ignored for phone/email profile replies. Default: ""
quick_replies[].image_urlstring (uri)optionalOptional public HTTPS icon URL for a text quick reply.

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.messenger_login_connect_initial_message_send \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "contact_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "identity_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "text": "example",
    "consent_basis": "example"
  }'
Test with your API key

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

Attach Login Connect opt-in

meta.messenger_login_connect_optin_attachwriteadmin only

Attach a previously captured, signed messaging_optins.login_id webhook to one authenticated CRM contact through Chirply's opaque identity handle. Meta's login_id remains server-only; this does not accept an unverified opt-in, does not create a PSID, and sends no message.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected numeric Facebook Page id that received the signed opt-in.
contact_idstring (uuid)requiredCRM contact id proven by the caller's authenticated website session.
identity_idstring (uuid)requiredOpaque Chirply Login Connect identity id returned by the prepare operation; this is not a PSID or Meta login_id.

Example

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

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

Generate Login Connect setup

meta.messenger_login_connect_setup_generateread

Generate Meta's documented Login Connect OAuth URL and JavaScript SDK call for a connected Facebook Page. This returns setup code only; it creates no Meta object, sends no message, never exposes the server-only Meta client token, and cannot replace App Review or the manual App Dashboard Page toggle.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected numeric Facebook Page id the website login should connect to Messenger.
redirect_uristring (uri)requiredExact HTTPS OAuth callback URI already allow-listed in the Meta app.
statestringrequiredUnpredictable session-bound CSRF state that the callback must verify before attaching a CRM contact.
reset_admin_testbooleanoptionalAdd Meta's reset_messenger_state=1 test flag. Meta permits this only for app administrators, never normal production users. Default: false

Example

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

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

Check Login Connect setup

meta.messenger_login_connect_status_getread

Check the connected Page, pages_messaging grant, Page messaging task, messaging_optins webhook subscription, and Chirply server configuration for Meta Login Connect with Messenger. Meta exposes no API for App Review or its Login Connect App Dashboard toggle, so those remain explicitly manual; this sends no message.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected numeric Facebook Page id to inspect.

Example

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

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

Create customer-list audience

meta.messenger_marketing_audience_createwriteconfirmadmin only

Create a real external Meta Custom Audience dedicated to Messenger Marketing Messages for one Page and ad account. This requires a non-expiring Flow 1/3 system-business access token and changes external ad-account configuration, but uploads no customer data, sends no message, and spends nothing.

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
page_idstringrequiredConnected Facebook Page id that owns the Messenger audience.
account_idstringrequiredConnected Meta ad account id billed for paid Marketing Message delivery.
namestringrequiredName for the real Messenger Marketing Custom Audience in Meta.
descriptionstringrequiredPlain-language description of the consented customer list and its use.

Example

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

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

Unsubscribe Marketing audience

meta.messenger_marketing_audience_unsubscribewriteconfirmadmin only

UNSUBSCRIBE REAL PEOPLE FROM THIS PAGE'S ENTIRE MESSENGER MARKETING MESSAGES AUDIENCE using Meta's current Page-level unsubscribe API. Each row must use phone/email, PSID, or an opaque subscriber handle; this ends Page-level marketing eligibility rather than merely removing one Custom Audience membership. It sends no Messenger message and spends nothing, but the person must opt in again before another paid Marketing Message.

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
page_idstringrequiredConnected Facebook Page id that owns the Messenger audience.
rowsobject[]requiredPeople to unsubscribe from this Page's entire Marketing Messages customer base.
rows[].emailstring (or null)optionalLowercase raw email or SHA-256 hashed email; combine only with phone, never PSID or subscriber_handle.
rows[].phonestring (or null)optionalRaw E.164 phone such as +14155551234 or a SHA-256 hash; combine only with email.
rows[].psidstring (or null)optionalPage-scoped Messenger person id used alone for this row.
rows[].subscription_handlestring (or null)optionalOpaque Chirply subscriber handle used alone; Chirply decrypts it server-side and never returns the raw Meta token.
unsubscribe_confirmedtruerequiredApproval to end Page-level Marketing Messages eligibility for every valid row now.

Example

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

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

Upload audience customers

meta.messenger_marketing_audience_users_addwriteconfirmadmin only

UPLOAD CUSTOMER IDENTIFIERS TO META for matching into one real Messenger Marketing Custom Audience. Chirply normalizes and SHA-256 hashes every email/phone before transmission, sends at most 10,000 rows per confirmed request, and Meta may take up to 24 hours to match them; only matched people with valid marketing consent should be included, and subscription tokens remain hidden until Meta's 100-match privacy threshold is met. This sends no Messenger message and creates no paid delivery.

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
page_idstringrequiredConnected Facebook Page id that owns the Messenger audience.
account_idstringrequiredConnected Meta ad account id billed for paid Marketing Message delivery.
audience_idstringrequiredMeta Messenger Marketing Messages Custom Audience id returned by the customer-list audience API.
rowsobject[]requiredCustomer rows to hash and add/remove. Rows with email-only, phone-only, and both are safely split into exact Meta schemas.
rows[].emailstring (or null)optionalRaw customer email; Chirply lowercases and SHA-256 hashes it before Meta receives the upload. Use null when this row uses phone only.
rows[].phonestring (or null)optionalRaw customer phone including country code; Chirply removes symbols, letters, and leading zeroes then SHA-256 hashes it before Meta receives the upload. Use null when this row uses email only.
customer_data_rights_confirmedtruerequiredAttestation that the business has the legal right and Meta Custom Audience authority to upload these identifiers.
marketing_consent_confirmedtruerequiredAttestation that every row represents a person who agreed to receive this Page's marketing communication.
upload_confirmedtruerequiredApproval to hash and transmit this customer data to Meta now for asynchronous identity matching.

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.messenger_marketing_audience_users_add \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "account_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "audience_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "rows": [
      {}
    ],
    "customer_data_rights_confirmed": true,
    "marketing_consent_confirmed": true,
    "upload_confirmed": true
  }'
Test with your API key

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

Remove audience customers

meta.messenger_marketing_audience_users_removewriteconfirmadmin only

REMOVE SHA-256-HASHED CUSTOMER IDENTIFIERS FROM ONE REAL META CUSTOM AUDIENCE. This changes external audience membership after a confirmed request, but does not unsubscribe the people at Page level or remove them from other audiences; call the Page-level unsubscribe operation when marketing permission itself must end. It sends no Messenger message and spends nothing.

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
page_idstringrequiredConnected Facebook Page id that owns the Messenger audience.
account_idstringrequiredConnected Meta ad account id billed for paid Marketing Message delivery.
audience_idstringrequiredMeta Messenger Marketing Messages Custom Audience id returned by the customer-list audience API.
rowsobject[]requiredCustomer rows to hash and add/remove. Rows with email-only, phone-only, and both are safely split into exact Meta schemas.
rows[].emailstring (or null)optionalRaw customer email; Chirply lowercases and SHA-256 hashes it before Meta receives the upload. Use null when this row uses phone only.
rows[].phonestring (or null)optionalRaw customer phone including country code; Chirply removes symbols, letters, and leading zeroes then SHA-256 hashes it before Meta receives the upload. Use null when this row uses email only.
removal_confirmedtruerequiredApproval to remove these hashed identifiers from this one external Custom Audience now.

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.messenger_marketing_audience_users_remove \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "account_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "audience_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "rows": [
      {}
    ],
    "removal_confirmed": true
  }'
Test with your API key

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

List customer-list audiences

meta.messenger_marketing_audiences_listreadadmin only

List the live Messenger Marketing Messages Custom Audiences for one connected Page and ad account using Meta's exact subtype-1010 filter. This requires a non-expiring Flow 1/3 system-business access token; it sends nothing, uploads no customer data, and spends nothing.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id that owns the Messenger audience.
account_idstringrequiredConnected Meta ad account id billed for paid Marketing Message delivery.

Example

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

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

Create Marketing campaign

meta.messenger_marketing_campaign_createwriteconfirmadmin only

Create a real paid Marketing Messages campaign for one connected Facebook Page and billed Meta ad account. Creating it does not send a message or create a charge, but it creates external ad infrastructure and establishes a real daily, lifetime, or Meta-estimated spend cap; the campaign remains inert until explicitly resumed and the send API is called.

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
page_idstringrequiredConnected Facebook Page id that owns the Messenger audience.
account_idstringrequiredConnected Meta ad account id billed for paid Marketing Message delivery.
namestringrequiredName visible for the paid Marketing Messages campaign in Meta and Chirply.
daily_budgetinteger (or null)optionalOptional average daily budget in the ad account's minor currency unit; Meta may spend up to 75% more on one day while honoring the documented weekly cap. Default: null
lifetime_budgetinteger (or null)optionalOptional total campaign budget in the ad account's minor currency unit; do not set together with daily_budget. Default: null
pixel_idstring (or null)optionalOptional accessible Meta Pixel id used for offsite conversion attribution. Default: null
start_timestring (date-time) (or null)optionalOptional ISO start time, now or in the future and no more than 30 days away. Default: null
end_timestring (date-time) (or null)optionalOptional ISO end time after start_time; lifetime campaigns default to 30 days when omitted. Default: null

Example

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

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

Delete Marketing campaign

meta.messenger_marketing_campaign_deletewriteconfirmadmin only

Permanently delete one real direct Marketing Message campaign after proving its connected Page and billed ad-account ownership. This cannot be undone, removes external campaign history/configuration, and does not recall messages already delivered.

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
page_idstringrequiredConnected Facebook Page id that owns the Messenger audience.
account_idstringrequiredConnected Meta ad account id billed for paid Marketing Message delivery.
campaign_idstringrequiredMeta Marketing Message campaign id returned by the simplified message_campaign endpoint.

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.messenger_marketing_campaign_delete \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "account_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 meta_messenger_marketing_campaign_delete at https://app.chirply.io/api/mcp, same bearer token, same input.

View Marketing campaign

meta.messenger_marketing_campaign_getread

Read one live direct Marketing Message campaign after proving its Page and billed ad-account ownership, including all three Meta delivery objects, budget, schedule, status, and Pixel attribution. This sends nothing and spends nothing.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id that owns the Messenger audience.
account_idstringrequiredConnected Meta ad account id billed for paid Marketing Message delivery.
campaign_idstringrequiredMeta Marketing Message campaign id returned by the simplified message_campaign endpoint.

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.messenger_marketing_campaign_get \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "account_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 meta_messenger_marketing_campaign_get at https://app.chirply.io/api/mcp, same bearer token, same input.

Pause Marketing campaign

meta.messenger_marketing_campaign_pausewriteconfirmadmin only

Pause the real message, message set, and campaign behind one direct Messenger Marketing campaign, stopping future paid sends from being accepted. This changes external Meta state but does not recall messages already delivered.

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
page_idstringrequiredConnected Facebook Page id that owns the Messenger audience.
account_idstringrequiredConnected Meta ad account id billed for paid Marketing Message delivery.
campaign_idstringrequiredMeta Marketing Message campaign id returned by the simplified message_campaign endpoint.

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.messenger_marketing_campaign_pause \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "account_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 meta_messenger_marketing_campaign_pause at https://app.chirply.io/api/mcp, same bearer token, same input.

Resume Marketing campaign

meta.messenger_marketing_campaign_resumewriteconfirmadmin only

Activate the real campaign, message set, and message behind one direct Messenger Marketing campaign. Activation does not itself send, but it enables later approved sends that message real subscribers and charge the billed ad account; Meta requires about 10 minutes after activation before sending.

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
page_idstringrequiredConnected Facebook Page id that owns the Messenger audience.
account_idstringrequiredConnected Meta ad account id billed for paid Marketing Message delivery.
campaign_idstringrequiredMeta Marketing Message campaign id returned by the simplified message_campaign endpoint.

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.messenger_marketing_campaign_resume \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "account_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 meta_messenger_marketing_campaign_resume at https://app.chirply.io/api/mcp, same bearer token, same input.

Update Marketing campaign

meta.messenger_marketing_campaign_updatewriteconfirmadmin only

Update the name, same-mode budget, or schedule of a real direct Marketing Message campaign after proving its Page and ad-account ownership. This changes external paid-campaign configuration and can raise how much a later approved send may spend, but it does not itself send a message; Meta does not document switching a live campaign between daily and lifetime budget modes, so Chirply refuses that guess.

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
page_idstringrequiredConnected Facebook Page id that owns the Messenger audience.
account_idstringrequiredConnected Meta ad account id billed for paid Marketing Message delivery.
campaign_idstringrequiredMeta Marketing Message campaign id returned by the simplified message_campaign endpoint.
namestring (or null)optionalReplacement campaign name, or null to keep it. Default: null
daily_budgetinteger (or null)optionalReplacement daily budget in minor units for an existing daily-budget or unbudgeted campaign, or null. Default: null
lifetime_budgetinteger (or null)optionalReplacement lifetime budget in minor units for an existing lifetime-budget or unbudgeted campaign, or null. Default: null
start_timestring (date-time) (or null)optionalReplacement ISO start time, or null to keep it. Default: null
end_timestring (date-time) (or null)optionalReplacement ISO end time, or null to keep it. Default: null

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.messenger_marketing_campaign_update \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "account_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 meta_messenger_marketing_campaign_update at https://app.chirply.io/api/mcp, same bearer token, same input.

List Marketing campaigns

meta.messenger_marketing_campaigns_listread

Read the live direct Marketing Message campaigns owned by one connected Facebook Page and billed through one connected Meta ad account, including the underlying campaign, message-set, and message statuses, budget, schedule, and Pixel attribution. This sends nothing and spends nothing.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id that owns the Messenger audience.
account_idstringrequiredConnected Meta ad account id billed for paid Marketing Message delivery.

Example

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

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

Estimate Marketing delivery

meta.messenger_marketing_delivery_estimatereadadmin only

Ask Meta for the estimated lower and upper number of paid Messenger Marketing send calls supported by one daily or lifetime budget for a connected Page/ad account. This is an estimate, not a guarantee; it sends nothing, changes no budget, and incurs no delivery charge.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id that owns the Messenger audience.
account_idstringrequiredConnected Meta ad account id billed for paid Marketing Message delivery.
daily_budgetinteger (or null)optionalDaily budget in the ad account's minor currency unit, or null when estimating a lifetime budget. Default: null
lifetime_budgetinteger (or null)optionalLifetime budget in the ad account's minor currency unit, or null when estimating a daily budget. Default: null

Example

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

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

View Marketing performance

meta.messenger_marketing_insightsread

Read Meta's live paid Messenger Marketing delivered count, reads, link clicks, spend, cost per delivery/click, and attributed Pixel or Conversions API actions, values, and purchase ROAS for one Page-owned campaign. Metrics may be estimated or region-excluded exactly as Meta documents; this sends nothing and spends nothing.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id that owns the Messenger audience.
account_idstringrequiredConnected Meta ad account id billed for paid Marketing Message delivery.
campaign_idstringrequiredMeta Marketing Message campaign id returned by the simplified message_campaign endpoint.
date_preset"today" | "yesterday" | "this_month" | "last_month" | "this_quarter" | "maximum" | … 14 moreoptionalMeta date preset used when since/until are omitted. Default: "last_30d"
sincestring (date) (or null)optionalOptional YYYY-MM-DD start date; provide together with until to override date_preset. Default: null
untilstring (date) (or null)optionalOptional YYYY-MM-DD end date; provide together with since to override date_preset. Default: null

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.messenger_marketing_insights \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "account_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 meta_messenger_marketing_insights at https://app.chirply.io/api/mcp, same bearer token, same input.

Ask for marketing opt-in

meta.messenger_marketing_optin_requestwriteconfirmadmin only

SEND A REAL IN-THREAD FACEBOOK MESSENGER OPT-IN REQUEST to a person who recently started a Page conversation. The notification_messages template asks for explicit Marketing Messages consent; it does not itself grant consent, spend paid-delivery budget, or authorize a later send until Meta returns a subscription token. Chirply enforces the current 24-hour thread window and writes a durable receipt first.

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
page_idstringrequiredConnected Facebook Page id that owns the Messenger audience.
conversation_idstring (uuid)requiredRecent Page-owned Messenger conversation whose participant receives the real opt-in request.
titlestringrequiredConsent card title explaining the updates or promotions the person is choosing.
payloadstringrequiredOpaque workflow or attribution payload Meta returns in the messaging_optins webhook.
timezonestringoptionalIANA timezone shown/stored with the opt-in request, such as America/Chicago or UTC. Default: "UTC"
image_urlstring (uri) (or null)optionalOptional public HTTP/HTTPS image URL for the consent card, or null. Default: null
cta_text"ALLOW" | "GET" | "GET_UPDATES" | "OPT_IN" | "SIGN_UP"optionalMeta-supported call-to-action wording for the consent button. Default: "GET_UPDATES"
request_keystringrequiredCaller-generated idempotency key reused for every retry of this exact real-message request.
consent_request_confirmedtruerequiredApproval to send this real consent request now, acknowledging that only the person's later Meta opt-in creates permission.

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.messenger_marketing_optin_request \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "conversation_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "title": "Example",
    "payload": "example",
    "request_key": "example",
    "consent_request_confirmed": true
  }'
Test with your API key

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

Preview Marketing message

meta.messenger_marketing_previewreadadmin only

Ask Meta to render a safe hosted preview for one documented rich Marketing Message against a connected Page and ad account. This sends nothing to a subscriber, changes no campaign, and incurs no delivery charge; Chirply returns only Meta's verified facebook.com preview URL, never executable iframe HTML.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id that owns the Messenger audience.
account_idstringrequiredConnected Meta ad account id billed for paid Marketing Message delivery.
message_jsonstringrequiredJSON object for one documented Marketing Message: text, button, generic/carousel, media, product, receipt, or coupon, optionally with quick replies.

Example

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

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

Send paid Marketing message

meta.messenger_marketing_sendwriteconfirmadmin only

SENDS A REAL PAID FACEBOOK MESSENGER MARKETING MESSAGE immediately to one explicitly opted-in subscriber using an active direct campaign. Meta bills the selected ad account for billable delivery. Chirply re-reads live token eligibility, enforces the 12-hour cooldown and 10-minute activation delay, validates current rich-message formats, requires geography/opt-in/payment attestations, and writes a fenced durable receipt before calling Meta so a crash cannot silently duplicate the send.

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
page_idstringrequiredConnected Facebook Page id that owns the Messenger audience.
account_idstringrequiredConnected Meta ad account id billed for paid Marketing Message delivery.
campaign_idstringrequiredMeta Marketing Message campaign id returned by the simplified message_campaign endpoint.
subscription_handlestringrequiredOpaque Chirply-sealed subscriber handle returned by the subscriber list; the underlying Meta subscription token is never returned.
message_jsonstringrequiredJSON object for one documented Marketing Message: text, button, generic/carousel, media, product, receipt, or coupon, optionally with quick replies.
min_conversation_gap_secondsinteger (or null)optionalOptional minimum seconds since organic thread activity; Meta refuses with 2300052 instead of sending inside this gap. Default: null
request_keystringrequiredCaller-generated idempotency key reused for every retry of this exact real-message request.
business_region_confirmedtruerequiredAttestation that the sending business is in Meta's currently supported Marketing Messages regions.
recipient_region_confirmedtruerequiredAttestation that the subscriber is not in Meta's currently blocked recipient regions: EU, Japan, South Korea, Australia, or United Kingdom.
opt_in_confirmedtruerequiredAttestation that this opaque handle represents the subscriber's current explicit Page-specific Marketing Messages opt-in.
paid_send_confirmedtruerequiredApproval that this sends now to a real person and Meta charges the selected ad account for billable delivery.

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.messenger_marketing_send \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "account_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "campaign_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "subscription_handle": "example",
    "message_json": "example",
    "request_key": "example",
    "business_region_confirmed": true,
    "recipient_region_confirmed": true,
    "opt_in_confirmed": true,
    "paid_send_confirmed": true
  }'
Test with your API key

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

Check Marketing Messages

meta.messenger_marketing_statusreadadmin only

Inspect one connected Facebook Page's current paid Marketing Messages readiness: required Meta permissions, access-token lifetime, spendable ad accounts, subscriber API probe, required delivery webhooks, documented business and recipient geographies, and honest boundaries for One-Time Notification, NPI news, Sponsored Messages, and legacy Recurring Notifications. This sends nothing and spends nothing; Meta does not expose Tech Provider review, Terms acceptance, or geography as a single inspectable flag.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id that owns the Messenger audience.

Example

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

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

View marketing subscriber

meta.messenger_marketing_subscriber_getreadadmin only

Read one live Marketing Message subscriber token's status, expiration, next eligible send time, re-opt-in state, timezone, Page-scoped recipient id when Meta exposes it, and matched Custom Audiences. The input and output use an opaque encrypted handle rather than the raw Meta send token; this sends nothing and spends nothing.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id that owns the Messenger audience.
subscription_handlestringrequiredOpaque Chirply-sealed subscriber handle returned by the subscriber list; the underlying Meta subscription token is never returned.

Example

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

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

List marketing subscribers

meta.messenger_marketing_subscribers_listreadadmin only

Read up to 1,000 current Marketing Message subscription records for one connected Facebook Page directly from Meta, deduplicating recipients and optionally filtering Custom Audiences. Raw subscription tokens are encrypted into opaque Chirply handles before being returned; this sends nothing and incurs no delivery charge, but the result contains sensitive subscriber status and eligibility data.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id that owns the Messenger audience.
limitintegeroptionalMaximum subscriber records to return, from 1 through 1,000. Default: 100
custom_audience_idsstring[]optionalOptional Meta Custom Audience ids used to filter matched subscription tokens; audiences below Meta's 100-match privacy threshold are omitted. Default: []

Example

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

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

Enable Marketing delivery tracking

meta.messenger_marketing_webhooks_enablewriteconfirmadmin only

After Meta proves this exact Facebook Page is onboarded for Marketing Messages, add the five current paid-product delivery, failure, echo, read, and click webhook fields to both the app and Page subscriptions while preserving all existing Page fields. This changes external Meta webhook configuration but sends no person a message and creates no paid delivery; Chirply deliberately keeps these gated fields out of the base subscription so an ineligible Page cannot break its working webhooks.

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
page_idstringrequiredConnected Facebook Page id that owns the Messenger audience.

Example

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

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

View Messenger performance

meta.messenger_measurement_getread

Read one connected Facebook Page's Bot Flow entries, completions, node drop-offs, human handoffs, entry attribution, message delivery/read receipts, customer-shared native cart events, and current Meta Messaging Insights. This sends no message, records no conversion, and changes nothing; Meta Insights can remain unavailable until the Page grants ANALYZE plus the documented permissions and Advanced Access.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id whose Messenger performance to read or report.
daysintegeroptionalInclusive reporting lookback in days, from 1 through 90. Defaults to 30. Default: 30

Example

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

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

Generate Message Us embed

meta.messenger_message_us_embed_generateread

Generate Meta's Page-scoped Message Us JavaScript SDK embed for a connected Facebook Page. This only returns website code; it creates no Meta object and sends no message.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected numeric Facebook Page id opened by the Message Us plugin.
localestringoptionalMeta JavaScript SDK locale, such as en_US. Default: "en_US"
color"blue" | "white"optionalButton color rendered by Meta's Message Us plugin. Default: "blue"
size"standard" | "large" | "xlarge"optionalButton size rendered by Meta's Message Us plugin. Default: "large"

Example

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

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

Send NPI news message

meta.messenger_news_sendwriteconfirmadmin only

SENDS A REAL FACEBOOK MESSENGER NEWS MESSAGE outside the 24-hour window using Meta's NON_PROMOTIONAL_SUBSCRIPTION tag. Only a Page currently registered in Meta's News Page Index may use it, and the content must be strictly non-promotional news—no subscription offer, deal, coupon, discount, branded content, affiliate promotion, or third-party promotion. Chirply requires both attestations and writes a fenced durable receipt before sending.

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
page_idstringrequiredConnected Facebook Page id that owns the Messenger audience.
conversation_idstring (uuid)requiredPage-owned Messenger conversation whose participant receives the real news message.
message_jsonstringrequiredJSON object for one documented Marketing Message: text, button, generic/carousel, media, product, receipt, or coupon, optionally with quick replies.
request_keystringrequiredCaller-generated idempotency key reused for every retry of this exact real-message request.
npi_registered_confirmedtruerequiredAttestation that Meta currently lists this Facebook Page in the News Page Index.
non_promotional_news_confirmedtruerequiredAttestation that this content is news only and contains no promotional, affiliate, branded, discount, coupon, or subscription-offer content.

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.messenger_news_send \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "conversation_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "message_json": "example",
    "request_key": "example",
    "npi_registered_confirmed": true,
    "non_promotional_news_confirmed": true
  }'
Test with your API key

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

Create Messenger persona

meta.messenger_personas_createwriteadmin only

Create a named human or bot identity on a real connected Facebook Page using a public profile-picture URL. Creating it does not send a message, but it becomes available for future Page messages and is stored by Meta.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id that owns the Messenger persona.
namestringrequiredClear persona name shown above messages, up to 50 characters; do not use a deceptive or generic identity.
profile_picture_urlstring (uri)requiredPublic HTTPS image URL Meta should download for this persona; Meta limits the image to 8 MB.

Example

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

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

Remove Messenger persona

meta.messenger_personas_deletewriteconfirmadmin only

Soft-delete one persona from a real connected Facebook Page. It can no longer send new messages, while historical messages retain their attribution; this cannot be undone in Chirply.

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
page_idstringrequiredConnected Facebook Page id that owns the Messenger persona.
persona_idstringrequiredMeta persona id returned by meta.messenger_personas_list.
confirmtruerequiredMust be true to confirm soft-deleting this live Page persona.

Example

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

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

List Messenger personas

meta.messenger_personas_listread

List the named human and bot personas currently available on one connected Facebook Page. This reads Meta's live Persona API, changes nothing, and sends no message.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id that owns the Messenger persona.

Example

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

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

Remove from Messenger

meta.messenger_profile_deletewriteconfirmadmin only

Immediately removes Get Started, greetings, ice breakers, persistent menus, commands, and account linking from a real connected Facebook Page. Existing Chirply Bot Flows remain. Messenger Extensions domains stay saved unless remove_whitelisted_domains is explicitly true.

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
page_idstringrequiredConnected Facebook Page id whose Messenger profile controls to remove.
confirmtruerequiredMust be true to confirm removing the Page's live Messenger Profile controls.
remove_whitelisted_domainsbooleanoptionalSet true to also delete every Messenger Extensions whitelisted domain. Omit or false to preserve them.

Example

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

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

View Messenger setup

meta.messenger_profile_getread

Read the live localized greetings, Get Started action, ice breakers, persistent menus and composer state, commands, account-linking URL, complete webview settings, and whitelisted domains for one connected Facebook Page. This reads Meta's live Messenger Profile configuration and sends no message.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id whose live Messenger setup to read.

Example

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

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

Publish Messenger setup

meta.messenger_profile_updatewriteconfirmadmin only

Immediately publishes current Messenger Profile controls on a real connected Facebook Page: localized greetings, Get Started or ice breakers, localized persistent menus and composer state, URL webview behavior, commands, HTTPS account linking, and optionally the domain whitelist. Chirply postbacks are bound to exact Page Bot Flows. Get Started takes display priority over ice breakers. This changes a live customer-facing surface but sends no message by itself.

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
page_idstringrequiredConnected Facebook Page id whose live Messenger experience to replace.
greetingstringoptionalLegacy/default-locale greeting shown before the first Messenger conversation. Use greetings for a fully localized replacement.
greetingsobject[]optionalFull localized greeting replacement. Omit to change only the default greeting while preserving other live locales; send [] to remove all greetings.
greetings[].localestringrequiredMeta locale for this localized profile block, such as default or en_US.
greetings[].textstringrequiredGreeting shown before the first conversation for this locale, 1–160 characters.
get_started_enabledbooleanoptionalWhether to publish Get Started. Defaults to true for compatibility. Disable it to let ice breakers appear instead; Meta gives Get Started display priority when both exist.
get_started_workflow_idstring (uuid) (or null)optionalChirply workflow id to start when a person taps Get Started. Omit or set null when preserving an external payload or using the general Messenger trigger.
get_started_payloadstring (or null)optionalExisting non-Chirply Get Started payload to preserve exactly. Omit or set null when linking a Chirply workflow or using the general Messenger trigger.
menuobject[]optionalLegacy/default-locale persistent-menu actions. Omit or send [] to remove the default menu while preserving other live locales; use persistent_menus for a full localized replacement.
persistent_menusobject[]optionalFull localized persistent-menu replacement, including composer state and every URL webview setting. Send [] to remove every menu.
persistent_menus[].localestringrequiredMeta locale for this localized profile block, such as default or en_US.
persistent_menus[].composer_input_disabledbooleanrequiredWhether Messenger hides the text composer while this localized persistent menu is active.
persistent_menus[].itemsobject[]requiredOrdered URL or postback actions for this locale. Nested menu actions are not supported by the current profile contract.
ice_breakersobject[]optionalFull localized ice-breaker replacement. Omit to preserve Meta's current ice breakers; send [] to remove them. Get Started takes display priority if both are enabled.
ice_breakers[].localestringrequiredMeta locale for this localized profile block, such as default or en_US.
ice_breakers[].itemsobject[]requiredOne to four ice-breaker questions for this locale. Get Started takes display priority when both are published.
account_linking_urlstring (uri) (or null)optionalHTTPS URL Messenger opens to link a person's account. Omit to preserve it; send null to remove it.
commandsobject[]optionalFull localized Messenger command replacement. Omit to preserve current commands; send [] to remove them.
commands[].localestringrequiredMeta locale for this localized profile block, such as default or en_US.
commands[].itemsobject[]requiredOne to 100 commands for this locale.
commands[].items[].namestringrequiredCommand name shown in Messenger, 1–32 characters.
commands[].items[].descriptionstringrequiredPlain-language description shown beside the command, 1–64 characters.
whitelisted_domainsstring[]optionalFull replacement list of domains allowed to use the Messenger Extensions SDK for this Page. Omit to preserve Meta's existing list; send an empty list to remove every whitelisted domain. Basic website buttons do not need this.

Example

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

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

List reviewed-message recipients

meta.messenger_reviewed_conversationsread

List recent account-owned Facebook Messenger conversations for one connected Page and show which are inside Meta's 24-hour standard window or seven-day HUMAN_AGENT window. This reads local inbox state only, exposes no Page access token or PSID, and sends no message.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected numeric Facebook Page id that owns the Messenger product setup.
limitintegeroptionalMaximum recent Messenger conversations to return, from 1 through 100. Default: 50

Example

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

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

View reviewed messaging setup

meta.messenger_reviewed_messaging_statusread

Read one connected Facebook Page's live permission and webhook readiness for Utility Messages, the non-inspectable App Review gate for HUMAN_AGENT, and the separate paid limited-beta onboarding status for Marketing Messages. This sends no message, spends no money, and explicitly identifies retired Messenger products that Chirply will not call.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected numeric Facebook Page id that owns the Messenger product setup.

Example

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

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

View Messenger routing

meta.messenger_routing_getread

Read Meta's live Conversation Routing feature status for one connected Facebook Page, Chirply's own Meta app id, the granted pages_messaging permission, Page messaging task, and required routing webhook subscriptions. This does not reveal a selected default-app id or a live per-thread owner because Meta's current status API does not return either; it sends no message and changes nothing.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id whose Messenger routing status or conversation control to use.

Example

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

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

Send and pass Messenger conversation

meta.messenger_routing_passwriteconfirmadmin only

Send one real customer-visible Facebook Messenger RESPONSE message, then pass that conversation to a specified connected Meta app or the Page's default app. This immediately pauses Chirply automation for the local thread so a bot cannot speak after control leaves; Meta may reject the send unless pages_messaging has Advanced Access through App Review, the authorizing person retains Page messaging access, Chirply currently owns the thread, or the Page explicitly allows Chirply to take control.

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
page_idstringrequiredConnected Facebook Page id whose Messenger routing status or conversation control to use.
conversation_idstring (uuid)requiredChirply Facebook Messenger conversation to transfer. Chirply resolves the Page-scoped recipient from this account-owned thread rather than accepting an arbitrary PSID.
target_app_idstring (or null)optionalConnected Meta app id that should receive control. Omit or send null to pass to the Page's default app configured in Meta Page Settings.
messagestringrequiredCustomer-visible Messenger text sent in the same RESPONSE request as the routing control, 1–2,000 characters. This is a real outbound message and requires an open 24-hour standard messaging window.

Example

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

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

Send and release Messenger conversation

meta.messenger_routing_releasewriteconfirmadmin only

Send one real customer-visible Facebook Messenger RESPONSE message, then release the conversation to the Page's default app without asking Meta to notify that app. This immediately pauses Chirply automation for the local thread so a bot cannot speak after release; Meta may reject the send unless pages_messaging has Advanced Access through App Review, the authorizing person retains Page messaging access, Chirply currently owns the thread, or the Page explicitly allows Chirply to take control.

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
page_idstringrequiredConnected Facebook Page id whose Messenger routing status or conversation control to use.
conversation_idstring (uuid)requiredChirply Facebook Messenger conversation to transfer. Chirply resolves the Page-scoped recipient from this account-owned thread rather than accepting an arbitrary PSID.
messagestringrequiredCustomer-visible Messenger text sent in the same RESPONSE request as the routing control, 1–2,000 characters. This is a real outbound message and requires an open 24-hour standard messaging window.

Example

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

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

List Messenger sticker packs

meta.messenger_sticker_packs_listread

Browse Meta's public free first-party Messenger sticker packs with localized names, descriptions, previews, and counts. This is read-only, does not include custom/paid/avatar/GIF catalogs, and sends no sticker.

Parameters

FieldTypeRequiredDescription
localestringoptionalSupported Messenger locale used for translated pack/sticker names, such as en_US, vi_VN, ja_JP, or ko_KR. Default: "en_US"

Example

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

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

List stickers in pack

meta.messenger_stickers_listread

List every public free first-party Messenger sticker in one Meta sticker pack, including preview image, dimensions, and animation state. This is read-only and sends no sticker.

Parameters

FieldTypeRequiredDescription
pack_idstringrequiredNumeric Meta sticker-pack id returned by meta.messenger_sticker_packs_list.
localestringoptionalSupported Messenger locale used for translated pack/sticker names, such as en_US, vi_VN, ja_JP, or ko_KR. Default: "en_US"

Example

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

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

Extend Messenger thread control

meta.messenger_thread_control_extendwriteconfirmadmin only

Extend Chirply's current control of one account-owned Facebook Messenger conversation by a chosen duration without sending a customer message. Meta allows at most 604,800 seconds (7 days); this changes live routing but does not alter the local automation pause state.

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
page_idstringrequiredConnected Facebook Page id whose Messenger routing status or conversation control to use.
conversation_idstring (uuid)requiredChirply Facebook Messenger conversation to transfer. Chirply resolves the Page-scoped recipient from this account-owned thread rather than accepting an arbitrary PSID.
duration_secondsintegerrequiredAdditional thread-control duration in whole seconds, from 1 second through Meta's 7-day maximum of 604,800 seconds.

Example

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

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

Pass Messenger thread control

meta.messenger_thread_control_passwriteconfirmadmin only

Immediately pass one account-owned Facebook Messenger conversation to a specified connected Meta app without sending a customer message. Chirply automation is paused before the provider call so it cannot speak after ownership leaves, and Meta emits a messaging_handovers webhook to subscribed apps.

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
page_idstringrequiredConnected Facebook Page id whose Messenger routing status or conversation control to use.
conversation_idstring (uuid)requiredChirply Facebook Messenger conversation to transfer. Chirply resolves the Page-scoped recipient from this account-owned thread rather than accepting an arbitrary PSID.
target_app_idstringrequiredConnected Meta app id that should become the thread owner after this standalone pass operation.
metadatastringoptionalOptional opaque handover context sent to the receiving Meta app, up to 1,000 characters. It is not shown to the customer.

Example

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

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

Release Messenger thread control

meta.messenger_thread_control_releasewriteconfirmadmin only

Immediately release one account-owned Facebook Messenger conversation to idle/default routing without sending a customer message or notifying another app. Chirply automation is paused before the provider call so it cannot speak after ownership leaves.

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
page_idstringrequiredConnected Facebook Page id whose Messenger routing status or conversation control to use.
conversation_idstring (uuid)requiredChirply Facebook Messenger conversation to transfer. Chirply resolves the Page-scoped recipient from this account-owned thread rather than accepting an arbitrary PSID.
metadatastringoptionalOptional opaque handover context sent to the receiving Meta app, up to 1,000 characters. It is not shown to the customer.

Example

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

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

Request Messenger thread control

meta.messenger_thread_control_requestwriteconfirmadmin only

Ask the current Meta app owner to pass one account-owned Facebook Messenger conversation to Chirply without sending a customer message. This request is supported when Chirply is the Page's default receiver; ownership and automation do not change until Meta later delivers the handover.

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
page_idstringrequiredConnected Facebook Page id whose Messenger routing status or conversation control to use.
conversation_idstring (uuid)requiredChirply Facebook Messenger conversation to transfer. Chirply resolves the Page-scoped recipient from this account-owned thread rather than accepting an arbitrary PSID.
metadatastringoptionalOptional opaque handover context sent to the receiving Meta app, up to 1,000 characters. It is not shown to the customer.

Example

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

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

Take Messenger thread control

meta.messenger_thread_control_takewriteconfirmadmin only

Immediately take control of one account-owned Facebook Messenger conversation for Chirply without sending a customer message. This changes the live owner at Meta and resumes Chirply automation after Meta confirms success.

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
page_idstringrequiredConnected Facebook Page id whose Messenger routing status or conversation control to use.
conversation_idstring (uuid)requiredChirply Facebook Messenger conversation to transfer. Chirply resolves the Page-scoped recipient from this account-owned thread rather than accepting an arbitrary PSID.
metadatastringoptionalOptional opaque handover context sent to the receiving Meta app, up to 1,000 characters. It is not shown to the customer.

Example

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

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

View Messenger thread owner

meta.messenger_thread_owner_getread

Read Meta's current owner for one account-owned Facebook Messenger conversation, including the owning app id, expiration, idle state, and whether Chirply owns it. This sends no message and changes nothing.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id whose Messenger routing status or conversation control to use.
conversation_idstring (uuid)requiredChirply Facebook Messenger conversation to transfer. Chirply resolves the Page-scoped recipient from this account-owned thread rather than accepting an arbitrary PSID.

Example

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

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

View person menu

meta.messenger_user_menu_getread

Reads Meta's live person-specific persistent-menu override and the inherited Page-level menu for one known Facebook Messenger PSID. It sends no message and does not support Instagram or WhatsApp identities.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected Facebook Page id that owns the Page-scoped person id.
psidstringrequiredKnown Facebook Messenger Page-scoped person id (PSID) on this exact Page and account.

Example

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

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

Publish person menu

meta.messenger_user_menu_publishwriteconfirmadmin only

Immediately replaces the live persistent menu for one real Facebook Messenger person on one connected Page, including localized composer state and complete webview behavior. Chirply postbacks are bound to exact Page Bot Flows. This changes a customer-facing surface but sends no message.

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
page_idstringrequiredConnected Facebook Page id that owns both this Page-scoped person id and the live menu.
psidstringrequiredKnown Facebook Messenger Page-scoped person id (PSID) on this exact Page and account.
persistent_menusobject[]requiredFull localized person-menu replacement. Use the remove capability, not an empty list, to restore the Page-level menu.
persistent_menus[].localestringrequiredMeta locale for this menu, such as default or en_US.
persistent_menus[].composer_input_disabledbooleanrequiredWhether Messenger hides the text composer for this person while this localized override is active.
persistent_menus[].itemsobject[]requiredOne to 20 ordered flat URL or postback actions. The current person-menu API does not support nested menu actions.

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.messenger_user_menu_publish \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "psid": "example",
    "persistent_menus": [
      {
        "locale": "example",
        "composer_input_disabled": true,
        "items": [
          {
            "type": "postback",
            "title": "Example",
            "workflow_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
          }
        ]
      }
    ]
  }'
Test with your API key

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

Remove person menu

meta.messenger_user_menu_removewriteconfirmadmin only

Immediately deletes one real Facebook Messenger person's custom persistent-menu override. The person falls back to the Page-level menu; existing Bot Flows remain and no message is sent.

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
page_idstringrequiredConnected Facebook Page id that owns the Page-scoped person id and menu override.
psidstringrequiredKnown Facebook Messenger Page-scoped person id (PSID) whose custom menu to remove.
confirmtruerequiredMust be true to confirm removing this person's live menu override and restoring the Page menu.

Example

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

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

Send utility message

meta.messenger_utility_sendwriteconfirmadmin only

SENDS A REAL FACEBOOK MESSENGER MESSAGE outside or inside the standard reply window using one live Meta-approved UTILITY template. Delivery reaches the selected account-owned conversation immediately with no undo and may be billed or rate-limited by Meta. The message must be a transactional order, account, appointment, or event update—not marketing—and Meta enforces page_utility_messaging plus Page and recipient geography.

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
page_idstringrequiredConnected numeric Facebook Page id that owns the Messenger product setup.
conversation_idstring (uuid)requiredAccount-owned Facebook Messenger conversation whose Page and recipient Chirply resolves server-side.
template_namestringrequiredLowercase Meta utility template name containing letters, numbers, and underscores only.
languagestringrequiredMeta template language code such as en or en_US.
header_valuesstring[]optionalOrdered values replacing the component's {{1}}, {{2}}, and later placeholders. Default: []
body_valuesstring[]optionalOrdered values replacing the component's {{1}}, {{2}}, and later placeholders. Default: []
button_valuesobject[]optionalDynamic URL suffix or postback values in the approved template's button order. Default: []
button_values[].type"URL" | "POSTBACK"requiredTemplate button parameter type in the order the approved template expects.
button_values[].valuestringrequiredDynamic URL suffix or postback payload value for this approved template button.

Example

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

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

Clone Meta utility template

meta.messenger_utility_template_clonewriteconfirmadmin only

Clone one current prebuilt Meta Utility Message template into a real Facebook Page's reviewed library, with optional documented body and URL-button inputs. This changes external Page configuration but sends no customer message and incurs no send charge; Meta still controls review status and availability.

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
page_idstringrequiredConnected numeric Facebook Page id that owns the Messenger product setup.
namestringrequiredLowercase Meta utility template name containing letters, numbers, and underscores only.
languagestringrequiredMeta template language code such as en or en_US.
library_template_namestringrequiredExact template name returned by meta.messenger_utility_library_search.
body_textstring (or null)optionalOptional complete body input required by the selected Meta library template; omit when it needs no body override.
url_button_textstring (or null)optionalOptional URL-button label required by the selected Meta library template.
url_button_base_urlstring (uri) (or null)optionalOptional HTTP or HTTPS base URL required by the selected Meta library template.

Example

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

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

Create utility template

meta.messenger_utility_template_createwriteconfirmadmin only

Submit a Page-owned transactional Utility Message template to Meta for real review. This creates external Page configuration but sends no customer message and incurs no send charge. Marketing or promotional content is prohibited; Meta can reject or later disable the template, and Utility Messages currently require page_utility_messaging plus supported Page and recipient geography.

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
page_idstringrequiredConnected numeric Facebook Page id that owns the Messenger product setup.
namestringrequiredLowercase Meta utility template name containing letters, numbers, and underscores only.
languagestringrequiredMeta template language code such as en or en_US.
bodystringrequiredTransactional body text with optional sequential {{1}}, {{2}}, and later placeholders; no marketing content.
body_examplesstring[]optionalOne concrete review example for each sequential body placeholder. Default: []
headerobject (or null)optionalOptional reviewed text or image header. Image headers require an existing Meta resumable-upload handle.
buttonsobject[]optionalUp to three current URL or POSTBACK buttons submitted with the utility template. Default: []

Example

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

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

List utility templates

meta.messenger_utility_templates_listread

Read Meta's live Page-owned Utility Message template library, including language, review status, components, and whether a template was cloned from Meta's library. This requires page_utility_messaging, changes nothing, sends no message, and incurs no Meta messaging charge.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredConnected numeric Facebook Page id that owns the Messenger product setup.
namestringoptionalOptional template-name search sent to Meta; omit to list the Page's current utility templates.

Example

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

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

Page activity

meta.page_activity_getread

Report recent Messenger, linked Instagram Direct, and public-comment activity for each connected Facebook Page: how many messages and visitor comments arrived, how many an AI agent answered on its own, how many a person answered, how many threads are still waiting on a human, and how many comment replies were skipped or failed. Read-only — it sends nothing and spends nothing.

Parameters

FieldTypeRequiredDescription
daysintegeroptionalHow many days back to count, from 1 to 90. Defaults to 30, which is what the Facebook Pages screen shows. Default: 30
page_idstringoptionalOnly this Facebook Page id. Omit to report every connected Page.

Example

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

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

Save automation

meta.page_automation_updatewriteconfirmadmin only

Set how one connected Facebook Page handles incoming Messenger messages, linked Instagram Direct messages, and public post comments. Enabling a channel causes the assigned AI agent to send REAL REPLIES TO REAL PEOPLE automatically using the business identity and its own OpenRouter account. Public comment replies are visible to everyone who can see the post.

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
shared_page_acknowledgedbooleanoptionalSet true only after acknowledging that this Page is connected to another Chirply account and enabling automation may send duplicate messages, replies or comments.
page_idstringrequiredConnected Facebook Page id to configure.
message_mode"off" | "ai"required'off' leaves incoming Messenger and linked Instagram Direct messages for the team; 'ai' replies automatically.
message_agent_idstring (uuid) (or null)requiredActive AI agent assigned to Messenger and linked Instagram Direct, or null when message_mode is off.
message_instructionsstring (or null)requiredExtra instructions used for this Page's Messenger and linked Instagram Direct replies, or null.
comment_mode"off" | "questions" | "all"required'off' never auto-replies; 'questions' answers only questions/help requests; 'all' replies to every new visitor comment.
comment_agent_idstring (uuid) (or null)requiredActive AI agent assigned to public comments, or null when comment_mode is off.
comment_instructionsstring (or null)requiredExtra instructions used only for public comment replies, or null.

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.page_automation_update \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "page_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "message_mode": "off",
    "message_agent_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "message_instructions": "example",
    "comment_mode": "off",
    "comment_agent_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "comment_instructions": "example"
  }'
Test with your API key

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

List Page automation

meta.page_automations_listread

List each Facebook Page's current Messenger, linked Instagram Direct, and public-comment autoresponder settings, including which AI agents are assigned. This does not send any replies.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0

Example

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

Re-subscribe

meta.page_resubscribewriteadmin only

Reinstall the webhook subscription on one Facebook Page. For Instagram accounts connected through Facebook Login, that Page installation is also the delivery link. This changes Meta configuration but does not publish content or send a message.

Parameters

FieldTypeRequiredDescription
page_idstringrequiredFacebook Page id assigned to this account.

Example

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

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

List Facebook Pages

meta.pages_listread

List Facebook Pages and linked Instagram Professional accounts available to this account, including permissions, inbound delivery health, and whether a Page is also connected to another account. Other account identities are never exposed.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0

Example

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

Build a retargeting audience

meta.retargeting_audience_createwriteconfirmadmin only

Create a real, durable custom audience on the connected Meta ad account for people who already showed interest — visited the website (needs a Pixel), opened or submitted a lead form, or engaged with the Facebook Page or Instagram account. Meta backfills it from history, so it is populated with real people and is immediately usable for targeting or exclusion. It costs nothing and shows no ads by itself, but it permanently creates an advertising object on the advertiser's account and counts against Meta's per-account audience limits. An audience Chirply already built for the same source and window is reused rather than duplicated.

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
account_idstringrequiredConnected Meta ad account id, normally beginning with act_.
kind"lead_form_submitted" | "lead_form_opened" | "website_visitors" | "page_engaged" | "instagram_engaged"requiredWhich activity makes someone a member: website_visitors, lead_form_opened, lead_form_submitted, page_engaged, or instagram_engaged.
daysintegeroptionalMembership window in days. Meta keeps a different amount of history per source, and a longer request is rejected with error 2654, so Chirply clamps to the source's own ceiling: 90 days for lead_form_opened and lead_form_submitted, 180 for website_visitors, 365 for page_engaged and instagram_engaged. The audience name states the window actually used. Default: 30
pixel_idstringoptionalMeta Pixel or dataset id; required for website_visitors.
page_idstringoptionalConnected Facebook Page id; required for page_engaged.
instagram_idstringoptionalInstagram business account id connected to the Page; required for instagram_engaged.
form_idsstring[]optionalLead form ids whose activity defines the audience; required for lead_form_opened and lead_form_submitted. Default: []
url_containsstringoptionalNarrow a website audience to visitors whose page URL contains this text, such as a pricing or checkout path.

Example

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

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

Remove sample conversations

meta.sample_threads_clearwriteconfirmadmin only

Delete this account's seeded sample conversations and the sample contacts created alongside them. Only ever removes demonstration data — real customer conversations and contacts are untouched. Omit the channel to clear both Instagram and WhatsApp samples.

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
channel"instagram" | "whatsapp"optionalLimit the removal to one channel. Omit to clear every sample thread in the account.

Example

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

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

Add sample conversations

meta.sample_threads_seedwriteadmin only

Add a small set of clearly-labelled example Instagram or WhatsApp conversations to this account's inbox so the messaging features can be demonstrated before real customers write in. The threads are fictional, are shown with a “Sample” badge, and replies sent to them are recorded but never delivered to anyone. It also creates matching CRM contacts marked as sample data. Running this again replaces the existing samples for that channel.

Parameters

FieldTypeRequiredDescription
channel"instagram" | "whatsapp"requiredWhich channel to create the sample threads on.

Example

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

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

List Facebook activity

meta.social_events_listread

List recent Facebook and Instagram comments, mentions, feed changes, and message reactions captured for this account. This is read-only.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
platform"facebook" | "instagram"optionalOnly activity from this Meta platform.
event_typestringoptionalOnly this webhook event type, such as comments, mention, feed, or message_reactions.

Example

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

View source ad

meta.source_ad_readread

Resolve a recorded Facebook or Instagram ad ID to its exact ad report in Chirply. Verifies that the ad and campaign belong to an ad account connected to the active account. Returns a link to the correct campaign screen; unavailable or unconnected ads return an error. Does not change ads, send messages or spend money.

Parameters

FieldTypeRequiredDescription
ad_idstringrequiredFacebook ad ID recorded on the contact's acquisition source.

Example

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

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

Discover business numbers

meta.whatsapp_accounts_discoverwriteadmin only

Read the connected Meta businesses, discover their WhatsApp Business accounts and phone numbers, subscribe this account to inbound WhatsApp Cloud API webhooks, and refresh this account's saved number catalog. This changes webhook configuration but sends no message and incurs no messaging charge.

Parameters

No parameters — POST an empty body.

Example

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

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

List WhatsApp numbers

meta.whatsapp_accounts_listread

List the WhatsApp Business phone numbers assigned to this account, including verified display names, quality ratings, webhook delivery status, setup errors, and current grounded-AI routing. This is read-only and sends no messages.

Parameters

No parameters — POST an empty body.

Example

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

Save WhatsApp AI

meta.whatsapp_ai_automation_updatewriteconfirmadmin only

Turn the tenant-grounded AI fallback on or off for one connected WhatsApp Business number. Turning it on causes future inbound messages that no visual workflow handles to receive REAL AUTOMATIC REPLIES from the selected agent, spending the account's own OpenRouter credits and WhatsApp provider resources; unknown, sensitive, upset, or human-requested conversations are handed to the team.

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_idstringrequiredConnected WhatsApp Business phone-number id to configure.
ai_reply_mode"off" | "ai"required'off' leaves unmatched inbound messages for the team; 'ai' sends grounded automatic replies.
ai_agent_idstring (uuid) (or null)requiredActive account AI agent assigned to this number, or null when ai_reply_mode is off.
ai_instructionsstring (or null)requiredOptional per-number instructions added to the agent's persona and Knowledge Brain, or null.

Example

curl -X POST https://app.chirply.io/api/v1/actions/meta.whatsapp_ai_automation_update \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "phone_number_id": "+15551234567",
    "ai_reply_mode": "off",
    "ai_agent_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "ai_instructions": "example"
  }'
Test with your API key

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

List WhatsApp templates

meta.whatsapp_templates_listread

List approved and pending WhatsApp message templates for one WhatsApp Business account assigned to this account. This is read-only and sends no message.

Parameters

FieldTypeRequiredDescription
waba_idstringrequiredWhatsApp Business Account id assigned to this account.

Example

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

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