MCP App Store
by KeenEthics
Business & Operations
ActiveCampaign icon

ActiveCampaign

by ActiveCampaign LLC

Overview

You already work in ChatGPT. Now drive and track your marketing outcomes there too. Connect ActiveCampaign in a few clicks. From the chat, you can: - Understand yesterday's campaign performance in seconds - Look up a contact and update their information. - Clean up tags, build segments, and organize your lists. - Move deals forward without leaving ChatGPT. - Enroll a contact in automated marketing workflows. No new tab. No copy paste. No starting over. ChatGPT is the surface you ask from. ActiveCampaign takes action.

Tools

add_contact_to_automation

ChatGPT
Add a contact to an automation. This will start the automation for the specified contact. The contact will begin at the first step of the automation sequence. Parameters ---------- - params: ContactAutomationCreateParams object containing: - contact: The ID of the contact to add to the automation - automation: The ID of the automation to add the contact to

add_tag_to_contact

ChatGPT
Use ONLY for 1–9 contacts. For 10+ use bulk_import_contacts. Use this tool only for adding a single tag to a single contact. Add a tag to a contact. Parameters ---------- - params: ContactTagParams object containing: - contact: Required. The ID of the contact. - tag: Required. The ID of the tag to add to the contact.

bulk_import_status_list

ChatGPT
Retrieve the status of bulk contact import batches, showing outstanding and recently completed imports. Returns two groups of import batches: - outstanding: imports that are still being processed - recentlyCompleted: imports that have finished processing recently Each entry includes the date the batch was submitted (forDate), the number of batches, and the total number of contacts in those batches.

cancel_campaign_run

ChatGPT
Stop reporting on a campaign-generation run. Pass the request_id returned by generate_campaign, edit_campaign, or copy_campaign. Call this whenever the user asks to cancel, whatever the run's last known status — a run that has already finished, or whose campaign is already persisted, is still the run to cancel, not a reason to skip the call. Returns the run's status at the moment of cancellation, in the same shape poll_campaign_generation_status returns; a run that had already finished comes back with its own terminal status rather than a cancelled one. Work already persisted (e.g. a campaign already saved) is not undone, and can be changed afterwards with edit_campaign. A request_id this account has no run for — unknown, or expired and no longer retained — is an error, not a status.

catalog_add-a-tracked-domain

ChatGPT
Add a tracked domain by name Whitelist a domain by name so visits to pages on it are recorded. The feature must be switched on first via PUT /api/3/siteTracking - adding a domain while it is off returns 403. A name may begin with * to cover subdomains (for example *.example.com). - Operation: add-a-tracked-domain - Endpoint: POST /api/3/siteTrackingDomains

catalog_add-custom-field-to-field-group

ChatGPT
Add Custom Field to Field Group - Operation: add-custom-field-to-field-group - Endpoint: POST /api/3/groupMembers

catalog_add-domain-to-whitelist

ChatGPT
Add domain to whitelist Add a domain to the site tracking whitelist - Operation: add-domain-to-whitelist - Endpoint: POST /api/3/prism/urlWhitelistings

catalog_apply-tags-to-a-contact

ChatGPT
Apply tags to a contact Applies up to 100 tags to one contact in a single request, by tag name, tag id, or both. Tag names that do not exist yet are created automatically unless createMissing is false; tag ids must refer to existing tags. This replaces the per-tag sequence of GET /tags, POST /tags, and POST /contactTags with one call. Returns 201 with every requested association, including ones that already existed, so the request is safe to repeat. Send at least one entry in tags or tagIds. Tag names are matched case-insensitively, and are trimmed and stripped of HTML markup before matching and creation. Returns 404 if the contact does not exist. Fails with 400 for an unknown tag id, an unknown name when createMissing is false, a name held by a deleted tag, a name containing commas, line breaks, emoji, or other 4-byte characters, or a request addressing more than 100 tags. - Operation: apply-tags-to-a-contact - Endpoint: POST /api/3/contacts/{contactId}/tags

catalog_build-a-business-goal

ChatGPT
Build a business goal from a schema Creates a business goal (and its associated segment/conversion tracking) from a structured schema, typically LLM-generated. The internal shape of the schema parameter is not fully reverse-engineered -- known: schema.businessGoal.name must be present. - Operation: build-a-business-goal - Endpoint: POST /api/3/initiatives/buildbusinessgoal

catalog_bulk-import-status-info

ChatGPT
Bulk import status info Check the status of one API bulk import using the batchId returned by POST /import/bulk_import. Imports run in the background, so call this after submitting one to confirm it completed: an import is only finished when status is completed, and a successful response to the import request alone does not mean the contacts were created. If the import has not finished yet, wait and poll again rather than resubmitting the same contacts. success lists the ids of the contacts that were created or updated; failure lists the email of each row that was not imported, with no reason. To get failure reasons, register a callback with detailed_results when submitting the import. This endpoint knows nothing about imports started from the app or by integrations; use GET /import/history for those. Requires the contact import permission. - Operation: bulk-import-status-info - Endpoint: GET /api/3/import/info

catalog_bulk-import-status-list

ChatGPT
Summarize recent API bulk imports by day Summarize this account's API bulk imports from the last 7 days: for each day, how many batches and contacts are still outstanding and how many completed. Only imports submitted through POST /import/bulk_import are counted; imports started from the app's import tool or by integrations never appear here (use GET /import/history for those). There is no per-batch or per-contact detail and no error information, so this cannot explain why an import failed; for one batch use GET /import/info with its batchId. Both arrays are empty when nothing was imported through the API in the last 7 days. A batch that stalled and has a failed chunk is left out of outstanding. - Operation: bulk-import-status-list - Endpoint: GET /api/3/import/bulk_import

catalog_check-segment-match

ChatGPT
Check whether a contact matches a segment Evaluates one contact against one saved segment and answers whether the contact currently matches. Ids: segment by UUID, contact by numeric id. Tags: Match One - Operation: check-segment-match - Endpoint: GET /api/3/segmentMatch/{segmentId}/{contactId}

catalog_check-segment-match-external

ChatGPT
Check a segment match by external id The segment match check with an additional external id, for callers that track contacts by an external identifier. Tags: Match One - Operation: check-segment-match-external - Endpoint: GET /api/3/segmentMatch/{segmentId}/{contactId}/{externalId}

catalog_create-a-brand-kit

ChatGPT
Before running this, show the account exactly this notice: You are responsible for ensuring that your URL retrieval and site access requests comply with applicable laws and third-party rights. By making such requests, you represent and warrant that you have all rights and consents required to use the collected content, including any data and materials collected from third-party sites. Create a brand kit Create a new brand kit, from a website URL or from manually supplied data. Tags: AI - Operation: create-a-brand-kit - Endpoint: POST /api/3/ai/brand

catalog_create-a-calendar-feed

ChatGPT
Create a calendar feed - Operation: create-a-calendar-feed - Endpoint: POST /api/3/calendars

catalog_create-a-campaign-message

ChatGPT
Create a campaign message Associate a message with a campaign, which is the association a split (A/B) campaign uses to send more than one message. campaignid is required; a request without it is a 400. Only campaignid, messageid and percentage may be written. Every other field of a campaign message is a counter maintained by the sending code, and is ignored when it is submitted. The request needs the campaigns feature to be enabled for the account, and the caller has to have access to the campaign, otherwise the request is a 403. A body without a campaignMessage object is a 400. - Operation: create-a-campaign-message - Endpoint: POST /api/3/campaignMessages

catalog_create-a-child-schema

ChatGPT
Create a child schema - Operation: create-a-child-schema - Endpoint: POST /api/3/customObjects/schemas/{id}/child

catalog_create-a-contact-custom-field

ChatGPT
Create a contact custom field Creates a custom field definition for contacts. For dropdown, listbox, radio, and checkbox fields, create the options in the same request by adding an options array inside the field payload; list relationships can likewise be added as a relations array (relid 0 relates the field to every list). Each array is capped at 25 entries and the field plus its children are created in one transaction. Options can also be added later with POST /fieldOptions or POST /fieldOption/bulk. Fails with 400 when options are sideposted on a field type that cannot have options, and 422 when the title is already used by another field. Only title is required: type defaults to hidden when omitted, and ordernum is ignored on create because the new field is placed last. Without options or relations in the request, the response echoes the properties that were sent plus id, perstag, ordernum, cdate, udate, created_by and updated_by; with them, the complete field is read back with its options and relations and the fieldOptions and fieldRels side-loaded. The field is also added to the account's default field group unless group is sent. Tags: contact, contacts, field definition, custom field - Operation: create-a-contact-custom-field - Endpoint: POST /api/3/fields

catalog_create-a-conversion

ChatGPT
Create a conversion - Operation: create-a-conversion - Endpoint: POST /api/3/conversions

catalog_create-a-conversion-label

ChatGPT
Create a conversion label - Operation: create-a-conversion-label - Endpoint: POST /api/3/conversions/labels

catalog_create-a-custom-field-group

ChatGPT
Create a Custom Field Group Create a Custom Field Group - Operation: create-a-custom-field-group - Endpoint: POST /api/3/groupDefinitions

catalog_create-a-custom-field-relationship-to-lists

ChatGPT
Create a custom field relationship to list(s) Relates a custom field to a list so the field applies to contacts on that list. relid 0 relates the field to every list. If the relationship already exists, the existing record is returned with 200 instead of 201, in a reduced shape without links and with cdate formatted as a plain SQL datetime rather than ISO 8601. To remove a relationship use DELETE /fieldRels/{fieldRelId}; to replace a field's whole set of list relationships in one call use POST /fieldRel/sync or POST /fieldRel/syncExcept. - Operation: create-a-custom-field-relationship-to-lists - Endpoint: POST /api/3/fieldRels

catalog_create-a-custom-field-value

ChatGPT
Set an account custom field value Tags: account, accounts, company, field value - Operation: create-a-custom-field-value - Endpoint: POST /api/3/accountCustomFieldData

catalog_create-a-customfieldmeta

ChatGPT
Create an account custom field Add a new custom field to company accounts. Creates the field itself on every account: its label, type and options. Tags: account, accounts, company, field definition, custom field - Operation: create-a-customfieldmeta - Endpoint: POST /api/3/accountCustomFieldMeta

catalog_create-a-deal-new

ChatGPT
Create a deal Create a new deal - Operation: create-a-deal-new - Endpoint: POST /api/3/deals

catalog_create-a-deal-note

ChatGPT
Create a deal note Create a new note for a deal - Operation: create-a-deal-note - Endpoint: POST /api/3/deals/{id}/notes

catalog_create-a-deal-role

ChatGPT
Create a deal role - Operation: create-a-deal-role - Endpoint: POST /api/3/dealRoles

catalog_create-a-deal-stage

ChatGPT
Create a stage Create a new stage for a pipeline - Operation: create-a-deal-stage - Endpoint: POST /api/3/dealStages

catalog_create-a-deal-task-type

ChatGPT
Create a task type Create a new task type - Operation: create-a-deal-task-type - Endpoint: POST /api/3/dealTasktypes

catalog_create-a-field-option

ChatGPT
Create a field option Adds one option to an existing dropdown, listbox, radio, or checkbox custom field. If the field already has an option with the same value, no new option is created and the existing option is returned with status 200 instead of 201. label defaults to value. The field id in the payload is not checked against existing fields, so a wrong id silently creates an option that never appears on any field; confirm it with GET /fields/{id} first. The 201 response echoes the property types as sent; subsequent reads return every property as a string. To create several options in one call use POST /fieldOption/bulk. - Operation: create-a-field-option - Endpoint: POST /api/3/fieldOptions

catalog_create-a-list-group-permission

ChatGPT
Create a list group permission - Operation: create-a-list-group-permission - Endpoint: POST /api/3/listGroups

catalog_create-a-new-contact

ChatGPT
Create a contact Create a brand-new contact. This endpoint fails with a 422 duplicate-email error when a contact with the same email address already exists; it never updates an existing contact. To add or import contacts that may already exist, use POST /contact/sync for one contact or POST /import/bulk_import for many (up to 250 per request) instead: both create or update by email, and the import can also set list subscriptions and tags per contact. List membership and tags are managed with their own endpoints: use POST /contactLists to subscribe the contact to a list and POST /contactTags to add tags. When the email already belongs to a contact, the 422 response carries code "duplicate" with source.pointer "/data/attributes/email", and that existing contact is left unchanged. - Operation: create-a-new-contact - Endpoint: POST /api/3/contacts

catalog_create-a-new-event-name-only

ChatGPT
Create a new event (name only) Create a new event tracking event (name only) - Operation: create-a-new-event-name-only - Endpoint: POST /api/3/eventTrackingEvents

catalog_create-a-new-group

ChatGPT
Create a group - Operation: create-a-new-group - Endpoint: POST /api/3/groups

catalog_create-a-new-message

ChatGPT
Create a message - Operation: create-a-new-message - Endpoint: POST /api/3/messages

catalog_create-a-new-tag

ChatGPT
Create a tag Creates a tag definition. This does not apply the tag to any contact; to do that, pass the new tag id to POST /contactTags, or use POST /contacts/{id}/tags to create and apply by name in one call. Always send tagType (contact or template): a tag created without it does not appear in GET /tags listings. If a non-deleted tag with the same name and type already exists, the request returns 200 with the existing tag instead of creating a duplicate. If the name is held by a deleted tag that has not been purged, the request fails with 422 and a {message, error} body rather than an errors array. Tag names must be 1 to 250 characters and cannot contain commas, line breaks, or HTML markup; such requests fail with 422 (see the 422 response for the two body shapes). Emoji and other 4-byte characters are not supported in tag names. Names are compared case-insensitively: creating a name that differs from an existing tag only in letter case returns the existing tag. Names are stored exactly as sent; leading and trailing spaces are not trimmed. Requires the tag management permission. - Operation: create-a-new-tag - Endpoint: POST /api/3/tags

catalog_create-a-note

ChatGPT
Create a note on a contact, deal, task, or account Create a note against any record type. reltype names the record type and relid its id — reltype Subscriber with the contact id in relid is how a note is added to a contact. Takes no path parameter: the record is named in the body, never in the URL. There is no /contacts/{id}/notes - the deal and account notes sibling operations do carry an {id} in their path, and copying that shape here refuses the call. - Operation: create-a-note - Endpoint: POST /api/3/notes

catalog_create-a-pipeline

ChatGPT
Create a pipeline Create a new pipeline - Operation: create-a-pipeline - Endpoint: POST /api/3/dealGroups

catalog_create-a-schema

ChatGPT
Create a schema - Operation: create-a-schema - Endpoint: POST /api/3/customObjects/schemas

catalog_create-a-secondary-contact

ChatGPT
Create a secondary contact Add a contact to a deal as a secondary contact, with an optional role. contact and deal must name existing records, and the contact must not already be on the deal. When the deal has no primary contact and no other linked contact yet, the contact added becomes its primary contact. The addition is recorded as a deal activity. Needs the deals permission. - Operation: create-a-secondary-contact - Endpoint: POST /api/3/contactDeals

catalog_create-a-task-outcome

ChatGPT
Create a task outcome Create a new task outcome - Operation: create-a-task-outcome - Endpoint: POST /api/3/taskOutcomes

catalog_create-a-task-reminder

ChatGPT
Create a task reminder Create a reminder for a deal task, sent to the task's assignee ahead of its due date. The request body must be wrapped in a taskNotification object; both dealTask and interval are required. - Operation: create-a-task-reminder - Endpoint: POST /api/3/taskNotifications

catalog_create-a-template

ChatGPT
Create a template Create an email template. This is the v3 equivalent of the v1 message_template_add action. Requires the CreateEmailTemplates permission. The new template is made available to the lists the authenticated user can access; users in the admin group create account-wide templates. - Operation: create-a-template - Endpoint: POST /api/3/templates

catalog_create-an-account-new

ChatGPT
Create an account Create a new account - Operation: create-an-account-new - Endpoint: POST /api/3/accounts

catalog_create-an-account-note

ChatGPT
Create an account note Create a new note for an account - Operation: create-an-account-note - Endpoint: POST /api/3/accounts/{id}/notes

catalog_create-an-address

ChatGPT
Create a company mailing address for email footers Add a physical sender address to the account for use in email footers and forms. Send the fields inside an address object; company_name, address_1 and country are required, and country takes a two-character code. - Operation: create-an-address - Endpoint: POST /api/3/addresses

catalog_create-an-addresslist

ChatGPT
Create an addressList Associates an address with a list. Creating an association that already exists returns the existing record with 200 instead of a duplicate. - Operation: create-an-addresslist - Endpoint: POST /api/3/addressLists

catalog_create-campaign

ChatGPT
Create Campaign - Operation: create-campaign - Endpoint: POST /api/3/campaign

catalog_create-connection

ChatGPT
Create a connection Create a new connection resource. - Operation: create-connection - Endpoint: POST /api/3/connections

catalog_create-contact-tag

ChatGPT
Add a tag to contact Applies one existing tag to one contact. contact is a contact id and tag is a tag id; they are different id spaces, so the tag id must come from GET /tags or POST /tags, never from a contact record. The response's contactTag id is the association id used by DELETE /contactTags/{id}. A new association returns 201. The contact is included under contacts; the tag definition is included under tags when activity logging is enabled for the account, so do not rely on it and fetch the tag from GET /tags/{id} if needed. In the 201 body, contact and tag inside contactTag are numbers as sent, while every other response returns them as strings. If the tag is already applied, the request returns 200 with the existing association only, so it is safe to repeat. A tag name in the tag field fails with 400 ("No tag id provided"); to apply tags by name, or several tags at once, use POST /contacts/{id}/tags instead. Returns 404 if the contact does not exist or the tag does not exist or was deleted. Requires the contact edit permission; users outside the main user group can only tag contacts they have access to. - Operation: create-contact-tag - Endpoint: POST /api/3/contactTags

catalog_create-custom-deal-field-meta

ChatGPT
Create a deal custom field Define a new custom field on deals: the deal field itself, with its type and label. Tags: deal, deals, field definition, custom field - Operation: create-custom-deal-field-meta - Endpoint: POST /api/3/dealCustomFieldMeta

