MCP App Store
Business
Conversion icon

Conversion

by Conversion

Overview

Connect ChatGPT to the Conversion marketing data platform to inspect CRM contacts, build emails, audiences, forms, and campaigns, diagnose why a contact did not receive an email or enter a workflow, and audit sync failures with Salesforce and other connected systems. Read-only tools cover contacts, opportunities, campaigns, forms, workflows, sync logs, and email performance metrics. Write tools create blast emails, audiences, campaigns, folders, contacts, and CSV imports within the user's authenticated Conversion workspace.

Tools

add_audience_contacts

ChatGPT
Immediately add contacts to a STATIC audience by their UUIDs.

add_audience_contacts

ChatGPT
Immediately add contacts to a STATIC audience by their UUIDs.

add_audience_contacts

ChatGPT
Immediately add contacts to a STATIC audience by their UUIDs.

audience_create

ChatGPT
Create a new audience. DYNAMIC audiences require a filter. BEFORE CALLING: Call learn_statement_semantics first to load the schema before calling this tool. Audience filters use the statement query language with a CONTACT root, but the set of legal root-level ATTRIBUTE names is NOT the same as contact_list. Names like subscriptionStatus, email, createdAt, updatedAt, companyId work in contact_list but will be rejected here with ATTRIBUTE_NOT_FOUND. For audience filters, always go through a field (wire-format VARIABLE with a real variableSchemaId from contact_list_fields) or an event (wire-format ENGAGEMENT). To filter by subscription state, use an ENGAGEMENT of type EMAIL with data.eventType = EMAIL_UNSUBSCRIBE (wrap in NOT for "still subscribed").

audience_create

ChatGPT
Create a new audience. DYNAMIC audiences require a filter. BEFORE CALLING: Call learn_statement_semantics first to load the schema before calling this tool. Audience filters use the statement query language with a CONTACT root, but the set of legal root-level ATTRIBUTE names is NOT the same as contact_list. Names like subscriptionStatus, email, createdAt, updatedAt, companyId work in contact_list but will be rejected here with ATTRIBUTE_NOT_FOUND. For audience filters, always go through a field (wire-format VARIABLE with a real variableSchemaId from contact_list_fields) or an event (wire-format ENGAGEMENT). To filter by subscription state, use an ENGAGEMENT of type EMAIL with data.eventType = EMAIL_UNSUBSCRIBE (wrap in NOT for "still subscribed").

audience_create

ChatGPT
Create a new audience. DYNAMIC audiences require a filter. BEFORE CALLING: Call learn_statement_semantics first to load the schema before calling this tool. Audience filters use the statement query language with a CONTACT root, but the set of legal root-level ATTRIBUTE names is NOT the same as contact_list. Names like subscriptionStatus, email, createdAt, updatedAt, companyId work in contact_list but will be rejected here with ATTRIBUTE_NOT_FOUND. For audience filters, always go through a field (wire-format VARIABLE with a real variableSchemaId from contact_list_fields) or an event (wire-format ENGAGEMENT). To filter by subscription state, use an ENGAGEMENT of type EMAIL with data.eventType = EMAIL_UNSUBSCRIBE (wrap in NOT for "still subscribed").

audience_list

ChatGPT
List or search audiences for this business.

audience_list

ChatGPT
List or search audiences for this business.

audience_list

ChatGPT
List or search audiences for this business.

business_get_email_settings

ChatGPT
Get the business's email settings including communication limits (daily, weekly, monthly send caps) and link tracking configuration.

business_get_email_settings

ChatGPT
Get the business's email settings including communication limits (daily, weekly, monthly send caps) and link tracking configuration.

business_get_email_settings

ChatGPT
Get the business's email settings including communication limits (daily, weekly, monthly send caps) and link tracking configuration.

campaign_add_members

ChatGPT
Immediately add everyone matching a statement as campaign members. BEFORE CALLING: Call learn_statement_semantics first to load the schema before calling this tool.

campaign_add_members

ChatGPT
Immediately add everyone matching a statement as campaign members. BEFORE CALLING: Call learn_statement_semantics first to load the schema before calling this tool.

campaign_add_members

ChatGPT
Immediately add everyone matching a statement as campaign members. BEFORE CALLING: Call learn_statement_semantics first to load the schema before calling this tool.

campaign_create

ChatGPT
Create a new campaign. Must provide an existing campaign type ID.

campaign_create

ChatGPT
Create a new campaign. Must provide an existing campaign type ID.

campaign_create

ChatGPT
Create a new campaign. Must provide an existing campaign type ID.

campaign_create_token

ChatGPT
Create a new campaign token definition at the business level.

campaign_create_token

ChatGPT
Create a new campaign token definition at the business level.

campaign_create_token

ChatGPT
Create a new campaign token definition at the business level.

campaign_create_type

ChatGPT
Create a new campaign type with initial member statuses.

campaign_create_type

ChatGPT
Create a new campaign type with initial member statuses.

campaign_create_type

ChatGPT
Create a new campaign type with initial member statuses.

campaign_create_type_status

ChatGPT
Add a new member status to an existing campaign type. Statuses define the lifecycle stages a contact can be in for any campaign of this type (e.g., adding 'Waitlisted' to an 'Event' type). Before calling, use campaign_list_type_statuses to see what's already defined — duplicate names are confusing for downstream reporting.

campaign_create_type_status

ChatGPT
Add a new member status to an existing campaign type. Statuses define the lifecycle stages a contact can be in for any campaign of this type (e.g., adding 'Waitlisted' to an 'Event' type). Before calling, use campaign_list_type_statuses to see what's already defined — duplicate names are confusing for downstream reporting.

campaign_create_type_status

ChatGPT
Add a new member status to an existing campaign type. Statuses define the lifecycle stages a contact can be in for any campaign of this type (e.g., adding 'Waitlisted' to an 'Event' type). Before calling, use campaign_list_type_statuses to see what's already defined — duplicate names are confusing for downstream reporting.

campaign_get_items

ChatGPT
Get all assets inside a campaign (emails, automations, forms, etc.).

campaign_get_items

ChatGPT
Get all assets inside a campaign (emails, automations, forms, etc.).

campaign_get_items

ChatGPT
Get all assets inside a campaign (emails, automations, forms, etc.).

campaign_list

ChatGPT
List campaigns for the current business with cursor pagination.

campaign_list

ChatGPT
List campaigns for the current business with cursor pagination.

campaign_list

ChatGPT
List campaigns for the current business with cursor pagination.

campaign_list_members

ChatGPT
List members of a campaign with cursor pagination. Returns each member with their contact details and campaign status. Supports statement filters to narrow by contact properties.

campaign_list_members

ChatGPT
List members of a campaign with cursor pagination. Returns each member with their contact details and campaign status. Supports statement filters to narrow by contact properties.

campaign_list_members

ChatGPT
List members of a campaign with cursor pagination. Returns each member with their contact details and campaign status. Supports statement filters to narrow by contact properties.

campaign_list_tokens

ChatGPT
List all campaign tokens defined for this business.

campaign_list_tokens

ChatGPT
List all campaign tokens defined for this business.

campaign_list_tokens

ChatGPT
List all campaign tokens defined for this business.

campaign_list_type_statuses

ChatGPT
List the member statuses defined on a campaign type (e.g., Invited, Registered, Attended). Each status has an id, name, and isSuccess flag. Call this before campaign_create_type_status to avoid creating a duplicate, and before referencing a status by id in campaign_update_member_status.

campaign_list_type_statuses

ChatGPT
List the member statuses defined on a campaign type (e.g., Invited, Registered, Attended). Each status has an id, name, and isSuccess flag. Call this before campaign_create_type_status to avoid creating a duplicate, and before referencing a status by id in campaign_update_member_status.

campaign_list_type_statuses

