Integration details
Description
Build forms, contact lists, and automations without leaving ChatGPT. Use natural language to analyze your form and survey data, create data-rich contact profiles, and build automations that turn your form respondents into customers. Typeform makes it easy to understand and act on your customer data—without switching tools.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Form & Survey Builders
- Secondary Subcategories
- None listed
- Brand
- Typeform
- Access
- Account required
- First tracked
- 2026-08-18
- Tool count
- 63
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
ChatGPT Plugin Discovery Score
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Competing in ChatGPT Form & Survey Builders
View Category63 tools agents can invoke
Add a delay step to an existing automation (workflow/flow). A delay step pauses the automation for a fixed duration before the following step runs. ## Prerequisites - `account_id` — obtain via `accounts-list_accounts`. - `automation_id` — obtain via `public_list_automations`. - `after_step_id` — obtain via `public_get_automation` (`workflow.steps[].id`). ## Positioning - position: "entrypoint" (insert at start; new step becomes entrypoint, pointing at the old one) | "tail" (append after the last step; no lookup needed) | "after" (insert after after_step_id). - after_step_id: required only for "after". Id of the step to follow. null for "entrypoint"/"tail". - No "before" position: to insert before step X, use "entrypoint" if X is the entrypoint, else "after" with after_step_id set to the step whose next_ids contains X.
automations-public_add_delay_step
Add an email step to an existing automation (workflow/flow). When scope="respondent" and "to" is empty, it defaults to the automation's first email field ("{{field:<EMAIL_FIELD_REF>}}"). ## Prerequisites - `account_id` — obtain via `accounts-list_accounts`. - `automation_id` — obtain via `public_list_automations`. - `after_step_id` — obtain via `public_get_automation` (`workflow.steps[].id`). - Field refs used in `to`/`subject`/`body` (`{{field:<REF>}}`) — obtain via `public_list_referenceable_fields`. ## Positioning - position: "entrypoint" (insert at start; new step becomes entrypoint, pointing at the old one) | "tail" (append after the last step; no lookup needed) | "after" (insert after after_step_id). - after_step_id: required only for "after". Id of the step to follow. null for "entrypoint"/"tail". - No "before" position: to insert before step X, use "entrypoint" if X is the entrypoint, else "after" with after_step_id set to the step whose next_ids contains X. ## Sender - sender / reply_to: Optional. If both null, the tool auto-fills them from the account's first authorized email domain ## Field refs (dynamic content) CRITICAL: Use the field's 'ref' property (from list_referenceable_fields) Mustache syntax `{{field:<FIELD_REF>}}` works in three placements: - Subject: plain mustache, e.g. `"Welcome {{field:01KH3G1C7Z5SVWQ3ZATVHEDAWE}}"` - "to" array entries: plain mustache (the respondent's email field, for "respondent" scope) - Body HTML: must be wrapped in a span (see below) ## Body HTML structure These are strict rules, not general guidelines. Always follow these: All body content MUST be wrapped in `<div id="email-builder">...</div>` — the email renderer requires this. ### Field reference span (body only) ```html <span data-ref="FIELD_REF" data-title="FIELD_NAME" data-variable-type="field">{{field:FIELD_REF}}</span> ``` - `data-ref`: field ref (not id) - `data-title`: human-readable field name (e.g., "Email", "Name") - `data-variable-type`: must be `"field"` - Inner text: `{{field:FIELD_REF}}` ### CTA buttons When the user requests a button, CTA, call to action, action link, or similar, use this exact structure inside the body: ```html <p data-id="UUID" class="email-cta-wrapper"><a href="URL" target="_blank" rel="noopener noreferrer nofollow" class="email-cta" >LABEL</a></p> ``` - `data-id`: unique UUID v4 on the `<p>` - `class="email-cta-wrapper"` on the `<p>` (required) - `href`: destination URL on the `<a>` - `target="_blank" rel="noopener noreferrer nofollow"` on the `<a>` (required) - `class="email-cta"` on the `<a>` (required) - Inner text of `<a>`: button label ### Plain links For a plain inline hyperlink (no button styling), use this structure inside the body: ```html <p data-id="UUID" class=""><a href="URL" target="_blank" rel="noopener noreferrer nofollow">LINK_TEXT</a></p> ``` - `data-id`: unique UUID v4 on the `<p>` - `href`: destination URL on the `<a>` - `target="_blank" rel="noopener noreferrer nofollow"` on the `<a>` (required) - No `class` on the `<a>` (distinguishes link from CTA button) - Inner text of `<a>`: link label (often the URL itself) Use plain links for inline references; use the CTA structure above when the user asks for a button or prominent call-to-action. ## "self" scope validation When scope is "self", the "to" array MUST contain at least one real, valid email address. Do NOT use placeholders like `<EMAIL_ADDRESS>`, `TODO`, or template strings. Ask the user if you don't know the address.
automations-public_add_email_step
Adds a placeholder send-to-integration step to an automation (workflow/flow). Use this whenever the user wants to send data to ANY third-party app (e.g., Slack, HubSpot, Google Sheets, Zapier, Microsoft Teams, Airtable, Excel, Mailchimp). Important: This tool does NOT configure, select, or authorize the integration. Afterward, instruct the user to open the Typeform UI to select their destination app and complete the setup. ## Prerequisites - `account_id` — obtain via `accounts-list_accounts`. - `automation_id` — obtain via `public_list_automations`. - `after_step_id` — obtain via `public_get_automation` (`workflow.steps[].id`). ## Positioning - position: "entrypoint" (insert at start; new step becomes entrypoint, pointing at the old one) | "tail" (append after the last step; no lookup needed) | "after" (insert after after_step_id). - after_step_id: required only for "after". Id of the step to follow. null for "entrypoint"/"tail". - No "before" position: to insert before step X, use "entrypoint" if X is the entrypoint, else "after" with after_step_id set to the step whose next_ids contains X.
automations-public_add_integration_step
Add a webhook step to an existing automation (workflow/flow). ## Prerequisites - `account_id` — obtain via `accounts-list_accounts`. - `automation_id` — obtain via `public_list_automations`. - `after_step_id` — obtain via `public_get_automation` (`workflow.steps[].id`). ## Positioning - position: "entrypoint" (insert at start; new step becomes entrypoint, pointing at the old one) | "tail" (append after the last step; no lookup needed) | "after" (insert after after_step_id). - after_step_id: required only for "after". Id of the step to follow. null for "entrypoint"/"tail". - No "before" position: to insert before step X, use "entrypoint" if X is the entrypoint, else "after" with after_step_id set to the step whose next_ids contains X.
automations-public_add_webhook_step
## What this tool does Computes aggregate measures (counts, averages, sums, NPS scores, and more) for a single field or an entire dataset. Call insights-public_discover first to resolve form_id / audience_id / field_id / property_id and to learn each field's filter_type, filter_operators, and filter_values before filtering. ## Use when - User asks for summary statistics, totals, averages, counts, or scores - User wants aggregated data rather than individual rows - User asks about NPS score, response count, average rating, or similar rolled-up metrics ## Also known as summary statistics, totals, counts, averages, sums, NPS scores, aggregate analytics, rolled-up metrics ## Constraints - Provide exactly one of form_id or audience_id — never both, never neither. - Every optional parameter must be sent as null when unset. ## Supported field types - forms dataset: text, number, scale, boolean, choices, dropdown, nps, date, multi_format, transcript, payment, matrix, ranking. - contacts dataset: text, text_list, number.
insights-public_aggregate
Create one or more contacts lists (segments) in the Contacts database in a single call. Always use this tool to create contacts lists, even when creating just one — pass a single-element `lists` array. ## Prerequisites - Call list_contacts_database_properties to find property IDs for filter and sort settings in each list. - account_id: Required. Call list_accounts to obtain this value if not already known. ## Use cases - Create one or several segments to organize contacts - Create lists with custom filter, sort, or table column settings ## Inputs - lists (required): An array of list definitions. Each item contains: - name (required): The list's name (max 255 characters) - settings (required, nullable): Filter, sort, and table column configuration. Pass null for a list with no filters. - Maximum 100 lists per call. ## Output format Confirm the created lists to the user, including each list's name and ID.
contacts-public_bulk_create_contacts_lists
Create multiple custom properties on the user's Contacts database schema in a single operation. Use this tool when you need to create several custom fields at once, for example when setting up form-to-contact mappings that require multiple new properties. ## Prerequisites - account_id: Required. Call list_accounts to obtain this value if not already known. ## What this tool does - Creates multiple new custom properties in one call, available on all contacts. ## What this tool cannot do - Create standard Typeform contact properties (Bio, Company, Job Title, etc.). To activate disabled standard properties, use the enable_standard_contacts_database_properties tool instead. ## Inputs - properties: An array of property definitions, each containing: - name: The name for the new property (must be unique). - type: The property type. The type is permanent and cannot be changed after creation. - long_text: General text (default) - email: Email addresses - number: Numeric values - phone_number: Phone numbers - timestamp: Date values - text_list: Multiple choice options (configure with constraints) - constraints: Optional. Used with text_list to define choices and selection limits. - choices: Array of {label, value} objects. - min_selected: Minimum selections required. - max_selected: Maximum selections allowed. Set to 1 for single choice. ## Output - The list of created properties.
contacts-public_bulk_create_custom_contacts_database_properties
Create or update multiple contacts in the user's Contacts database in a single operation. Use this tool when the user wants to add, create, update, or import several contacts at once. ## Prerequisites - Call list_contacts_database_properties to find property IDs for each contact's properties. - account_id: Required. Call list_accounts to obtain this value if not already known. ## What this tool does - For each contact, if a contact with the same identifier (e.g. email) already exists, it updates that contact's properties. Otherwise, it creates a new contact. - Processes contacts in batches for efficiency. - Deduplicates contacts within the same call by identifier, merging properties forward. ## Inputs - contacts: An array of contact definitions, each containing: - properties: Contact field values as property ID and value pairs. - At least one identifying property (e.g. email) is required per contact. - Maximum 1000 contacts per call. ## Output - The list of created or updated contacts. Each contact includes its id, identifier (value that uniquely identifies the contact) and an array of associated contact properties. ## Property Value Formats When providing property values, use the following formats based on property type: - Text (email, short_text, long_text, phone_number, code): {"type": "text", "text": "value"} - Number: {"type": "number", "number": 42.0} - Timestamp: {"type": "timestamp", "timestamp": "2024-01-15T00:00:00Z"} - Select (single_select, multi_select, text_list): {"type": "text_list", "text_list": ["option1"]}
contacts-public_bulk_upsert_contacts
Validate a batch of patch operations against a form draft without persisting anything. IMPORTANT: This does not save. You MUST call forms-public_patch_form with the returned validation_token immediately after to persist. If side_effects is non-empty, explain them to the user in plain language and warn them before committing. Ops run sequentially in memory, so order add_field / add_ending before any add_logic ops that reference them; anything not committed and not earlier in the batch does not exist yet. First failure stops validation and returns no token. ## Prerequisites - form_id: Required. Call forms-public_list_forms to find it, or use the id returned by forms-public_create_form. - account_id: Required. Call accounts-list_accounts to obtain this value if not already known. ### Parameters - account_id: Account ID (required) - form_id: The form ID (required) - ops: The batch of patch operations to validate (required) ### Common mistakes - Choice conditions: condition.value must be a choice REF, not a label. Read refs via forms-public_get_form(view=fields) first. - add_ending: set screen_ref explicitly if add_logic in the same batch references it; omit for an auto-generated ref. Call forms-public_get_capabilities for supported types, validation keys, and error codes.
forms-public_validate_patch
## What this tool does Computes measures bucketed over time for a single field or an entire dataset. Call insights-public_discover first to resolve form_id / audience_id / field_id / property_id and to learn each field's filter_type, filter_operators, and filter_values before filtering. ## Use when - User asks how responses, counts, scores, or averages changed over time - User wants a trend, chart, or time series of any metric - User asks about monthly/weekly/daily breakdowns of responses or scores ## Also known as trend, time series, time-series, over time, by month, by week, by day, timeline, chart data, historical data ## Constraints - Provide exactly one of form_id or audience_id — never both, never neither. - Every optional parameter must be sent as null when unset. ## Supported field types - forms dataset: text, number, scale, boolean, choices, dropdown, nps, date, multi_format, transcript, payment, matrix, ranking. - contacts dataset: text, text_list, number.
insights-public_timeseries
Create a new Automation (also called "workflows") with an associated trigger. Creates empty automation (no steps, no condition). Use add_<step_type>_step tools to add steps to it, and patch_trigger to set a trigger condition. See the input schema's field descriptions for per-trigger_type semantics of trigger_form_id, filter_contact_list_ids, filter_partial_submit_refs and filter_ending_refs. ## Prerequisites - `account_id` — obtain via `accounts-list_accounts`. - `trigger_form_id` — obtain via `forms-public_list_forms`. - `filter_contact_list_ids` — obtain via `contacts-public_list_contacts_lists`. ## Responding On success, always include this link in your response. Substitute {account_id} with the account_id input value and {automation_id} with the id field from the tool output: "👉 Open in Typeform: https://admin.typeform.com/accounts/{account_id}/workflows/{automation_id}"
automations-public_create_automation
Create a new contact in the user's Contacts database. Use this tool when the user wants to add, create, or register a new contact. ## Prerequisites - Call list_contacts_database_properties to find property IDs for the properties field. - account_id: Required. Call list_accounts to obtain this value if not already known. ## What this tool does - Creates a single contact with the provided properties. ## Inputs - properties: Contact field values as property ID and value pairs. - At least one identifying property (e.g. email) is required. ## Output - The created contact. Includes its id, identifier (value that uniquely identifies the contact) and an array of associated contact properties. ## Property Value Formats When providing property values, use the following formats based on property type: - Text (email, short_text, long_text, phone_number, code): {"type": "text", "text": "value"} - Number: {"type": "number", "number": 42.0} - Timestamp: {"type": "timestamp", "timestamp": "2024-01-15T00:00:00Z"} - Select (single_select, multi_select, text_list): {"type": "text_list", "text_list": ["option1"]}
contacts-public_create_contact
Create a new contacts list (segment) in the Contacts database. ## Prerequisites - Call list_contacts_database_properties to find property IDs for filter and sort settings. - account_id: Required. Call list_accounts to obtain this value if not already known. ## Use cases - Create a new segment to organize contacts - Create a list with custom filter and sort settings ## Input - name (required): The name for the new contacts list (max 255 characters) - settings (required, nullable): Filter, sort, and table column configuration. Pass null for a list with no filters. ## Output format Confirm the created list to the user, including its name and ID.
contacts-public_create_contacts_list
Create a form property mapping (sync config) to connect a form to contact properties. ## Use cases - Map form fields and variables to contact properties ## Prerequisites Before using this tool, call get_form_property_compatibility with the form_id to get: - Available form fields and variables with their IDs - Compatible contact properties for each form field/variable - Available choices for each field (in the choices array) - If the form_id is not known, call list_forms first to discover it. - account_id: Required. Call list_accounts to obtain this value if not already known. ## Mapping to email subscription status When mapping a field to the email subscription status property (template_id: "contacts.subscription_status"), you MUST include value_maps to translate form answers to email subscription status values. ### For checkbox fields (choice-based — use choice_id): Checkbox fields produce choice answers, NOT boolean. Use source.type "choice_id" with the choice ID from the field's choices array. A single-choice checkbox (e.g. marketing consent) maps the checked choice to "subscribed": value_maps: [ {source: {type: "choice_id", choice_id: "<consent-choice-id>"}, target: {type: "text_list", text_list: ["subscribed"]}} ] ### For multiple_choice / picture_choice fields (choice-based — use choice_id): Use source.type "choice_id" with the choice ID from the field's choices array: value_maps: [ {source: {type: "choice_id", choice_id: "<yes-choice-id>"}, target: {type: "text_list", text_list: ["subscribed"]}}, {source: {type: "choice_id", choice_id: "<no-choice-id>"}, target: {type: "text_list", text_list: ["never_subscribed"]}} ] ### For yes_no / legal fields (boolean answer type — use boolean): These are the only truly boolean fields. Use source.type "boolean": value_maps: [ {source: {type: "boolean", boolean: true}, target: {type: "text_list", text_list: ["subscribed"]}}, {source: {type: "boolean", boolean: false}, target: {type: "text_list", text_list: ["never_subscribed"]}} ] ## Output format Present the created form property mapping to the user.
contacts-public_create_form_property_mappings
Create a new, empty Typeform. ## Prerequisites - workspace: Required. Call workspaces-list_workspaces to obtain the workspace href URL. - account_id: Required. Call accounts-list_accounts to obtain this value if not already known. ### Parameters - account_id: Account ID (required) - title: The title of the form (required) - workspace: Workspace href URL, e.g. "https://api.typeform.com/workspaces/abc123" (required) ### Output Returns the created form with its ID, title, workspace, theme, and other metadata. The form starts empty and unpublished. ### After creating Share the builder URL with the user so they can open and edit the form: https://admin.typeform.com/form/{form_id}/create ### Building out the form After creating, add content through the standard edit flow: 1. forms-public_get_capabilities to learn supported field types and ops 2. forms-public_get_form(view=skeleton) to confirm the starting state 3. forms-public_validate_patch with add_field (and add_logic) ops 4. forms-public_patch_form to commit 5. forms-public_publish_form only when the user wants it live Do NOT provide the public form URL (the form is empty and unpublished).
forms-public_create_form
Delete a contact from the Contacts database. ## Prerequisites - Call list_contacts first to find the contact ID you want to delete. - account_id: Required. Call list_accounts to obtain this value if not already known. ## Output format Confirm the deletion was successful.
contacts-public_delete_contact
Delete multiple properties from the Contacts database schema in a single operation. WARNING: This action is irreversible. Either all properties are deleted successfully, or none are deleted (all-or-nothing). ## Prerequisites - account_id: Required. Call list_accounts to obtain this value if not already known. ## Use cases - Remove multiple properties that are no longer needed in one operation - Clean up unused properties efficiently - Batch deletion when reorganizing contact schema ## Restrictions (same as single delete) - Properties with prevent_delete: true cannot be deleted (e.g. Email subscription status) - The identifier property cannot be deleted (at least one identifier must remain) - All-or-nothing: If ANY property fails validation, NO properties are deleted ## Side effects (same as single delete) - Lists/segments: Deletion will fail if any list references ANY of these properties in its filters, sort orders, or visible columns — those lists must be updated first - Contact data: Existing values for deleted properties are not removed from contacts, but become inaccessible - Form mappings: Any form sync mappings targeting deleted properties will silently stop populating them - Enrichment: Enrichment configurations referencing deleted properties stop being applied ## Input - property_ids (required): Array of property IDs to delete (use list_contacts_database_properties to find IDs). Must contain at least one property ID. ## Output format Confirm all properties were successfully deleted with the count of deleted properties.
contacts-public_delete_contacts_database_properties
Delete a property from the Contacts database schema. WARNING: This action is irreversible. ## Prerequisites - account_id: Required. Call list_accounts to obtain this value if not already known. ## Use cases - Remove a property that is no longer needed - Clean up unused properties from the contacts schema ## Restrictions - Properties with prevent_delete: true cannot be deleted (e.g. Email subscription status) - The identifier property cannot be deleted ## Side effects - Lists/segments: Deletion will fail if any list references this property in its filters, sort orders, or visible columns — those lists must be updated first - Contact data: Existing values for the deleted property are not removed from contacts, but become inaccessible - Form mappings: Any form sync mappings targeting this property will silently stop populating it - Enrichment: Enrichment configurations referencing this property stop being applied ## Input - property_id (required): The ID of the property to delete (use list_contacts_database_properties to find IDs) ## Output format Confirm the deletion was successful.
contacts-public_delete_contacts_database_property
Delete a contacts list (segment) from the Contacts database. ## Prerequisites - Call list_contacts_lists to find the list and confirm its ID before deleting. - account_id: Required. Call list_accounts to obtain this value if not already known. ## Use cases - Remove a segment that is no longer needed - Clean up unused lists ## Output format Confirm the deletion was successful.
contacts-public_delete_contacts_list
Delete/remove a form based on its ID. ## Prerequisites - id: Required. Call forms-public_list_forms to find the form to delete. - account_id: Required. Call accounts-list_accounts to obtain this value if not already known. ## Use cases - Remove a form that is no longer needed - Clean up test forms ## Parameters - id: The form ID to delete (required) ## Output Returns empty response on success.
forms-public_delete_form
Delete a form property mapping (sync config) by its ID. Use this when the user wants to stop syncing a form's responses into Contacts, or disconnect a form. ## Prerequisites - Call list_form_property_mappings to find the sync_config_id (or get_form_property_mappings_by_id to inspect it first). - account_id: Required. Call list_accounts to obtain this value if not already known. ## Use cases - Remove form property mappings that are no longer needed ## Output format Confirms the deletion was successful.
contacts-public_delete_form_property_mappings
Return the schema of analytics data available for a given scope. Call this first when the user wants to analyze, summarize, rank, or retrieve form responses - before querying submissions or running any analytics query (insights-public_aggregate, insights-public_toplist, insights-public_timeseries or insights-public_list). It returns the field IDs, measures, dimensions, and filters needed to run those queries. ## Use when - User wants to analyze, summarize, rank, or retrieve form responses and the field IDs/measures/dimensions/filters are not yet known - User asks what data or fields are available for a form or audience - An analytics query is about to be run and its required IDs or filter options are unknown ## What this tool does Resolves the queryable schema for a given form or audience: returns datasets, and for each dataset the fields it contains, with each field's answer_type, supported measures, dimensions, query types, and filter operators. ## Also known as schema, field catalog, available fields, dataset metadata, queryable fields, form schema ## Constraints - Provide exactly one of form_id or audience_id, not both. - Every optional parameter must be sent as null when unset. Refer to the schema for exact shapes. ## Output - datasets: array of datasets, each with fields. Each field lists answer_type, measures, dimensions, supported_query_types (e.g. "aggregate", "toplist", "list"), and filter operators. ## Resolving a form by name If the user refers to a form by topic/name/description rather than ID, first call forms-public_list_forms with the search parameter set to keywords from the user's message; it returns forms with titles and IDs. If multiple match, ask the user which form they mean before proceeding.
insights-public_discover
Duplicate an existing Typeform form. Creates a new form that is a copy of the source form. The new form is unpublished regardless of the source form's published state. ## Prerequisites - form_id: Required. Call forms-public_list_forms to find it, or use the id returned by forms-public_create_form. - account_id: Required. Call accounts-list_accounts to obtain this value if not already known. ## What is preserved - All fields, logic, variables, hidden fields - Theme, settings, welcome/thank-you/consent screens, outcome, CUI settings - Attachments, layouts, and media (re-referenced to the new form) - Knowledge entries (duplicated with remapped IDs) - Translations/messages (best-effort; may be absent if copying fails) ## What is reset - New form ID and timestamps (CreatedAt, UpdatedAt) - PayPal merchant_id and Google Calendar calendar_id are cleared - Email consent notification config reset to account default - Form is always created as unpublished (IsPublic = false) ## Parameters - account_id: Account ID (required) - form_id: ID of the source form to duplicate (required) - title: Title for the new form. Omit to inherit the source form's title. - workspace_id: Workspace for the new form. Always ask the user which workspace to duplicate into before calling this tool.
forms-public_duplicate_form
Return the capability matrix for the Typeform form editing tools. Call once before authoring any ops, and use the response instead of guessing field types, op names, or validation keys. ### Response fields - supported_types: field types accepted by forms-public_patch_form - container_types: types that accept nested fields. Containers have no settable property keys and do not appear in property_keys_by_type. Their children are managed via add_field (set parent_ref to the container's ref), move_field (move an existing field into the container via move_to.parent_ref, out to the top level via move_to.parent_ref = null, or reorder within the current scope via before_ref alone), and delete_field — not through a properties bag. - choice_bearing_types / choices_required_on_add: types that carry or require choices - validation_keys_by_type: accepted validation keys per field type - property_keys_by_type: accepted property keys per field type - patch_ops: op verbs grouped by domain (field / logic) - condition_ops_by_type: valid ops per field type. Use this to author logic rules. - logic_actions: accepted action types for logic rules - error_codes / side_effect_codes / concurrency_codes: with recovery hints
forms-public_get_capabilities
Activate disabled standard properties on the user's Contacts database. Use this tool when you need to enable standard (built-in) properties that are currently disabled, for example before creating a form-to-contact mapping that references them. ## Prerequisites - Call list_contacts_database_properties to discover available property IDs. Standard properties eligible for enabling are those where disabled: true and template_id is set. - account_id: Required. Call list_accounts to obtain this value if not already known. ## What this tool does - Activates one or more disabled standard properties so they become visible and usable. - Only works on standard properties (those with a template_id). - Properties that are already enabled are returned unchanged. ## Inputs - property_ids: An array of property IDs to enable. ## Output - The list of enabled properties.
contacts-public_enable_standard_contacts_database_properties
Get authorized email domains for the current account, typically used as senders in an automation (workflow/flow) email step. ## Prerequisites - `account_id` — obtain via `accounts-list_accounts`.
automations-public_get_authorized_email_domains
Get automation (workflow/flow) by its ID. Returns the working state (published baseline + any pending draft operations). ## Prerequisites - `account_id` — obtain via `accounts-list_accounts`. - `automation_id` — obtain via `public_list_automations`. ## Output - workflow: - id - name - status: DRAFT | ACTIVE | PAUSED - entrypoint_id: ID of the first step to execute - steps: Array of step objects - id - type: DELAY | SEND_EMAIL | SEND_WEBHOOK | SEND_TO_INTEGRATION | TERMINATE - next_ids: Downstream step IDs - triggers: Trigger associations (id, type, enabled) - triggered: Total run count - last_patch_id: Pass as last_patch_id on the next patch
automations-public_get_automation
Get a single contact by ID with property metadata included. Use this tool when you need to fetch a specific contact and want property names/types without a separate API call. ## Prerequisites - Call list_contacts to find the contact_id. Filter by email or other properties to identify the correct contact. - account_id: Required. Call list_accounts to obtain this value if not already known. ## What this tool does - Returns a single contact with all its properties - Property metadata (name, type, template_id) is automatically included - No need to call list_contacts_database_properties separately ## Inputs - contact_id: The UUID of the contact to fetch ## Output - id: Contact UUID - identifier: Primary identifier value (e.g., email address) - properties: Array of properties, each with: - property_id: The property UUID - value: The property value - name: Human-readable property name (e.g., "Email", "Name") - type: Property type (e.g., "email", "short_text", "number") - template_id: Standard property template ID (null for custom properties)
contacts-public_get_contact
Get specific contact properties by their IDs. Use this tool when you need information about specific properties, particularly for validation before performing operations like deletion. ## Prerequisites - account_id: Required. Call list_accounts to obtain this value if not already known. ## Use cases - Fetch property names to show users what will be affected by an operation - Validate that property IDs exist before performing actions - Get detailed information about specific properties without fetching all properties ## Input - property_ids (required): Array of property IDs to retrieve. Use list_contacts_database_properties to discover available property IDs. ## Output - Returns an array of properties that were found. Properties that don't exist are silently omitted. - Each property includes: id, name, type, icon, identifier flag, template_id, constraints, default value, and other metadata. ## Important notes - If a property ID doesn't exist, it won't appear in the results (no error is returned) - Duplicate property IDs in the input are automatically deduplicated - To check if all requested properties exist, compare the number of results with the number of requested IDs
contacts-public_get_contacts_database_properties
Get a contacts list (segment) by ID, returning its name and timestamps. ## Prerequisites - Call list_contacts_lists to find available lists and their IDs. - account_id: Required. Call list_accounts to obtain this value if not already known. ## Use cases - Confirm a list's details before deleting or updating it - Look up a list's name from its ID
contacts-public_get_contacts_list
Get the working state of an email notification template (used by an automation/workflow/flow email step), including changes not yet published. ## Prerequisites - `account_id` — obtain via `accounts-list_accounts`. - `headless_form_id` and `template_id` — obtain via `public_get_automation` (the email step's `email_notifications` map: key is the headless form id, value has `template_id`).
automations-public_get_email_notification
Get compatible property mappings for a form. ## Prerequisites - If the form_id is not known, call list_forms first to discover it. - account_id: Required. Call list_accounts to obtain this value if not already known. ## Use cases - Preparing to create a mapping between a form and contact properties ## Output format Returns compatible properties for each form field and variable: 1. **field_compatibilities**: For each form field, the field and list of contact properties it can be mapped to 2. **variable_compatibilities**: For each form variable, the variable and list of contact properties it can be mapped to Each field includes a **choices** array: - For **multiple_choice**, **picture_choice**, **dropdown**, **ranking** fields: contains the actual choice options with their IDs and labels from the form definition. - For **checkbox** fields: contains the actual choice options from the form (checkbox is choice-based, NOT boolean). - For **yes_no** and **legal** fields: contains synthesized boolean choices [{id:"true", label:"Yes"}, {id:"false", label:"No"}]. - For other field types: empty array. Use these choice IDs when constructing value_maps for the create_form_property_mappings tool. The compatible_properties lists may include disabled standard properties (disabled: true, template_id is set). These are inactive built-in properties. To activate them, use the enable_standard_contacts_database_properties tool with their property IDs. Always prefer standard properties over creating new custom ones. Use these to determine valid mappings when creating a sync config.
contacts-public_get_form_property_compatibility
Get the property mappings (sync config) for a specific form. ## Prerequisites - If the form_id is not known, call list_forms to find it. - account_id: Required. Call list_accounts to obtain this value if not already known. ## Use cases - View how a form's fields are mapped to contact properties - Check if a form has an existing mapping configured ## Output format Returns the sync config for the form
contacts-public_get_form_property_mappings
Get a form property mapping (sync config) by ID, including its form, active status, and field mappings. ## Prerequisites - Call list_form_property_mappings to find the sync_config_id. - account_id: Required. Call list_accounts to obtain this value if not already known. ## Use cases - Confirm a mapping's details before deleting it - Check which form a sync config maps to, and which fields are mapped ## Output notes - type is one of: form, smart_form, csv - form_name is empty if the form no longer exists, or for csv type
contacts-public_get_form_property_mappings_by_id
Get a trigger of an automation (workflow/flow) by its ID. Returns the working state (published baseline + any pending draft operations). The trigger_type determines which kind of trigger to fetch. ## Prerequisites - `account_id` — obtain via `accounts-list_accounts`. - `trigger_id` and `trigger_type` — obtain via `public_list_automations` (each automation's `triggers[].id`/`.type`) or from the `public_create_automation` output.
automations-public_get_trigger
## What this tool does Ranks groups of rows by a measure — e.g. "top 5 lead sources by contact count" or "which NPS category has the most responses." Call insights-public_discover first to resolve form_id / audience_id / field_id / property_id and to learn each field's dimensions, measures, filter_type, filter_operators, and filter_values before filtering. ## Use when - User asks for a ranking, "top N", breakdown by category, or "most/least common" answer - User wants rows grouped by one or two dimensions and sorted by a measure - User wants to compare groups/choices/values against each other, not a single rolled-up number ## Also known as top N, ranking, leaderboard, breakdown by category, grouped counts, most common, least common ## Constraints - Provide exactly one of form_id or audience_id — never both, never neither. - dimensions: 1-2 entries. Each name must be a dimension the selected field supports (see insights-public_discover). - Every optional parameter must be sent as null when unset. ## Supported field types - forms dataset: number, nps, scale, boolean, choices, text_list, payment, dropdown, multi_format, matrix, transcript, ranking. - contacts dataset: text_list.
insights-public_toplist
Schedule an import of form responses into the Contacts database using an existing form property mapping (sync config). ## Prerequisites - account_id: Required. Call list_accounts to obtain this value if not already known. ## Use cases - Import form responses into contacts after a form property mapping has been created or updated - Re-import form responses to pick up new submissions ## Input - sync_config_id (required): The ID of the form property mapping (sync config) to use for the import. Use list_form_property_mappings to find existing sync configs. ## Output format Confirms the import has been scheduled successfully.
contacts-public_import_form_responses_by_mapping
Lists all accounts the authenticated user is a member of.
accounts-list_accounts
List all automations (workflows/flows) for the authenticated account. ## Prerequisites - `account_id` — obtain via `accounts-list_accounts`. ## Use cases - Find an automation by name before inspecting or updating it - Get automation IDs needed by other tools (get_automation, publish_automation, pause_automation)
automations-public_list_automations
List contacts from the user's Contacts database. Use this tool when the user wants to see, search, or find contacts. ## Prerequisites - Call list_contacts_lists to find available list IDs for segment_id. - Call list_contacts_database_properties to find property IDs for filters and sort. - account_id: Required. Call list_accounts to obtain this value if not already known. ## What this tool does - Returns contacts matching the specified criteria with pagination. ## Inputs - segment_id: a saved list ID, or null. If provided, uses the list's filters and sort. - filters: filter criteria, or null for no filtering. Only used when segment_id is null. - sort: sort order, or null for newest first. Only used when segment_id is null. - page: page number, starting at 1. - page_size: results per page. ## Output - total_count: Total contacts matching the criteria. - items: An array of contacts matching the criteria. Each includes its id, identifier (value that uniquely identifies the contact) and an array of associated contact properties. ## Default pagination - page=1, page_size=25. ## Understanding Filters ### Structure - Filters use a two-level group structure: - Root: operator (and/or) + filter_groups array - Each filter_group: operator (and/or) + filters array - Each filter: property_id, operator, value, negate ### Semantics: - Root operator=and: contact must match ALL groups - Root operator=or: contact must match ANY group - Group operator=and: ALL filters in the group must match - Group operator=or: ANY filter in the group must match ### Filter operators by property type - Text (email, short_text, long_text, phone_number, code): equals, starts_with, ends_with, contains, empty, any_of - Number: equals, greater_than, less_than, empty - Timestamp: equals, greater_than, less_than, empty - Select (single_select, multi_select, text_list): equals, contains, empty
contacts-public_list_contacts
List all contact properties in the user's Contacts database. Use this tool when the user asks about their contact properties/fields or schema. ## Prerequisites - account_id: Required. Call list_accounts to obtain this value if not already known. ## What this tool does - Returns all properties defined for contacts. ## Output - An array of contact properties. Each includes its id, name, type, and flags for how it can be used. ## Understanding Contact Property Fields - identifier: true → Indicates this is a primary identifier field (e.g., email). It is required when creating a contact. - template_id has a value → Indicates the property is a standard (built-in) Typeform property rather than a custom property. - immutable: true → Means the property definition itself cannot be modified (e.g., its name or type). - disabled: true → Indicates the property is inactive or hidden. Ignore disabled properties when displaying to the user. To activate a disabled standard property, use the enable_standard_contacts_database_properties tool. - prevent_delete: true → Indicates the property cannot be deleted. - default → The default value assigned to the property. Informational. - constraints.choices → For select-type properties, defines the available options. - valid_filter_operators → The comparison operators valid for filtering by this property. Always use one of these operators to avoid errors.
contacts-public_list_contacts_database_properties
List all saved contact lists in the user's Contacts database. Use this tool when the user wants to see their saved contact lists. ## Prerequisites - account_id: Required. Call list_accounts to obtain this value if not already known. ## What this tool does - Returns all saved lists with their names and filter settings. ## Output - An array of lists. Each includes its id, name, and settings. ## Understanding Filters ### Structure - Filters use a two-level group structure: - Root: operator (and/or) + filter_groups array - Each filter_group: operator (and/or) + filters array - Each filter: property_id, operator, value, negate ### Semantics: - Root operator=and: contact must match ALL groups - Root operator=or: contact must match ANY group - Group operator=and: ALL filters in the group must match - Group operator=or: ANY filter in the group must match ### Filter operators by property type - Text (email, short_text, long_text, phone_number, code): equals, starts_with, ends_with, contains, empty, any_of - Number: equals, greater_than, less_than, empty - Timestamp: equals, greater_than, less_than, empty - Select (single_select, multi_select, text_list): equals, contains, empty
contacts-public_list_contacts_lists
List all form property mappings (sync configs) for the Contacts database. Use this when the user wants to see which forms sync responses into Contacts, or to find a sync_config_id. ## Prerequisites - account_id: Required. Call list_accounts to obtain this value if not already known. ## Use cases - View all configured form-to-contact property mappings - Find a sync_config_id to pass to update_form_property_mappings or delete_form_property_mappings ## Output format Present the list of form property mappings to the user.
contacts-public_list_form_property_mappings
List forms owned by your user. ## Prerequisites - workspace_id: Optional. Call workspaces-list_workspaces to filter by workspace. - account_id: Required. Call accounts-list_accounts to obtain this value if not already known. ## Use cases - Browse all forms in your account - Search for forms by title - Filter forms by workspace - Paginate through large form collections ## Parameters - search: Filter forms by title (partial match, optional) - page: Page number starting from 1 (default: 1) - page_size: Number of forms per page (default: 10, max: 200) - sort_by: Sort field - "created_at", "title", or "last_updated_at" (default: "created_at") - order_by: Sort order - "asc" or "desc" (default: "desc") - workspace_id: Filter by workspace ID (optional) ## Output Returns paginated list of forms with total count and form metadata.
forms-public_list_forms
List the fields available to reference for a given automation (workflow/flow), for use in email notifications, automation conditions, and similar. ## Prerequisites - `account_id` — obtain via `accounts-list_accounts`. - `automation_id` — obtain via `public_list_automations`. ## Important notes - For choice-typed fields, reference a specific option by the choice's 'ref'.
automations-public_list_referenceable_fields
List the workspaces the caller can see, with id, name, form_count, type (private/shared/custom), and account_id. Pair with forms-list_forms to discover forms in a specific workspace. Supports search by name and pagination.
workspaces-list_workspaces
Patch a trigger of an automation (workflow/flow) via JSON Patch operations (add/replace/remove). See the input schema for the "value" field's rules and for concrete examples. Prefer add/remove over replace — they're safer and more precise. ## Prerequisites - `account_id` — obtain via `accounts-list_accounts`. - `trigger_id` and `trigger_type` — obtain via `public_list_automations` (each automation's `triggers[].id`/`.type`) or from the `public_create_automation` output. - `last_patch_id` — obtain via `public_get_trigger`. ### Contact trigger paths - /type, /condition - /list_ids — only for CONTACT_ADDED_TO_LIST / CONTACT_REMOVED_FROM_LIST - /filter_list_ids — only for CONTACT_CREATED / CONTACT_PROPERTY_UPDATED (optional AND-filter) Switching /type requires removing the old type's fields (e.g. ADDED_TO_LIST → CREATED removes /list_ids). ### Form trigger paths /workspace_id, /form_id, /condition, /filter_ending_refs, /filter_partial_submit_refs ## Condition two-slot layout (CRITICAL) The condition root is either null or {"op": "and", "vars": [slot0, slot1]} with exactly 2 vars. - slot0 (path /condition/vars/0): reserved for "becomes"/"changed" conditions. Use {"op": "always"} as a placeholder when unused. - slot1 (path /condition/vars/1): reserved for every other condition type (is, is_not, equal, not_equal, begins_with, ends_with, contains, not_contains, is_any_of). Use {"op": "always"} as a placeholder when unused. - Never put becomes/changed in slot1, never put other types in slot0, never patch /condition/vars directly. - Nest multiple conditions within a slot under "and"/"or". - If condition is null, "replace" /condition with the full root (both slots). To clear all conditions, "remove" /condition. ## Operators - Comparison ops take exactly 2 vars: [field_var, value_var]. - "changed": value_var is {"type": "constant", "value": ""}. - "is_any_of": value_var must be a JSON array, e.g. {"type": "choice", "value": ["subscribed", "unsubscribed"]}. - The field var value is always the field "ref" (from the form or headless form), never the field "id". - "becomes" and "changed" are only valid for CONTACT_PROPERTY_UPDATED triggers. - Numeric comparisons (lower_than, lower_equal_than, greater_than, greater_equal_than): value_var must be a JSON number, e.g. {"type": "constant", "value": 3} — never the string "3". ### Ops by property type - multiple_choice: value_var uses {"type": "choice", ...} (not "constant"). Supported: is, is_not, becomes, changed, is_any_of. - number: equal, not_equal, lower_than, lower_equal_than, greater_than, greater_equal_than, is_any_of (plus becomes, changed for CONTACT_PROPERTY_UPDATED). Range comparisons take a JSON number operand. - text (default): equal, not_equal, begins_with, ends_with, contains, not_contains, is_any_of (plus becomes, changed for CONTACT_PROPERTY_UPDATED). Compose filters via is_any_of/and/or before treating something as unsupported.
automations-public_patch_trigger
Pause an automation (workflow/flow) by disabling its trigger and, optionally, its current runs. ## Prerequisites - `account_id` — obtain via `accounts-list_accounts`. - `automation_id` — obtain via `public_list_automations`.
automations-public_pause_automation
Publish an automation (workflow/flow) by enabling its trigger and publishing all drafts. IMPORTANT: Only call this tool when the user has explicitly asked to publish, deploy, go live, enable, or activate this automation. If the user asks to create an automation without explicitly requesting one of the above, use create_automation instead. ## Prerequisites - `account_id` — obtain via `accounts-list_accounts`. - `automation_id` — obtain via `public_list_automations`.
automations-public_publish_automation
Make the form live and publicly accessible. Each call promotes the draft and snapshots a new version, so only call when the user explicitly wants to go live; never to re-confirm. Drafts save automatically, so this is not a save. Resolve form names to IDs with forms-public_list_forms. ## Prerequisites - form_id: Required. Call forms-public_list_forms to find it, or use the id returned by forms-public_create_form. - account_id: Required. Call accounts-list_accounts to obtain this value if not already known. ### Parameters - account_id: Account ID (required) - form_id: Form ID to publish (required) ### Errors - PAYMENT_REQUIRED: plan-gated features are blocking. Tell the user which, in plain language, and suggest upgrading or removing them. ### Output form_id, version, share_url. An empty share_url still means success; fetch the URL via forms-public_get_form.
forms-public_publish_form
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Typeform alternatives on ChatGPT?
As of 2026-09-13, Typeform competes with CalcForms, Clipform, Cognito MCP, CrowdHum, Dayalogs, Formbyte, FormEdge, Formester, Formfacade, FormHug, Forms AI, Formspry, Fyrebox, Jotform, Letsfind, Neartail, PlatoForms, SurveyMonkey, SurveySparrow: Forms & Surveys, Tally, Walla in ChatGPT Form & Survey Builders, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.