catalog_create-custom-deal-field-value

ChatGPT
Set a deal custom field value Tags: deal, deals, field value - Operation: create-custom-deal-field-value - Endpoint: POST /api/3/dealCustomFieldData

catalog_create-customer

ChatGPT
Create a customer Create a new e-commerce customer resource. - Operation: create-customer - Endpoint: POST /api/3/ecomCustomers

catalog_create-new-list

ChatGPT
Create a list - Operation: create-new-list - Endpoint: POST /api/3/lists

catalog_create-variable

ChatGPT
Create a Variable Create a personalization variable - Operation: create-variable - Endpoint: POST /api/3/personalizations

catalog_createAIBroadcast

ChatGPT
Create broadcast with AI Generates a new SMS broadcast message using AI from a prompt and desired tone Tags: Broadcasts - Operation: createAIBroadcast - Endpoint: POST /api/3/sms/broadcasts/ai

catalog_createBroadcast

ChatGPT
Create a new broadcast message Creates a new SMS broadcast message Tags: Broadcasts - Operation: createBroadcast - Endpoint: POST /api/3/sms/broadcasts

catalog_create_match_all_request

ChatGPT
Create a Match All Request for a new Segment Find all Contact Id's that match the given Segment. The provided segment will be saved with a 24 hour TTL. A new match-all request will be initiated. If results are not ready within 4 seconds, a response that lacks a result-set will be returned. Use the returned segmentId and runId to poll and check back later to see if the result-set is ready. Tags: Match All - Operation: create_match_all_request - Endpoint: POST /api/3/segmentMatchAll

catalog_duplicate-campaign

ChatGPT
Duplicate Campaign - Operation: duplicate-campaign - Endpoint: POST /api/3/campaigns/{id}/copy

catalog_exclusions-retrieve-a-list

ChatGPT
Retrieve exclusions list The account's exclusion list: suppression rules that stop sends to matching addresses or numbers even when a contact is active on a list. Each rule has a matchPhrase, a matchType that says how the phrase is matched (exact, begin or end), and a channel: all when the rule applies to every list on both channels, allEmail or allSms when it applies to every list on that one channel, or several when it is limited to the lists named in lists. This is not the set of unsubscribed or bounced contacts, and meta.total counts rules, not contacts. To count unsubscribed or bounced contacts, use GET /contacts with status and meta=only. - Operation: exclusions-retrieve-a-list - Endpoint: GET /api/3/lists/exclusions

catalog_exclusions-retrieve-an-exclusion

ChatGPT
Retrieve an exclusion Retrieve one exclusion rule by id. See GET /lists/exclusions for what a rule is and how matchType and channel are read. - Operation: exclusions-retrieve-an-exclusion - Endpoint: GET /api/3/lists/exclusions/{id}

catalog_exportBroadcastMetrics

ChatGPT
Export broadcast metrics Export broadcast performance metrics as CSV Tags: Metrics, Exports, Broadcasts - Operation: exportBroadcastMetrics - Endpoint: POST /api/3/sms/broadcasts/export

catalog_exportBroadcastRecipients

ChatGPT
Export broadcast recipients Export recipient data as CSV including full contact records Tags: Recipients, Exports, Broadcasts, Metrics - Operation: exportBroadcastRecipients - Endpoint: POST /api/3/sms/broadcasts/{broadcastId}/recipients/export

catalog_forms-1

ChatGPT
List all forms - Operation: forms-1 - Endpoint: GET /api/3/forms

catalog_get-a-list-of-webhook-events

ChatGPT
List the webhook event types available for subscription Returns the event types a webhook can subscribe to, not events that have occurred. For events that happened, read a contact's tracking logs instead. - Operation: get-a-list-of-webhook-events - Endpoint: GET /api/3/webhook/events

catalog_get-a-list-of-webhooks

ChatGPT
List all webhooks List all existing webhooks - Operation: get-a-list-of-webhooks - Endpoint: GET /api/3/webhooks

catalog_get-a-savedresponse

ChatGPT
Retrieve a saved response - Operation: get-a-savedresponse - Endpoint: GET /api/3/savedResponses/{id}

catalog_get-a-single-record

ChatGPT
Get a record by id - Operation: get-a-single-record - Endpoint: GET /api/3/customObjects/records/{schemaId}/{recordId}

catalog_get-a-single-record-using-external-id

ChatGPT
Get a record by external id - Operation: get-a-single-record-using-external-id - Endpoint: GET /api/3/customObjects/records/{schemaId}/external/{externalId}

catalog_get-all-custom-field-groups

ChatGPT
Get All Custom Field Groups - Operation: get-all-custom-field-groups - Endpoint: GET /api/3/groupMembers

catalog_get-branding

ChatGPT
Retrieve a branding Retrieve one branding record by id: site name, logo, favicon, header and footer content, admin template — the account's white-label settings. - Operation: get-branding - Endpoint: GET /api/3/brandings/{id}

catalog_get-connection

ChatGPT
Retrieve a connection Retrieve an existing connection resource. - Operation: get-connection - Endpoint: GET /api/3/connections/{id}

catalog_get-contact

ChatGPT
Retrieve a contact Retrieve an existing contact. The response embeds, as top-level arrays beside contact, the contact's contactLists (each with its channel), contactData, fieldValues, geoIps with their geoAddresses, deals (with exclude[]=deals the contact's deals are not loaded and deals comes back as an empty array), accountContacts with their accounts when the Accounts feature is enabled, and contactAutomations only when automations=true. The embedded arrays are fixed. For other relationships use the sub-resource reads, for example GET /contacts/{id}/contactTags. - Operation: get-contact - Endpoint: GET /api/3/contacts/{id}

catalog_get-contact-by-event-id

ChatGPT
Look up which contact produced a tracking log entry Returns the contact that a tracking-log entry belongs to. eventId must be the id of a tracking log entry, as returned by GET /contacts/{id}/trackingLogs or GET /trackingLogs. It is not a contact id and not an event-tracking event name. Passing a contact id returns 404 (No Result found for TrackingLog) when no entry has that id, or the contact of an unrelated entry when one does, so a 200 does not mean the id spaces are interchangeable. To fetch a contact by contact id, use GET /contacts/{id} (get-contact) instead. To list the tracking events of a known contact, use GET /contacts/{id}/trackingLogs. - Operation: get-contact-by-event-id - Endpoint: GET /api/3/trackingLogs/{eventId}/contact

catalog_get-custom-field-to-field-group

ChatGPT
Get Custom Field Group by ID - Operation: get-custom-field-to-field-group - Endpoint: GET /api/3/groupMembers/{groupId}

catalog_get-customer

ChatGPT
Retrieve a customer Retrieve an existing e-commerce customer resource. - Operation: get-customer - Endpoint: GET /api/3/ecomCustomers/{id}

catalog_get-editor-markup

ChatGPT
Get Editor Markup Get Editor Markup - Operation: get-editor-markup - Endpoint: GET /api/3/content/editorMarkup/{messageId}

catalog_get-flow-execution

ChatGPT
Get Flow Execution Get Flow Execution by Id. Tags: Flows - Operation: get-flow-execution - Endpoint: GET /api/3/channel/whatsapp/flow-execution/{id}

catalog_get-flow-execution-contact

ChatGPT
Get Flow Execution Contact by Id Get Flow Execution Contact by Id. Tags: Flows - Operation: get-flow-execution-contact - Endpoint: GET /api/3/channel/whatsapp/flow-execution-contact/{id}

catalog_get-order

ChatGPT
Retrieve an order Retrieve an existing e-commerce order resource. - Operation: get-order - Endpoint: GET /api/3/ecomOrders/{ecomOrderId}

catalog_get-sms-credits

ChatGPT
Retrieve SMS credit balance The account's SMS sending credits for the current period: how many are included, used and still available, and when the balance next refills. No parameters. Tags: Credits - Operation: get-sms-credits - Endpoint: GET /api/3/sms/credits

catalog_get-task

ChatGPT
Retrieve a task Retrieve an existing task - Operation: get-task - Endpoint: GET /api/3/dealTasks/{id}

catalog_get-user

ChatGPT
Retrieve a user Retrieve an existing user - Operation: get-user - Endpoint: GET /api/3/users/{id}

catalog_get-user-email

ChatGPT
Retrieve a user by email Retrieve an existing user by looking up their email address - Operation: get-user-email - Endpoint: GET /api/3/users/email/{email}

catalog_get-user-loggedin

ChatGPT
Retrieve logged-in user Retrieve the logged-in user - Operation: get-user-loggedin - Endpoint: GET /api/3/users/me

catalog_get-user-username

ChatGPT
Retrieve a user by username Retrieve an existing user by looking up their username - Operation: get-user-username - Endpoint: GET /api/3/users/username/{username}

catalog_get-webhook

ChatGPT
Retrieve a webhook Retrieve an existing webhook - Operation: get-webhook - Endpoint: GET /api/3/webhooks/{id}

catalog_get-whatsapp-template

ChatGPT
Get WhatsApp Template Gets a WhatsApp Template by Id. Tags: Templates - Operation: get-whatsapp-template - Endpoint: GET /api/3/channel/whatsapp/channels/whatsapp/template/{id}

catalog_getAIBroadcastStatus

ChatGPT
Get AI broadcast request status Retrieves the current execution status of an AI broadcast generation or update request Tags: Broadcasts - Operation: getAIBroadcastStatus - Endpoint: GET /api/3/sms/broadcasts/ai/{Id}

catalog_getBroadcast

ChatGPT
Get broadcast message Retrieves the full details for one broadcast message Tags: Broadcasts - Operation: getBroadcast - Endpoint: GET /api/3/sms/broadcasts/{id}

catalog_getBroadcastMetrics

ChatGPT
Get all broadcast metrics Returns metrics for specified broadcast IDs Tags: Metrics, Broadcasts - Operation: getBroadcastMetrics - Endpoint: POST /api/3/sms/broadcasts/metrics

catalog_getBroadcastSnapshotByIds

ChatGPT
Get broadcast snapshot Returns snapshot for specified broadcast IDs Tags: Metrics, Snapshots, Broadcasts - Operation: getBroadcastSnapshotByIds - Endpoint: POST /api/3/sms/broadcasts/metrics/snapshot

catalog_get_result_set_by_id

ChatGPT
Return Match All result-set If the result-set is not ready yet, the response's is_ready attribute will be equal to false. The match-all request has errored out if the is_ready attribute is false and the run_id_end attribute contains a valid timestamp; when this occurs please try your request again or alert the support team. If either the RunId or the SegmentId have expired or otherwise do not exist, a 404 with error details will be returned. result-sets are cached and returned in the same sort order that's requested. If the sort param is not provided it defaults to id. You can specify a different sort order than the original request, however this will break the result's cache for this runId and re-kick-off a new search for results using the same runId Tags: Match All - Operation: get_result_set_by_id - Endpoint: GET /api/3/segmentMatchAll/{segmentId}/{runId}

catalog_get_result_set_by_run_id

ChatGPT
Return a Match Some result-set If the result-set is not ready yet, the response's is_ready attribute will be equal to false. The match-all request has errored out if the is_ready attribute is false and the run_id_end attribute contains a valid timestamp; when this occurs please try your request again or alert the support team. If either the RunId or the SegmentId have expired or otherwise do not exist, a 404 with error details will be returned. Sorting is not supported for this endpoint. This endpoint can be used to pull results from a Match All or a Match Some request. The original sort value will be preserved and there is no risk kicking off a new request Tags: Match Some - Operation: get_result_set_by_run_id - Endpoint: GET /api/3/segmentMatchSome/{segmentId}/{runId}

catalog_list-all-accounts

ChatGPT
List all accounts Retrieve all existing account - Operation: list-all-accounts - Endpoint: GET /api/3/accounts

catalog_list-all-address-groups

ChatGPT
List which user groups each mailing address belongs to One item per address-to-group association, carrying the address and the user group it is assigned to. Account-wide index, not scoped to an address or a group: read it whole and match the pairs yourself. It answers which group holds an address before that association is deleted. Page with limit and offset. - Operation: list-all-address-groups - Endpoint: GET /api/3/addressGroups

catalog_list-all-address-lists

ChatGPT
List which lists each mailing address belongs to One item per address-to-list association, carrying the address and the list it is assigned to. Account-wide index, not scoped to an address or a list: read it whole and match the pairs yourself. It answers which lists use an address before that association is deleted. Page with limit and offset. - Operation: list-all-address-lists - Endpoint: GET /api/3/addressLists

catalog_list-all-addresses

ChatGPT
List all addresses - Operation: list-all-addresses - Endpoint: GET /api/3/addresses

catalog_list-all-associations-1

ChatGPT
List all associations Retrieve all existing account association - Operation: list-all-associations-1 - Endpoint: GET /api/3/accountContacts

catalog_list-all-audiences

ChatGPT
List all saved audience segments Every audience segment saved from the segment builder, with each segment's id (a UUID), name and summary. This is the inventory of segments the account has built so far. A 404 whose body is a data envelope ({"data": []}) means the account has none — the segment service answers an empty store that way; it is an empty result, not a failed call. Legacy /segments records are a separate, older store. Tags: Saved Segment Summaries - Operation: list-all-audiences - Endpoint: GET /api/3/audiences

catalog_list-all-automations

ChatGPT
List automations on the account Account-wide automation roster: name, status, and id. To answer what is inside one automation the user named, call this with search set to that name, pick the matching automation id from the results, then call retrieve-automation-blocks for that id. Do not treat the first row of an unpaged list as the automation they named when several could match. Without enhance, this list does not include triggers, actions, or contact run history. - Operation: list-all-automations - Endpoint: GET /api/3/automations

catalog_list-all-bounce-logs

ChatGPT
List all bounce logs Every bounce log entry on the account, one per bounced message with its timestamp, bounce code, contact and campaign. Filter to one contact with filters[subscriberid]. filters[tstamp] matches one exact timestamp, not a range, so there is no way to count bounces for a date range in one request; to bound by time, sort with orders[tstamp] and page until the entries pass the boundary. meta.total is the number of matching entries. Unknown filter keys are ignored rather than rejected, so the response can look filtered when it is not, and an operator on a known key such as filters[tstamp][gt] is applied as an exact match with that value, not as a range. 20 entries per request by default and at most 100; page with offset. - Operation: list-all-bounce-logs - Endpoint: GET /api/3/bounceLogs

catalog_list-all-brand-kits

ChatGPT
List all brand kits List every brand kit on the account. Each item has the same shape as Retrieve a brand kit; the primary kit carries brandkit.isPrimary=true. Tags: AI - Operation: list-all-brand-kits - Endpoint: GET /api/3/ai/brand

catalog_list-all-calendar-feeds

ChatGPT
List all calendar feeds - Operation: list-all-calendar-feeds - Endpoint: GET /api/3/calendars

catalog_list-all-calendar-feeds-1

ChatGPT
Retrieve a calendar feed - Operation: list-all-calendar-feeds-1 - Endpoint: GET /api/3/calendars/{id}

catalog_list-all-campaigns

ChatGPT
List all campaigns - Operation: list-all-campaigns - Endpoint: GET /api/3/campaigns

catalog_list-all-connections

ChatGPT
List all connections List all existing connection resources. - Operation: list-all-connections - Endpoint: GET /api/3/connections

catalog_list-all-contact-automations

ChatGPT
List all automations a contact is in - Operation: list-all-contact-automations - Endpoint: GET /api/3/contactAutomations

catalog_list-all-contact-list-subscriptions

ChatGPT
List contact subscriptions to lists One row per contact-to-list subscription, carrying the contact id, the list id, the subscription status and its dates. Filter with contact to see every list one contact is on, with status to see the subscriptions in one state, or with sourceIds to see the subscriptions created through given sources, for example imports. There is no filter by list: a listid parameter is ignored and the unfiltered rows come back. There is no filter by date. Order parameters are ignored too: rows come back in table order whatever orders[...] is sent. meta.total is the number of subscription rows that match, as a string, not a number of contacts. To list or count the contacts on a list, use GET /contacts with listid, adding status for one membership status and meta=only for a count without records. 20 rows per request by default and at most 100; page with offset. - Operation: list-all-contact-list-subscriptions - Endpoint: GET /api/3/contactLists

catalog_list-all-contactautomations-for-automation

ChatGPT
List all contacts in an automation List the contacts currently in, or that have run through, a single automation. This is a paginated equivalent of filtering /api/3/contactAutomations by filters[seriesid]. - Operation: list-all-contactautomations-for-automation - Endpoint: GET /api/3/automations/{seriesId}/contactAutomations

catalog_list-all-contactautomations-for-contact

ChatGPT
List all automations the contact is in The automation runs this contact has been in, one entry per time the contact entered an automation. status 1 means the contact is still moving through the automation; 2 means the run has ended. adddate is when the contact entered and remdate when the run ended. By default every run comes back in one response. Pass limit to page; offset then applies and defaults to 0. Without limit, offset is ignored. orders[lastdate]=ASC or DESC sorts by the last activity in the run; any other direction is rejected with 422. Returns 404 if the contact does not exist. To list runs across contacts, use GET /contactAutomations. The contactAutomations link on a contact sends limit=2500 and orders[lastdate]=DESC. - Operation: list-all-contactautomations-for-contact - Endpoint: GET /api/3/contacts/{id}/contactAutomations

catalog_list-all-contacts

ChatGPT
List, search, and filter contacts The read behind the Contacts page. It finds contacts by list (listid), tag (tagid, or filters[tagName] for a tag name), list status (status), text (search matches name, email, phone and account name), segment (segmentid), form (formid), automation (seriesid), or created and updated date (filters[created_after], filters[created_before], filters[updated_after], filters[updated_before]). Filters combine, except that while segmentid is set only status and search still apply and the other filters are ignored, and tagid and filters[tagName] cannot be sent together. GET /contactTags and GET /contactLists return association rows, not contacts. Use only the query parameters documented here: unsupported filter and order fields are silently ignored, so the response looks filtered but is not. The API spellings firstName, lastName and owner are accepted as filter keys, but order keys take only the column spellings: orders[lastName] is ignored, orders[last_name] works. Results are paginated: limit defaults to 20 and is capped at 100; page with offset, or walk a large set with id_greater. Results come back sorted by email ascending unless an orders[...] key says otherwise. To fetch one contact by id, use GET /contacts/{id}. To count the contacts a query matches without fetching records, send meta=only and read meta.total. There is no filter on when a contact's list status changed: filters[updated_after] and filters[updated_before] use the contact record's last-modified date (udate). That… - Operation: list-all-contacts - Endpoint: GET /api/3/contacts