ChatGPT
List the member statuses defined on a campaign type (e.g., Invited, Registered, Attended). Each status has an id, name, and isSuccess flag. Call this before campaign_create_type_status to avoid creating a duplicate, and before referencing a status by id in campaign_update_member_status.

campaign_list_types

ChatGPT
List campaign types for the business. Each type defines a set of member statuses (e.g., Invited, Registered, Attended). You need a campaign type ID to create a campaign.

campaign_list_types

ChatGPT
List campaign types for the business. Each type defines a set of member statuses (e.g., Invited, Registered, Attended). You need a campaign type ID to create a campaign.

campaign_list_types

ChatGPT
List campaign types for the business. Each type defines a set of member statuses (e.g., Invited, Registered, Attended). You need a campaign type ID to create a campaign.

campaign_set_token_value

ChatGPT
Immediately set a campaign's value for one token.

campaign_set_token_value

ChatGPT
Immediately set a campaign's value for one token.

campaign_set_token_value

ChatGPT
Immediately set a campaign's value for one token.

campaign_update_member_status

ChatGPT
Immediately set a campaign member's status.

campaign_update_member_status

ChatGPT
Immediately set a campaign member's status.

campaign_update_member_status

ChatGPT
Immediately set a campaign member's status.

campaign_update_token

ChatGPT
Update an existing campaign token definition. Any of key, label, defaultValue may be set; omitted fields are left unchanged. The token's value on a specific campaign is set with campaign_set_token_value.

campaign_update_token

ChatGPT
Update an existing campaign token definition. Any of key, label, defaultValue may be set; omitted fields are left unchanged. The token's value on a specific campaign is set with campaign_set_token_value.

campaign_update_token

ChatGPT
Update an existing campaign token definition. Any of key, label, defaultValue may be set; omitted fields are left unchanged. The token's value on a specific campaign is set with campaign_set_token_value.

campaign_update_type

ChatGPT
Update an existing campaign type. Any of name, description, archived may be set; omitted fields are left unchanged. Statuses on the type are managed separately.

campaign_update_type

ChatGPT
Update an existing campaign type. Any of name, description, archived may be set; omitted fields are left unchanged. Statuses on the type are managed separately.

campaign_update_type

ChatGPT
Update an existing campaign type. Any of name, description, archived may be set; omitted fields are left unchanged. Statuses on the type are managed separately.

company_list_opportunities

ChatGPT
List the opportunities associated with a company. Answers 'show me Acme's opportunities'. Returns the full Opportunity records (id, variables, externalOpportunity metadata, timestamps).

company_list_opportunities

ChatGPT
List the opportunities associated with a company. Answers 'show me Acme's opportunities'. Returns the full Opportunity records (id, variables, externalOpportunity metadata, timestamps).

company_list_opportunities

ChatGPT
List the opportunities associated with a company. Answers 'show me Acme's opportunities'. Returns the full Opportunity records (id, variables, externalOpportunity metadata, timestamps).

contact_count

ChatGPT
Count contacts matching filters using the statement query language. Use this when you only need the number of matching contacts rather than fetching rows. BEFORE CALLING (when passing a statement): Call learn_statement_semantics first to load the schema before calling this tool.

contact_count

ChatGPT
Count contacts matching filters using the statement query language. Use this when you only need the number of matching contacts rather than fetching rows. BEFORE CALLING (when passing a statement): Call learn_statement_semantics first to load the schema before calling this tool.

contact_count

ChatGPT
Count contacts matching filters using the statement query language. Use this when you only need the number of matching contacts rather than fetching rows. BEFORE CALLING (when passing a statement): Call learn_statement_semantics first to load the schema before calling this tool.

contact_create

ChatGPT
Create a new contact on the current business. email is required and must be unique. fields and companyFields are maps of field UUID to value — call contact_list_fields first to discover the right ids. Returns the new contact's id.

contact_create

ChatGPT
Create a new contact on the current business. email is required and must be unique. fields and companyFields are maps of field UUID to value — call contact_list_fields first to discover the right ids. Returns the new contact's id.

contact_create

ChatGPT
Create a new contact on the current business. email is required and must be unique. fields and companyFields are maps of field UUID to value — call contact_list_fields first to discover the right ids. Returns the new contact's id.

contact_create_field

ChatGPT
Create a new contact or company field. The key should be snake_case and unique.

contact_create_field

ChatGPT
Create a new contact or company field. The key should be snake_case and unique.

contact_create_field

ChatGPT
Create a new contact or company field. The key should be snake_case and unique.

contact_get

ChatGPT
Look up a contact by their UUID. Returns contact details including name, email, company, subscription status, and key fields. To search by email, use contact_list with a filter instead.

contact_get

ChatGPT
Look up a contact by their UUID. Returns contact details including name, email, company, subscription status, and key fields. To search by email, use contact_list with a filter instead.

contact_get

ChatGPT
Look up a contact by their UUID. Returns contact details including name, email, company, subscription status, and key fields. To search by email, use contact_list with a filter instead.

contact_get_automation_runs

ChatGPT
Get a contact's run history within a specific automation workflow. Returns each run with status, nodes passed, and activity log.

contact_get_automation_runs

ChatGPT
Get a contact's run history within a specific automation workflow. Returns each run with status, nodes passed, and activity log.

contact_get_automation_runs

ChatGPT
Get a contact's run history within a specific automation workflow. Returns each run with status, nodes passed, and activity log.

contact_get_distinct_field_values

ChatGPT
Get the distinct values for a contact or company field, with counts of how many contacts have each value. Useful for understanding what data exists before building filters or audiences, and (with sort: 'count:desc') for ranking the most common values — e.g. 'top 10 industries', 'most common subscription tiers'.

contact_get_distinct_field_values

ChatGPT
Get the distinct values for a contact or company field, with counts of how many contacts have each value. Useful for understanding what data exists before building filters or audiences, and (with sort: 'count:desc') for ranking the most common values — e.g. 'top 10 industries', 'most common subscription tiers'.

contact_get_distinct_field_values

ChatGPT
Get the distinct values for a contact or company field, with counts of how many contacts have each value. Useful for understanding what data exists before building filters or audiences, and (with sort: 'count:desc') for ranking the most common values — e.g. 'top 10 industries', 'most common subscription tiers'.

contact_get_events

ChatGPT
Get the event history for a contact: page visits, form submissions, email events (open, click, unsubscribe), and other activities. Returns the most recent 50 items. If there are more, 'hasMore' and 'total' are included.

contact_get_events

ChatGPT
Get the event history for a contact: page visits, form submissions, email events (open, click, unsubscribe), and other activities. Returns the most recent 50 items. If there are more, 'hasMore' and 'total' are included.

contact_get_events

ChatGPT
Get the event history for a contact: page visits, form submissions, email events (open, click, unsubscribe), and other activities. Returns the most recent 50 items. If there are more, 'hasMore' and 'total' are included.

contact_list

ChatGPT
List contacts for the current business with cursor pagination using the statement query language. IMPORTANT: If you haven't already, Call learn_statement_semantics first to load the schema before calling this tool. HOW TO USE: 1. Call contact_list_fields to discover field IDs (e.g., first_name, last_name, phone). 2. Build a statement JSON object and pass it as the "statement" parameter. CORE ATTRIBUTES (usable as root-level ATTRIBUTE names in this tool ONLY): "email", "subscriptionStatus", "createdAt", "updatedAt", "companyId". FIELDS: Reference a custom field by using the wire-format VARIABLE type with a variableSchemaId from contact_list_fields. ("VARIABLE" / "variableSchemaId" are the JSON enum/key names the backend requires — keep them verbatim.) This form works in every CONTACT-context endpoint, so prefer it whenever you may want to reuse the filter elsewhere. SORTING: Sort by any core attribute or field. Use "variables.<field_id>" for field sorts (again, "variables" is the wire-format key). RETURNS: count (number of results in this page), contacts array, and optional next cursor. If you only need a count, you can still use this tool — check the count field in the response.

