add_contact_to_automation
ChatGPTAdd 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
ChatGPTUse 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
ChatGPTRetrieve 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
ChatGPTStop 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
ChatGPTAdd 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
ChatGPTAdd Custom Field to Field Group - Operation: add-custom-field-to-field-group - Endpoint: POST /api/3/groupMembers
catalog_add-domain-to-whitelist
ChatGPTAdd 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
ChatGPTApply 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
ChatGPTBuild 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
ChatGPTBulk 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
ChatGPTSummarize 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
ChatGPTCheck 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
ChatGPTCheck 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
ChatGPTBefore 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
ChatGPTCreate a calendar feed - Operation: create-a-calendar-feed - Endpoint: POST /api/3/calendars
catalog_create-a-campaign-message
ChatGPTCreate 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
ChatGPTCreate a child schema - Operation: create-a-child-schema - Endpoint: POST /api/3/customObjects/schemas/{id}/child
catalog_create-a-contact-custom-field
ChatGPTCreate 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
ChatGPTCreate a conversion - Operation: create-a-conversion - Endpoint: POST /api/3/conversions
catalog_create-a-conversion-label
ChatGPTCreate a conversion label - Operation: create-a-conversion-label - Endpoint: POST /api/3/conversions/labels
catalog_create-a-custom-field-group
ChatGPTCreate 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
ChatGPTCreate 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
ChatGPTSet 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
ChatGPTCreate 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
ChatGPTCreate a deal Create a new deal - Operation: create-a-deal-new - Endpoint: POST /api/3/deals
catalog_create-a-deal-note
ChatGPTCreate 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
ChatGPTCreate a deal role - Operation: create-a-deal-role - Endpoint: POST /api/3/dealRoles
catalog_create-a-deal-stage
ChatGPTCreate 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
ChatGPTCreate a task type Create a new task type - Operation: create-a-deal-task-type - Endpoint: POST /api/3/dealTasktypes
catalog_create-a-field-option
ChatGPTCreate 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
ChatGPTCreate a list group permission - Operation: create-a-list-group-permission - Endpoint: POST /api/3/listGroups
catalog_create-a-new-contact
ChatGPTCreate 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
ChatGPTCreate 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
ChatGPTCreate a group - Operation: create-a-new-group - Endpoint: POST /api/3/groups
catalog_create-a-new-message
ChatGPTCreate a message - Operation: create-a-new-message - Endpoint: POST /api/3/messages
catalog_create-a-new-tag
ChatGPTCreate 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
ChatGPTCreate 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
ChatGPTCreate a pipeline Create a new pipeline - Operation: create-a-pipeline - Endpoint: POST /api/3/dealGroups
catalog_create-a-schema
ChatGPTCreate a schema - Operation: create-a-schema - Endpoint: POST /api/3/customObjects/schemas
catalog_create-a-secondary-contact
ChatGPTCreate 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
ChatGPTCreate a task outcome Create a new task outcome - Operation: create-a-task-outcome - Endpoint: POST /api/3/taskOutcomes
catalog_create-a-task-reminder
ChatGPTCreate 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
ChatGPTCreate 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
ChatGPTCreate an account Create a new account - Operation: create-an-account-new - Endpoint: POST /api/3/accounts
catalog_create-an-account-note
ChatGPTCreate 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
ChatGPTCreate 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
ChatGPTCreate 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
ChatGPTCreate Campaign - Operation: create-campaign - Endpoint: POST /api/3/campaign
catalog_create-connection
ChatGPTCreate a connection Create a new connection resource. - Operation: create-connection - Endpoint: POST /api/3/connections
catalog_create-contact-tag
ChatGPTAdd 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
ChatGPTCreate 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
ChatGPTSet a deal custom field value Tags: deal, deals, field value - Operation: create-custom-deal-field-value - Endpoint: POST /api/3/dealCustomFieldData
catalog_create-customer
ChatGPTCreate a customer Create a new e-commerce customer resource. - Operation: create-customer - Endpoint: POST /api/3/ecomCustomers
catalog_create-new-list
ChatGPTCreate a list - Operation: create-new-list - Endpoint: POST /api/3/lists
catalog_create-variable
ChatGPTCreate a Variable Create a personalization variable - Operation: create-variable - Endpoint: POST /api/3/personalizations
catalog_createAIBroadcast
ChatGPTCreate 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
ChatGPTCreate 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
ChatGPTCreate 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
ChatGPTDuplicate Campaign - Operation: duplicate-campaign - Endpoint: POST /api/3/campaigns/{id}/copy
catalog_exclusions-retrieve-a-list
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTExport broadcast metrics Export broadcast performance metrics as CSV Tags: Metrics, Exports, Broadcasts - Operation: exportBroadcastMetrics - Endpoint: POST /api/3/sms/broadcasts/export
catalog_exportBroadcastRecipients
ChatGPTExport 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
ChatGPTList all forms - Operation: forms-1 - Endpoint: GET /api/3/forms
catalog_get-a-list-of-webhook-events
ChatGPTList 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
ChatGPTList all webhooks List all existing webhooks - Operation: get-a-list-of-webhooks - Endpoint: GET /api/3/webhooks
catalog_get-a-savedresponse
ChatGPTRetrieve a saved response - Operation: get-a-savedresponse - Endpoint: GET /api/3/savedResponses/{id}
catalog_get-a-single-record
ChatGPTGet 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
ChatGPTGet 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
ChatGPTGet All Custom Field Groups - Operation: get-all-custom-field-groups - Endpoint: GET /api/3/groupMembers
catalog_get-branding
ChatGPTRetrieve 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
ChatGPTRetrieve a connection Retrieve an existing connection resource. - Operation: get-connection - Endpoint: GET /api/3/connections/{id}
catalog_get-contact
ChatGPTRetrieve 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
ChatGPTLook 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
ChatGPTGet Custom Field Group by ID - Operation: get-custom-field-to-field-group - Endpoint: GET /api/3/groupMembers/{groupId}
catalog_get-customer
ChatGPTRetrieve a customer Retrieve an existing e-commerce customer resource. - Operation: get-customer - Endpoint: GET /api/3/ecomCustomers/{id}
catalog_get-editor-markup
ChatGPTGet Editor Markup Get Editor Markup - Operation: get-editor-markup - Endpoint: GET /api/3/content/editorMarkup/{messageId}
catalog_get-flow-execution
ChatGPTGet 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
ChatGPTGet 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
ChatGPTRetrieve an order Retrieve an existing e-commerce order resource. - Operation: get-order - Endpoint: GET /api/3/ecomOrders/{ecomOrderId}
catalog_get-sms-credits
ChatGPTRetrieve 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
ChatGPTRetrieve a task Retrieve an existing task - Operation: get-task - Endpoint: GET /api/3/dealTasks/{id}
catalog_get-user
ChatGPTRetrieve a user Retrieve an existing user - Operation: get-user - Endpoint: GET /api/3/users/{id}
catalog_get-user-email
ChatGPTRetrieve 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
ChatGPTRetrieve logged-in user Retrieve the logged-in user - Operation: get-user-loggedin - Endpoint: GET /api/3/users/me
catalog_get-user-username
ChatGPTRetrieve 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
ChatGPTRetrieve a webhook Retrieve an existing webhook - Operation: get-webhook - Endpoint: GET /api/3/webhooks/{id}
catalog_get-whatsapp-template
ChatGPTGet 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
ChatGPTGet 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
ChatGPTGet broadcast message Retrieves the full details for one broadcast message Tags: Broadcasts - Operation: getBroadcast - Endpoint: GET /api/3/sms/broadcasts/{id}
catalog_getBroadcastMetrics
ChatGPTGet all broadcast metrics Returns metrics for specified broadcast IDs Tags: Metrics, Broadcasts - Operation: getBroadcastMetrics - Endpoint: POST /api/3/sms/broadcasts/metrics
catalog_getBroadcastSnapshotByIds
ChatGPTGet 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
ChatGPTReturn 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
ChatGPTReturn 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
ChatGPTList all accounts Retrieve all existing account - Operation: list-all-accounts - Endpoint: GET /api/3/accounts
catalog_list-all-address-groups
ChatGPTList 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
ChatGPTList 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
ChatGPTList all addresses - Operation: list-all-addresses - Endpoint: GET /api/3/addresses
catalog_list-all-associations-1
ChatGPTList all associations Retrieve all existing account association - Operation: list-all-associations-1 - Endpoint: GET /api/3/accountContacts
catalog_list-all-audiences
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList all calendar feeds - Operation: list-all-calendar-feeds - Endpoint: GET /api/3/calendars
catalog_list-all-calendar-feeds-1
ChatGPTRetrieve a calendar feed - Operation: list-all-calendar-feeds-1 - Endpoint: GET /api/3/calendars/{id}
catalog_list-all-campaigns
ChatGPTList all campaigns - Operation: list-all-campaigns - Endpoint: GET /api/3/campaigns
catalog_list-all-connections
ChatGPTList all connections List all existing connection resources. - Operation: list-all-connections - Endpoint: GET /api/3/connections
catalog_list-all-contact-automations
ChatGPTList all automations a contact is in - Operation: list-all-contact-automations - Endpoint: GET /api/3/contactAutomations
catalog_list-all-contact-list-subscriptions
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList, 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList all customers List all e-commerce customer resources. - Operation: list-all-customers - Endpoint: GET /api/3/ecomCustomers
catalog_list-all-deal-activities
ChatGPTList 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
ChatGPTList all deal roles - Operation: list-all-deal-roles - Endpoint: GET /api/3/dealRoles
catalog_list-all-deal-stages
ChatGPTList all stages Retrieve all existing stages - Operation: list-all-deal-stages - Endpoint: GET /api/3/dealStages
catalog_list-all-deal-task-types
ChatGPTList all task types Retrieve all existing task types - Operation: list-all-deal-task-types - Endpoint: GET /api/3/dealTasktypes
catalog_list-all-deals
ChatGPTList all deals Retrieve all existing deals - Operation: list-all-deals - Endpoint: GET /api/3/deals
catalog_list-all-email-activities
ChatGPTList all email activities - Operation: list-all-email-activities - Endpoint: GET /api/3/emailActivities
catalog_list-all-event-types
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList All Group Limits - Operation: list-all-group-limits - Endpoint: GET /api/3/groupLimits
catalog_list-all-groups
ChatGPTList all groups - Operation: list-all-groups - Endpoint: GET /api/3/groups
catalog_list-all-list-group-permissions
ChatGPTList 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
ChatGPTList all messages - Operation: list-all-messages - Endpoint: GET /api/3/messages
catalog_list-all-orders
ChatGPTList all orders List all existing e-commerce order resources. - Operation: list-all-orders - Endpoint: GET /api/3/ecomOrders
catalog_list-all-personalization-tags
ChatGPTList 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
ChatGPTList all pipelines Retrieve all existing pipelines - Operation: list-all-pipelines - Endpoint: GET /api/3/dealGroups
catalog_list-all-saved-responses
ChatGPTList all saved responses - Operation: list-all-saved-responses - Endpoint: GET /api/3/savedResponses
catalog_list-all-schemas
ChatGPTList 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
ChatGPTList all scores - Operation: list-all-scores - Endpoint: GET /api/3/scores
catalog_list-all-secondary-contacts
ChatGPTList all secondary contacts Retrieve all secondary contacts - Operation: list-all-secondary-contacts - Endpoint: GET /api/3/contactDeals
catalog_list-all-segments
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList all tasks Retrieve a list of existing tasks - Operation: list-all-tasks - Endpoint: GET /api/3/dealTasks
catalog_list-all-templates
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList all users List all existing users - Operation: list-all-users - Endpoint: GET /api/3/users
catalog_list-all-whitelisted-domains
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTShow 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList Conversations Lists Conversations. Tags: Conversations - Operation: list-conversations - Endpoint: GET /api/3/channel/whatsapp/inbox/conversation
catalog_list-conversion-labels
ChatGPTList 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
ChatGPTList 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
ChatGPTList conversions - Operation: list-conversions - Endpoint: GET /api/3/conversions
catalog_list-conversions-data
ChatGPTList 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
ChatGPTList EcomOrderProducts - Operation: list-ecomorderproducts - Endpoint: GET /api/3/ecomOrderProducts
catalog_list-flow-execution
ChatGPTList Flow Executions Lists Flow Executions. Tags: Flows - Operation: list-flow-execution - Endpoint: GET /api/3/channel/whatsapp/flow-execution
catalog_list-flow-execution-contact
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList EcomOrderProducts for a Specific EcomOrder - Operation: list-products-for-order - Endpoint: GET /api/3/ecomOrders/{id}/orderProducts
catalog_list-records-created-from-a-schema
ChatGPTList records by schema - Operation: list-records-created-from-a-schema - Endpoint: GET /api/3/customObjects/records/{schemaId}
catalog_list-sms-broadcast-failures
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList Variables Retrieve a list of personalization variables - Operation: list-variables - Endpoint: GET /api/3/personalizations
catalog_list-whatsapp-templates
ChatGPTList 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
ChatGPTGet 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
ChatGPTPersonalization Tags - Operation: personalization-tags - Endpoint: GET /api/3/stripo/personalizationTags
catalog_post_formoptin
ChatGPTCreate 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
ChatGPTCreate 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
ChatGPTPreview 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve a campaign - Operation: retrieve-a-campaign - Endpoint: GET /api/3/campaigns/{id}
catalog_retrieve-a-campaign-message-source
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve an automation a contact is in - Operation: retrieve-a-contactautomation - Endpoint: GET /api/3/contactAutomations/{id}
catalog_retrieve-a-contacts-geo-ip-address
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve a conversion - Operation: retrieve-a-conversion - Endpoint: GET /api/3/conversions/{id}
catalog_retrieve-a-conversion-label
ChatGPTRetrieve a conversion label - Operation: retrieve-a-conversion-label - Endpoint: GET /api/3/conversions/labels/{id}
catalog_retrieve-a-conversions-data
ChatGPTRetrieve 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
ChatGPTRetrieve a conversion's metrics - Operation: retrieve-a-conversions-metrics - Endpoint: GET /api/3/conversions/{id}/metrics
catalog_retrieve-a-conversions-trends
ChatGPTRetrieve a conversion's daily trend data Daily time series of event count, unique contacts, and total value. Backed by ConversionAgentService::getConversionTrends(). - Operation: retrieve-a-conversions-trends - Endpoint: GET /api/3/conversions/{id}/trends
catalog_retrieve-a-custom-deal-field-meta
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTGet 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
ChatGPTRetrieve 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
ChatGPTRetrieve a custom field relationship to lists - Operation: retrieve-a-custom-field-relationship - Endpoint: GET /api/3/fieldRels/{fieldRelId}
catalog_retrieve-a-custom-field-value
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve a stage Retrieve an existing stage - Operation: retrieve-a-deal-stage - Endpoint: GET /api/3/dealStages/{id}
catalog_retrieve-a-deal-task-type
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve a goal - Operation: retrieve-a-goal - Endpoint: GET /api/3/goals/{id}
catalog_retrieve-a-group
ChatGPTRetrieve a group - Operation: retrieve-a-group - Endpoint: GET /api/3/groups/{id}
catalog_retrieve-a-list
ChatGPTRetrieve 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
ChatGPTRetrieve a list group permission - Operation: retrieve-a-list-group-permission - Endpoint: GET /api/3/listGroups/{id}
catalog_retrieve-a-message
ChatGPTRetrieve a message - Operation: retrieve-a-message - Endpoint: GET /api/3/messages/{id}
catalog_retrieve-a-note
ChatGPTRetrieve a note - Operation: retrieve-a-note - Endpoint: GET /api/3/notes/{id}
catalog_retrieve-a-pipeline
ChatGPTRetrieve a pipeline Retrieve an existing pipeline - Operation: retrieve-a-pipeline - Endpoint: GET /api/3/dealGroups/{id}
catalog_retrieve-a-schema
ChatGPTRetrieve 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
ChatGPTRetrieve a score - Operation: retrieve-a-score - Endpoint: GET /api/3/scores/{id}
catalog_retrieve-a-secondary-contact
ChatGPTRetrieve a secondary contact Retrieve an existing secondary contact - Operation: retrieve-a-secondary-contact - Endpoint: GET /api/3/contactDeals/{id}
catalog_retrieve-a-segment
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve a template - Operation: retrieve-a-template - Endpoint: GET /api/3/templates/{id}
catalog_retrieve-a-tracking-log
ChatGPTRetrieve 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
ChatGPTList 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
ChatGPTRetrieve 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
ChatGPTList 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
ChatGPTRetrieve an account Retrieve an existing account - Operation: retrieve-an-account - Endpoint: GET /api/3/accounts/{id}
catalog_retrieve-an-address
ChatGPTRetrieve an address - Operation: retrieve-an-address - Endpoint: GET /api/3/addresses/{id}
catalog_retrieve-an-addressgroup
ChatGPTRetrieve an addressGroup - Operation: retrieve-an-addressgroup - Endpoint: GET /api/3/addressGroups/{id}
catalog_retrieve-an-addresslist
ChatGPTRetrieve an addressList - Operation: retrieve-an-addresslist - Endpoint: GET /api/3/addressLists/{id}
catalog_retrieve-an-association
ChatGPTRetrieve an association Retrieve an existing account association - Operation: retrieve-an-association - Endpoint: GET /api/3/accountContacts/{id}
catalog_retrieve-an-audience
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve an EcomOrderProduct - Operation: retrieve-an-ecomorderproduct - Endpoint: GET /api/3/ecomOrderProducts/{id}
catalog_retrieve-archived-contact
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTList 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
ChatGPTRetrieve 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
ChatGPTRetrieve Event Tracking Status Get event tracking status (enabled or disabled) - Operation: retrieve-event-tracking-status - Endpoint: GET /api/3/eventTracking
catalog_retrieve-fields
ChatGPTList 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
ChatGPTRetrieve a form - Operation: retrieve-forms - Endpoint: GET /api/3/forms/{id}
catalog_retrieve-goal-showcase
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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-links-associated-campaign
ChatGPTRetrieve links associated to campaign - Operation: retrieve-links-associated-campaign - Endpoint: GET /api/3/campaigns/{id}/links
catalog_retrieve-list-of-all-notes
ChatGPTRetrieve list of all notes - Operation: retrieve-list-of-all-notes - Endpoint: GET /api/3/notes
catalog_retrieve-primary-brand-kit
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve 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
ChatGPTRetrieve a Variable Retrieve an individual personalization variable - Operation: retrieve-variable - Endpoint: GET /api/3/personalizations/{variableId}
catalog_saved-responses
ChatGPTCreate a saved response - Operation: saved-responses - Endpoint: POST /api/3/savedResponses
catalog_search-content-manager-files
ChatGPTSearch 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
ChatGPTSend 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
ChatGPTSend 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
ChatGPTDuplicate 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
ChatGPTCreate 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
ChatGPTAssociate 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
ChatGPTCreate 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
ChatGPTCreate 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
ChatGPTCreate 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
ChatGPTCreate 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
ChatGPTCreate 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
ChatGPTCreate 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
ChatGPTCreate 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
ChatGPTAssociate 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
ChatGPTApply 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
ChatGPTCreate 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
ChatGPTRetrieve a single campaign by ID.
get_campaign_editor_markup
ChatGPTRetrieve 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
ChatGPTReport 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
ChatGPTFetch 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
ChatGPTReport 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_links
ChatGPTRetrieve links associated with a campaign from ActiveCampaign. Parameters ---------- - campaign_id: The ID of the campaign to retrieve links for
get_campaign_messages
ChatGPTRetrieve 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
ChatGPTRetrieve a single contact by ID.
get_contact_automation
ChatGPTRetrieve 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
ChatGPTGet a contact custom field by ID Parameters ---------- - field_id: The ID of the custom field to retrieve
get_contact_field_value
ChatGPTGet a contact custom field value by ID Parameters ---------- - field_value_id: The ID of the field value to retrieve
get_contact_field_values
ChatGPTGet all custom field values for a specific contact.
get_contact_list_memberships
ChatGPTGet all list memberships for a specific contact.
get_contact_score_values
ChatGPTRetrieve 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
ChatGPTGet 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
ChatGPTRetrieve a single deal by ID. Note: if the user lacks pipeline permission, returns id/title/isDisabled=true only.
get_deal_pipeline
ChatGPTRetrieve 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
ChatGPTRetrieve a single deal stage by ID from ActiveCampaign.
get_list
ChatGPTRetrieve 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
ChatGPTReturn 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
ChatGPTGet a tag by ID Parameters ---------- - tag_id: The ID of the tag to retrieve
get_top_contacts
ChatGPTRetrieve 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
ChatGPTCheck 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTSearch 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList all deal activities from ActiveCampaign with filtering and pagination options.
list_deal_pipelines
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList, 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
ChatGPTReport 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
ChatGPTBring 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
ChatGPTUndo 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
ChatGPTRun 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
ChatGPTSearch 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
ChatGPTDeprecated 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
Claudeadd_contact_to_list
Claudeadd_tag_to_contact
Claudecreate_contact_custom_field
Claudecreate_contact_field_relationship
Claudecreate_contact_field_value
Claudecreate_contact_tag
Claudecreate_field_options
Claudecreate_list
Claudecreate_list_group_permission
Claudecreate_or_update_contact
Claudeget_campaign
Claudeget_campaign_links
Claudeget_contact
Claudeget_contact_automation
Claudeget_contact_custom_field
Claudeget_contact_field_value
Claudeget_list
Claudeget_tag
Claudelist_automations
Claudelist_campaigns
Claudelist_contact_automations
Claudelist_contact_custom_fields
Claudelist_contact_field_values
Claudelist_contacts
Claudelist_email_activities
Claudelist_groups
Claudelist_lists
Claudelist_tags
Clauderemove_contact_from_automation
Claudeupdate_contact_field_value
Claudeupdate_list
Claude