check_handoff_status
ChatGPTCheck the status of a connect link created by connect_destination or connect_trigger_source. Returns pending (the person hasn't finished yet), completed (with the connected platform's details in the result), expired, or cancelled. Call this once the user says they've finished in the connect window (or poll it if they've asked you to wait).
connect_destination
ChatGPTStart connecting an ad platform (a destination) to the account. Because connecting requires the account owner to complete the provider's connection steps in a browser (signing in for OAuth platforms, or pasting an API key), this returns a secure link for a human to open. An AI assistant can't complete the connection itself. After the person finishes in that window, poll check_handoff_status with the returned handoff_id until its status is "completed"; the result then contains the connected destination's id and details. Which platforms can be connected this way is whatever list_destination_types reports with a non-empty connection_types (browser-side pixel destinations have an empty connection_types and need no connect step — write their action directly). A couple of per-platform notes worth relaying: for ChatGPT Ads the person pastes an Ads API key from ChatGPT Ads Manager (Settings, General tab) and then picks an existing data source or deliberately creates one (a new DATA SOURCE cannot be deleted afterwards, so it's behind a warning). For TikTok, the platform emails a verification code to the ad-account owner during authorization, so whoever opens the link needs access to that mailbox — otherwise they can connect TikTok from the Converly dashboard, which also offers pasting an Events API token.
connect_trigger_source
ChatGPTStart connecting a trigger platform (a form or scheduling tool that needs its own login — the providers marked requires_connection: true in list_trigger_types) to a site. Returns a secure link the ACCOUNT OWNER opens in a browser to sign in to the platform (or paste its API key); an AI assistant can't complete that step itself. If the platform is already connected and working for the site, this says so and no link is needed. After the person finishes, call check_handoff_status with the returned handoff_id; when it's "completed", the platform is connected and you can build flows with it (and narrow them with list_trigger_filter_options).
create_conversion
ChatGPTCreate a NEW conversion in a connected ad platform, for when the account has none yet and there is nothing to pick, or (Google Ads) when everything listed is marked usable false and so nothing listed can receive conversions from Converly. Only some destinations support this, and it depends on HOW they were connected — call list_conversions first and check supports_create on the response rather than assuming. ASK THE CUSTOMER BEFORE CALLING THIS. It writes a permanent object into their real ad account: a ChatGPT Ads conversion event can never be deleted, a LinkedIn rule is applied to all their live campaigns, and a Google Ads conversion action affects how their campaigns optimise. Required fields differ by platform: Google Ads and LinkedIn need a category, LinkedIn also needs a conversion_method from the creatable_methods on the list response, and ChatGPT Ads needs an event_type.
create_flow
ChatGPTCreate a new conversion flow — a trigger (e.g. a form submission) plus the conversion actions it fires to ad platforms. The flow is created as a DRAFT and won't track conversions until it's published. Typical sequence: call list_sites first to get the site_id. For destinations, call list_destination_types to see every platform and its slug. Server-side destinations (connection_types includes "oauth"/"paste_token", e.g. google-ads, meta, google-analytics, reddit-ads, linkedin-ads, tiktok-ads) must be connected first — check list_destinations and use connect_destination if needed. Browser-side pixel destinations (connection_types is empty, e.g. x-ads, snapchat-ads) need NO connect step: read their config fields from list_action_types and write the action directly. The trigger and actions are optional at creation — you can create an empty draft and fill it in later.
delete_flow
ChatGPTPermanently delete a flow. This removes it from Converly and stops it tracking — it can't be undone. Confirm with the user first, then pass confirm set to the flow's exact name. Pass the flow_id from list_flows.
disconnect_destination
ChatGPTDisconnect a connected ad platform — removes its stored credentials from Converly. Flows that fire to it will stop delivering conversions until it's reconnected (which needs a fresh OAuth/login). Confirm with the user first, then pass confirm set to the destination's exact name. Pass the destination_id from list_destinations.
get_event_detail
ChatGPTGet the diagnostic detail of one captured conversion event: its flow, each destination's fire status and a machine error CODE (e.g. "ga4_unknown") when a delivery failed, coarse device/country, which lead fields were captured (presence only), and whether the lead's data was purged. Visitor PII (email/phone values, IP, raw user agent, raw error text, request/response bodies) is NOT included — this is the redacted view. Pass the event_id from list_events. Use it to diagnose why a specific conversion did or didn't reach an ad platform.
get_flow
ChatGPTGet the full detail of one flow — its trigger, actions, and status. Pass the flow_id from list_flows.
get_install_snippet
ChatGPTGet the tracking snippet (a small script tag) the user needs to add to their website so Converly can track conversions, plus the site_key. Give this to the user whenever get_install_status isn't "confirmed" — without it on the site, published flows capture nothing. Pass the site_id from list_sites.
get_install_status
ChatGPTCheck whether Converly tracking is working on a site. Two signals: detection "confirmed" with source "heartbeat" means the Converly loader itself was seen running on the site within the last 48 hours (say "loader seen recently", never "installation verified" — it is an advisory observation). When origin_authorized is false alongside that, the code is running but on a website address this site is NOT authorized for, so every conversion is being rejected — fix it with update_site. detection "confirmed" without a source means at least one conversion event has been captured. detection "never_seen" means neither signal exists yet — the snippet may still be installed (tag managers, consent gates, or no published flow can all delay the signals), so do NOT tell the user tracking is broken. If the user has not confirmed the snippet is installed, give it to them from get_install_snippet first; once they say it is installed, suggest a real test form submission to flip the signal on the site (send_test_event canNOT verify installation — it tests only destination forwarding). detection "pending" means the checks could not run right now. Pass the site_id from list_sites.
get_subscription
ChatGPTGet the account's current Converly subscription: plan, status, trial state, and usage limits. Use this to check whether the account is on a trial, active, or past due.
list_action_types
ChatGPTGet the action catalogue for a destination type — the exact config fields (and a worked example) you must put in a flow's action for that platform. Call this before create_flow to learn the right config shape for, e.g., a Google Ads conversion.
list_conversions
ChatGPTList the conversion actions configured on a connected destination (e.g. the conversion actions in a Google Ads account). Use this to find the right conversion to reference when setting up a flow's action. Pass the destination_id from list_destinations. For Google Ads, pick an entry whose usable field is true. An entry with usable false cannot receive conversions from Converly (its reason field says why, and flow writes that pick it are refused). Brand-new Google Ads accounts often contain ONLY unusable Google-created actions, so when nothing usable is listed, offer create_conversion instead. A missing usable field means no verdict.
list_destination_types
ChatGPTList the ad platforms / destination types Converly can send conversions to (e.g. Google Ads, Meta, LinkedIn, TikTok), with how each one connects. Each entry has connection_types: a NON-empty array (e.g. oauth/paste_token) means the destination must be connected first via connect_destination; an EMPTY array means it's a browser-side pixel destination that needs no connect step — read its fields from list_action_types and write the action directly.
list_destinations
ChatGPTList the ad platforms / destinations connected to the account (e.g. Google Ads, Meta) and their connection status. These are where conversion events get sent when a flow fires.
list_events
ChatGPTList recent conversion events Converly captured (the live tracking log): each shows the flow, destination, status (e.g. converted / failed), and time. Use this to check whether conversions are being tracked, to CONFIRM whether a conversion matching an email exists and how it was delivered (email filter — you supply an address you already know; visitor PII is NOT returned in the results), or to list failures (status filter). Filters: site_id, flow_id, email (exact match), status, occurred_after / occurred_before (ISO timestamps). This returns a BOUNDED SNAPSHOT of the most recent matching events (up to limit); has_more: true means older events exist beyond the window — narrow with the filters (especially email / occurred_after / occurred_before) rather than paging. IMPORTANT: when the response has complete: false, the search was truncated at the recent window, so an empty or short result does NOT prove no matching conversion exists — do not tell the user 'no conversion was found'; say the recent window has none and offer to narrow by date. Not the full archive.
list_flows
ChatGPTList conversion flows in the account. A flow = a trigger (e.g. a form submission) plus the conversion actions it fires to ad platforms. Optionally filter to one site by passing its site_id (the prefixed id from list_sites, e.g. "site_abc").
list_sites
ChatGPTList the websites in the connected Converly account (returns each site's id, name, and domain). Use this first to discover which site a flow or destination belongs to.
list_trigger_filter_options
ChatGPTFor a CONNECTED form platform (a requires_connection provider from list_trigger_types), list the filter fields it supports and the account's REAL values for each — e.g. the actual Typeform forms or Calendly event types, with ids and names. Use this after connecting to offer the user a specific form/event type, then pass the choice as trigger_config.conditions on create_flow/update_flow, e.g. {"form": {"ids": ["abc"], "names": ["Demo Request"]}}. Values come live from the platform; never invent filter values that aren't in this list.
list_trigger_types
ChatGPTList the trigger types Converly supports — the kinds of events that can start a flow (e.g. form submissions, meeting booked) and the form/tool providers for each. Use this to find the trigger integrationId to pass to create_flow's trigger_config. Providers marked requires_connection: true (form platforms like Typeform) must be connected first with connect_trigger_source; pass site_id to see each one's live connection state for that site. Filtering: most triggers fire on ALL pages or only specific pages (trigger_config.pageFilter and pages). Connected form platforms instead support narrowing to a specific form or event type via trigger_config.conditions — discover the real options with list_trigger_filter_options. Do not offer any other filtering (CSS selector, product, or similar).
publish_flow
ChatGPTPublish a flow so it goes live and starts tracking conversions. This pushes the account's configuration to Converly's CDN, so the change takes effect on the customer's website. The flow must have a trigger and at least one action, and the account must be in good standing. (You can stop future tracking with unpublish_flow, but conversions already delivered while the flow was live cannot be recalled.) Pass the flow_id from list_flows or create_flow. Note that publishing alone captures nothing unless the Converly snippet is installed on the website. The result may include install_status; if it is absent, call get_install_status. If its detection is "never_seen", give the user the snippet from get_install_snippet and wait for them to confirm it is installed before suggesting any test.
send_test_event
ChatGPTFire a single conversion to a destination to verify a flow's action is wired up, without waiting for a real form submission. It tests the DESTINATION-FORWARDING path only: it does NOT prove the snippet is installed, the origin is authorized, or that a real submission would be captured, and it does NOT appear in list_events (that's the real capture log). Pass the action to test by action_id (from get_flow's actions_config; it must belong to the flow) — the action's STORED config is used, the config you pass is ignored. For Meta pass meta_test_event_code (Test Events tab); for Reddit/TikTok pass reddit_test_id / tiktok_test_event_code. WITHOUT a valid sandbox code, server-side ad destinations (google-ads, chatgpt-ads, linkedin-ads, google-analytics, and meta/reddit/tiktok) create a REAL conversion in campaign reporting, so the call is REFUSED unless you set allow_real_conversion:true — confirm with the user first.
unpublish_flow
ChatGPTUnpublish (pause) a live flow so it stops tracking conversions, while keeping its configuration so it can be re-published later. This pushes the updated configuration to Converly's CDN. Pass the flow_id from list_flows.
update_flow
ChatGPTUpdate a flow's name, description, trigger, or actions. (To take a flow live or pause it, use publish_flow / unpublish_flow instead — status isn't changed here.) IMPORTANT: updating a PUBLISHED flow does NOT change what runs on the website — the result's publication_state turns "pending" and the site keeps running the previous version until publish_flow is called. Pass at least one field to change. The flow keeps its current values for anything you omit.
update_site
ChatGPTUpdate a site's name, website address (domain), or timezone. Setting the domain matters most: Converly rejects conversions from websites it doesn't recognize, so a site with no domain captures NOTHING even with a published flow and the snippet installed. Whenever list_sites shows domain null, ask the user for their website URL and set it here. Pass the site_id from list_sites and at least one field to change.
validate_flow
ChatGPTCheck whether a flow is ready to publish, without publishing it. Returns whether it's valid and a list of any problems (e.g. missing trigger or action) so you can fix them before calling publish_flow. Pass the flow_id from list_flows.
add_internal_traffic_rule
Claudecheck_handoff_status
Claudeconnect_destination
Claudeconnect_trigger_source
Claudecreate_flow
Claudedelete_flow
Claudedisconnect_destination
Claudeget_event_detail
Claudeget_flow
Claudeget_install_snippet
Claudeget_install_status
Claudeget_subscription
Claudelist_action_types
Claudelist_conversions
Claudelist_destination_types
Claudelist_destinations
Claudelist_events
Claudelist_flows
Claudelist_sites
Claudelist_trigger_filter_options
Claudelist_trigger_types
Claudepublish_flow
Claudesend_test_event
Claudeunpublish_flow
Claudeupdate_flow
Claudeupdate_site
Claudevalidate_flow
Claude