contact_list

ChatGPT
List contacts for the current business with cursor pagination using the statement query language. IMPORTANT: If you haven't already, Call learn_statement_semantics first to load the schema before calling this tool. HOW TO USE: 1. Call contact_list_fields to discover field IDs (e.g., first_name, last_name, phone). 2. Build a statement JSON object and pass it as the "statement" parameter. CORE ATTRIBUTES (usable as root-level ATTRIBUTE names in this tool ONLY): "email", "subscriptionStatus", "createdAt", "updatedAt", "companyId". FIELDS: Reference a custom field by using the wire-format VARIABLE type with a variableSchemaId from contact_list_fields. ("VARIABLE" / "variableSchemaId" are the JSON enum/key names the backend requires — keep them verbatim.) This form works in every CONTACT-context endpoint, so prefer it whenever you may want to reuse the filter elsewhere. SORTING: Sort by any core attribute or field. Use "variables.<field_id>" for field sorts (again, "variables" is the wire-format key). RETURNS: count (number of results in this page), contacts array, and optional next cursor. If you only need a count, you can still use this tool — check the count field in the response.

contact_list

ChatGPT
List contacts for the current business with cursor pagination using the statement query language. IMPORTANT: If you haven't already, Call learn_statement_semantics first to load the schema before calling this tool. HOW TO USE: 1. Call contact_list_fields to discover field IDs (e.g., first_name, last_name, phone). 2. Build a statement JSON object and pass it as the "statement" parameter. CORE ATTRIBUTES (usable as root-level ATTRIBUTE names in this tool ONLY): "email", "subscriptionStatus", "createdAt", "updatedAt", "companyId". FIELDS: Reference a custom field by using the wire-format VARIABLE type with a variableSchemaId from contact_list_fields. ("VARIABLE" / "variableSchemaId" are the JSON enum/key names the backend requires — keep them verbatim.) This form works in every CONTACT-context endpoint, so prefer it whenever you may want to reuse the filter elsewhere. SORTING: Sort by any core attribute or field. Use "variables.<field_id>" for field sorts (again, "variables" is the wire-format key). RETURNS: count (number of results in this page), contacts array, and optional next cursor. If you only need a count, you can still use this tool — check the count field in the response.

contact_list_fields

ChatGPT
List all contact and company fields for the business. Returns id, key, label, dataType, and objectType. Use this to discover filterable fields for statement queries. Every business has default contact fields: first_name, last_name, email, phone, mobile_phone, city, state, country, postal_code, job_title, department, lead_source, lead_status, date_of_birth, salutation, description, street, owner_id. Company fields: company_name, industry, annual_revenue, number_of_employees, website, phone, billing_city, billing_state, billing_country. Businesses may also have custom fields. Use contact_get_distinct_field_values to see what values exist for a specific field.

contact_list_fields

ChatGPT
List all contact and company fields for the business. Returns id, key, label, dataType, and objectType. Use this to discover filterable fields for statement queries. Every business has default contact fields: first_name, last_name, email, phone, mobile_phone, city, state, country, postal_code, job_title, department, lead_source, lead_status, date_of_birth, salutation, description, street, owner_id. Company fields: company_name, industry, annual_revenue, number_of_employees, website, phone, billing_city, billing_state, billing_country. Businesses may also have custom fields. Use contact_get_distinct_field_values to see what values exist for a specific field.

contact_list_fields

ChatGPT
List all contact and company fields for the business. Returns id, key, label, dataType, and objectType. Use this to discover filterable fields for statement queries. Every business has default contact fields: first_name, last_name, email, phone, mobile_phone, city, state, country, postal_code, job_title, department, lead_source, lead_status, date_of_birth, salutation, description, street, owner_id. Company fields: company_name, industry, annual_revenue, number_of_employees, website, phone, billing_city, billing_state, billing_country. Businesses may also have custom fields. Use contact_get_distinct_field_values to see what values exist for a specific field.

contact_list_fields_verbose

ChatGPT
List all contact and company fields with full metadata including accessibility, sync mode, external source, timestamps.

contact_list_fields_verbose

ChatGPT
List all contact and company fields with full metadata including accessibility, sync mode, external source, timestamps.

contact_list_fields_verbose

ChatGPT
List all contact and company fields with full metadata including accessibility, sync mode, external source, timestamps.

contact_list_opportunities

ChatGPT
List the opportunities a contact is attached to, along with the contact's role on each (e.g. Decision Maker, Influencer) and whether they're the primary contact. Answers 'what is this person involved in?'. Each returned item is an Opportunity with an embedded opportunityContactRole field.

contact_list_opportunities

ChatGPT
List the opportunities a contact is attached to, along with the contact's role on each (e.g. Decision Maker, Influencer) and whether they're the primary contact. Answers 'what is this person involved in?'. Each returned item is an Opportunity with an embedded opportunityContactRole field.

contact_list_opportunities

ChatGPT
List the opportunities a contact is attached to, along with the contact's role on each (e.g. Decision Maker, Influencer) and whether they're the primary contact. Answers 'what is this person involved in?'. Each returned item is an Opportunity with an embedded opportunityContactRole field.

create_email

ChatGPT
Create a new email (blast, workflow email, or template). The email is created LIVE but DORMANT — blasts and workflow emails are created as DRAFTs, never sent, scheduled, or published. You cannot send, schedule, publish, or delete via the agent. To change an email that already exists, use update_email instead — do not recreate it. BEFORE CALLING: Call learn_email_building first to load the schema before calling this tool. Think through the entire email before building the JSON: objective, audience, content strategy, structure (header/body sections/footer), personalization (merge fields), and design choices. Be creative, bold, and opinionated — write punchy, conversational copy that feels human, not corporate. Key points: - All component IDs must be valid UUID v4 strings. - The components array is flat — parent-child via children references. - Always include an unsubscribe component in the footer. - The data field must be a raw JSON object, not a stringified JSON.

create_email

ChatGPT
Create a new email (blast, workflow email, or template). The email is created LIVE but DORMANT — blasts and workflow emails are created as DRAFTs, never sent, scheduled, or published. You cannot send, schedule, publish, or delete via the agent. To change an email that already exists, use update_email instead — do not recreate it. BEFORE CALLING: Call learn_email_building first to load the schema before calling this tool. Think through the entire email before building the JSON: objective, audience, content strategy, structure (header/body sections/footer), personalization (merge fields), and design choices. Be creative, bold, and opinionated — write punchy, conversational copy that feels human, not corporate. Key points: - All component IDs must be valid UUID v4 strings. - The components array is flat — parent-child via children references. - Always include an unsubscribe component in the footer. - The data field must be a raw JSON object, not a stringified JSON.

create_email

ChatGPT
Create a new email (blast, workflow email, or template). The email is created LIVE but DORMANT — blasts and workflow emails are created as DRAFTs, never sent, scheduled, or published. You cannot send, schedule, publish, or delete via the agent. To change an email that already exists, use update_email instead — do not recreate it. BEFORE CALLING: Call learn_email_building first to load the schema before calling this tool. Think through the entire email before building the JSON: objective, audience, content strategy, structure (header/body sections/footer), personalization (merge fields), and design choices. Be creative, bold, and opinionated — write punchy, conversational copy that feels human, not corporate. Key points: - All component IDs must be valid UUID v4 strings. - The components array is flat — parent-child via children references. - Always include an unsubscribe component in the footer. - The data field must be a raw JSON object, not a stringified JSON.

create_form