catalog_list-all-content-manager-folders

ChatGPT
List all Content Manager folders Every custom folder in the account's Content Manager, with its ID and name. Deleting a folder leaves its files in the Content Manager. Tags: content manager, folders - Operation: list-all-content-manager-folders - Endpoint: GET /api/3/content-proxy/folders

catalog_list-all-custom-field-relationships

ChatGPT
List all custom field relationships to lists Lists which custom fields are available on which lists. A relationship with relid 0 makes the field available on every list. - Operation: list-all-custom-field-relationships - Endpoint: GET /api/3/fieldRels

catalog_list-all-custom-field-values

ChatGPT
List contact custom field values Lists stored custom field values across contacts, one entry per contact-and-field pair, 20 per page by default. Each entry's contact property is the contact id, field is the custom field definition id, and value holds the stored text. Use filters[fieldid] to scope to one field, contacts[] to scope to contacts, or GET /contacts/{id}/fieldValues for a single contact's values. Values belonging to deleted contacts are excluded. Use only the query parameters documented here: unsupported filter and order fields are silently ignored, so the response looks filtered but is not; filters match exactly. Date and datetime values are returned in ISO 8601 in the API user's timezone. meta.total is the number of matching values, returned as a string. Tags: contact, contacts, field value - Operation: list-all-custom-field-values - Endpoint: GET /api/3/fieldValues

catalog_list-all-custom-field-values-2

ChatGPT
List account custom field values The values CRM company accounts hold in their company account custom fields, one item per account per field. Tags: account, accounts, company, field value - Operation: list-all-custom-field-values-2 - Endpoint: GET /api/3/accountCustomFieldData

catalog_list-all-custom-fielddata-field-values

ChatGPT
List deal custom field values The values deals hold in their deal custom fields, one item per deal per field. Tags: deal, deals, field value - Operation: list-all-custom-fielddata-field-values - Endpoint: GET /api/3/dealCustomFieldData

catalog_list-all-custom-fields-meta

ChatGPT
List account custom fields Every custom field defined on CRM company accounts: the company account fields, each with its type and label. Tags: account, accounts, company, field definition, custom field - Operation: list-all-custom-fields-meta - Endpoint: GET /api/3/accountCustomFieldMeta

catalog_list-all-customers

ChatGPT
List all customers List all e-commerce customer resources. - Operation: list-all-customers - Endpoint: GET /api/3/ecomCustomers

catalog_list-all-deal-activities

ChatGPT
List all deal activities View a recent activity for Deals. A specific deal's activity can also be viewed using /api/3/deals/[dealID]/dealActivities. - Operation: list-all-deal-activities - Endpoint: GET /api/3/dealActivities

catalog_list-all-deal-roles

ChatGPT
List all deal roles - Operation: list-all-deal-roles - Endpoint: GET /api/3/dealRoles

catalog_list-all-deal-stages

ChatGPT
List all stages Retrieve all existing stages - Operation: list-all-deal-stages - Endpoint: GET /api/3/dealStages

catalog_list-all-deal-task-types

ChatGPT
List all task types Retrieve all existing task types - Operation: list-all-deal-task-types - Endpoint: GET /api/3/dealTasktypes

catalog_list-all-deals

ChatGPT
List all deals Retrieve all existing deals - Operation: list-all-deals - Endpoint: GET /api/3/deals

catalog_list-all-email-activities

ChatGPT
List all email activities - Operation: list-all-email-activities - Endpoint: GET /api/3/emailActivities

catalog_list-all-event-types

ChatGPT
List all events (names only) List the names of tracked events - Operation: list-all-event-types - Endpoint: GET /api/3/eventTrackingEvents

catalog_list-all-field-options

ChatGPT
List all field options Lists the options of the account's dropdown, listbox, radio, and checkbox custom contact fields, 20 per page by default. Use field to list one custom field's options; that and ids are the only supported filters on this endpoint. filters[...] and orders[...] parameters are not supported here and are silently ignored, so the response looks filtered but is not. Each entry's id is a field option id: it is valid only on the fieldOptions endpoints and must never be passed to /fields/{id}, which addresses whole custom field definitions in a separate id space. Each entry's field property holds the id of the field definition it belongs to. meta.total is the number of matching options, returned as a string. - Operation: list-all-field-options - Endpoint: GET /api/3/fieldOptions

catalog_list-all-goals

ChatGPT
List all goals Automation goals. Read-only resource: POST, PUT and DELETE are not routed. - Operation: list-all-goals - Endpoint: GET /api/3/goals

catalog_list-all-group-limits

ChatGPT
List All Group Limits - Operation: list-all-group-limits - Endpoint: GET /api/3/groupLimits

catalog_list-all-groups

ChatGPT
List all groups - Operation: list-all-groups - Endpoint: GET /api/3/groups

catalog_list-all-list-group-permissions

ChatGPT
List which user groups can access each list Each record grants one user group access to one list. Tags: permissions, access, user group - Operation: list-all-list-group-permissions - Endpoint: GET /api/3/listGroups

catalog_list-all-messages

ChatGPT
List all messages - Operation: list-all-messages - Endpoint: GET /api/3/messages

catalog_list-all-orders

ChatGPT
List all orders List all existing e-commerce order resources. - Operation: list-all-orders - Endpoint: GET /api/3/ecomOrders

catalog_list-all-personalization-tags

ChatGPT
List all personalization tags Returns every personalization tag the account can use in campaign and automation content: the built-in tags for contacts, lists, campaigns, deals, accounts, ecommerce and custom objects, plus one tag per custom field. Categories the account is not entitled to (deals, accounts, ecommerce, custom objects) are omitted. categories maps each category code to its display label, returned as a translation key. The catalog is not paginated: limit and offset are ignored and the response has no meta. Ecommerce and custom object tags are read from the account's custom object schemas. If that read fails, any request that includes ECOMMERCE or CUSTOM_OBJECT (the unfiltered request does) returns 500 and no tags at all. To keep the rest of the catalog when this happens, request those two categories separately. If an account's contact, deal or account custom fields cannot be read, the catalog still returns 200 and includes one placeholder tag for that category with type error and perstag %ERROR%. - Operation: list-all-personalization-tags - Endpoint: GET /api/3/persTags

catalog_list-all-pipelines

ChatGPT
List all pipelines Retrieve all existing pipelines - Operation: list-all-pipelines - Endpoint: GET /api/3/dealGroups

catalog_list-all-saved-responses

ChatGPT
List all saved responses - Operation: list-all-saved-responses - Endpoint: GET /api/3/savedResponses

catalog_list-all-schemas

ChatGPT
List all schemas Retrieve all schemas available within an account. Users are encouraged to leverage the ?showFields=all query parameter when programmatically creating new schema fields, to ensure field id uniqueness. Fields that have been deleted will contain a status: marked_for_deletion attribute. - Operation: list-all-schemas - Endpoint: GET /api/3/customObjects/schemas

catalog_list-all-scores

ChatGPT
List all scores - Operation: list-all-scores - Endpoint: GET /api/3/scores

catalog_list-all-secondary-contacts

ChatGPT
List all secondary contacts Retrieve all secondary contacts - Operation: list-all-secondary-contacts - Endpoint: GET /api/3/contactDeals

catalog_list-all-segments

ChatGPT
List all segments Records in hosted's legacy segment table. Segments saved from the segment builder are a different store: list them with /audiences and read their definitions with /segmentsV2. - Operation: list-all-segments - Endpoint: GET /api/3/segments

catalog_list-all-sms-lists

ChatGPT
List SMS broadcast lists What an SMS broadcast can send to, with each one's subscriber count. Filter by name; page with limit and offset. Ids and subscriber counts arrive as JSON strings, not numbers. Tags: Broadcasts - Operation: list-all-sms-lists - Endpoint: GET /api/3/sms/lists

catalog_list-all-task-notifications

ChatGPT
List deal task notification settings One item per deal-task notification rule, carrying the task it belongs to and the notification configured for it. Account-wide: it cannot be filtered to one task or one user, so it answers what is configured overall rather than for a particular record. Page with limit and offset. Tags: notifications, alerts, reminders - Operation: list-all-task-notifications - Endpoint: GET /api/3/taskNotifications

catalog_list-all-task-outcomes

ChatGPT
List all task outcomes Retrieve all existing task outcomes - Operation: list-all-task-outcomes - Endpoint: GET /api/3/taskOutcomes

catalog_list-all-task-type-outcome-relations

ChatGPT
List all task type - outcome relations Retrieve all existing task type - outcome relations - Operation: list-all-task-type-outcome-relations - Endpoint: GET /api/3/tasktypeOutcomeRels

catalog_list-all-tasks

ChatGPT
List all tasks Retrieve a list of existing tasks - Operation: list-all-tasks - Endpoint: GET /api/3/dealTasks

catalog_list-all-templates

ChatGPT
List all templates Retrieve the email templates in the account. Results are paginated and can be filtered; meta.total holds the total number of templates matching the request. Responses include each template's full HTML by default and are large as a result; pass exclude=content,preview_content whenever the body is not needed. - Operation: list-all-templates - Endpoint: GET /api/3/templates

catalog_list-all-tracked-domains

ChatGPT
List all tracked domains List every whitelisted domain. Each entry is identified by its name; whitelisted domains have no id in this representation. The collection is empty when the feature is switched off rather than an error, so check GET /api/3/siteTracking before treating an empty list as no domains configured. - Operation: list-all-tracked-domains - Endpoint: GET /api/3/siteTrackingDomains

catalog_list-all-tracked-events

ChatGPT
List the tracked events that have fired, with their contacts Lists site-tracking and event-tracking log entries across all contacts, 20 per page by default. Each entry's id is the eventId that GET /trackingLogs/{eventId}/contact accepts. Use filters[subscriberid] to scope the list to one contact. Use only the query parameters documented here: unsupported filter and order fields are silently ignored, so the response looks filtered but is not. An entry's type is __pagevisit for a site-tracking page visit (value holds the page URL), __redir for a tracked link redirect (value holds the destination URL), or the name of an event-tracking event (value holds the event data). Entries are copied in when a contact's activity feed is refreshed, so events recorded moments ago may not appear yet. Tags: tracked events, tracking logs - Operation: list-all-tracked-events - Endpoint: GET /api/3/trackingLogs

catalog_list-all-users

ChatGPT
List all users List all existing users - Operation: list-all-users - Endpoint: GET /api/3/users

catalog_list-all-whitelisted-domains

ChatGPT
List all whitelisted domains List of all whitelisted site tracking domains - Operation: list-all-whitelisted-domains - Endpoint: GET /api/3/prism/urlWhitelistings

catalog_list-archived-contacts

ChatGPT
List archived contacts The archived contacts of the account: contacts that were deleted and are kept for 360 days before they are purged. GET /contacts never returns them, whatever its status value; they are read here, or one at a time with GET /contactArchives/{id}. Only contacts archived within the last 360 days are listed, and only to API users in the Admin group: any other user gets 404. Each row is the contact as it was when archived, with the contact's fields plus deleted_at, when it was archived, and is_restorable, true when the contact is old enough to restore (archived at least 30 days ago by default; support can change an account's threshold) and not yet past the 360-day window. No operation in this API restores an archived contact; restoring is done in the app's Archived contacts view, and a POST to this path returns 405. Search with search: a full email address matches exactly; any other single word is matched anywhere in email, first name, last name or phone; words separated by spaces are matched together against the full name, or as a whole against the phone. Known defect: when search is a single word that is not an email address, start, end and the 360-day limit are not applied to the rows it matches by email or name, so such a search can return contacts archived more than 360 days ago and ignores the date window; combine dates with filters[...] or an exact email instead. Narrow the archive date with start and end, both Unix timestamps in milliseconds (a value in seconds is read as… Tags: deleted contacts, archived contacts, recover a deleted contact, restore a deleted contact - Operation: list-archived-contacts - Endpoint: GET /api/3/contactArchives

catalog_list-automation-stats-activity-items

ChatGPT
List recent automation entries Up to 25 contacts who most recently entered the automation, contacts with an avatar first. - Operation: list-automation-stats-activity-items - Endpoint: GET /api/3/statsActivityItem/get_series

catalog_list-business-goals

ChatGPT
List business goals (agent-oriented read) A read-optimized listing of business goals, separate from GET /initiatives/{initiativeId}. Returned directly from InitiativeAgentDataService::getInitiatives(). Conversions are always included inline for every business goal; conversion trigger detail (conversionEvents) is only populated on the single-goal endpoint, never here. Assets (automations, campaigns, forms, sms) are included inline only when includeAssets=true -- otherwise every assets list comes back empty. - Operation: list-business-goals - Endpoint: GET /api/3/businessGoals/data

catalog_list-contact-activities

ChatGPT
List a contact's activity feed The activity feed of one contact: the events recorded against the contact over time. Send contact with the contact id. The request first refreshes that contact's feed from the underlying tables, so recent events appear, then returns the entries. A request without contact reads activities across the whole account; on a large account that scans millions of rows and can run for many minutes, so always scope the read to one contact. Each entry says what happened through reference_type and reference_action, and names the underlying record with reference_id and reference (its API type and id). What the types mean: Log, a campaign email was sent to the contact (include reference.log.campaign to see which campaign); LinkData, the contact clicked a tracked link in a campaign email (include reference.link for the link); MppLinkData, a campaign link was fetched by a mail privacy proxy rather than by the contact; Forward, the contact forwarded a campaign; Reply, the contact replied to a campaign; Update, the contact updated their details through a campaign's update link; SubscriberEmail, a one-to-one email was sent to the contact from the platform; SubscriberList with reference_action subscribe or unsubscribe, the contact joined or left a list; SubscriberSeries with start or complete, the contact entered or completed an automation; SeriesBlock with goal, the contact reached an automation goal; Note, a note was added to the contact; SubscriberLog with merge, another contact was merged… - Operation: list-contact-activities - Endpoint: GET /api/3/activities

catalog_list-content-manager-file-folders

ChatGPT
Show which folders a Content Manager file is in Which custom folders of the Content Manager hold one file, given the file's ID. Tags: content manager, files, folders - Operation: list-content-manager-file-folders - Endpoint: GET /api/3/content-proxy/files/{id}/folders

catalog_list-content-manager-file-keywords

ChatGPT
List the keywords on a Content Manager file The keywords added to one file in the Content Manager. These are the words the search matches on besides the file's title. Tags: content manager, files, keyword - Operation: list-content-manager-file-keywords - Endpoint: GET /api/3/content-proxy/files/{id}/tags

catalog_list-content-manager-folder-files

ChatGPT
List the files in a Content Manager folder The files in one custom folder of the account's Content Manager. The API does not page this list and limit and offset do nothing here: the catalog cuts the response at 100 files and its truncation note gives the full count. For a larger folder use the file search with folderId and page. Each file carries its storage key, and its address is built from baseUrl and that key together. Tags: content manager, folders, files - Operation: list-content-manager-folder-files - Endpoint: GET /api/3/content-proxy/folders/{id}/files

catalog_list-content-manager-keyword-files

ChatGPT
List the files with a keyword The files in the account's Content Manager that have one keyword. Find a keyword's ID from a file's keywords. The API does not page this list and limit and offset do nothing here: the catalog cuts the response at 100 files and its truncation note gives the full count. For a keyword with more files use the file search with name set to the keyword and page. Each file carries its storage key, and its address is built from baseUrl and that key together. Tags: content manager, files, keyword - Operation: list-content-manager-keyword-files - Endpoint: GET /api/3/content-proxy/tags/{id}/files

catalog_list-conversations

ChatGPT
List Conversations Lists Conversations. Tags: Conversations - Operation: list-conversations - Endpoint: GET /api/3/channel/whatsapp/inbox/conversation

catalog_list-conversion-labels

ChatGPT
List conversion labels A 'conversion label' (ConversionFolder) is the association row between a conversion and a label/folder -- not the label itself. - Operation: list-conversion-labels - Endpoint: GET /api/3/conversions/labels

catalog_list-conversion-metrics

ChatGPT
List conversion metrics Agent-oriented read: event count, unique contacts, and total value per conversion. Backed by ConversionAgentService::getConversionMetrics(). - Operation: list-conversion-metrics - Endpoint: GET /api/3/conversions/metrics

catalog_list-conversions

ChatGPT
List conversions - Operation: list-conversions - Endpoint: GET /api/3/conversions

catalog_list-conversions-data

ChatGPT
List conversion statistics Read-optimized conversion stats (counts, values, graph series), separate from GET /conversions. Backed by ConversionsService::fetchConversionData(). - Operation: list-conversions-data - Endpoint: GET /api/3/conversions/data

catalog_list-ecomorderproducts

ChatGPT
List EcomOrderProducts - Operation: list-ecomorderproducts - Endpoint: GET /api/3/ecomOrderProducts

catalog_list-flow-execution

ChatGPT
List Flow Executions Lists Flow Executions. Tags: Flows - Operation: list-flow-execution - Endpoint: GET /api/3/channel/whatsapp/flow-execution

catalog_list-flow-execution-contact

ChatGPT
List Flow Execution Contacts Lists Flow Execution Contacts. Tags: Flows - Operation: list-flow-execution-contact - Endpoint: GET /api/3/channel/whatsapp/flow-execution-contact

catalog_list-import-failed-rows