ChatGPT
Create a new form. The form is created LIVE but DORMANT — as an unpublished DRAFT. You cannot publish or delete via the agent. To change a form that already exists, use update_form (metadata) or update_form_draft (design) instead — do not recreate it. BEFORE CALLING: Call learn_form_building first to load the schema before calling this tool. Plan the form before building: purpose, target audience, what data to collect, which CRM fields to map inputs to. Call contact_list_fields to get CRM field UUIDs (especially the email field). Key points: - All component IDs must be valid UUID v4 strings. - The components array is flat — parent-child via children references. - Every form needs exactly one ROOT, at least one ROW > COLUMN chain, and exactly one SUBMIT. - Input labels and display values must be Lexical SerializedEditorState JSON, not plain strings. - Include an EMAIL component with a CRM mapping so submissions are linked to contacts. - The draft field must be a raw JSON object, not a stringified JSON.

create_form

ChatGPT
Create a new form. The form is created LIVE but DORMANT — as an unpublished DRAFT. You cannot publish or delete via the agent. To change a form that already exists, use update_form (metadata) or update_form_draft (design) instead — do not recreate it. BEFORE CALLING: Call learn_form_building first to load the schema before calling this tool. Plan the form before building: purpose, target audience, what data to collect, which CRM fields to map inputs to. Call contact_list_fields to get CRM field UUIDs (especially the email field). Key points: - All component IDs must be valid UUID v4 strings. - The components array is flat — parent-child via children references. - Every form needs exactly one ROOT, at least one ROW > COLUMN chain, and exactly one SUBMIT. - Input labels and display values must be Lexical SerializedEditorState JSON, not plain strings. - Include an EMAIL component with a CRM mapping so submissions are linked to contacts. - The draft field must be a raw JSON object, not a stringified JSON.

create_form

ChatGPT
Create a new form. The form is created LIVE but DORMANT — as an unpublished DRAFT. You cannot publish or delete via the agent. To change a form that already exists, use update_form (metadata) or update_form_draft (design) instead — do not recreate it. BEFORE CALLING: Call learn_form_building first to load the schema before calling this tool. Plan the form before building: purpose, target audience, what data to collect, which CRM fields to map inputs to. Call contact_list_fields to get CRM field UUIDs (especially the email field). Key points: - All component IDs must be valid UUID v4 strings. - The components array is flat — parent-child via children references. - Every form needs exactly one ROOT, at least one ROW > COLUMN chain, and exactly one SUBMIT. - Input labels and display values must be Lexical SerializedEditorState JSON, not plain strings. - Include an EMAIL component with a CRM mapping so submissions are linked to contacts. - The draft field must be a raw JSON object, not a stringified JSON.

create_workflow

ChatGPT
Create a new automation/workflow from its full graph — trigger, nodes, and edges — in one call. The workflow is created LIVE but DORMANT (inactive). You cannot activate or delete via the agent; the user activates it. Create-only: editing an existing workflow is not supported. BEFORE CALLING: Call learn_workflow_building first to load the schema before calling this tool. If your workflow has ANY conditions (trigger conditions, exit conditions, TRUE_FALSE, IF_ELSE, SPLIT, or WAIT_FOR_CONDITION nodes), you MUST ALSO follow this: Call learn_statement_semantics first to load the schema before calling this tool. Statement structure (type→attribute pairing, OR>AND wrapping, field/event/audience operand shapes — wire-format VARIABLE/ENGAGEMENT/AUDIENCE) is where most workflow validation failures come from. Plan the full workflow first: trigger type, action sequence, branching logic, and how branches rejoin. Key points: - First node must be TRIGGER with full config in data. - Every node needs a unique temp ID, used in edges and cross-references (defaultNodeId, conditionNodeId). - BRANCH and JOIN nodes must be included explicitly — not auto-created. - Every parent→child connection needs an explicit edge. - All node data must be fully populated.

create_workflow

ChatGPT
Create a new automation/workflow from its full graph — trigger, nodes, and edges — in one call. The workflow is created LIVE but DORMANT (inactive). You cannot activate or delete via the agent; the user activates it. Create-only: editing an existing workflow is not supported. BEFORE CALLING: Call learn_workflow_building first to load the schema before calling this tool. If your workflow has ANY conditions (trigger conditions, exit conditions, TRUE_FALSE, IF_ELSE, SPLIT, or WAIT_FOR_CONDITION nodes), you MUST ALSO follow this: Call learn_statement_semantics first to load the schema before calling this tool. Statement structure (type→attribute pairing, OR>AND wrapping, field/event/audience operand shapes — wire-format VARIABLE/ENGAGEMENT/AUDIENCE) is where most workflow validation failures come from. Plan the full workflow first: trigger type, action sequence, branching logic, and how branches rejoin. Key points: - First node must be TRIGGER with full config in data. - Every node needs a unique temp ID, used in edges and cross-references (defaultNodeId, conditionNodeId). - BRANCH and JOIN nodes must be included explicitly — not auto-created. - Every parent→child connection needs an explicit edge. - All node data must be fully populated.

create_workflow

ChatGPT
Create a new automation/workflow from its full graph — trigger, nodes, and edges — in one call. The workflow is created LIVE but DORMANT (inactive). You cannot activate or delete via the agent; the user activates it. Create-only: editing an existing workflow is not supported. BEFORE CALLING: Call learn_workflow_building first to load the schema before calling this tool. If your workflow has ANY conditions (trigger conditions, exit conditions, TRUE_FALSE, IF_ELSE, SPLIT, or WAIT_FOR_CONDITION nodes), you MUST ALSO follow this: Call learn_statement_semantics first to load the schema before calling this tool. Statement structure (type→attribute pairing, OR>AND wrapping, field/event/audience operand shapes — wire-format VARIABLE/ENGAGEMENT/AUDIENCE) is where most workflow validation failures come from. Plan the full workflow first: trigger type, action sequence, branching logic, and how branches rejoin. Key points: - First node must be TRIGGER with full config in data. - Every node needs a unique temp ID, used in edges and cross-references (defaultNodeId, conditionNodeId). - BRANCH and JOIN nodes must be included explicitly — not auto-created. - Every parent→child connection needs an explicit edge. - All node data must be fully populated.

duplicate_campaign

ChatGPT
Duplicate an existing campaign. Creates a brand-new campaign that copies the source's content. What gets copied: - The campaign row itself: same campaign type, same description. New name (you provide it). - Campaign token values. - The full folder hierarchy under the campaign (subfolders are recursively cloned). - All emails / blast emails in the campaign - All automations in the campaign. Internal references inside the workflow JSON (e.g. send_email nodes pointing at a campaign email, references to the campaign id itself) are rewritten to point at the newly-cloned assets, so the duplicated workflow stays self-consistent. - All internal forms in the campaign. - The duplicate is placed in the same folder as the source (or at the root if the source is at the root). What does NOT get copied: - Campaign members. The duplicate starts with zero contacts. - External (Salesforce / HubSpot / embed) forms. Only internal Conversion-built forms are duplicated; external forms in the campaign tree are silently skipped. - Token DEFINITIONS (the token rows themselves). Tokens are per-business, not per-campaign — the duplicate references the same token definitions. How email copies work: Each email is duplicated via the email-copy flow, which merges the live email's published state with any in-flight draft changes (draft wins where set), then writes the merged snapshot into the new email's draft column. The new email's top-level columns are blank, so it starts as a draft awaiting publish. The user has to publish each duplicated email through the normal flow before it can send. When to use this tool: - User says "duplicate / copy / clone this campaign" or wants to spin up a similar campaign for a new audience or season. - User wants to use a past campaign as a template.

duplicate_campaign

ChatGPT
Duplicate an existing campaign. Creates a brand-new campaign that copies the source's content. What gets copied: - The campaign row itself: same campaign type, same description. New name (you provide it). - Campaign token values. - The full folder hierarchy under the campaign (subfolders are recursively cloned). - All emails / blast emails in the campaign - All automations in the campaign. Internal references inside the workflow JSON (e.g. send_email nodes pointing at a campaign email, references to the campaign id itself) are rewritten to point at the newly-cloned assets, so the duplicated workflow stays self-consistent. - All internal forms in the campaign. - The duplicate is placed in the same folder as the source (or at the root if the source is at the root). What does NOT get copied: - Campaign members. The duplicate starts with zero contacts. - External (Salesforce / HubSpot / embed) forms. Only internal Conversion-built forms are duplicated; external forms in the campaign tree are silently skipped. - Token DEFINITIONS (the token rows themselves). Tokens are per-business, not per-campaign — the duplicate references the same token definitions. How email copies work: Each email is duplicated via the email-copy flow, which merges the live email's published state with any in-flight draft changes (draft wins where set), then writes the merged snapshot into the new email's draft column. The new email's top-level columns are blank, so it starts as a draft awaiting publish. The user has to publish each duplicated email through the normal flow before it can send. When to use this tool: - User says "duplicate / copy / clone this campaign" or wants to spin up a similar campaign for a new audience or season. - User wants to use a past campaign as a template.

duplicate_campaign

ChatGPT
Duplicate an existing campaign. Creates a brand-new campaign that copies the source's content. What gets copied: - The campaign row itself: same campaign type, same description. New name (you provide it). - Campaign token values. - The full folder hierarchy under the campaign (subfolders are recursively cloned). - All emails / blast emails in the campaign - All automations in the campaign. Internal references inside the workflow JSON (e.g. send_email nodes pointing at a campaign email, references to the campaign id itself) are rewritten to point at the newly-cloned assets, so the duplicated workflow stays self-consistent. - All internal forms in the campaign. - The duplicate is placed in the same folder as the source (or at the root if the source is at the root). What does NOT get copied: - Campaign members. The duplicate starts with zero contacts. - External (Salesforce / HubSpot / embed) forms. Only internal Conversion-built forms are duplicated; external forms in the campaign tree are silently skipped. - Token DEFINITIONS (the token rows themselves). Tokens are per-business, not per-campaign — the duplicate references the same token definitions. How email copies work: Each email is duplicated via the email-copy flow, which merges the live email's published state with any in-flight draft changes (draft wins where set), then writes the merged snapshot into the new email's draft column. The new email's top-level columns are blank, so it starts as a draft awaiting publish. The user has to publish each duplicated email through the normal flow before it can send. When to use this tool: - User says "duplicate / copy / clone this campaign" or wants to spin up a similar campaign for a new audience or season. - User wants to use a past campaign as a template.

email_get

ChatGPT
Get an email object by its ID. Returns the subject line, body design, sender settings, blast configuration, and validation status. This is the email as designed in the editor, NOT a record of a specific send.

email_get

ChatGPT
Get an email object by its ID. Returns the subject line, body design, sender settings, blast configuration, and validation status. This is the email as designed in the editor, NOT a record of a specific send.

email_get

ChatGPT
Get an email object by its ID. Returns the subject line, body design, sender settings, blast configuration, and validation status. This is the email as designed in the editor, NOT a record of a specific send.

email_get_metrics

ChatGPT
Get delivery and event metrics for an email — opens, clicks, deliveries, bounces, and unsubscribes. Optionally filter by date range or statement.

email_get_metrics

ChatGPT
Get delivery and event metrics for an email — opens, clicks, deliveries, bounces, and unsubscribes. Optionally filter by date range or statement.

email_get_metrics

ChatGPT
Get delivery and event metrics for an email — opens, clicks, deliveries, bounces, and unsubscribes. Optionally filter by date range or statement.

email_list_blast_emails

ChatGPT
List blast emails (campaign / one-off sends) for the current business with cursor pagination.

email_list_blast_emails

ChatGPT
List blast emails (campaign / one-off sends) for the current business with cursor pagination.

email_list_blast_emails

ChatGPT
List blast emails (campaign / one-off sends) for the current business with cursor pagination.

email_list_recipients

ChatGPT
List recipients of an email with their delivery and event details (sent time, open, click, bounce, unsubscribe). Useful for seeing who received a specific email and how they interacted with it.

email_list_recipients

ChatGPT
List recipients of an email with their delivery and event details (sent time, open, click, bounce, unsubscribe). Useful for seeing who received a specific email and how they interacted with it.

email_list_recipients

ChatGPT
List recipients of an email with their delivery and event details (open, click, bounce, unsubscribe) using cursor pagination. Useful for seeing who received a specific email and how they interacted with it.

email_list_templates

ChatGPT
List email templates for the current business with cursor pagination. Templates are reusable starting points for creating emails.

email_list_templates

ChatGPT
List email templates for the current business with cursor pagination. Templates are reusable starting points for creating emails.

email_list_templates

ChatGPT
List email templates for the current business with cursor pagination. Templates are reusable starting points for creating emails.

email_list_workflow_emails

ChatGPT
List workflow emails for the current business with cursor pagination. These are emails used in automations, not one-off blasts.

email_list_workflow_emails

ChatGPT
List workflow emails for the current business with cursor pagination. These are emails used in automations, not one-off blasts.

email_list_workflow_emails

ChatGPT
List workflow emails for the current business with cursor pagination. These are emails used in automations, not one-off blasts.

folder_create

ChatGPT
Create a new folder. Pass parentFolderId to nest it under a parent folder/campaign — folder type is inferred from the parent. Omit parentFolderId to create at the root.

folder_create

ChatGPT
Create a new folder. Pass parentFolderId to nest it under a parent folder/campaign — folder type is inferred from the parent. Omit parentFolderId to create at the root.

folder_create

ChatGPT
Create a new folder. Pass parentFolderId to nest it under a parent folder/campaign — folder type is inferred from the parent. Omit parentFolderId to create at the root.

folder_get_items

ChatGPT
Get the direct items inside a folder or campaign (immediate children, not recursive). Each item has its id, type (CAMPAIGN / FOLDER / EMAIL / TEMPLATE / AUTOMATION / FORM), and name.

folder_get_items

ChatGPT
Get the direct items inside a folder or campaign (immediate children, not recursive). Each item has its id, type (CAMPAIGN / FOLDER / EMAIL / TEMPLATE / AUTOMATION / FORM), and name.

folder_get_items

ChatGPT
Get the direct items inside a folder or campaign (immediate children, not recursive). Each item has its id, type (CAMPAIGN / FOLDER / EMAIL / TEMPLATE / AUTOMATION / FORM), and name.

folder_list_root

ChatGPT
List the top-level items for the business — campaigns and root-level folders, plus any unfiled assets at the root. Each item has id, type (CAMPAIGN / FOLDER / EMAIL / TEMPLATE / AUTOMATION / FORM), and name. Use this when the user asks 'what's at the top of my account' or you need a starting point before drilling into a specific folder/campaign with folder_get_items.

folder_list_root

ChatGPT
List the top-level items for the business — campaigns and root-level folders, plus any unfiled assets at the root. Each item has id, type (CAMPAIGN / FOLDER / EMAIL / TEMPLATE / AUTOMATION / FORM), and name. Use this when the user asks 'what's at the top of my account' or you need a starting point before drilling into a specific folder/campaign with folder_get_items.

folder_list_root

ChatGPT
List the top-level items for the business — campaigns and root-level folders, plus any unfiled assets at the root. Each item has id, type (CAMPAIGN / FOLDER / EMAIL / TEMPLATE / AUTOMATION / FORM), and name. Use this when the user asks 'what's at the top of my account' or you need a starting point before drilling into a specific folder/campaign with folder_get_items.

folder_move_assets

ChatGPT
Move assets into a folder or campaign.

folder_move_assets

ChatGPT
Move assets into a folder or campaign.

folder_move_assets

ChatGPT
Move assets into a folder or campaign.

folder_move_assets_to_root

ChatGPT
Move assets out of their current folder back to the root. For folders and campaigns, this re-parents them to the root. For other asset types (emails, forms, automations, audiences, templates), it removes the folder relationship so they appear at the root.

folder_move_assets_to_root

ChatGPT
Move assets out of their current folder back to the root. For folders and campaigns, this re-parents them to the root. For other asset types (emails, forms, automations, audiences, templates), it removes the folder relationship so they appear at the root.