ChatGPT
List the rows of an app or integration import that failed or were only partly imported, with reasons For one import from GET /import/history, list the rows that did not import (type failure) or that imported but had a list subscription skipped (type partial), each with its email and the reason. This is the endpoint to use when a user asks why their import had errors. It covers imports started from the app or by an integration only; imports submitted through POST /import/bulk_import are not in the history and their reasons are only available through the import callback. Returns at most 500 rows, oldest first, and there is no paging beyond that. For partial rows the reason starts with "Imported under ID: <contact id>", followed by the skipped reason in parentheses. Integration imports have no per-row log and return an empty list. An import id that does not exist, or that the caller is not allowed to see, is a 404. Requires the contact import permission. - Operation: list-import-failed-rows - Endpoint: GET /api/3/import/history/{importId}/{type}

catalog_list-import-history

ChatGPT
List contact imports made from the app or by integrations List this account's contact imports that were started from the app's import tool (CSV or file uploads) or by an integration, newest first, with how many rows imported, partly imported, or failed. Use it to answer questions about an import a user ran in the app, then use GET /import/history/{importId}/{type} to get the rows that failed and why. Imports submitted through POST /import/bulk_import do not appear here; check those with GET /import/info. Users outside the main user group only see imports from their own group. Paginated with limit (1 to 100, default 20) and offset; meta.total is the number of imports visible to the caller. Requires the contact import permission. - Operation: list-import-history - Endpoint: GET /api/3/import/history

catalog_list-products-for-order

ChatGPT
List EcomOrderProducts for a Specific EcomOrder - Operation: list-products-for-order - Endpoint: GET /api/3/ecomOrders/{id}/orderProducts

catalog_list-records-created-from-a-schema

ChatGPT
List records by schema - Operation: list-records-created-from-a-schema - Endpoint: GET /api/3/customObjects/records/{schemaId}

catalog_list-sms-broadcast-failures

ChatGPT
List SMS broadcast delivery failures Delivery failures for one SMS broadcast, grouped by error code and source (ac or twilio) with a count per group. Optional start_date and end_date bounds. Tags: Failures, Broadcasts, Metrics - Operation: list-sms-broadcast-failures - Endpoint: GET /api/3/sms/broadcasts/metrics/{broadcastId}/failures

catalog_list-sms-broadcast-recipients

ChatGPT
List SMS broadcast recipients Recipients of one SMS broadcast with per-recipient delivery and engagement, filterable by deliverability (deliveries, failures) and engagement (clicks, replies, optOuts), searchable, ordered, and paged with limit and offset. Tags: Recipients, Broadcasts - Operation: list-sms-broadcast-recipients - Endpoint: GET /api/3/sms/broadcasts/{broadcastId}/recipients

catalog_list-stats-activity-items

ChatGPT
List recent activity items Up to 25 recent contact activities of the requested types, one per contact, contacts with an avatar first, then newest first. - Operation: list-stats-activity-items - Endpoint: GET /api/3/statsActivityItem/get

catalog_list-variables

ChatGPT
List Variables Retrieve a list of personalization variables - Operation: list-variables - Endpoint: GET /api/3/personalizations

catalog_list-whatsapp-templates

ChatGPT
List WhatsApp Templates Lists WhatsApp Templates. You can search with the name and status fields using the ?seach=my-template-name query parameter. Tags: Templates - Operation: list-whatsapp-templates - Endpoint: GET /api/3/channel/whatsapp/channels/whatsapp/template

catalog_listBroadcasts

ChatGPT
Get all broadcast messages Gets a paged list of all of a customer's broadcast messages with optional filtering Tags: Broadcasts - Operation: listBroadcasts - Endpoint: GET /api/3/sms/broadcasts

catalog_personalization-tags

ChatGPT
Personalization Tags - Operation: personalization-tags - Endpoint: GET /api/3/stripo/personalizationTags

catalog_post_formoptin

ChatGPT
Create a form's opt-in confirmation email Creates the opt-in confirmation email for a form — the double opt-in message sent to contacts who submit a form that subscribes them to an email marketing list, and which they must click through before the list counts them as Active. It is a transactional email: it carries no unsubscribe link, its default footer cannot be removed, and it must keep the %CONFIRMLINK% personalization link or it cannot be sent. Upstream documents no request body, no response and no summary for this operation, and that it writes the record the form's options.optin_id points at is read off that field rather than from a documented contract — so confirm the result with GET /forms/{id} (options.optin_id, optin_created, sendoptin) instead of relying on what this returns, and prefer the form builder's own "Subscribes to list" action settings when the form already exists. Reached only on a form whose action subscribes to a list; with double opt-in off, no confirmation email is sent whatever this creates. Tags: opt-in confirmation, double opt-in, forms - Operation: post_formoptin - Endpoint: POST /api/3/form/optin

catalog_post_forms

ChatGPT
Create a form Creates a form in Website > Forms — the embeddable form that collects contact information from site visitors and, with the "Subscribes to a list" form action, adds them to an email marketing list. Form types are inline, preference center, floating bar, floating box and modal; only inline is available on Starter, the rest need Plus or above. Upstream documents no request body for this operation, so the body is passed through unvalidated: send the fields a form record carries (name, title, body, button, submit, thanks, action, actiondata, cfields, addressid, style, options) as GET /forms/{id} returns them, and treat the API's own error as the only schema check. It documents no response either, so read the result back with GET /forms or GET /forms/{id} rather than relying on what this returns. Side effect worth knowing before calling: a form whose action subscribes to a list has double opt-in on by default, so every submitter is sent an opt-in confirmation email and is not Active on the list until they click its link. Tags: forms, signup form, subscribe form - Operation: post_forms - Endpoint: POST /api/3/forms

catalog_preview-a-campaign-message

ChatGPT
Preview a campaign message Render a campaign message for one address and return it parsed into headers and bodies, without sending anything. This is the v3 equivalent of the preview action of the v1 campaign_send action. Rendering personalizes the message for toEmail. Unlike [Send a test of a campaign](/reference/send-a-campaign-test), no email is delivered and no test-send limit applies. - Operation: preview-a-campaign-message - Endpoint: POST /api/3/campaigns/test-preview

catalog_retrieve-a-brand-kit

ChatGPT
Retrieve a brand kit Get a single brand kit by UUID. Tags: AI - Operation: retrieve-a-brand-kit - Endpoint: GET /api/3/ai/brand/{uuid}

catalog_retrieve-a-business-goal

ChatGPT
Retrieve a business goal Retrieves a business goal (internally an Initiative / Folder row). - Operation: retrieve-a-business-goal - Endpoint: GET /api/3/initiatives/{initiativeId}

catalog_retrieve-a-campaign

ChatGPT
Retrieve a campaign - Operation: retrieve-a-campaign - Endpoint: GET /api/3/campaigns/{id}

catalog_retrieve-a-campaign-message-source

ChatGPT
Retrieve the source of a campaign message Render a campaign message and return the generated email. This is the v3 equivalent of the source and structured actions of the v1 campaign_send action. With structured=0 (the default) the rendered message is returned as one raw MIME string in result. With structured=1 the message is parsed and its headers, parts and attachments are returned as separate members alongside the raw source. Rendering personalizes the message for email; the default address _t.e.s.t_@example.com renders the message without a contact. No email is delivered by this endpoint. The account must have the Campaigns module enabled, otherwise the request answers 403. - Operation: retrieve-a-campaign-message-source - Endpoint: GET /api/3/message/source

catalog_retrieve-a-contact-list-subscription

ChatGPT
Retrieve a contact list subscription Returns one contact-to-list membership by its own ID. To find the ID, list subscriptions with GET /contactLists?contact= or follow links.contactLists on a contact. - Operation: retrieve-a-contact-list-subscription - Endpoint: GET /api/3/contactLists/{id}

catalog_retrieve-a-contact-tag

ChatGPT
Retrieve a contact tag Returns a single contact-to-tag association by its id. The contact and tag fields are ids; fetch the tag definition itself from GET /tags/{id}. Returns 404 if the association does not exist. - Operation: retrieve-a-contact-tag - Endpoint: GET /api/3/contactTags/{id}

catalog_retrieve-a-contactautomation

ChatGPT
Retrieve an automation a contact is in - Operation: retrieve-a-contactautomation - Endpoint: GET /api/3/contactAutomations/{id}

catalog_retrieve-a-contacts-geo-ip-address

ChatGPT
Retrieve a contacts geo IP address - Operation: retrieve-a-contacts-geo-ip-address - Endpoint: GET /api/3/geoIps/{geoAddressId}/geoAddress

catalog_retrieve-a-contacts-score-value

ChatGPT
Retrieve a contact's score value The contact's current point totals: one row per contact score, plus one row per deal for each deal score (deal is then that deal's id). score is the id of the score definition (see GET /scores), scoreValue is the points the contact holds for it, and deal is null for contact scores. Rows for scores that have since been deleted are left out. Every row comes back in one response and no order is guaranteed: limit, offset, filters and orders are ignored on this path. Returns 404 if the contact does not exist. - Operation: retrieve-a-contacts-score-value - Endpoint: GET /api/3/contacts/{id}/scoreValues

catalog_retrieve-a-content-manager-file

ChatGPT
Retrieve a Content Manager file One file from the account's Content Manager by its ID: its title, alt text, type, size, dimensions, keywords and storage keys, and who last changed it and when. Answers 404 when the account has no such file. Unlike the search and the lists, retrieving by ID can still return a file that was deleted. Tags: content manager, files, keyword - Operation: retrieve-a-content-manager-file - Endpoint: GET /api/3/content-proxy/files/{id}

catalog_retrieve-a-content-manager-folder

ChatGPT
Retrieve a Content Manager folder One custom folder from the account's Content Manager by its ID. Tags: content manager, folders - Operation: retrieve-a-content-manager-folder - Endpoint: GET /api/3/content-proxy/folders/{id}

catalog_retrieve-a-conversion

ChatGPT
Retrieve a conversion - Operation: retrieve-a-conversion - Endpoint: GET /api/3/conversions/{id}

catalog_retrieve-a-conversion-label

ChatGPT
Retrieve a conversion label - Operation: retrieve-a-conversion-label - Endpoint: GET /api/3/conversions/labels/{id}

catalog_retrieve-a-conversions-data

ChatGPT
Retrieve a conversion's statistics Same shape as GET /conversions/data, scoped to a single conversion. Still returns the 'conversions' wrapper with a single-element array. - Operation: retrieve-a-conversions-data - Endpoint: GET /api/3/conversions/{id}/data

catalog_retrieve-a-conversions-metrics

ChatGPT
Retrieve a conversion's metrics - Operation: retrieve-a-conversions-metrics - Endpoint: GET /api/3/conversions/{id}/metrics

catalog_retrieve-a-custom-deal-field-meta

ChatGPT
Retrieve a deal custom field Tags: deal, deals, field definition, custom field - Operation: retrieve-a-custom-deal-field-meta - Endpoint: GET /api/3/dealCustomFieldMeta/{id}

catalog_retrieve-a-custom-deal-field-value

ChatGPT
Retrieve a deal custom field value Tags: deal, deals, field value - Operation: retrieve-a-custom-deal-field-value - Endpoint: GET /api/3/dealCustomFieldData/{id}

catalog_retrieve-a-custom-field-contact

ChatGPT
Get a custom field by ID Returns one custom field definition by its field id, with its options side-loaded in a fieldOptions array and its list relationships in a fieldRels array. Ids inside fieldOptions are field option ids, not field ids; they are only valid on the fieldOptions endpoints. 404 if no field has this id. - Operation: retrieve-a-custom-field-contact - Endpoint: GET /api/3/fields/{id}

catalog_retrieve-a-custom-field-meta

ChatGPT
Retrieve an account custom field Tags: account, accounts, company, field definition, custom field - Operation: retrieve-a-custom-field-meta - Endpoint: GET /api/3/accountCustomFieldMeta/{id}

catalog_retrieve-a-custom-field-relationship

ChatGPT
Retrieve a custom field relationship to lists - Operation: retrieve-a-custom-field-relationship - Endpoint: GET /api/3/fieldRels/{fieldRelId}

catalog_retrieve-a-custom-field-value

ChatGPT
Retrieve an account custom field value Tags: account, accounts, company, field value - Operation: retrieve-a-custom-field-value - Endpoint: GET /api/3/accountCustomFieldData/{id}

catalog_retrieve-a-deal

ChatGPT
Retrieve a deal One deal by its id: its title, value and currency, the pipeline (group) and stage it is in, its owner, its primary contact and account, and its status (0 open, 1 won, 2 lost). A user who is not allowed to see all deals can read only the deals they own and gets 403 for any other. A deal in a pipeline the user cannot see comes back with isDisabled true and only its id, title and status. Returns 404 if the deal does not exist, or if it has neither a primary contact nor an account. To list the deals on which one contact is the primary contact, use GET /contacts/{id}/deals; to find deals by status, stage, pipeline or owner, use GET /deals. - Operation: retrieve-a-deal - Endpoint: GET /api/3/deals/{id}

catalog_retrieve-a-deal-stage

ChatGPT
Retrieve a stage Retrieve an existing stage - Operation: retrieve-a-deal-stage - Endpoint: GET /api/3/dealStages/{id}

catalog_retrieve-a-deal-task-type

ChatGPT
Retrieve a task type Retrieve an existing task type - Operation: retrieve-a-deal-task-type - Endpoint: GET /api/3/dealTasktypes/{id}

catalog_retrieve-a-field-option

ChatGPT
Retrieve a field option Returns one field option by its field option id. The option's field property holds the id of the custom field definition it belongs to; use that id, never the option id, on the /fields/{id} endpoints. 404 if no option has this id. - Operation: retrieve-a-field-option - Endpoint: GET /api/3/fieldOptions/{id}

catalog_retrieve-a-fieldvalues

ChatGPT
Retrieve a contact custom field value Returns one stored custom field value by its fieldValue id. The entry's contact property is the contact id and field is the custom field definition id. 404 if no fieldValue has this id. Tags: contact, contacts, field value - Operation: retrieve-a-fieldvalues - Endpoint: GET /api/3/fieldValues/{id}

catalog_retrieve-a-goal

ChatGPT
Retrieve a goal - Operation: retrieve-a-goal - Endpoint: GET /api/3/goals/{id}

catalog_retrieve-a-group

ChatGPT
Retrieve a group - Operation: retrieve-a-group - Endpoint: GET /api/3/groups/{id}

catalog_retrieve-a-list

ChatGPT
Retrieve a list Retrieve one contact list by id. The single-list response carries the list's channel, description and timestamps but not the active_subscribers and non_deleted_subscribers counters; read those from GET /lists. Tags: contact list - Operation: retrieve-a-list - Endpoint: GET /api/3/lists/{id}

catalog_retrieve-a-list-group-permission

ChatGPT
Retrieve a list group permission - Operation: retrieve-a-list-group-permission - Endpoint: GET /api/3/listGroups/{id}

catalog_retrieve-a-message

ChatGPT
Retrieve a message - Operation: retrieve-a-message - Endpoint: GET /api/3/messages/{id}

catalog_retrieve-a-note

ChatGPT
Retrieve a note - Operation: retrieve-a-note - Endpoint: GET /api/3/notes/{id}

catalog_retrieve-a-pipeline

ChatGPT
Retrieve a pipeline Retrieve an existing pipeline - Operation: retrieve-a-pipeline - Endpoint: GET /api/3/dealGroups/{id}

catalog_retrieve-a-schema

ChatGPT
Retrieve a schema Retrieve a specific schema by id. Users are encouraged to leverage the ?showFields=all query parameter when programmatically creating new schema fields, to ensure field id uniqueness. Fields that have been deleted will contain a status: marked_for_deletion attribute. - Operation: retrieve-a-schema - Endpoint: GET /api/3/customObjects/schemas/{id}

catalog_retrieve-a-score

ChatGPT
Retrieve a score - Operation: retrieve-a-score - Endpoint: GET /api/3/scores/{id}

catalog_retrieve-a-secondary-contact

ChatGPT
Retrieve a secondary contact Retrieve an existing secondary contact - Operation: retrieve-a-secondary-contact - Endpoint: GET /api/3/contactDeals/{id}

catalog_retrieve-a-segment

ChatGPT
Retrieve a segment One record from hosted's legacy segment table, by integer id. Segments saved from the segment builder are a different store: list them with /audiences and read their definitions with /segmentsV2. - Operation: retrieve-a-segment - Endpoint: GET /api/3/segments/{id}

catalog_retrieve-a-segment-v2

ChatGPT
Retrieve a segment definition (V2) The full V2 segment definition — the condition JSON the segment builder saved — for one segment UUID. Definitions, not membership: to test whether a contact matches, use the segment match operations. A 404 whose body is a data envelope ({"data": []}) means the account has none — the segment service answers an empty store that way; it is an empty result, not a failed call. Tags: Segments - Operation: retrieve-a-segment-v2 - Endpoint: GET /api/3/segmentsV2/{segmentId}

catalog_retrieve-a-segment-v2-version

ChatGPT
Retrieve a historic segment definition (V2) The V2 segment definition as it existed at a given timestamp — the stored historic version of a segment the builder later changed. A 404 whose body is a data envelope ({"data": []}) means the account has none — the segment service answers an empty store that way; it is an empty result, not a failed call. Tags: Segments - Operation: retrieve-a-segment-v2-version - Endpoint: GET /api/3/segmentsV2/{segmentId}/createdDate/{timestamp}

catalog_retrieve-a-tag

ChatGPT
Retrieve a tag Returns a single tag definition, including subscriber_count, the number of contacts the tag is applied to. Use GET /tags with filters[tag] to find a tag by name when the id is not known. Unlike GET /tags, it also returns soft-deleted tags, with deleted set to 1, and template tags. Returns 404 only when no tag with this id exists. Query parameters, including include, are ignored. - Operation: retrieve-a-tag - Endpoint: GET /api/3/tags/{id}

catalog_retrieve-a-task-outcome

ChatGPT
Retrieve a task outcome Retrieve an existing task outcome - Operation: retrieve-a-task-outcome - Endpoint: GET /api/3/taskOutcomes/{id}

catalog_retrieve-a-task-type-outcome-relation

ChatGPT
Retrieve a task type - outcome relation Retrieve an existing task type - outcome relation - Operation: retrieve-a-task-type-outcome-relation - Endpoint: GET /api/3/tasktypeOutcomeRels/{id}

catalog_retrieve-a-template

ChatGPT
Retrieve a template - Operation: retrieve-a-template - Endpoint: GET /api/3/templates/{id}

catalog_retrieve-a-tracking-log

ChatGPT
Retrieve a tracking log entry Returns a single tracking log entry by its id. The same id is the eventId that GET /trackingLogs/{eventId}/contact accepts. Entry ids are returned by GET /trackingLogs and GET /contacts/{id}/trackingLogs; they are not contact ids. Returns 404 if no entry has the given id. - Operation: retrieve-a-tracking-log - Endpoint: GET /api/3/trackingLogs/{id}

catalog_retrieve-all-custom-deal-field-meta

ChatGPT
List deal custom fields Every custom field defined on deals: the deal fields, each with its type and label. Tags: deal, deals, field definition, custom field - Operation: retrieve-all-custom-deal-field-meta - Endpoint: GET /api/3/dealCustomFieldMeta

catalog_retrieve-all-lists

ChatGPT
Retrieve all lists Retrieve the account's contact lists, 20 per request by default and at most 100; page with offset. Each list in this collection carries two counters: active_subscribers, the contacts with an active subscription to the list, and non_deleted_subscribers, every contact still on the list in any status. The difference between them is the contacts on the list who are unconfirmed, unsubscribed or bounced; the list object does not break that remainder down by status. To count the contacts on one list in one status, use GET /contacts with listid, status and meta=only. Filter by name with filters[name]. Only email lists are returned unless filters[channel] is sms or all. The exclusion list is not a contact list; see GET /lists/exclusions. - Operation: retrieve-all-lists - Endpoint: GET /api/3/lists

catalog_retrieve-all-tags

ChatGPT
List all tags Returns tag definitions, each with subscriber_count, the number of contacts the tag is applied to. Contact tags are returned by default; pass type=template for template tags. To find a tag by exact name, use filters[tag] or filters[search][eq]; both match the whole name, ignoring case. For a partial-name search, use search: it is a case-insensitive substring match, so it returns every similarly named tag alongside the one asked for. Identify the tag you want by comparing the tag field of each result, never by its position in the list. To apply a tag to a contact, pass the returned id to POST /contactTags. Unrecognized filter and order parameters are silently ignored. When that happens the response contains the unfiltered set with the unfiltered total, so a request with a misspelled filter looks successful while returning every tag. Soft-deleted tags are never listed. Results are sorted by id ascending unless order, selected_tag_id or orders[search]=weight applies; orders[tag], orders[type] and orders[id] have no effect. meta.total is the number of tags that matched, returned as a string; when counting is slow it can come from a cache of up to five minutes. The list is read from a replica, so a tag created a moment ago can be missing briefly. - Operation: retrieve-all-tags - Endpoint: GET /api/3/tags

catalog_retrieve-an-account

ChatGPT
Retrieve an account Retrieve an existing account - Operation: retrieve-an-account - Endpoint: GET /api/3/accounts/{id}

catalog_retrieve-an-address

ChatGPT
Retrieve an address - Operation: retrieve-an-address - Endpoint: GET /api/3/addresses/{id}

catalog_retrieve-an-addressgroup

ChatGPT
Retrieve an addressGroup - Operation: retrieve-an-addressgroup - Endpoint: GET /api/3/addressGroups/{id}

catalog_retrieve-an-addresslist

ChatGPT
Retrieve an addressList - Operation: retrieve-an-addresslist - Endpoint: GET /api/3/addressLists/{id}

catalog_retrieve-an-association

ChatGPT
Retrieve an association Retrieve an existing account association - Operation: retrieve-an-association - Endpoint: GET /api/3/accountContacts/{id}

catalog_retrieve-an-audience

ChatGPT
Retrieve a saved audience segment One saved audience segment by its UUID: name, summary and definition metadata. A 404 whose body is a data envelope ({"data": []}) means the account has none — the segment service answers an empty store that way; it is an empty result, not a failed call. Tags: Saved Segment Summaries - Operation: retrieve-an-audience - Endpoint: GET /api/3/audiences/{segmentId}

catalog_retrieve-an-automation

ChatGPT
Retrieve an automation One automation's metadata: name, status, and id. It does not include triggers, actions, or conditions. Use list-all-automations with search when the id is not known, then retrieve-automation-blocks for its contents. - Operation: retrieve-an-automation - Endpoint: GET /api/3/automations/{id}

catalog_retrieve-an-ecomorderproduct

ChatGPT
Retrieve an EcomOrderProduct - Operation: retrieve-an-ecomorderproduct - Endpoint: GET /api/3/ecomOrderProducts/{id}

catalog_retrieve-archived-contact

ChatGPT
Retrieve an archived contact One archived contact by the id it had before it was archived. The row is the contact as it was when archived, with deleted_at saying when. Unlike the list, this read is not limited to Admin users, has no 360-day limit, and carries no is_restorable flag. Returns 404 if no archived contact has that id, including when the contact is still active or has been permanently deleted. - Operation: retrieve-archived-contact - Endpoint: GET /api/3/contactArchives/{id}

catalog_retrieve-automation-blocks

ChatGPT
Retrieve an automation's blocks The trigger, actions, waits, conditions, and goals that make up one automation: each block's id, seriesid, parentid, ordernum, type, and params. Use after resolving the automation id via list-all-automations search or retrieve-an-automation. - Operation: retrieve-automation-blocks - Endpoint: GET /api/3/automations/{id}/blocks

catalog_retrieve-automation-triggers

ChatGPT
Retrieve how contacts enter an automation (its start triggers) The start records for one automation in automationTriggers: each record's id, type, and params (for example tagadd carries the tag name in params.tag). Use with retrieve-automation-blocks when the start block only lists trigger ids and the goal needs how a contact enters. Not GET /automations/triggers and not contact run history. Tags: start trigger, enter automation, entry condition, contact enters - Operation: retrieve-automation-triggers - Endpoint: GET /api/3/automations/{id}/triggers

catalog_retrieve-brand-kit-competitors

ChatGPT
Retrieve a brand kit's competitors Get the competitors of any brand kit, not only the primary one. Competitors are stored apart from the brand kit record, so Retrieve a brand kit and List all brand kits do not return them. An empty list means the kit has no competitors only when status is complete; when status is not_started, pending or failed the competitors are not available yet. Tags: AI - Operation: retrieve-brand-kit-competitors - Endpoint: GET /api/3/ai/brand/{uuid}/competitors

catalog_retrieve-brand-kit-tone

ChatGPT
Retrieve a brand kit's tone Get the brand voice and tone of any brand kit, not only the primary one. Tone is stored apart from the brand kit record, so Retrieve a brand kit and List all brand kits do not return it. An empty tone means the kit has none only when status is complete; when status is not_started, pending or failed the tone is not available yet. Tags: AI - Operation: retrieve-brand-kit-tone - Endpoint: GET /api/3/ai/brand/{uuid}/tone

catalog_retrieve-business-goal-data

ChatGPT
Retrieve a business goal (agent-oriented read) A read-optimized, single-record view of one business goal, separate from GET /initiatives/{initiativeId}. Returned directly from InitiativeAgentDataService::getInitiative(). Unlike the list endpoint, assets are always populated here (no includeAssets flag), and each conversion's conversionEvents (trigger detail) is always included when present. - Operation: retrieve-business-goal-data - Endpoint: GET /api/3/businessGoals/data/{initiativeId}

catalog_retrieve-campaign-messages-associated-campaign

ChatGPT
Retrieve campaign messages associated to campaign Retrieve the per-message reporting totals for a campaign. Each element of campaignMessages corresponds to one message the campaign sent: a single element for a regular campaign, and one element per variation for a split (A/B) campaign, which is the only way to break a split campaign's results down by variation. The counters are lifetime totals for the message and cannot be constrained to a date range. This collection is not paginated: every message of the campaign is returned, and limit, offset and meta.total do not apply. The endpoint is read only; POST, PUT and DELETE return 403. - Operation: retrieve-campaign-messages-associated-campaign - Endpoint: GET /api/3/campaigns/{id}/campaignMessages

catalog_retrieve-contact-account-contacts

ChatGPT
Retrieve a contacts account contacts The link between this contact and its account (company): the account id, the contact's job title there, and when the link was created and last changed. A contact can be on one account at a time, so the list normally holds at most one row and is empty when the contact has no account. Everything comes back in one response: limit, offset, filters and orders are ignored on this path. To find links across contacts, use GET /accountContacts with filters[contact] or filters[account]. Returns 404 if the contact does not exist. - Operation: retrieve-contact-account-contacts - Endpoint: GET /api/3/contacts/{id}/accountContacts

catalog_retrieve-contact-automation-entry-counts

ChatGPT
Retrieve a contacts automation entry counts For each automation this contact has entered, the number of times they entered it. Hidden automations (the ones the app creates to add form submitters to a list) are left out. Rows are ordered by automation id. Everything comes back in one response with no links or meta: limit and offset are ignored. Only GET is allowed. Returns 404 if the contact does not exist. - Operation: retrieve-contact-automation-entry-counts - Endpoint: GET /api/3/contacts/{id}/automationEntryCounts

catalog_retrieve-contact-automation-steps

ChatGPT
Retrieve one contact's recorded steps and skip reason in an automation Recorded steps for one contact's enrollment in one automation, earliest first. When a step was skipped, skipped.reason and skipped.extra are the skip saved for that contact. This is not an account-wide total: blockEventsAggregate and skipReasonContext do not answer why this contact was skipped. Use the contact automation id from list-all-contact-automations, list-all-contactautomations-for-contact, or list-all-contactautomations-for-automation. Returns 404 when that enrollment is not in the automation. An empty steps list means nothing was logged yet; it does not explain why a contact never entered. Tags: skipped, contact skipped, skip reason - Operation: retrieve-contact-automation-steps - Endpoint: GET /api/3/automations/{seriesId}/contactAutomations/{contactAutomationId}/steps

catalog_retrieve-contact-bounce-logs

ChatGPT
Retrieve a contact's bounce logs The bounce log entries recorded for this contact, one per bounced message with its timestamp, bounce code and campaign. For every bounce log on the account, use GET /bounceLogs. Neither endpoint filters by a date range, so a bounce count for a period is not available in one request. Every entry comes back in one response: limit and offset are ignored on this path. - Operation: retrieve-contact-bounce-logs - Endpoint: GET /api/3/contacts/{id}/bounceLogs

catalog_retrieve-contact-data

ChatGPT
Retrieve a contact's data The contact's data record: one row of extra information the application keeps about the contact, mostly where the contact appears to be located. The location fields (geoIp4, geoCountry2, geo_country, geoState, geoCity, geoZip, geoLat, geoLon, geoTz, geoTzOffset, geoTstamp) are filled by a MaxMind GeoIP lookup of an IP address recorded for the contact, for example when the contact subscribes, opens or clicks a tracked email, or is added through the v1 API with an ip4 value; contact enrichment can also fill the city, state, country, country code and zip when they are blank, and sets geoTstamp when it does. The ga_campaign_*, ga_first_visit, ga_times_visited, fb_id, fb_name and tw_id fields are legacy columns that the application no longer writes. A contact has at most one data record, so the response is a single contactDatum object, not a list: limit, offset, filters and orders are ignored on this path. The record is created on demand (for example the first time a location is stored, or when the contact is personalized for a send), so a contact that has none yet returns an empty object ({}) with status 200. Values come back as strings; tstamp, geoTstamp and ga_first_visit are ISO 8601 dates or null. Returns 404 if the contact does not exist. - Operation: retrieve-contact-data - Endpoint: GET /api/3/contacts/{id}/contactData

catalog_retrieve-contact-deals

ChatGPT
Retrieve a contact's deals The deals on which this contact is the primary contact. Deals where the contact is only a secondary contact are not included; GET /contacts/{id}/contactDeals lists the contact's secondary-contact links. At most 100 deals come back and no order is guaranteed: limit, offset, filters and orders are ignored on this path, so a contact with more than 100 deals cannot be paged here. A user who is not allowed to see all deals gets only the deals they own. A deal in a pipeline the user cannot see comes back with isDisabled true and only its id, title and status. To find deals across contacts, use GET /deals, which supports filters such as filters[status], filters[stage], filters[group] and filters[owner] and orders such as orders[cdate] and orders[value]. Returns 404 if the contact does not exist. - Operation: retrieve-contact-deals - Endpoint: GET /api/3/contacts/{id}/deals

catalog_retrieve-contact-deals-list

ChatGPT
Retrieve a list of contact's deals The deals this contact is on as a secondary contact, as contact-to-deal links. Each link carries the deal id (deal), the contact id (contact), the contact's role on the deal (role, null when none) and when the link was made (cdate). Deals where this contact is the primary contact are not listed here; GET /contacts/{id}/deals returns those. Every link comes back in one response: limit and offset are ignored on this path, and no order is guaranteed. The linked deals are sideloaded in deals and their primary contacts in contacts. A user without the permission to list all deals sees only links to deals they own. Returns 404 if the contact does not exist. For deal links across contacts, or to page through them, use GET /contactDeals with filters[deal] and filters[contact]. - Operation: retrieve-contact-deals-list - Endpoint: GET /api/3/contacts/{id}/contactDeals

catalog_retrieve-contact-field-values

ChatGPT
Retrieve a contact's field values Returns every stored custom field value of one contact. The whole set is always returned: limit and offset are ignored on this endpoint. Each entry's field property is the custom field definition id; entries exist only for fields the contact has a stored value for. 404 if the contact does not exist. - Operation: retrieve-contact-field-values - Endpoint: GET /api/3/contacts/{id}/fieldValues

catalog_retrieve-contact-geo-ips

ChatGPT
Retrieve a contacts list of geo-ips The IP addresses recorded for this contact, with the campaign and message they were seen on. Each entry carries the address as a number in text form (ip4) and the id of the location it resolved to (geoAddress); links.geoAddress leads to that location. At most 100 entries are returned, in no guaranteed order; limit and offset are ignored on this path. Returns 404 if the contact does not exist. - Operation: retrieve-contact-geo-ips - Endpoint: GET /api/3/contacts/{id}/geoIps

catalog_retrieve-contact-goals

ChatGPT
Retrieve a contact's goals The automation goals this contact has reached, one entry per goal reached in one automation run. goal is the goal id, automation the automation id, and contactAutomation the id of the run (an entry of GET /contacts/{id}/contactAutomations). Every entry comes back in one response: limit and offset are ignored on this path. Returns 404 if the contact does not exist. - Operation: retrieve-contact-goals - Endpoint: GET /api/3/contacts/{id}/contactGoals

catalog_retrieve-contact-list-memberships

ChatGPT
Retrieve a contact's list memberships The lists this contact is on, one row per subscription with its status and dates. To answer how and when a contact left a list: status 2 is unsubscribed and 3 is bounced; udate is when the membership was unsubscribed or bounced and is null while it is active (a resubscribe clears it and resets sdate); unsubreason is the reason recorded with an unsubscribe, empty when none was given; sourceid says how the subscription was created (0 unknown, 1 import, 2 sync, 3 account user, 4 API, 5 form, 6 form opt-in, 7 trigger, 8 SMS, 9 automation, 10 bulk edit, 11 email, 12 Gmail). Every membership comes back in one response: limit and offset are ignored on this path. - Operation: retrieve-contact-list-memberships - Endpoint: GET /api/3/contacts/{id}/contactLists

catalog_retrieve-contact-logs

ChatGPT
Retrieve a contact's logs Log entries recorded against this contact. merge is the only action written today, recorded on the surviving contact, so most contacts have an empty list. Every entry comes back in one response: limit, offset, filters and orders are ignored on this path. Returns 404 if the contact does not exist. - Operation: retrieve-contact-logs - Endpoint: GET /api/3/contacts/{id}/contactLogs

catalog_retrieve-contact-notes

ChatGPT
Retrieve a contact's notes The notes attached to one contact. Each note carries its text, the account user who wrote it (userid), and when it was created and last changed (cdate, mdate). Every note comes back in one response, drafts included (is_draft): limit, offset, filters and orders are ignored on this path, and no order is guaranteed, so sort on cdate yourself if order matters. To add a note to a contact, use POST /contacts/{contactId}/notes (create-a-contact-note). Returns 404 if the contact does not exist. - Operation: retrieve-contact-notes - Endpoint: GET /api/3/contacts/{contactId}/notes

catalog_retrieve-contact-organization

ChatGPT
Retrieve a contacts organization The account (company) this contact belongs to, in the older organization shape: name, owner and dates. The account is found from the account id stored on the contact or, when that is not set, from the contact's account link. The response is an empty object {} when the contact has no account. This read is kept for compatibility; prefer GET /contacts/{id}/accountContacts and then GET /accounts/{id}, which also returns the account's website. Returns 404 if the contact does not exist. - Operation: retrieve-contact-organization - Endpoint: GET /api/3/contacts/{id}/organization

catalog_retrieve-contact-tags

ChatGPT
List the tags applied to a contact List the tags applied to one contact, as contact-to-tag associations. Each item's tag is the tag id (fetch the name with GET /tags/{id}, or several at once with GET /tags?ids=1,2), and its id is the association id to pass to DELETE /contactTags/{id}. Returns every association the contact has: limit and offset are ignored. Associations whose tag has since been deleted are not shown. Returns 404 if the contact does not exist. GET /contactTags?filters[subscriberid]={id} returns the same associations with paging, plus any whose tag has been deleted. To apply tags use POST /contacts/{id}/tags; to remove one use DELETE /contacts/{id}/tags/{tagId}. - Operation: retrieve-contact-tags - Endpoint: GET /api/3/contacts/{id}/contactTags

catalog_retrieve-contact-tracking-logs

ChatGPT
Retrieve a contacts tracking logs Returns every site-tracking and event-tracking log entry recorded for a contact. Each entry's id is the eventId that GET /trackingLogs/{eventId}/contact accepts; entry ids come from their own account-wide sequence and are unrelated to contact ids. The full list is returned in one response; limit and offset are ignored on this route (use GET /trackingLogs with filters[subscriberid] for a paginated listing). An entry's type is __pagevisit for a site-tracking page visit (value holds the page URL), __redir for a tracked link redirect (value holds the destination URL), or the name of an event-tracking event (value holds the event data). Entries are copied into this log when the contact's activity feed is refreshed, so events recorded moments ago may not appear yet. Returns 404 if the contact does not exist. - Operation: retrieve-contact-tracking-logs - Endpoint: GET /api/3/contacts/{id}/trackingLogs

catalog_retrieve-event-tracking-status

ChatGPT
Retrieve Event Tracking Status Get event tracking status (enabled or disabled) - Operation: retrieve-event-tracking-status - Endpoint: GET /api/3/eventTracking

catalog_retrieve-fields

ChatGPT
List contact custom fields Lists custom field definitions for contacts, 20 per page by default, ordered by ordernum then id unless an orders parameter is given. The response side-loads a fieldOptions array with the options of every returned field; ids inside it are field option ids, not field ids, and are only valid on the fieldOptions endpoints, never on /fields/{id}. A fieldRels array side-loads the fields' list relationships. Each field's own options property lists the ids of its options in the side-loaded array. Use only the query parameters documented here: unsupported filter and order fields are silently ignored, so the response looks filtered but is not. filters match exactly; use search for a partial title match. Passing any orders parameter, including an unsupported one, replaces the default ordernum ordering: when no supported orders field is given, the results come back in no guaranteed order. meta.total is the number of matching fields, returned as a string. This endpoint covers contact fields only; deal fields live under dealCustomFieldMeta and account fields under accountCustomFieldMeta. Tags: contact, contacts, field definition, custom field - Operation: retrieve-fields - Endpoint: GET /api/3/fields

catalog_retrieve-forms

ChatGPT
Retrieve a form - Operation: retrieve-forms - Endpoint: GET /api/3/forms/{id}

catalog_retrieve-goal-showcase

ChatGPT
Retrieve goal showcase How many contacts entered the goal's automation, plus the top ten tags, top ten lists and time-to-goal buckets among contacts who reached the goal. Legacy endpoint with no method guard: any HTTP method is answered the same way; GET is the documented verb and the one the app uses. - Operation: retrieve-goal-showcase - Endpoint: GET /api/3/goal/showcase

catalog_retrieve-goal-stats

ChatGPT
Retrieve goal stats Completion statistics for one automation goal, ranked against the other goals in the same automation. Legacy endpoint with no method guard: any HTTP method is answered the same way; GET is the documented verb and the one the app uses. - Operation: retrieve-goal-stats - Endpoint: GET /api/3/goal/goalStats

catalog_retrieve-inaccessible-pipelines-by-user

ChatGPT
Retrieve inaccessible pipelines by user Retrieve pipelines that given user doesn't have access to - Operation: retrieve-inaccessible-pipelines-by-user - Endpoint: GET /api/3/dealGroup/get_inaccessible_deal_groups

catalog_retrieve-list-of-all-notes

ChatGPT
Retrieve list of all notes - Operation: retrieve-list-of-all-notes - Endpoint: GET /api/3/notes

catalog_retrieve-primary-brand-kit

ChatGPT
Retrieve the primary brand kit Get the account's primary brand kit, falling back to the most recently created one if none is marked primary. Tags: AI - Operation: retrieve-primary-brand-kit - Endpoint: GET /api/3/ai/brand/primary

catalog_retrieve-segment-metadata

ChatGPT
Retrieve segment metadata Metadata for one saved segment by its UUID — the record about the segment rather than its condition definition. A 404 whose body is a data envelope means the segment does not exist; it is an empty result, not a failed call. - Operation: retrieve-segment-metadata - Endpoint: GET /api/3/segmentsV2/metadata/{segmentId}

catalog_retrieve-site-tracking-status

ChatGPT
Retrieve whether site tracking is enabled Get site tracking status (enabled or disabled) - Operation: retrieve-site-tracking-status - Endpoint: GET /api/3/siteTracking

catalog_retrieve-sms-metrics-snapshot

ChatGPT
Retrieve SMS broadcast metrics snapshot Account-wide totals for SMS broadcasts — campaigns, sends, deliveries, clicks, replies, failures and opt-outs — optionally bounded by start_date and end_date (YYYY-MM-DD). Tags: Metrics, Snapshots, Broadcasts - Operation: retrieve-sms-metrics-snapshot - Endpoint: GET /api/3/sms/broadcasts/metrics/snapshot

catalog_retrieve-variable

ChatGPT
Retrieve a Variable Retrieve an individual personalization variable - Operation: retrieve-variable - Endpoint: GET /api/3/personalizations/{variableId}

catalog_saved-responses

ChatGPT
Create a saved response - Operation: saved-responses - Endpoint: POST /api/3/savedResponses

catalog_search-content-manager-files

ChatGPT
Search the Content Manager for files Files stored in the account's Content Manager, found by title, keyword or alt text, one page at a time: 20 files by default and 40 at most, with fileCount giving how many match in all. Results are not only images: filter with mimeType or mimeTypes to keep one kind of file, or check each file's mimeType. Pass folderId to search one folder. Use sort=added,desc for newest first. Each file carries its storage key, and its address is built from baseUrl and that key together. Tags: content manager, files, images, pdf, keyword - Operation: search-content-manager-files - Endpoint: GET /api/3/content-proxy/files

catalog_send-a-campaign-test

ChatGPT
Send a test of a campaign Send a test email of a campaign message to a single address. This is the v3 equivalent of the test action of the v1 campaign_send action. The test is subject to the account's test-send limits and to sender-domain verification. Prefix the address with + to send through the regular mail server instead of the test mail server. Responses are plain text, not JSON: 200 carries test email sent, and every caller-fixable failure (over the test limit, unverified sending domain, disallowed recipient, invalid RSS feed) carries 400 with the reason. 500 means the send failed without an attributable reason. - Operation: send-a-campaign-test - Endpoint: POST /api/3/campaigns/test-send

catalog_send-a-whatsapp-template-message

ChatGPT
Send a WhatsApp Template Send a single WhatsApp message: select a template to use and call our endpoint with the recipient phone number and the variables the template needs. That's it! Tags: Templates - Operation: send-a-whatsapp-template-message - Endpoint: POST /api/3/channel/whatsapp/channels/whatsapp/template/{id}/send

copy_campaign

ChatGPT
Duplicate an existing campaign as a new draft, optionally applying changes in the same call. Returns a request_id immediately; campaign_id is null until the copy finishes — call poll_campaign_generation_status with request_id and wait for a real campaign_id before treating the copy as done. Eligibility (editor version, automation attachment, sendable state) is decided behind this call; an ineligible source campaign is reported as a not_supported outcome, not raised. Renaming vs. content changes. Pass copy_changes to apply an edit to the copy in this same call, instead of a separate edit_campaign call afterward. copy_changes only affects the copy's email content/design — to rename the copy itself (its campaign record's own name, not its subject line), call update_campaign with the new campaign_id separately.