folder_move_assets_to_root

ChatGPT
Move assets out of their current folder back to the root. For folders and campaigns, this re-parents them to the root. For other asset types (emails, forms, automations, audiences, templates), it removes the folder relationship so they appear at the root.

form_get

ChatGPT
Get a form by its ID. The response includes the form's current design at internalForm.draft (the complete FormData — components, fields, CRM field mappings, hidden fields, theme, settings) and its live published design at internalForm.published. Read internalForm.draft to see or edit an existing form's fields.

form_get

ChatGPT
Get a form by its ID. The response includes the form's current design at internalForm.draft (the complete FormData — components, fields, CRM field mappings, hidden fields, theme, settings) and its live published design at internalForm.published. Read internalForm.draft to see or edit an existing form's fields.

form_get

ChatGPT
Get a form by its ID. The response includes the form's current design at internalForm.draft (the complete FormData — components, fields, CRM field mappings, hidden fields, theme, settings) and its live published design at internalForm.published. Read internalForm.draft to see or edit an existing form's fields.

form_list

ChatGPT
List forms for the current business with cursor pagination.

form_list

ChatGPT
List forms for the current business with cursor pagination.

form_list

ChatGPT
List forms for the current business with cursor pagination.

form_list_submissions

ChatGPT
List submissions for a specific form.

form_list_submissions

ChatGPT
List submissions for a specific form.

form_list_submissions

ChatGPT
List submissions for a specific form.

get_artifact

ChatGPT
Get a single artifact by ID, including its type, status, linked asset ID, and content.

get_artifact

ChatGPT
Get a single artifact by ID, including its type, status, linked asset ID, and content.

get_artifact

ChatGPT
Get a single artifact by ID, including its type, status, linked asset ID, and content.

import_contacts_csv_process

ChatGPT
Step 2 of 2 for importing contacts from a CSV. Confirms the column mappings, audience/campaign config, and flips the upload job to PENDING so the import worker actually processes it. Only call this AFTER `import_contacts_csv_upload` and AFTER the user has confirmed the column mappings. Pass the jobId from step 1 and the columns array (with any user-requested edits applied). Behavior notes: - Default createNew=true means new rows that don't match an existing contact will be inserted. - Default subscribeContacts=false — only set to true when the user has consent for marketing communication. - audience and campaign are independent and both optional. Omit them if the user just wants the contacts imported with no grouping. After this tool succeeds, tell the user the import is queued and processing happens in the background — they can watch the job in the imports list. Don't say "all contacts have been imported" yet; the worker has just been triggered.

import_contacts_csv_process

ChatGPT
Step 2 of 2 for importing contacts from a CSV. Confirms the column mappings, audience/campaign config, and flips the upload job to PENDING so the import worker actually processes it. Only call this AFTER `import_contacts_csv_upload` and AFTER the user has confirmed the column mappings. Pass the jobId from step 1 and the columns array (with any user-requested edits applied). Behavior notes: - Default createNew=true means new rows that don't match an existing contact will be inserted. - Default subscribeContacts=false — only set to true when the user has consent for marketing communication. - audience and campaign are independent and both optional. Omit them if the user just wants the contacts imported with no grouping. After this tool succeeds, tell the user the import is queued and processing happens in the background — they can watch the job in the imports list. Don't say "all contacts have been imported" yet; the worker has just been triggered.

import_contacts_csv_process

ChatGPT
Step 2 of 2 for importing contacts from a CSV. Confirms the column mappings, audience/campaign config, and flips the upload job to PENDING so the import worker actually processes it. Only call this AFTER `import_contacts_csv_upload` and AFTER the user has confirmed the column mappings. Pass the jobId from step 1 and the columns array (with any user-requested edits applied). Behavior notes: - Default createNew=true means new rows that don't match an existing contact will be inserted. - Default subscribeContacts=false — only set to true when the user has consent for marketing communication. - audience and campaign are independent and both optional. Omit them if the user just wants the contacts imported with no grouping. After this tool succeeds, tell the user the import is queued and processing happens in the background — they can watch the job in the imports list. Don't say "all contacts have been imported" yet; the worker has just been triggered.

import_contacts_csv_upload

ChatGPT
Step 1 of 2 for importing contacts from a CSV file in the sandbox. This tool uploads the CSV from the agent's sandbox to Conversion and asks the server to auto-detect how each column maps to existing contact/company fields. No contacts are imported yet — this just stages the file and returns the proposed column mapping plus a 5-row preview per column. After this tool returns, you MUST do the following before continuing: 1. Show the user a clear summary of the auto-detected mappings — for each column, say what it was mapped to (e.g. "Email column → Email identifier", "First Name column → First Name field", "Source column → Custom field 'Source'") or call out columns that didn't get mapped. 2. Ask the user something like: "These are the column mappings I detected. Are you OK with these, or would you like me to change any? Should I also create a new audience or add these contacts to an existing audience or campaign?" 3. Wait for the user's reply. Do NOT call import_contacts_csv_process until the user has confirmed. Once the user confirms (and tells you any audience/campaign preferences), call import_contacts_csv_process with the jobId from this response and the (possibly edited) column mappings. Returns: { jobId, filename, columns: [{ header, variableSchemaId?, columnRole?, overwriteValues, previewData }] }.

import_contacts_csv_upload

ChatGPT
Step 1 of 2 for importing contacts from a CSV file in the sandbox. This tool uploads the CSV from the agent's sandbox to Conversion and asks the server to auto-detect how each column maps to existing contact/company fields. No contacts are imported yet — this just stages the file and returns the proposed column mapping plus a 5-row preview per column. After this tool returns, you MUST do the following before continuing: 1. Show the user a clear summary of the auto-detected mappings — for each column, say what it was mapped to (e.g. "Email column → Email identifier", "First Name column → First Name field", "Source column → Custom field 'Source'") or call out columns that didn't get mapped. 2. Ask the user something like: "These are the column mappings I detected. Are you OK with these, or would you like me to change any? Should I also create a new audience or add these contacts to an existing audience or campaign?" 3. Wait for the user's reply. Do NOT call import_contacts_csv_process until the user has confirmed. Once the user confirms (and tells you any audience/campaign preferences), call import_contacts_csv_process with the jobId from this response and the (possibly edited) column mappings. Returns: { jobId, filename, columns: [{ header, variableSchemaId?, columnRole?, overwriteValues, previewData }] }.

import_contacts_csv_upload

ChatGPT
Step 1 of 2 for importing contacts from a CSV file in the sandbox. This tool uploads the CSV from the agent's sandbox to Conversion and asks the server to auto-detect how each column maps to existing contact/company fields. No contacts are imported yet — this just stages the file and returns the proposed column mapping plus a 5-row preview per column. After this tool returns, you MUST do the following before continuing: 1. Show the user a clear summary of the auto-detected mappings — for each column, say what it was mapped to (e.g. "Email column → Email identifier", "First Name column → First Name field", "Source column → Custom field 'Source'") or call out columns that didn't get mapped. 2. Ask the user something like: "These are the column mappings I detected. Are you OK with these, or would you like me to change any? Should I also create a new audience or add these contacts to an existing audience or campaign?" 3. Wait for the user's reply. Do NOT call import_contacts_csv_process until the user has confirmed. Once the user confirms (and tells you any audience/campaign preferences), call import_contacts_csv_process with the jobId from this response and the (possibly edited) column mappings. Returns: { jobId, filename, columns: [{ header, variableSchemaId?, columnRole?, overwriteValues, previewData }] }.

learn_email_building

ChatGPT
Load the schema reference for constructing the EmailData JSON shape (components, theme, layout, merge fields, etc.). Call this before any tool that takes an email body / EmailData payload.

learn_email_building