create_contact_custom_field

ChatGPT
Create a contact custom field. Always create field options after creating fields of type "dropdown", "listbox", "radio", or "checkbox". Parameters ---------- - params: ContactCustomFieldCreateParams object containing: - field_title: Required. The custom field label (sent to the API as title). - type: Required. The type of field. Valid values: "text", "textarea", "date", "datetime", "dropdown", "listbox", "radio", "checkbox", "hidden". - descript: Optional description of the field. - perstag: Optional personalization tag name. - defval: Optional default value. - visible: Optional. Whether this field is visible in forms (0 or 1). - ordernum: Optional. The order of this field relative to others.

create_contact_field_relationship

ChatGPT
Associate a contact custom field with a contact list Parameters ---------- - params: ContactFieldRelCreateParams object containing: - relid: Required. The ID of the contact list. - field: Required. The ID of the custom field.

create_contact_tag

ChatGPT
Create a new contact tag Parameters ---------- - params: TagCreateParams object containing: - tag: Required. The name of the tag. - tagType: Optional. The type of tag. Defaults to "contact". Valid values: "contact", "template". - description: Optional. Description of the tag. Defaults to empty string.

create_custom_object_schema

ChatGPT
Create a new custom object schema in an ActiveCampaign account. Defines a new custom object type with fields, relationships, labels, and description. When to use - Create a new custom object type to model domain-specific data (e.g. orders, projects, tickets) - Define fields and relationships for a new custom object - Set up a custom object schema before creating records of that type When NOT to use - User wants to modify an existing schema — not doable via MCP - User wants to create records within a schema — use create_or_update_custom_object_record - User asks about standard objects (contacts, deals, campaigns) — use the dedicated tools Examples - "define a new custom object type called Order with a name field linked to contacts" → params={"schema":{"slug": "order", "labels": {"singular": "Order", "plural": "Orders"}, "description": "Customer orders", "fields": [{"id": "name", "labels": {"singular": "Name", "plural": "Names"}, "type": "text"}], "relationships": [{"id": "primary-contact", "labels": {"singular": "Primary Contact", "plural": "Primary Contacts"}, "namespace": "contacts", "hasMany": false}]}} - "set up a custom object schema for tracking support tickets with a title field linked to contacts" → params={"schema": {"slug": "support-ticket", "labels": {"singular": "Support Ticket", "plural": "Support Tickets"}, "description": "Support tickets", "fields": [{"id": "title", "labels": {"singular": "Title", "plural": "Titles"}, "type": "text", "required": true}], "relationships": [{"id": "primary-contact", "labels": {"singular": "Primary Contact", "plural": "Primary Contacts"}, "namespace": "contacts", "hasMany": false}]}} - "create a new custom object type linked to contacts with a notes field" → params={"schema": {"slug": "my-object", "labels": {"singular": "My Object", "plural": "My Objects"}, "fields": [{"id": "notes", "labels": {"singular": "Note", "plural": "Notes"}, "type": "text"}], "relationships": [{"id": "primary-contact", "labels": {"singular": "Primary Contact", "plural": "Primary Contacts"}, "description": "Primary contact for this object", "namespace": "contacts", "hasMany": false}]}} - "set up a custom object schema for tracking projects with a title field linked to deals" → params={"schema": {"slug": "project", "labels": {"singular": "Project", "plural": "Projects"}, "fields": [{"id": "title", "labels": {"singular": "Title", "plural": "Titles"}, "type": "text"}], "relationships": [{"id": "deal", "labels": {"singular": "Deal", "plural": "Deals"}, "namespace": "deals", "hasMany": false}]}} - "create a custom object type for tracking assets linked to accounts" → params={"schema": {"slug": "asset", "labels": {"singular": "Asset", "plural": "Assets"}, "fields": [{"id": "name", "labels": {"singular": "Name", "plural": "Names"}, "type": "text"}], "relationships": [{"id": "account", "labels": {"singular": "Account", "plural": "Accounts"}, "namespace": "accounts", "hasMany": false}]}} Constraints - The slug must be unique across the account and follow kebab-case format. - Field types include: text, textarea, number, currency, date, datetime, dropdown, multiselect. - Number fields require a scale value (decimal places, e.g. 0 for integers, 2 for decimals). - Currency fields require a defaultCurrency value (e.g. "USD", "EUR"). - Dropdown fields require options, each with an id and value (e.g. [{"id": "active", "value": "Active"}]). - At least one field must be defined. If the user has not specified any fields, ask them before proceeding. - labels (singular and plural) are required on the schema, every field, and every relationship. - Relationship namespaces must reference existing object types (e.g. 'contacts', 'accounts', 'deals'). - Exactly one relationship must be specified to link the schema to a primary object (contacts, accounts, or deals). Only one ActiveCampaign object type can be related per schema. - If the user does not specify which object type the schema should relate to, always ask first before creating the schema. Do not assume or choose a default — the relationship is a critical …

create_deal

ChatGPT
Create a new deal in ActiveCampaign. A deal represents a sales opportunity that can be tracked through a pipeline. You must associate the deal with either a contact or an account. Important — owner vs contact: The `owner and contact fields refer to completely different entities: - **owner** — an ActiveCampaign *user* (team member / sales rep) responsible for working the deal. This is **not** the customer. Obtain valid user IDs from the list_users tool or the GET /api/3/users endpoint. - **contact** — the *customer or lead* the deal is associated with. Obtain valid contact IDs from list_contacts or get_contact. Do **not** pass a contact ID as the owner; the API will reject it with "The provided owner id does not exist."` Important: To create a deal, the user requires permission to manage deals and permission to manage the pipeline the new deal belongs to.

create_deal_note

ChatGPT
Create a new note for a deal in ActiveCampaign. A deal note represents text that can be added to a deal to note important information. Important: To create a deal note, the user requires permission to manage deals and permission to manage the pipeline the deal belongs to.

create_deal_pipeline

ChatGPT
Create a new deal pipeline (dealGroup) in ActiveCampaign. A pipeline represents a customizable sales process with stages that deals move through. Pipelines allow you to organize and track sales opportunities, automate deal assignment, and manage which users and groups have access to deals. Use Cases - Create separate pipelines for different sales processes (e.g., "New Business", "Renewals", "Upsells") - Organize deals by product line, region, or business unit - Set up automated deal assignment with Round Robin or value-based distribution - Control pipeline access by assigning specific user groups Pipeline Configuration Auto-assignment options: - 0: Disabled - No automatic assignment - 1: Round Robin - Distributes deals evenly among users - 2: Deal values - Assigns based on deal value thresholds Group management: - allgroups=1: All user groups can manage this pipeline - allgroups=0: Only specified groups (in dealGroup.groups) can manage User assignment: - allusers=1: Auto-assign new deals to all users - allusers=0: Auto-assign only to specified users (in dealGroup.users) Important Notes To create a pipeline, the user requires permission to manage deals and permission to create new pipelines in ActiveCampaign.

create_deal_stage

ChatGPT
Create a new deal stage within a pipeline in ActiveCampaign. A deal stage represents a step in a pipeline that deals can move through. Call list_deal_pipelines first to find the pipeline (group) ID to assign the stage to.

create_list

ChatGPT
Create a new list in ActiveCampaign. This tool creates a new list for organizing contacts and managing email campaigns. Use this tool to create new lists for organizing contacts. Consider using list_groups() to see available groups if you want to associate the new list with a group for better organization using create_list_group_permission(). Note: For a list to be visible in the ActiveCampaign user interface for non-administrators, it may need to be associated with a user group. The AC API also requires a stringid (URL-safe list name), but this is generated automatically from the name if not provided.

create_list_group_permission

ChatGPT
Associate a list with a user group for enhanced organization and visibility. This tool creates a list group permission, which associates a specific list with a user group in ActiveCampaign. This association enables group-based permissions and makes lists visible in the appropriate sections of the ActiveCampaign interface. This is typically used after creating a list to ensure it appears in the correct sections of the ActiveCampaign interface for the appropriate user groups.

edit_campaign

ChatGPT
Apply AI-driven edits to an existing campaign. THE route whenever the change touches the campaign as a whole or its body copy: "make it more urgent", "rewrite it for autumn", "make the tone friendlier", "shorten the copy". Set `content_change=True for those. NEVER satisfy such a request through get_campaign_messages plus update_campaign_message: writing new header fields yourself leaves the email body unchanged, so the campaign still reads in the old tone while the reply claims success. update_campaign renames only and never changes content. A change scoped to the subject line, preheader or sender alone is different: this tool and get_campaign_messages + update_campaign_message are both correct there, since neither touches the body. Routes automatically — no routing choice needed: AI-generated campaigns use the layout update endpoint; all others use the XML edit endpoint. Returns the updated campaign data directly when possible. If the response has only campaign_id and request_id — no subject/title/etc. — the edit is still processing: call poll_campaign_generation_status with request_id and wait for the full result before telling the user the edit is done. WORKFLOW: 1. If swapping images, call search_content_manager_images first and pass URLs as images. 2. Set the change flags (content_change, subject_change`, etc.) that match the edit intent. 3. Call this tool. Images are only applied on the layout path (AI-generated campaigns).

generate_campaign

ChatGPT
Create a new AI-generated email campaign from a text prompt. Do not call until the user has confirmed both which images to include (L1) and which brand kit to apply (L2) on the layout path. Ask both in one message and wait; picking either on the user's behalf is wrong even when generation succeeds. They are the ONLY questions ever asked. Everything the generator produces itself — the campaign name, subject, headline, body copy, offer, discount, dates, urgency, tone, CTA — is NEVER asked about, however sparse the prompt: "Create a campaign about our summer sale." is already complete. The moment images and brand kit are known the next action is this call — exactly once, never another question, and never `update_campaign afterwards: this tool names the campaign itself. NEVER retry after this tool has been called — generation is not idempotent and a repeat call can create a duplicate campaign. On any failure, surface it and tell the user to check ActiveCampaign before starting another generation. NOT for copy or edit workflows — use copy_campaign or edit_campaign. This tool rejects the edit arguments content_change, subject_change and preheader_change: those belong to edit_campaign. ACCOUNT CONTEXT — never browse for it: Do NOT call list_contacts, list_campaigns, or list_lists to gather background context for generation — those tools render full interactive apps. When past campaigns or audience details genuinely affect the request, call get_campaign_generation_context instead. Use the interactive list tools only when the user asked to browse data or must make a visible selection. ROUTE FIRST — before any other action: - User wants to copy, duplicate, or clone an existing campaign **unchanged** → copy_campaign (pass source campaign ID as (past campaign id: NUMBER)). A bare copy_campaign is correct only for "copy"/"duplicate"/"clone" with no qualifier beyond a new name. - User wants a campaign "like"/"similar to"/"based on" an existing one **with any change of topic, tone, season, product or audience** (e.g. "like my Summer Sale campaign but for autumn") → this is NOT a bare copy. Either call this tool for a fresh campaign, or call copy_campaign and then edit_campaign on the returned campaign_id with content_change=True to rewrite the copy for the new topic. update_campaign only renames — a rename never satisfies a content change, and reporting success after renaming alone is wrong. - User wants to edit/update an existing campaign → edit_campaign. - User picks or names a specific template → **TEMPLATE PATH** (go to T1). - All other "create new" requests → **LAYOUT PATH** (go to L1). LAYOUT PATH — complete all three steps, confirm each with user, then call: L1. IMAGES (REQUIRED — never skip for layout creation): Call search_content_manager_images with a keyword from the campaign topic. Present image names and thumbnails; ask user which to include (max 7). Zero results → call again with query="" limit=10; show recent uploads; ask. Duplicate filenames → STOP; show each as [filename](url) (added date); end with "Please select which image you'd like to use."; wait for the selection. Position: "main" = hero slot, "random" = engine places it. Nothing else. L2. BRAND KIT (REQUIRED — always fetch, always confirm): Call list_brand_kits; present every kit, recommend the is_primary=True one and ask the user to confirm. Pass the confirmed uuid as brand_kit_id. L3. URL CLASSIFICATION (automatic — only intervene on ambiguity): Pass the user's prompt verbatim — URL detection is automatic from prompt content. If user provides ONLY a URL with no other context → ask: "Should I write the email based on this page's content, or use this link for the button?" Content URL (product page, article, landing page to pull copy from) → call summarize_url; pass returned summarization_uuid to this tool. CTA-only URL (button destination, no content to extract) → pass directly as cta_url; skip summarize_url`. No URL in prompt → s…