ChatGPT
Load the schema reference for constructing the EmailData JSON shape (components, theme, layout, merge fields, etc.). Call this before any tool that takes an email body / EmailData payload.

learn_email_building

ChatGPT
Load the schema reference for constructing the EmailData JSON shape (components, theme, layout, merge fields, etc.). Call this before any tool that takes an email body / EmailData payload.

learn_form_building

ChatGPT
Load the schema reference for constructing the FormData JSON shape (components, hidden fields, theme, settings). Call this before any tool that takes a form body / FormData payload.

learn_form_building

ChatGPT
Load the schema reference for constructing the FormData JSON shape (components, hidden fields, theme, settings). Call this before any tool that takes a form body / FormData payload.

learn_form_building

ChatGPT
Load the schema reference for constructing the FormData JSON shape (components, hidden fields, theme, settings). Call this before any tool that takes a form body / FormData payload.

learn_statement_semantics

ChatGPT
Load the schema reference for the statement query language. Call this BEFORE using any tool that takes a statement or filter argument (audience_create, update_audience, contact_list, contact_count, campaign_add_members, workflow_list_runs).

learn_statement_semantics

ChatGPT
Load the schema reference for the statement query language. Call this BEFORE using any tool that takes a statement or filter argument (audience_create, update_audience, contact_list, contact_count, campaign_add_members, workflow_list_runs).

learn_statement_semantics

ChatGPT
Load the schema reference for the statement query language. Call this BEFORE using any tool that takes a statement or filter argument (audience_create, update_audience, contact_list, contact_count, campaign_add_members, workflow_list_runs).

learn_workflow_building

ChatGPT
Load the schema reference for constructing workflow / automation graph data (node + edge graph, trigger conditions, control flow nodes). Call this before any tool that takes a workflow body. If the workflow has any conditions, also call learn_statement_semantics.

learn_workflow_building

ChatGPT
Load the schema reference for constructing workflow / automation graph data (node + edge graph, trigger conditions, control flow nodes). Call this before any tool that takes a workflow body. If the workflow has any conditions, also call learn_statement_semantics.

learn_workflow_building

ChatGPT
Load the schema reference for constructing workflow / automation graph data (node + edge graph, trigger conditions, control flow nodes). Call this before any tool that takes a workflow body. If the workflow has any conditions, also call learn_statement_semantics.

list_artifacts

ChatGPT
List all artifacts created for the current agent, including pending and applied ones.

list_artifacts

ChatGPT
List all artifacts created for the current agent, including pending and applied ones.

list_artifacts

ChatGPT
List all artifacts created for the current agent, including pending and applied ones.

opportunity_count

ChatGPT
Count opportunities matching a statement filter. Use this when you only need the number (e.g. "how many open opps over $50k") rather than fetching rows. BEFORE CALLING (when passing a statement): Call learn_statement_semantics first to load the schema before calling this tool.

opportunity_count

ChatGPT
Count opportunities matching a statement filter. Use this when you only need the number (e.g. "how many open opps over $50k") rather than fetching rows. BEFORE CALLING (when passing a statement): Call learn_statement_semantics first to load the schema before calling this tool.

opportunity_count

ChatGPT
Count opportunities matching a statement filter. Use this when you only need the number (e.g. "how many open opps over $50k") rather than fetching rows. BEFORE CALLING (when passing a statement): Call learn_statement_semantics first to load the schema before calling this tool.

opportunity_get

ChatGPT
Look up an opportunity by its UUID. Returns full opportunity details: variables (custom fields), nested company, Salesforce external metadata, timestamps. Use this after opportunity_list returns an ID, or after pulling an opportunityId from a contact's engagements / opportunity-role results.

opportunity_get

ChatGPT
Look up an opportunity by its UUID. Returns full opportunity details: variables (custom fields), nested company, Salesforce external metadata, timestamps. Use this after opportunity_list returns an ID, or after pulling an opportunityId from a contact's engagements / opportunity-role results.

opportunity_get

ChatGPT
Look up an opportunity by its UUID. Returns full opportunity details: variables (custom fields), nested company, Salesforce external metadata, timestamps. Use this after opportunity_list returns an ID, or after pulling an opportunityId from a contact's engagements / opportunity-role results.

opportunity_list

ChatGPT
List opportunities for the current business with cursor pagination using the statement query language. Opportunities only exist when Salesforce sync is connected — this tool will return an empty list on businesses without it. IMPORTANT: If you haven't already, Call learn_statement_semantics first to load the schema before calling this tool. HOW TO USE: 1. To discover opportunity field IDs, call contact_list_fields (it lists ALL variable schemas including ones with objectType: "OPPORTUNITY"). 2. Build a statement JSON object and pass it as the "statement" parameter. CORE ATTRIBUTES (usable as root-level ATTRIBUTE names): "companyId", "createdAt", "updatedAt". FIELDS: Reference a custom field via the wire-format VARIABLE type with a variableSchemaId from contact_list_fields (filtered to opportunity-typed schemas). Each returned opportunity carries: id, companyId, nested company, variables map (schemaId → value), externalOpportunity (Salesforce metadata), createdAt, updatedAt. RETURNS: count (number of results in this page), opportunities array, and optional next cursor.

opportunity_list

ChatGPT
List opportunities for the current business with cursor pagination using the statement query language. Opportunities only exist when Salesforce sync is connected — this tool will return an empty list on businesses without it. IMPORTANT: If you haven't already, Call learn_statement_semantics first to load the schema before calling this tool. HOW TO USE: 1. To discover opportunity field IDs, call contact_list_fields (it lists ALL variable schemas including ones with objectType: "OPPORTUNITY"). 2. Build a statement JSON object and pass it as the "statement" parameter. CORE ATTRIBUTES (usable as root-level ATTRIBUTE names): "companyId", "createdAt", "updatedAt". FIELDS: Reference a custom field via the wire-format VARIABLE type with a variableSchemaId from contact_list_fields (filtered to opportunity-typed schemas). Each returned opportunity carries: id, companyId, nested company, variables map (schemaId → value), externalOpportunity (Salesforce metadata), createdAt, updatedAt. RETURNS: count (number of results in this page), opportunities array, and optional next cursor.

opportunity_list

ChatGPT
List opportunities for the current business with cursor pagination using the statement query language. Opportunities only exist when Salesforce sync is connected — this tool will return an empty list on businesses without it. IMPORTANT: If you haven't already, Call learn_statement_semantics first to load the schema before calling this tool. HOW TO USE: 1. To discover opportunity field IDs, call contact_list_fields (it lists ALL variable schemas including ones with objectType: "OPPORTUNITY"). 2. Build a statement JSON object and pass it as the "statement" parameter. CORE ATTRIBUTES (usable as root-level ATTRIBUTE names): "companyId", "createdAt", "updatedAt". FIELDS: Reference a custom field via the wire-format VARIABLE type with a variableSchemaId from contact_list_fields (filtered to opportunity-typed schemas). Each returned opportunity carries: id, companyId, nested company, variables map (schemaId → value), externalOpportunity (Salesforce metadata), createdAt, updatedAt. RETURNS: count (number of results in this page), opportunities array, and optional next cursor.

opportunity_list_contacts

ChatGPT
List the contacts attached to an opportunity along with each contact's role on it (e.g. Decision Maker, Influencer) and whether they are the primary contact. Answers 'who's on this opportunity?'. Returns contact details (id, name, email, etc.) embedded with the OpportunityContactRole metadata.

opportunity_list_contacts

ChatGPT
List the contacts attached to an opportunity along with each contact's role on it (e.g. Decision Maker, Influencer) and whether they are the primary contact. Answers 'who's on this opportunity?'. Returns contact details (id, name, email, etc.) embedded with the OpportunityContactRole metadata.

opportunity_list_contacts

ChatGPT
List the contacts attached to an opportunity along with each contact's role on it (e.g. Decision Maker, Influencer) and whether they are the primary contact. Answers 'who's on this opportunity?'. Returns contact details (id, name, email, etc.) embedded with the OpportunityContactRole metadata.

rename_folder

ChatGPT
Rename a folder by its id. Updates the live folder's name immediately. Does not move items between folders — use folder_move_assets for that.

rename_folder

ChatGPT
Rename a folder by its id. Updates the live folder's name immediately. Does not move items between folders — use folder_move_assets for that.

rename_folder

ChatGPT
Rename a folder by its id. Updates the live folder's name immediately. Does not move items between folders — use folder_move_assets for that.

rename_workflow

ChatGPT
Rename an automation by its id. Updates the live automation's name immediately — no review cycle. Use this when the user asks to rename a workflow / automation, or one created earlier needs a clearer name. Do NOT use this tool to change the automation's structure (nodes, edges, triggers).

rename_workflow

ChatGPT
Rename an automation by its id. Updates the live automation's name immediately — no review cycle. Use this when the user asks to rename a workflow / automation, or one created earlier needs a clearer name. Do NOT use this tool to change the automation's structure (nodes, edges, triggers).

rename_workflow

ChatGPT
Rename an automation by its id. Updates the live automation's name immediately — no review cycle. Use this when the user asks to rename a workflow / automation, or one created earlier needs a clearer name. Do NOT use this tool to change the automation's structure (nodes, edges, triggers).

sync_list_batches

ChatGPT
List Salesforce sync batches. Each batch represents a sync run with metrics.

sync_list_batches

ChatGPT
List Salesforce sync batches. Each batch represents a sync run with metrics.

sync_list_batches

ChatGPT
List Salesforce sync batches. Each batch represents a sync run with metrics.

sync_list_logs

ChatGPT
List individual sync logs. Provide exactly one of batchId, contactId, or companyId to choose the scope.

sync_list_logs

ChatGPT
List individual sync logs. Provide exactly one of batchId, contactId, or companyId to choose the scope.

sync_list_logs

ChatGPT
List individual sync logs. Provide exactly one of batchId, contactId, or companyId to choose the scope.

update_audience

ChatGPT
Immediately update an existing audience's name, type, and/or dynamic filter. Use add_audience_contacts to add contacts to a static audience.

update_audience

ChatGPT
Immediately update an existing audience's name, type, and/or dynamic filter. Use add_audience_contacts to add contacts to a static audience.

update_audience

ChatGPT
Immediately update an existing audience's name, type, and/or dynamic filter. Use add_audience_contacts to add contacts to a static audience.

update_campaign

ChatGPT
Immediately update an existing campaign's name and/or description.

update_campaign

ChatGPT
Immediately update an existing campaign's name and/or description.

update_campaign

ChatGPT
Immediately update an existing campaign's name and/or description.

update_email

ChatGPT
Immediately update an existing blast or workflow email (partial — set only the fields you change). For a blast, statement / sendDate set its recipients/schedule. Read the current email first with email_get. Cannot send, schedule, publish, or edit templates.

update_email

ChatGPT
Immediately update an existing blast or workflow email (partial — set only the fields you change). For a blast, statement / sendDate set its recipients/schedule. Read the current email first with email_get. Cannot send, schedule, publish, or edit templates.

update_email

ChatGPT
Immediately update an existing blast or workflow email (partial — set only the fields you change). For a blast, statement / sendDate set its recipients/schedule. Read the current email first with email_get. Cannot send, schedule, publish, or edit templates.

update_form

ChatGPT
Immediately update an existing form's metadata (name, CRM-sync, subscribe behavior). To change the form's design/fields, use update_form_draft.

update_form

ChatGPT
Immediately update an existing form's metadata (name, CRM-sync, subscribe behavior). To change the form's design/fields, use update_form_draft.

update_form

ChatGPT
Immediately update an existing form's metadata (name, CRM-sync, subscribe behavior). To change the form's design/fields, use update_form_draft.

update_form_draft

ChatGPT
Immediately replace an existing form's design (its draft FormData). Read the current design first via form_getinternalForm.draft, modify it, and pass the COMPLETE FormData (not a diff). Cannot publish. BEFORE CALLING: Call learn_form_building first to load the schema before calling this tool.

update_form_draft

ChatGPT
Immediately replace an existing form's design (its draft FormData). Read the current design first via form_getinternalForm.draft, modify it, and pass the COMPLETE FormData (not a diff). Cannot publish. BEFORE CALLING: Call learn_form_building first to load the schema before calling this tool.

update_form_draft

ChatGPT
Immediately replace an existing form's design (its draft FormData). Read the current design first via form_getinternalForm.draft, modify it, and pass the COMPLETE FormData (not a diff). Cannot publish. BEFORE CALLING: Call learn_form_building first to load the schema before calling this tool.

workflow_get

ChatGPT
Get details about a specific automation workflow including its nodes, edges, status, and structure.

workflow_get

ChatGPT
Get details about a specific automation workflow including its nodes, edges, status, and structure.

workflow_get

ChatGPT
Get details about a specific automation workflow including its nodes, edges, status, and structure.

workflow_get_metrics

ChatGPT
Get aggregate metrics for an automation: total runs, distinct contacts, completed, running, failed, and average duration. Use this to answer "how is workflow X doing" without paging through individual runs. Optionally pass a statement filter to scope the numbers to a subset of contacts. NOTE: averageDuration is in NANOSECONDS (Go's wire format). BEFORE CALLING (when passing a statement): Call learn_statement_semantics first to load the schema before calling this tool.

workflow_get_metrics

ChatGPT
Get aggregate metrics for an automation: total runs, distinct contacts, completed, running, failed, and average duration. Use this to answer "how is workflow X doing" without paging through individual runs. Optionally pass a statement filter to scope the numbers to a subset of contacts. NOTE: averageDuration is in NANOSECONDS (Go's wire format). BEFORE CALLING (when passing a statement): Call learn_statement_semantics first to load the schema before calling this tool.

workflow_get_metrics

ChatGPT
Get aggregate metrics for an automation: total runs, distinct contacts, completed, running, failed, and average duration. Use this to answer "how is workflow X doing" without paging through individual runs. Optionally pass a statement filter to scope the numbers to a subset of contacts. NOTE: averageDuration is in NANOSECONDS (Go's wire format). BEFORE CALLING (when passing a statement): Call learn_statement_semantics first to load the schema before calling this tool.

workflow_get_run

ChatGPT
Get a single automation run by its ID. Returns the run details including status, activity log, nodes visited, and timing.

workflow_get_run

ChatGPT
Get a single automation run by its ID. Returns the run details including status, activity log, nodes visited, and timing.

workflow_get_run

ChatGPT
Get a single automation run by its ID. Returns the run details including status, activity log, nodes visited, and timing.

workflow_list

ChatGPT
List automations for the current business with cursor pagination and optional sorting.

workflow_list

ChatGPT
List automations for the current business with cursor pagination and optional sorting.

workflow_list

ChatGPT
List automations for the current business with cursor pagination and optional sorting.

workflow_list_runs

ChatGPT
List runs for an automation. Each run represents a contact's journey through the automation. Supports statement filters to narrow results by contact properties. BEFORE CALLING (when passing a statement): Call learn_statement_semantics first to load the schema before calling this tool.

workflow_list_runs

ChatGPT
List runs for an automation. Each run represents a contact's journey through the automation. Supports statement filters to narrow results by contact properties. BEFORE CALLING (when passing a statement): Call learn_statement_semantics first to load the schema before calling this tool.

workflow_list_runs

ChatGPT
List runs for an automation. Each run represents a contact's journey through the automation. Supports statement filters to narrow results by contact properties. BEFORE CALLING (when passing a statement): Call learn_statement_semantics first to load the schema before calling this tool.

Capabilities

Writes

App Stats

228

Tools

ChatGPT

Platforms

Category

CRM Records

Works with

ChatGPT

Data refreshed daily