get_campaign

ChatGPT
Retrieve a single campaign by ID.

get_campaign_editor_markup

ChatGPT
Retrieve uncompiled editor HTML and CSS for a campaign message. For MCP Apps campaign preview: returns the Stripo editor markup (`html + css) so the UI can compose a browser preview that preserves @media` rules. Prefer this over the compiled message body for preview.

get_campaign_email_clients

ChatGPT
Report which email clients a campaign's recipients used. Each entry pairs a client name with the number of unique contacts counted under it. `source="open" is the narrower set: for the same campaign its counts never exceed those of source="all". Neither is a count of everyone the campaign was sent to — a campaign sent to 958 contacts with 4 recorded opens reports 5 contacts here. When to use - User asks which email clients, apps, or devices opened a campaign - User wants an email-client or device breakdown for one campaign - User asks how many contacts read a campaign in a named client When NOT to use - Campaign performance metrics (sends, opens, clicks, bounces, and their rates) — use run_campaign_performance_report - Geography, clicked links, or per-subscriber engagement — use run_campaign_performance_report - Email clients across several campaigns at once — this reports ONE campaign; call it per campaign rather than expecting an account-wide total - Campaign records without metrics (name, status, schedule) — use list_campaigns Examples - "which email clients opened campaign 21?" → params={"campaign_id": 21, "source": "open"} - "email client breakdown for campaign 86211" → params={"campaign_id": 86211} - "include everything recorded for campaign 21, not just opens" → params={"campaign_id": 21, "source": "all"} - "what email apps did people use for my July Newsletter?" → resolve the campaign id with list_campaigns first, then params={"campaign_id": <id>, "source": "open"} Constraints - campaign_id is required and numeric. If the user names a campaign instead, resolve the id with list_campaigns first — do not guess it. - source accepts only "all" or "open". It defaults to "all"; prefer "open" when the user's question is specifically about opens. - Returns the campaign's full set of clients. There is no pagination and no way to filter, sort, or limit the result — do not offer those. - Entries arrive ordered by uniqueContacts descending, so the first is the most used client. - Client names come from recipient user agents and are free-form: some carry a version, some name a browser or HTTP library rather than a mail client, and opens that could not be attributed are reported under an empty name. Report them as given rather than reinterpreting, renaming, or dropping them — the unattributed group is frequently the largest. - An empty emailClients` list means the campaign has no email-client data for that source. That is a valid answer, not an error, and not a reason to retry or to switch source. - Counts here do not reconcile with the send or open totals on the campaign record; do not present one as a check on the other, and never describe these counts as a share of the campaign's recipients.

get_campaign_generation_context

ChatGPT
Fetch compact background account context — recent campaigns and/or contact-list audiences — while preparing a generate_campaign or edit_campaign prompt (for example, matching an existing campaign's tone, or checking which audiences exist). Renders no UI component: use this instead of list_campaigns or list_lists whenever the goal is background context, not letting the user browse or pick from a list. Request only the categories you need via include. A failed category is reported in unavailable and never blocks the other requested category.

get_campaign_history

ChatGPT
Report what has changed on a campaign, in the words recorded at the time. Answers immediately — there is no run to poll and nothing is charged. Call this before restore_campaign_version when the user names a version ("go back to 2"): the numbers in the listing are what restore_campaign_version accepts. Pass both from_version and to_version to compare two versions instead of listing all of them.

get_campaign_messages

ChatGPT
Retrieve messages for a campaign. Returns each message's `subject, preheader_text, fromname, and fromemail. Pass include_body=True or include_text=True to also fetch the HTML or plain text content when you need to read or edit it. Use to inspect current message content or to obtain message_id before calling update_campaign_message`.

get_contact

ChatGPT
Retrieve a single contact by ID.

get_contact_automation

ChatGPT
Retrieve a specific contact automation record by ID. This provides detailed information about a specific automation run for a contact, including status, progress, completion details, and timing information. Parameters ---------- - contact_automation_id: The ID of the contact automation record to retrieve

get_contact_custom_field

ChatGPT
Get a contact custom field by ID Parameters ---------- - field_id: The ID of the custom field to retrieve

get_contact_field_value

ChatGPT
Get a contact custom field value by ID Parameters ---------- - field_value_id: The ID of the field value to retrieve

get_contact_field_values

ChatGPT
Get all custom field values for a specific contact.

get_contact_list_memberships

ChatGPT
Get all list memberships for a specific contact.

get_contact_score_values

ChatGPT
Retrieve all score values for a specific contact id. Returns a list of scoreValue objects representing each scoring rule applied to the contact and the resulting numeric score value.

get_contact_tags

ChatGPT
Get all tags assigned to a specific contact by ID or email (not both). By email: returns full tag objects (name, description, subscriber count) alongside contactTag records. By contact_id: returns contactTag records with tag ID only.

get_deal

ChatGPT
Retrieve a single deal by ID. Note: if the user lacks pipeline permission, returns id/title/isDisabled=true only.

get_deal_pipeline

ChatGPT
Retrieve a deal pipeline (dealGroup) by ID from ActiveCampaign. Returns the full pipeline configuration including title, currency, stages, auto-assignment settings, and associated users and groups.

get_deal_stage

ChatGPT
Retrieve a single deal stage by ID from ActiveCampaign.

get_list

ChatGPT
Retrieve a single list by ID from ActiveCampaign. This tool fetches detailed information about a specific list, including all configuration settings, tracking options, and metadata.

get_profile

ChatGPT
Return the ActiveCampaign profile represented by this request's authenticated credentials. The opaque id is unique within this app and remains unchanged across token refresh, reconnection, and display-metadata changes. This identifies the connected account only; it returns no contact, deal, campaign or list data, so never call it to answer a question about those.

get_tag

ChatGPT
Get a tag by ID Parameters ---------- - tag_id: The ID of the tag to retrieve

get_top_contacts

ChatGPT
Retrieve top contacts by legacy cumulative activity. Use this tool for "top contacts" or "most active contacts." The API supplies a legacy cumulative activity ordering; it is neither recency nor configured contact score. Filtering and date bounds are unsupported. Do not use this tool for "most engaged," date-bounded engagement, or campaign engagement requests. Reject those requests without calling this tool.

is_phone_only_contacts_enabled

ChatGPT
Check if the phone only contact setting is enabled for this ActiveCampaign account. Remember this in current context. Do NOT offer the user to turn it on.

list_automations

ChatGPT
List automations from ActiveCampaign with filtering and pagination. Automation records include basic metadata. With enhance=true, records also include block definitions, goals, linked campaigns, contact counts, and labels. Filtering and sorting BY completion rate or active-contact count is NOT supported. When to use - User asks to browse, view, or list automations - User needs automations filtered by name, status, tag, trigger type, or label - User wants automations sorted by entry count (contacts who entered) Tip: to see which contacts are active in ONE specific automation, call list_contact_automations with filters.seriesid=<id> and filters.status=1. When NOT to use - User asks for completion rate, active-contact percentage, or asks to SORT/RANK automations by those metrics (e.g., "automation with highest completion rate") — REJECT without calling this tool. Suggest: "I can show automations sorted by total entries [entered] or filtered by name — want that?" - User asks to filter by completion rate, active-contact count, or any property not in Supported filters — REJECT. State: filters support filters.name, filters.status, filters.ids, filters.tag, filters.triggers, filters.actions, filters.label_name, label (folder ID), search, active, has_message. - User asks to sort by a field not in Supported sort fields — REJECT. State: sort supports name, status, entered, cdate, mdate, revisions. - You already called this tool this turn — REJECT a second call. State the limitation. Do NOT retry with different params to explore. Supported filters (exhaustive) - filters.name: partial match on automation name - filters.status: 1=active, 2=inactive - filters.ids: comma-separated automation IDs - filters.tag: tag ID - filters.triggers: comma-separated trigger types - filters.actions: comma-separated action block types - filters.label_name: by label name - label: folder/label ID (integer) - search: partial name match - active: true=active only, false=inactive only - has_message: boolean flag Supported sort fields name, status, entered (contacts-entered count), cdate, mdate, revisions Examples — SUPPORTED - "Active automations" → active=true - "Automations named 'welcome'" → filters.name="welcome" - "Most-entered automations" → orders={"entered": "DESC"} - "Automations with tag 42" → filters.tag=42 - "Automations sorted by creation date" → orders={"cdate": "DESC"} - "Automation details with counts and blocks" → enhance=true Examples — UNSUPPORTED (REJECT) - "Automations with completion rate above 50%" — completion rate is not a filter - "Automations with more than 100 active contacts" — active-contact count is not a filter

list_brand_kits

ChatGPT
List the account's available brand kits. Informational only: brand is resolved automatically for every generation and edit. generate_campaign/edit_campaign still accept a brand_kit_id param for backward compatibility, but it has no effect — there is no way to force a specific kit. Use to show a user what will be applied, or to browse before asking the account owner to change their primary kit elsewhere.

list_campaign_runs

ChatGPT
List this account's recent generate/edit/copy runs, newest first. Use to recover a request_id lost from an earlier turn, or to tell which run a handle refers to before polling it. Reports what was started, not the outcome — call poll_campaign_generation_status with a listed request_id for that. Answers immediately: nothing is charged.

list_campaign_templates

ChatGPT
Search or list the account's saved campaign templates. Returns template objects keyed by id. Pass a returned integer id to generate_campaign as template_id to build a campaign based on that template — this call is optional, not a prerequisite. Call with an empty query to list the most recently modified templates, or a partial name to filter by name.

list_campaigns

ChatGPT
List campaigns from ActiveCampaign with filtering and pagination. Campaign records include performance data per campaign (opens, uniqueopens, linkclicks, uniquelinkclicks, hardbounces, softbounces, unsubscribes). Filtering and sorting BY those values is NOT supported. When to use - User asks to browse, view, or list email/SMS campaigns - User needs campaigns filtered by status, type, name, list, or automation flag - User wants performance data for a set of campaigns (returned per record) When NOT to use - User asks for the BEST/WORST campaign or asks to SORT/FILTER by open rate, click rate, or any performance metric — REJECT without calling this tool. Performance data is in records but cannot be used to filter or sort. Suggest: "I can show your completed campaigns sorted by send date — want that?" - User asks to FILTER by open rate, click rate, revenue, or any performance threshold — REJECT. State: filters support status, type, name, list_id, seriesid, label_name, has_message, has_message_content, has_form, excludeTypes. No performance-metric filter. - User asks to SORT by open rate, click rate, or any field not in Supported sort fields — REJECT. State: sort supports sdate, mdate, ldate, status. - You already called this tool this turn — REJECT a second call. State the limitation. Do NOT retry with different params to explore. Supported filters (exhaustive) - status: "drafts"/"scheduled"/"currently-sending"/"paused"/"stopped"/"complete"/ "disabled"/"pending-review"/"determining-winner" - filters.type: "single"/"recurring"/"split"/"responder"/"reminder"/"special"/ "activerss"/"text" - filters.name: partial match on campaign name - filters.list_id: by list ID - filters.seriesid: by automation/series ID - filters.label_name: by label - filters.automation: boolean flag - has_message, has_message_content, has_form: boolean flags - excludeTypes: comma-separated campaign types to exclude Supported sort fields sdate (scheduled date), mdate (modified date), ldate (last-sent date), status Examples — SUPPORTED - "Scheduled campaigns" → status="scheduled" - "Completed email campaigns" → status="complete", filters.type="single" - "Campaigns named 'summer'" → filters.name="summer" - "Most recently sent campaigns" → orders={"ldate": "DESC"} Examples — UNSUPPORTED (REJECT) - "Best-performing campaign" — no sort field for opens, clicks, or any metric - "Campaigns with open rate above 30%" — open rate threshold is not a filter

list_contact_activities

ChatGPT
List activities for a specific contact. Returns a chronological log of actions and events associated with a contact, such as email interactions, list subscriptions, automation steps, deal tasks, SMS messages, link clicks, and eCommerce order events. A contact ID is required. This endpoint does not support multiple contact IDs in a single call.

list_contact_automations

ChatGPT
List automation run records — which contacts entered which automations. Use to answer: "which automations did contact X go through?" or "which contacts went through automation Y?". Filter by seriesid (automation ID) or subscriberid (contact ID) to scope results. Supported filters (exhaustive) filters.seriesid (automation ID), filters.subscriberid (contact ID), filters.adddate (date, with eq/gt/gte/lt/lte operators), filters.status (1=in progress/2=completed), filters.lastblock (step ID), q (text search), min_time/max_time (seconds in automation), tags (tag IDs), lists (list IDs), g_id (goal ID), g_status (0=incomplete/1=complete) Supported sort fields seriesid, adddate, status, lastblock, subscriberid, name, first_name, last_name, email, cdate, score, goal_completion

list_contact_custom_fields

ChatGPT
List all contact custom field definitions (schema lookup, not per-contact values). Use to look up custom field names, IDs, and types. To get values for a specific contact, use get_contact_field_values instead.

list_contact_field_values

ChatGPT
List all contact custom field values Parameters ---------- - params: ContactFieldValueListParams object containing: - filters: Optional dictionary to filter by fieldid conditions (e.g., {"fieldid": 123}) - limit: Number of results to return - offset: Offset for pagination

list_contacts

ChatGPT
List contacts from ActiveCampaign with filtering and pagination. Reads one page of the account's contact records, each carrying its id, email, phone, first and last name, status, score and created/updated dates — the stored fields of a contact, never aggregate or activity metrics. Combine the filters and sort fields listed below; anything absent from those two lists is absent from this tool. Returns 20 records per page unless `limit says otherwise, with meta.total for the full match count and offset to page on, so a count alone costs one call at limit=1. When to use - User asks to browse, view, or list contacts - User needs contacts filtered by email, phone, tag, list, segment, status, or date - User wants contacts sorted by ID, created date, email, first/last name, or score Supported filters (exhaustive) - email_like: email contains this string - phone: phone starts with this value - search: partial match across name, email, phone - listid: subscribed to this list ID (use list_lists to look up IDs) - tagid: has this tag ID assigned - segmentid, formid, seriesid, waitid: by segment / form / automation / wait ID - status: ACTIVE=1, UNCONFIRMED=0, UNSUBSCRIBED=2, BOUNCED=3, ANY=-1 - filters.created_before / created_after / updated_before / updated_after: ISO 8601 Supported sort fields id, cdate (created date), email, first_name, last_name, name, score When NOT to use - User asks for a COUNT, AGGREGATE, or wants to SORT by an unsupported property (e.g., "how many contacts have more than 5 tags?", "contacts sorted by number of tags", "contacts in California") — REJECT without calling this tool. Tag count and location are not filterable or sortable. Suggest: "I can list contacts filtered by tag ID or sorted by score — want that?" - User asks to filter by city, birthdate, organization, custom field value, email open rate, or any property not listed in Supported filters above — REJECT. State: filters support email_like, phone, search, listid, tagid, segmentid, formid, seriesid, waitid, status, and date ranges (created/updated before/after). - User asks for "most active" contacts — use get_top_contacts` instead. - User asks to sort by "most tagged", "most recently updated", or any field not listed in Supported sort fields above — REJECT. State: sort supports id, cdate, email, first_name, last_name, name, score. - You already called this tool this turn — REJECT a second call. State the limitation. Do NOT retry with different params to explore. Examples — SUPPORTED - "Contacts on list 5" → listid=5 - "Phone starts with 555" → phone="555" - "Highest-scoring contacts" → orders={"score": "DESC"} - "Most recently created contacts" → orders={"cdate": "DESC"} - "Active contacts sorted by email" → status=ACTIVE, orders={"email": "ASC"} - "Contacts created last month" → filters={"created_after": "2024-04-01", "created_before": "2024-05-01"} - "Total contact count" → limit=1, read meta.total Examples — UNSUPPORTED (REJECT) - "Contacts with the most tags" — tag count is not a sort or filter field - "Contacts subscribed to most lists" — subscription count is not a sort field; REJECT without calling any tool - "Contacts who opened the last campaign" — email open activity is not a filter - "Contacts in California" — location/city is not a filter - "Most engaged contacts" — engagement score is not a sort field

list_custom_object_records

ChatGPT
List records for a given custom object schema in an ActiveCampaign account. Returns records with their field values, relationships, and timestamps. When to use - Retrieve records belonging to a specific custom object type - Browse or paginate through custom object data - Filter records by their relationship to a contact, account, or deal - Filter records by field values - Inspect field values stored in custom object records When NOT to use - User wants to list custom object schemas (types) — use list_custom_object_schemas - User wants to create or update a record — use create_or_update_custom_object_record - User asks about standard objects (contacts, deals, campaigns) — use the dedicated tools Examples - "show me all records for schema abc-123" → schema_id="abc-123", params={"limit": 100} - "list the first 10 records of custom object order" → schema_id="order", params={"limit": 10} - "get records for schema abc-123 linked to contact 42" → schema_id="abc-123", params={"filters": {"relationships.primary-contact": {"eq": "42"}}} - "get records for schema abc-123 linked to deal 7" → schema_id="abc-123", params={"filters": {"relationships.deal": {"eq": "7"}}} - "get records for schema abc-123 linked to account 15" → schema_id="abc-123", params={"filters": {"relationships.account": {"eq": "15"}}} - "find order records where city is Tulsa" → schema_id="order", params={"filters": {"fields.shipping-address-city": {"eq": "Tulsa"}}} - "find project records where budget is $10" → schema_id="projects", params={"filters": {"fields.budget.value": {"eq": "10"}}} - "find project records where currency is USD" → schema_id="projects", params={"filters": {"fields.budget.currency": {"eq": "USD"}}} - "show me the next page of records" → schema_id="abc-123", params={"limit": 100, "offset": 100} - "list records sorted by newest first" → schema_id="abc-123", params={"orders": {"createdTimestamp": "DESC"}} - "list records ordered by a custom field" → schema_id="abc-123", params={"orders": {"fields.my-field": "ASC"}} Constraints - Maximum 100 results per request (default 20). Use limit/offset for pagination. - The schema_id can be either the schema UUID or its slug. - Supported filter keys: - 'relationships.<relationship-id>' with operator 'eq' and the related object's ID as value. Common relationship IDs: 'primary-contact', 'account', 'deal'. - 'fields.<field-id>' with operator 'eq' and the field value to match. Currency fields require a suffix: use 'fields.<field-id>.value' to filter by amount or 'fields.<field-id>.currency' to filter by currency code. Currency values are stored as decimal strings (e.g. "10" or "10.50" for $10.50) — NOT in cents. - Supported order keys: 'createdTimestamp', 'fields.<field-id>'. Values: 'ASC' or 'DESC'. - All filters are AND-combined. - Non-admin users must include at least one relationship filter (primary-contact, account, or deal). Calling without a relationship filter is only permitted for admin users and returns a 403 otherwise.

list_custom_object_schemas

ChatGPT
List all custom object schemas in an ActiveCampaign account. Returns schema definitions including fields, relationships, labels, and visibility. When to use - Discover what custom object types exist in the account - Inspect field definitions or relationships of custom object schemas - Retrieve schema IDs or slugs for further custom object operations - Check whether a specific custom object type has been created - Find schemas that have a relationship with contacts, accounts, or deals - Find child schemas of a given parent schema When NOT to use - User asks about standard objects (contacts, deals, campaigns) — use the dedicated tools - User wants to list records within a custom object — list_custom_object_records Examples - "what custom objects do I have?" → params={} - "show me all custom object schemas" → params={} - "list custom objects sorted by creation date" → params={"orders": {"createdTimestamp": "DESC"}} - "find custom object with slug my-schema" → params={"filters": {"slug": {"eq": "my-schema"}}} - "find custom objects whose slug contains order" → params={"filters": {"slug": {"contains": "order"}}} - "show me the first 5 custom object types" → params={"limit": 5} - "find custom objects linked to contacts" → params={"filters": {"relationships.id": {"eq": "primary-contact"}, "relationships.namespace": {"eq": "contacts"}}} - "find custom objects linked to accounts" → params={"filters": {"relationships.id": {"eq": "account"}, "relationships.namespace": {"eq": "accounts"}}} - "find custom objects linked to deals" → params={"filters": {"relationships.id": {"eq": "deal"}, "relationships.namespace": {"eq": "deals"}}} - "find child schemas of schema abc-123" → params={"filters": {"parentId": {"eq": "abc-123"}}} - "find custom objects whose description contains orders" → params={"filters": {"description": {"contains": "orders"}}} Constraints - Maximum 100 results per request (default 20). Use limit/offset for pagination. - Pass showFields=all to include deleted fields (status 'marked_for_deletion'). - Supported filter keys: 'slug' (operators: eq, contains), 'description' (operators: eq, contains), 'relationships.id' (operators: eq, values: 'primary-contact', 'account', 'deal'), 'relationships.namespace' (operator: eq; values: 'contacts', 'accounts', 'deals'), 'parentId' (operators: eq, contains). All filters are AND-combined. - 'relationships.id' and 'relationships.namespace' must always be provided together. - Order keys: 'createdTimestamp'. Values: 'ASC' or 'DESC'.

list_deal_activities

ChatGPT
List all deal activities from ActiveCampaign with filtering and pagination options.

list_deal_pipelines

ChatGPT
List deal pipelines from ActiveCampaign with filtering and pagination. Returns basic pipeline info only: ID, title, currency, stage IDs. Only one filter (title) and one sort field (title) are supported. When to use - User asks to browse, view, or list sales pipelines - User needs pipeline IDs to pass to list_deals (filters.group) - User needs to find a pipeline by name When NOT to use - User asks for pipeline performance (win rate, avg deal value, deal count) or asks to SORT/RANK pipelines by those metrics (e.g., "pipeline with the most deals") — REJECT without calling this tool. Records contain ID/title/currency/stage IDs only. Suggest: "I can list pipelines; then you can query deals filtered by pipeline ID — want that?" - User asks to filter by anything other than title — REJECT. State: only filters.title (partial match) is supported. - User asks to sort by anything other than title — REJECT. State: only title sort (ASC/DESC) is supported. - You already called this tool this turn — REJECT a second call. State the limitation. Do NOT retry with different params to explore. Supported filters (exhaustive) - filters.title: partial match on pipeline title (only filter available) Supported sort fields title (ASC or DESC only) Examples — SUPPORTED - "All pipelines" → no filters needed - "Pipeline named 'Enterprise'" → filters.title="Enterprise" - "Pipelines sorted A-Z" → orders={"title": "ASC"} Examples — UNSUPPORTED (REJECT) - "Pipeline with the most deals" — deal count is not returned or sortable - "Best-performing pipeline" — no performance metrics in records

list_deal_stages

ChatGPT
List deal stages — use to resolve a stage name to its ID before updating a deal. When the user refers to a stage by name (e.g. "Enquiry", "Nurture"), call this ONCE to look up the ID, then pass that ID to update_deal. Filter by d_groupid to scope results to a specific pipeline.

list_deals

ChatGPT
List deals from ActiveCampaign with filtering and pagination. Deal values are in cents (minimum_value=500000 = $5,000). Returns raw deal records only — no aggregate metrics (total value, average size, win rate) computed across records. When to use - User asks to browse, view, or list deals/sales opportunities - User needs deals filtered by status, pipeline, stage, owner, value range, score, tag, organization, or date When NOT to use - User asks for total deal value, average deal size, win rate, or any aggregate metric — REJECT without calling this tool. Suggest a specific supported slice instead, e.g. "I cannot compute totals, but I can show your open deals sorted by value — want that?" - User asks to sort by a field not in Supported sort fields — REJECT. State: sort supports title, value, cdate, contact_name, organization_name, next_action. - You already called this tool this turn — REJECT a second call. State the limitation. Do NOT retry with different params to explore. Note: deals in pipelines the user lacks permission on return id/title/isDisabled=true only. Supported filters (exhaustive) - filters.status: 0=Open, 1=Won, 2=Lost - filters.group: pipeline ID (use list_deal_pipelines to look up) - filters.stage: stage ID (use list_deal_stages to look up) - filters.owner: user ID - filters.tag: tag ID (-1=any tag, -2=no tag) - filters.organization: organization ID - filters.minimum_value / filters.maximum_value: deal value range (in cents) - filters.score / filters.score_greater_than / filters.score_less_than: deal score - filters.created_before/created_after/updated_before/updated_after: ISO 8601 - filters.nextdate_range: "upcoming"/"scheduled"/"overdue"/"no-task" (task due dates) - filters.tasktype: task type ID (1=Call, 2=Email, 3=Meeting) - filters.search + filters.search_field: text in "all"/"title"/"contact"/"org" - filters.title: title match Supported sort fields title, value, cdate (created date), contact_name, organization_name, next_action Examples — SUPPORTED - "Open deals" → filters.status=0 - "Won deals this month" → filters.status=1, filters.created_after="2024-05-01" - "Deals in pipeline 3 sorted by value" → filters.group=3, orders={"value": "DESC"} - "Most valuable deals" → orders={"value": "DESC"} - "Deals worth over $5,000" → filters.minimum_value=500000 - "Deals with overdue tasks" → filters.nextdate_range="overdue" - "My deals" → filters.owner=<user_id> Examples — UNSUPPORTED (REJECT) - "Total value of all open deals" — aggregate; REJECT, suggest "I can show open deals sorted by value — want that?" - "Win rate by pipeline" — aggregate; REJECT, suggest "I can show won deals in that pipeline sorted by value — want that?"

list_email_activities

ChatGPT
List email activities from ActiveCampaign. For best results, only single records should be requested rather than running the call unfiltered. Parameters ---------- - params: EmailActivityListParams object containing: - limit: Optional number of results to return - offset: Optional offset for pagination - orders: Optional dictionary for ordering results by specific fields. Valid fields are: "subscriberid", "fieldid", "tstamp", "id" - subscriberid is a contact id Example: {"tstamp": "DESC"} to sort by timestamp descending - filters: Optional dictionary for filtering by specific fields. Valid filters are: "subscriberid", "fieldid" Example: {"subscriberid": 1641} or {"subscriberid": "1641"} to filter by subscriber ID

list_groups

ChatGPT
List all user groups from ActiveCampaign. This tool is essential for list management workflows as it provides the available groups that can be associated with lists. When creating a new list, you must assign it to a group for it to be visible in the ActiveCampaign user interface.

list_lists

ChatGPT
List contact lists (audiences) from ActiveCampaign with filtering and pagination. Records include active_subscribers count per list. Sorting by active_subscribers IS supported. Engagement metrics are NOT included and cannot be filtered or sorted by, as counts or as rates: no list record carries opens, clicks, bounces or unsubscribes, and no other tool reports them per list. When to use - User asks to browse, view, or list email or SMS contact lists - User needs list IDs to pass to list_contacts (listid param) - User wants lists sorted by name, creation date, or subscriber count When NOT to use - User asks for engagement metrics (opens, clicks, bounces, unsubscribes, or their rates) or asks to RANK or SORT lists by those — as a count ("which list has the most unsubscribes", "list with most clicks") or as a rate ("lists sorted by unsubscribe rate") — REJECT without calling this tool. Records include active_subscribers only, so calling this tool cannot confirm or deny the metric. Suggest: "I can show lists sorted by active subscriber count — want that?" - User asks to filter by anything not in Supported filters — REJECT. State: filters support name, id, channel, userid, created_timestamp, active_subscribers. - You already called this tool this turn — REJECT a second call. State the limitation. Do NOT retry with different params to explore. Supported filters (exhaustive) - filters.name: partial match on list name - filters.id: exact list ID - filters.channel: "email" / "sms" / "all" - filters.userid / filters.userid[]: filter by creator user ID - filters.created_timestamp: filter by creation date - filters.active_subscribers: filter by exact active subscriber count Supported sort fields name (ASC/DESC/weight), id, channel, userid, created_timestamp, active_subscribers Examples — SUPPORTED - "All email lists" → filters.channel="email" - "List named 'newsletter'" → filters.name="newsletter" - "Lists sorted by subscriber count" → orders={"active_subscribers": "DESC"} - "Lists created after 2024-01-01" → filters.created_timestamp="2024-01-01" - "Largest lists first" → orders={"active_subscribers": "DESC"} Examples — UNSUPPORTED (REJECT) - "Lists with open rate above 25%" — open rate is not in records; REJECT - "Lists sorted by unsubscribe rate" — unsubscribe rate is not a sort field; REJECT - "Which of my lists has the most unsubscribes?" — unsubscribe counts are not in records and run_campaign_performance_report reports per campaign, not per list; REJECT without calling this tool

list_tags

ChatGPT
List, search, and filter tags Parameters ---------- - params: TagListParams object containing: - search_filters: Dictionary of operators and values to filter tags by name Valid operators: "eq", "neq", "lt", "lte", "gt", "gte", "contains", "starts_with" Example: {"contains": "lead"} to find tags containing "lead" - order_method: How to order results - "weight", "asc", or "desc" - weight: Exact matches first, then matches starting with search term, then others - asc/desc: Ascending or descending alphabetical order - limit: Number of results to return (default 100) - offset: Offset for pagination

poll_campaign_generation_status

ChatGPT
Report a campaign-generation run's progress, or its finished outcome. Call repeatedly with the request_id returned by generate_campaign, edit_campaign, or copy_campaign, until phase is complete or cancelled. Every non-success outcome — needs_input, busy, nothing_changed, nothing_saved, not_editable, not_supported, partial_success, unconfirmed, failed, not_enabled, unrecognized, unavailable — is reported here, never raised. Campaign persisted invariant. Read campaign_persisted before deciding what to do next: when it is true, a campaign already exists for this run — never call generate_campaign or copy_campaign again for it, whatever outcome says; that bills the account a second time. For any further change to this same campaign (a different image, tone, or setting), call edit_campaign with its campaign_id instead — that is the correct next call, not a repeat of the one that produced it. retryable says whether re-sending the same request is worth it, and is never true while campaign_persisted is true. Answer a needs_input outcome with an ordinary follow-up generate_campaign or edit_campaign call using the clarified request; there is no separate resume tool.

redo_campaign_version

ChatGPT
Bring an undone campaign change forward one version, or to a specific version from its history. Answers immediately and is NOT charged — a version move travels through work already paid for. This is the tool for every redo and "bring that back" — never edit_campaign for this: an edit rebuilds the campaign and bills for it, and produces different markup than the change that was undone. Omit version to step forward one change; pass a number only if it came from get_campaign_history's output.

restore_campaign_version

ChatGPT
Undo a change to a campaign, or put it back to a version from its history. Answers immediately and is NOT charged — a version move travels through work already paid for. This is the tool for every undo, revert, or "go back to version N" — never edit_campaign for this: an edit rebuilds the campaign and bills for it. Omit version to step back one change; pass a number only if it came from get_campaign_history's output.

run_campaign_performance_report

ChatGPT
Run a campaign/contact performance reporting query. When to use - User asks for campaign performance metrics: sends, opens, clicks, bounces, unsubscribes, open rate, click rate, click-to-open rate - User wants to rank or compare campaigns by a performance metric - User asks for geo breakdowns, clicked links, or per-subscriber engagement for a campaign When NOT to use - Campaign records WITHOUT metrics (name, status, schedule) — use list_campaigns - Browsing contacts by tag/list/status — use list_contacts - Automation performance — automation metrics are not an available dataset; REJECT and state the limitation Datasets (module → explore) - contacts → clicked_contacts (contacts who clicked) - campaigns → all_campaigns_performance (per-campaign totals and rates), campaign_geo (geography), engagement_slice (engagement), individual_campaign, link_clicks (clicked links), subscriber_page (per-subscriber), split_campaign_messages - These are the ONLY explores the API accepts — do not guess other names - Email clients for a campaign are NOT an explore here — use get_campaign_email_clients instead - Request only the columns you need; the engine's fixed column requirements are satisfied automatically and result rows contain only the requested columns Examples — SUPPORTED - "How did my campaigns perform in June?" → explore=all_campaigns_performance, columns=[campaign_name, total_sends, open_rate, click_rate], params={"view_distinct_campaigns_event_date_start": "2025-06-01", "view_distinct_campaigns_event_date_end": "2025-06-30"} (dates are inclusive; the end date covers events through its end of day) - "5 worst campaigns by bounce rate" → columns=[campaign_name, bounce_rate], sorts=[{"column": "bounce_rate", "order": "DESC"}], limit=5 - "Campaigns named 'welcome' with 50+ sends" → filter={"booleanCriteria": "AND", "filters": [{"filterModel": {"column": "campaign_name", "operator": "CONTAINS", "value": "welcome"}}, {"filterModel": {"column": "total_sends", "operator": "GTE", "value": "50"}}]}

search_content_manager_images

ChatGPT
Search the account's content manager for images by keyword. Expands the query with singular and plural variants for broader coverage. Returns each image's name, dimensions, upload date, and URL (for display only — never pass it to generate_campaign or edit_campaign). Pass a returned name to generate_campaign or edit_campaign in image_references once the user picks one. generate_campaign's own image-decision rule governs whether this call is required before that — do not treat image_search_terms as a way to skip it without the user actually having handed off the choice. If the search returns 0 images, call again with an empty query and limit=10 to retrieve the most recent uploads as suggestions.

summarize_url

ChatGPT
Deprecated for a campaign's page URL — do not call this when the URL is meant for generate_campaign or edit_campaign. Both already read and classify a page URL automatically via their own urls parameter — pass it there directly, in the same call; handing it over IS the read, so no separate summarization step ever comes first, even when the request is phrased as "write from that page" or "based on its content". Scrapes and summarizes a web page's content standalone; blocks until ready, typically 10-60 seconds. Kept published for backward compatibility only — neither generate_campaign nor edit_campaign has a parameter to feed this result into.

add_contact_to_automation

Claude

add_contact_to_list

Claude

add_tag_to_contact

Claude

create_contact_custom_field

Claude

create_contact_field_relationship

Claude

create_contact_field_value

Claude

create_contact_tag

Claude

create_field_options

Claude

create_list

Claude

create_list_group_permission

Claude

create_or_update_contact

Claude

get_campaign

Claude

get_contact

Claude

get_contact_automation

Claude

get_contact_custom_field

Claude

get_contact_field_value

Claude

get_list

Claude

get_tag

Claude

list_automations

Claude

list_campaigns

Claude

list_contact_automations

Claude

list_contact_custom_fields

Claude

list_contact_field_values

Claude

list_contacts

Claude

list_email_activities

Claude

list_groups

Claude

list_lists

Claude

list_tags

Claude

remove_contact_from_automation

Claude

update_contact_field_value

Claude

update_list

Claude

Capabilities

WritesInteractive

Example Prompts

Click any prompt to copy it.

App Stats

370

Tools

3

Prompts

ChatGPT, Claude

Platforms

Works with

ChatGPT
Claude

Data refreshed daily