activate_automation
ChatGPTActivate a paused automation so it can receive new triggers.
activate_automation
ChatGPTActivate a paused automation so it can receive new triggers.
add_contacts_to_deal
ChatGPTLink one or more contacts to an existing deal. Existing linked contacts are not removed — this only adds. To remove a contact use remove_contact_from_deal. Workflow: call get_contacts to get contact_ids, call search_deals to get deal_id if needed. All contact IDs must belong to the same account. Returns the updated deal with the full contact list.
add_contacts_to_deal
ChatGPTLink one or more contacts to an existing deal. Existing linked contacts are not removed — this only adds. To remove a contact use remove_contact_from_deal. Workflow: call get_contacts to get contact_ids, call search_deals to get deal_id if needed. All contact IDs must belong to the same account. Returns the updated deal with the full contact list.
add_filtered_contacts_to_list
ChatGPTAdd all contacts matching advanced filters to an existing list. Max 50000 contacts per call.
add_filtered_contacts_to_list
ChatGPTAdd all contacts matching advanced filters to an existing list. Max 50000 contacts per call.
add_note
ChatGPTAdd an internal note to a contact's conversation. Notes are only visible to operators, not sent to the contact.
add_note
ChatGPTAdd an internal note to a contact's conversation. Notes are only visible to operators, not sent to the contact.
add_tags_to_contact
ChatGPTAdd tags to a contact. Returns which were added, already present on the contact, and which tag IDs were not found. Call get_contact_tags first to know the contact's current tags.
add_tags_to_contact
ChatGPTAdd tags to a contact. Returns which were added, already present on the contact, and which tag IDs were not found. Call get_contact_tags first to know the contact's current tags.
assign_ticket
ChatGPTAssign a ticket to an operator. Pass owner_id=null to unassign.
assign_ticket
ChatGPTAssign a ticket to an operator. Pass owner_id=null to unassign.
block_contact
ChatGPTBlock or unblock a contact. Blocked contacts will not receive messages.
block_contact
ChatGPTBlock or unblock a contact. Blocked contacts will not receive messages.
bulk_update_deals
ChatGPTAssign a new owner and/or move multiple deals to a new stage in a single operation. Use when the user wants to reassign or batch-move several deals at once. Workflow: call search_deals to find the deals and collect their IDs, then present the count and names to the user for confirmation. Only set confirmed=True after the user explicitly confirms the bulk action. Returns counts of updated and failed deals.
bulk_update_deals
ChatGPTAssign a new owner and/or move multiple deals to a new stage in a single operation. Use when the user wants to reassign or batch-move several deals at once. Workflow: call search_deals to find the deals and collect their IDs, then present the count and names to the user for confirmation. Only set confirmed=True after the user explicitly confirms the bulk action. Returns counts of updated and failed deals.
clear_list
ChatGPTRemove ALL contacts from a list. The list itself is kept but emptied.
clear_list
ChatGPTRemove ALL contacts from a list. The list itself is kept but emptied.
clone_list_as_static
ChatGPTSnapshot the current members of an existing list (typically a dynamic one) into a NEW static list. Use this when the user wants to 'freeze' an auto-updating list as it is right now — the new list is independent, won't auto-refresh, and won't change when the source's rules or members change. Source can be any list type; the destination is always static. Capped at 50000 contacts.
clone_list_as_static
ChatGPTSnapshot the current members of an existing list (typically a dynamic one) into a NEW static list. Use this when the user wants to 'freeze' an auto-updating list as it is right now — the new list is independent, won't auto-refresh, and won't change when the source's rules or members change. Source can be any list type; the destination is always static. Capped at 50000 contacts.
close_deal
ChatGPTMark a deal as closed by stamping closed_datetime to the current time. Does NOT move the deal to a Won or Lost stage — use move_deal_stage after this if a stage change is also needed. Use when the user says a deal is 'closed', 'done', 'finished', or 'completed'. Requires deal_id — call search_deals first if you don't have it. Returns the updated deal.
close_deal
ChatGPTMark a deal as closed by stamping closed_datetime to the current time. Does NOT move the deal to a Won or Lost stage — use move_deal_stage after this if a stage change is also needed. Use when the user says a deal is 'closed', 'done', 'finished', or 'completed'. Requires deal_id — call search_deals first if you don't have it. Returns the updated deal.
close_ticket
ChatGPTClose a ticket and set its closed timestamp.
close_ticket
ChatGPTClose a ticket and set its closed timestamp.
create_campaign
ChatGPTCreate a new scheduled campaign. Provide either template_id (auto-creates automation) or automation_id.
create_campaign
ChatGPTCreate a new scheduled campaign. Provide either template_id (auto-creates automation) or automation_id.
create_custom_field
ChatGPTCreate a new custom contact field. Fails with CODE_RESERVED or CODE_ALREADY_EXISTS if the code collides.
create_custom_field
ChatGPTCreate a new custom contact field. Fails with CODE_RESERVED or CODE_ALREADY_EXISTS if the code collides.
create_deal
ChatGPTCreate a new deal. Required: name, pipeline_id, stage_id. Optional: amount (display units — e.g. 5000.0 for €5,000), currency (default EUR), owner_id, contact_ids (list of contact UUIDs to link), close_date (YYYY-MM-DD), reference. Workflow: call list_pipelines first to get pipeline_id and stage_id; call get_contacts first to get contact_ids if the user mentions linking a contact. Duplicate guard: if a deal with the same name already exists the tool returns the existing deal(s) and asks to confirm — set force_create=True only after the user explicitly confirms they want a duplicate. Returns the created deal with its id, a direct URL, and contacts_linked status.
create_deal
ChatGPTCreate a new deal. Required: name, pipeline_id, stage_id. Optional: amount (display units — e.g. 5000.0 for €5,000), currency (default EUR), owner_id, contact_ids (list of contact UUIDs to link), close_date (YYYY-MM-DD), reference. Workflow: call list_pipelines first to get pipeline_id and stage_id; call get_contacts first to get contact_ids if the user mentions linking a contact. Duplicate guard: if a deal with the same name already exists the tool returns the existing deal(s) and asks to confirm — set force_create=True only after the user explicitly confirms they want a duplicate. Returns the created deal with its id, a direct URL, and contacts_linked status.
create_list
ChatGPTCreate a new contact list.
create_list
ChatGPTCreate a new contact list.
create_list_from_filters
ChatGPTCreate a new contact list from advanced filters. Use search_contacts_advanced first to preview matching contacts. list_type='static' (default): snapshot the contacts matching NOW — membership is frozen (capped at 50000 contacts). list_type='dynamic': membership auto-refreshes whenever contacts start/stop matching the filters (no size cap; refresh runs asynchronously after creation). Supports all filter keys: tag_{id}, list_{id}, language, email, ticket_status, etc.
create_list_from_filters
ChatGPTCreate a new contact list from advanced filters. Use search_contacts_advanced first to preview matching contacts. list_type='static' (default): snapshot the contacts matching NOW — membership is frozen (capped at 50000 contacts). list_type='dynamic': membership auto-refreshes whenever contacts start/stop matching the filters (no size cap; refresh runs asynchronously after creation). Supports all filter keys: tag_{id}, list_{id}, language, email, ticket_status, etc.
create_pipeline
ChatGPTCreate a new sales pipeline with an ordered list of stages. Stage order is assigned automatically from list position (first item = order 0). Rules: always include a Won stage (probability=100) and a Lost stage (probability=0); all other stages represent open/active phases and should have probability between 1 and 99. The operation is atomic — either all stages are created or none are. Returns the created pipeline with its stages and their assigned IDs.
create_pipeline
ChatGPTCreate a new sales pipeline with an ordered list of stages. Stage order is assigned automatically from list position (first item = order 0). Rules: always include a Won stage (probability=100) and a Lost stage (probability=0); all other stages represent open/active phases and should have probability between 1 and 99. The operation is atomic — either all stages are created or none are. Returns the created pipeline with its stages and their assigned IDs.
create_tag
ChatGPTCreate a new tag. Defaults to spoki-green. Fails if a tag with the same name already exists.
create_tag
ChatGPTCreate a new tag. Defaults to spoki-green. Fails if a tag with the same name already exists.
create_tag_category
ChatGPTCreate a new tag category. Fails if a category with the same name already exists.
create_tag_category
ChatGPTCreate a new tag category. Fails if a category with the same name already exists.
create_template
ChatGPTCreate a new message template. If a template with the same name exists, returns an error asking to confirm replacement.
create_template
ChatGPTCreate a new message template. If a template with the same name exists, returns an error asking to confirm replacement.
create_ticket
ChatGPTCreate a new support ticket. Requires a contact_id. Optionally assign to a category and owner.
create_ticket
ChatGPTCreate a new support ticket. Requires a contact_id. Optionally assign to a category and owner.
deactivate_automation
ChatGPTDeactivate an automation. It will stop receiving new triggers but running instances continue.
deactivate_automation
ChatGPTDeactivate an automation. It will stop receiving new triggers but running instances continue.
delete_custom_field
ChatGPTSoft-delete a custom field: deactivates referencing automation steps, removes per-contact values, and suffix-renames the field so its code is freed for reuse. Call get_custom_field_usage first to preview the impact and confirm with the user before invoking this tool.
delete_custom_field
ChatGPTSoft-delete a custom field: deactivates referencing automation steps, removes per-contact values, and suffix-renames the field so its code is freed for reuse. Call get_custom_field_usage first to preview the impact and confirm with the user before invoking this tool.
delete_deal
ChatGPTPermanently and irreversibly delete a deal. ALWAYS show the deal name and amount to the user and ask for explicit confirmation before calling this tool. Only set confirmed=True after the user has confirmed. Requires deal_id — call search_deals first if you don't have it. Returns {'deleted': True, 'deal_id': '...'}.
delete_deal
ChatGPTPermanently and irreversibly delete a deal. ALWAYS show the deal name and amount to the user and ask for explicit confirmation before calling this tool. Only set confirmed=True after the user has confirmed. Requires deal_id — call search_deals first if you don't have it. Returns {'deleted': True, 'deal_id': '...'}.
delete_list
ChatGPTDelete a contact list (soft delete).
delete_list
ChatGPTDelete a contact list (soft delete).
delete_tag
ChatGPTSoft-delete a tag from the account. Returns contacts_affected (number of contacts that had this tag). Warn the user about contacts_affected before calling.
delete_tag
ChatGPTSoft-delete a tag from the account. Returns contacts_affected (number of contacts that had this tag). Warn the user about contacts_affected before calling.
delete_template
ChatGPTDelete a message template (soft delete).
delete_template
ChatGPTDelete a message template (soft delete).
get_account_details
ChatGPTGet comprehensive account details including status, type, WhatsApp configuration, current credit (EUR), and plan info.
get_account_details
ChatGPTGet comprehensive account details including status, type, WhatsApp configuration, current credit (EUR), and plan info.
get_account_info
ChatGPTGet basic account information (name, phone, language, timezone).
get_account_info
ChatGPTGet basic account information (name, phone, language, timezone).
get_automation
ChatGPTGet details of a specific automation by ID.
get_automation
ChatGPTGet details of a specific automation by ID.
get_automation_stats
ChatGPTGet automation statistics: total automations and active automations count.
get_automation_stats
ChatGPTGet automation statistics: total automations and active automations count.
get_automations
ChatGPTList automations for the account. Supports filtering by active status.
get_automations
ChatGPTList automations for the account. Supports filtering by active status.
get_campaign
ChatGPTGet a single campaign by its ID.
get_campaign
ChatGPTGet a single campaign by its ID.
get_campaign_performance
ChatGPTGet campaign performance data per campaign.
get_campaign_performance
ChatGPTGet campaign performance data per campaign.
get_campaigns
ChatGPTList scheduled campaigns for the account. Supports filtering by date range.
get_campaigns
ChatGPTList scheduled campaigns for the account. Supports filtering by date range.
get_contact
ChatGPTGet a single contact by its numeric ID.
get_contact
ChatGPTGet a single contact by its numeric ID.
get_contact_field_values
ChatGPTResolve custom field values for a contact by UID and field codes.
get_contact_field_values
ChatGPTResolve custom field values for a contact by UID and field codes.
get_contact_stats
ChatGPTGet contact statistics: total contacts, lists with contact counts, and tags with contact counts.
get_contact_stats
ChatGPTGet contact statistics: total contacts, lists with contact counts, and tags with contact counts.
get_contact_tags
ChatGPTGet all tags currently assigned to a contact. Returns id, name, and color per tag.
get_contact_tags
ChatGPTGet all tags currently assigned to a contact. Returns id, name, and color per tag.
get_contacts
ChatGPTSearch and list contacts for the account. Supports filtering by name/phone (search) and blocked status (blocked_only).
get_contacts
ChatGPTSearch and list contacts for the account. Supports filtering by name/phone (search) and blocked status (blocked_only).
get_custom_field
ChatGPTGet a single custom field by ID.
get_custom_field
ChatGPTGet a single custom field by ID.
get_custom_field_usage
ChatGPTReport the automations and templates that reference a custom field. Use before proposing a delete.
get_custom_field_usage
ChatGPTReport the automations and templates that reference a custom field. Use before proposing a delete.
get_custom_fields
ChatGPTList all active custom contact fields for the account.
get_custom_fields
ChatGPTList all active custom contact fields for the account.
get_deal_analytics
ChatGPTCompute CRM KPIs for a time period: total pipeline value (open deals), deals breakdown by stage, win rate, average deal size, and won/lost counts with revenue. Period presets: this_month, last_month, this_quarter, last_quarter, last_30_days, ytd. For a custom range set period='custom' and provide date_from + date_to (YYYY-MM-DD). Scope to a single pipeline with pipeline_id, or omit for account-wide numbers. Set compare=True to include the equivalent previous period and percentage deltas — useful for 'how did we do vs last month'. Amounts in the response are in tenthousandths — divide by 10000 for display (e.g. 50000000 = €5,000).
get_deal_analytics
ChatGPTCompute CRM KPIs for a time period: total pipeline value (open deals), deals breakdown by stage, win rate, average deal size, and won/lost counts with revenue. Period presets: this_month, last_month, this_quarter, last_quarter, last_30_days, ytd. For a custom range set period='custom' and provide date_from + date_to (YYYY-MM-DD). Scope to a single pipeline with pipeline_id, or omit for account-wide numbers. Set compare=True to include the equivalent previous period and percentage deltas — useful for 'how did we do vs last month'. Amounts in the response are in tenthousandths — divide by 10000 for display (e.g. 50000000 = €5,000).
get_import_job
ChatGPTGet the status and progress of a list-import job (returned by start_csv_import, import_from_klaviyo, or import_from_hubspot).
get_import_job
ChatGPTGet the status and progress of a list-import job (returned by start_csv_import, import_from_klaviyo, or import_from_hubspot).
get_list
ChatGPTGet a single contact list by its ID.
get_list
ChatGPTGet a single contact list by its ID.
get_lists
ChatGPTList all contact lists for the account. Supports search by name.
get_lists
ChatGPTList all contact lists for the account. Supports search by name.
get_message_reports
ChatGPTGet message and conversation reports from the report service.
get_message_reports
ChatGPTGet message and conversation reports from the report service.
get_operators
ChatGPTList operators (team members) for the account with their roles.
get_operators
ChatGPTList operators (team members) for the account with their roles.
get_or_create_contact
ChatGPTGet an existing contact by phone number or create a new one. Returns the full contact object and a created flag (true if newly created, false if already existed). Available to external clients via MCP.
get_or_create_contact
ChatGPTGet an existing contact by phone number or create a new one. Returns the full contact object and a created flag (true if newly created, false if already existed). Available to external clients via MCP.
get_tag_categories
ChatGPTSearch and list tag categories for the account. Returns id, name, and tag_count per category.
get_tag_categories
ChatGPTSearch and list tag categories for the account. Returns id, name, and tag_count per category.
get_tags
ChatGPTSearch and list tags for the account. Returns id, name, color, order, contact_count and assigned categories. Use search to filter by name or category_id to filter by category. Search is fuzzy (PostgreSQL trigram similarity) and case-insensitive: minor typos and separator differences (e.g. 'blue monday' vs 'blue-monday') are tolerated. Results are ordered by similarity. contact_count excludes deleted and blocked contacts.
get_tags
ChatGPTSearch and list tags for the account. Returns id, name, color, order, contact_count and assigned categories. Use search to filter by name or category_id to filter by category. Search is fuzzy (PostgreSQL trigram similarity) and case-insensitive: minor typos and separator differences (e.g. 'blue monday' vs 'blue-monday') are tolerated. Results are ordered by similarity. contact_count excludes deleted and blocked contacts.
get_template
ChatGPTGet a single message template by its ID, including all localizations and components.
get_template
ChatGPTGet a single message template by its ID, including all localizations and components.
get_templates
ChatGPTList message templates for the account. Supports search and filtering by approval status.
get_templates
ChatGPTList message templates for the account. Supports search and filtering by approval status.
get_ticket
ChatGPTGet a single ticket by ID with full details.
get_ticket
ChatGPTGet a single ticket by ID with full details.
get_ticket_categories
ChatGPTList available ticket categories for the account.
get_ticket_categories
ChatGPTList available ticket categories for the account.
get_ticket_reports
ChatGPTGet aggregated ticket statistics. Supports filtering by date range, granularity (0=Day, 1=Week, 2=Month, 3=Year), category, and owner.
get_ticket_reports
ChatGPTGet aggregated ticket statistics. Supports filtering by date range, granularity (0=Day, 1=Week, 2=Month, 3=Year), category, and owner.
get_tickets
ChatGPTBrowse and search individual support tickets. Use ONLY when the user wants to see a list of specific tickets (e.g. 'show me open tickets', 'find tickets assigned to Matteo'). NOT for reports, stats, counts, summaries, or analytics — use ticket_stats_by_owner for those.
get_tickets
ChatGPTBrowse and search individual support tickets. Use ONLY when the user wants to see a list of specific tickets (e.g. 'show me open tickets', 'find tickets assigned to Matteo'). NOT for reports, stats, counts, summaries, or analytics — use ticket_stats_by_owner for those.
get_upcoming_events
ChatGPTGet upcoming holidays and events for campaign planning.
get_upcoming_events
ChatGPTGet upcoming holidays and events for campaign planning.
import_from_hubspot
ChatGPTCreate a new Spoki list by pulling contacts from a HubSpot list or segment. Requires an enabled HubSpot integration. Provide exactly one of hubspot_list_id or hubspot_segment_id. Returns job_id — poll with get_import_job.
import_from_hubspot
ChatGPTCreate a new Spoki list by pulling contacts from a HubSpot list or segment. Requires an enabled HubSpot integration. Provide exactly one of hubspot_list_id or hubspot_segment_id. Returns job_id — poll with get_import_job.
import_from_klaviyo
ChatGPTCreate a new Spoki list by pulling contacts from a Klaviyo list or segment. Requires an enabled Klaviyo integration. Provide exactly one of klaviyo_list_id or klaviyo_segment_id. Returns job_id — poll with get_import_job.
import_from_klaviyo
ChatGPTCreate a new Spoki list by pulling contacts from a Klaviyo list or segment. Requires an enabled Klaviyo integration. Provide exactly one of klaviyo_list_id or klaviyo_segment_id. Returns job_id — poll with get_import_job.
list_pipelines
ChatGPTList all sales pipelines for the account, each with their ordered stages. Call this tool first whenever you need pipeline_id or stage_id — for example, before create_deal, update_deal (stage/pipeline move), move_deal_stage, or bulk_update_deals. Each pipeline includes: id, name, order, created_datetime, updated_datetime. Each stage includes: id, name, order, probability (0=Lost, 100=Won, other=open), created_datetime, updated_datetime. Use created_datetime / updated_datetime to answer questions about when a pipeline or stage was created or last changed. Set expand_stages=False only if you only need pipeline names and IDs.
list_pipelines
ChatGPTList all sales pipelines for the account, each with their ordered stages. Call this tool first whenever you need pipeline_id or stage_id — for example, before create_deal, update_deal (stage/pipeline move), move_deal_stage, or bulk_update_deals. Each pipeline includes: id, name, order, created_datetime, updated_datetime. Each stage includes: id, name, order, probability (0=Lost, 100=Won, other=open), created_datetime, updated_datetime. Use created_datetime / updated_datetime to answer questions about when a pipeline or stage was created or last changed. Set expand_stages=False only if you only need pipeline names and IDs.
merge_tags
ChatGPTMerge source tag into target tag: reassigns all contacts from source to target (skipping contacts that already have target), updates automation step references, and soft-deletes the source tag.
merge_tags
ChatGPTMerge source tag into target tag: reassigns all contacts from source to target (skipping contacts that already have target), updates automation step references, and soft-deletes the source tag.
move_deal_stage
ChatGPTMove a deal to a different stage within the same pipeline and control its vertical position in the kanban column. Use this for drag-and-drop style moves where the user specifies a position (0 = top of column). The target stage must belong to the deal's current pipeline — for cross-pipeline moves use update_deal instead. Requires deal_id and stage_id — call search_deals and list_pipelines first if you don't have them. Returns the updated deal.
move_deal_stage
ChatGPTMove a deal to a different stage within the same pipeline and control its vertical position in the kanban column. Use this for drag-and-drop style moves where the user specifies a position (0 = top of column). The target stage must belong to the deal's current pipeline — for cross-pipeline moves use update_deal instead. Requires deal_id and stage_id — call search_deals and list_pipelines first if you don't have them. Returns the updated deal.
refresh_list
ChatGPTForce an immediate recomputation of a dynamic list's membership. Bypasses the 60s debounce that normally batches signal-driven refreshes. Only works on dynamic lists — static lists reject this call. Returns immediately; the refresh itself runs as a background task.
refresh_list
ChatGPTForce an immediate recomputation of a dynamic list's membership. Bypasses the 60s debounce that normally batches signal-driven refreshes. Only works on dynamic lists — static lists reject this call. Returns immediately; the refresh itself runs as a background task.
remove_contact_from_deal
ChatGPTUnlink a single contact from a deal. The contact is not deleted — only the association is removed. Other contacts linked to the deal are unaffected. Requires deal_id and contact_id — call search_deals and get_contacts if you don't have them. Returns the updated deal with the remaining contact list.
remove_contact_from_deal
ChatGPTUnlink a single contact from a deal. The contact is not deleted — only the association is removed. Other contacts linked to the deal are unaffected. Requires deal_id and contact_id — call search_deals and get_contacts if you don't have them. Returns the updated deal with the remaining contact list.
remove_contacts_from_list
ChatGPTRemove contacts from a list by IDs. Max 500 IDs.
remove_contacts_from_list
ChatGPTRemove contacts from a list by IDs. Max 500 IDs.
remove_filtered_contacts_from_list
ChatGPTRemove all contacts matching advanced filters from a list. Max 50000 contacts per call.
remove_filtered_contacts_from_list
ChatGPTRemove all contacts matching advanced filters from a list. Max 50000 contacts per call.
remove_tags_from_contact
ChatGPTRemove tags from a contact. Returns which were removed, which were not present on the contact, and which tag IDs were not found in the account.
remove_tags_from_contact
ChatGPTRemove tags from a contact. Returns which were removed, which were not present on the contact, and which tag IDs were not found in the account.
reopen_deal
ChatGPTReopen a closed deal by clearing its closed_datetime. Does NOT change the stage — after reopening, ask the user whether they also want to move the deal back to an open stage. Use when the user says a deal was 'closed by mistake', 'should be active again', or 'needs to be reopened'. Requires deal_id — call search_deals first if you don't have it. Returns the updated deal.
reopen_deal
ChatGPTReopen a closed deal by clearing its closed_datetime. Does NOT change the stage — after reopening, ask the user whether they also want to move the deal back to an open stage. Use when the user says a deal was 'closed by mistake', 'should be active again', or 'needs to be reopened'. Requires deal_id — call search_deals first if you don't have it. Returns the updated deal.
search_contacts_advanced
ChatGPTSearch contacts with advanced filters. Supports filtering by tags, lists, language, email, operators, ticket status, conversations, custom fields, and AND/OR logic. Returns a preview of matching contacts and the total count. Use get_tags/get_lists first to find IDs for tag_/list_ filter keys.
search_contacts_advanced
ChatGPTSearch contacts with advanced filters. Supports filtering by tags, lists, language, email, operators, ticket status, conversations, custom fields, and AND/OR logic. Returns a preview of matching contacts and the total count. Use get_tags/get_lists first to find IDs for tag_/list_ filter keys.
search_deals
ChatGPTFind and list deals. Use this tool to: look up a deal by name or contact to get its deal_id before updating/deleting it; filter deals by pipeline, stage, owner, close date, creation date, or last-modified date; show the user their deals. The 'search' param matches against deal name, reference, and linked contact name/phone/email. Returns paginated results (20 per page) — increment 'page' to get more. Each deal includes id, name, pipeline, stage, amount_tenthousand (divide by 10000 for display), currency, owner, contacts, reference, created_datetime, updated_datetime, and closed_datetime (null = open deal; non-null = closed/won/lost). Always call this first when you need a deal_id for update_deal, move_deal_stage, delete_deal, close_deal, reopen_deal, add_contacts_to_deal, or remove_contact_from_deal.
search_deals
ChatGPTFind and list deals. Use this tool to: look up a deal by name or contact to get its deal_id before updating/deleting it; filter deals by pipeline, stage, owner, close date, creation date, or last-modified date; show the user their deals. The 'search' param matches against deal name, reference, and linked contact name/phone/email. Returns paginated results (20 per page) — increment 'page' to get more. Each deal includes id, name, pipeline, stage, amount_tenthousand (divide by 10000 for display), currency, owner, contacts, reference, created_datetime, updated_datetime, and closed_datetime (null = open deal; non-null = closed/won/lost). Always call this first when you need a deal_id for update_deal, move_deal_stage, delete_deal, close_deal, reopen_deal, add_contacts_to_deal, or remove_contact_from_deal.
send_text_message
ChatGPTSend a free-form text message to a contact via WhatsApp. The contact must not be blocked.
send_text_message
ChatGPTSend a free-form text message to a contact via WhatsApp. The contact must not be blocked.
set_contact_field_value
ChatGPTSet (create or update) a custom field value for a contact. Identify the field by field_code (e.g., 'COMPANY_NAME'). Returns the new contact_field plus the previous_value (null if it didn't exist). Use get_custom_fields to discover available codes.
set_contact_field_value
ChatGPTSet (create or update) a custom field value for a contact. Identify the field by field_code (e.g., 'COMPANY_NAME'). Returns the new contact_field plus the previous_value (null if it didn't exist). Use get_custom_fields to discover available codes.
stop_contact_automation
ChatGPTStop a running automation for a contact.
stop_contact_automation
ChatGPTStop a running automation for a contact.
submit_template
ChatGPTSubmit a template for WhatsApp provider approval.
submit_template
ChatGPTSubmit a template for WhatsApp provider approval.
sync_contacts_to_list
ChatGPTAdd contacts to a list by IDs. Contacts already in the list are skipped. Max 500 IDs.
sync_contacts_to_list
ChatGPTAdd contacts to a list by IDs. Contacts already in the list are skipped. Max 500 IDs.
ticket_stats_by_owner
ChatGPTGet ticket statistics grouped by owner/agent. Use for ANY query about ticket stats, reports, summaries, team performance, counts per operator, or 'how many tickets'. Returns exact DB-aggregated counts for ALL tickets in the period — no sampling, no limit. Filters: activity_from/activity_to (ISO date strings, e.g. '2026-04-01').
ticket_stats_by_owner
ChatGPTGet ticket statistics grouped by owner/agent. Use for ANY query about ticket stats, reports, summaries, team performance, counts per operator, or 'how many tickets'. Returns exact DB-aggregated counts for ALL tickets in the period — no sampling, no limit. Filters: activity_from/activity_to (ISO date strings, e.g. '2026-04-01').
ticket_stats_by_owner_and_date
ChatGPTGet ticket statistics grouped by owner and period.
ticket_stats_by_owner_and_date
ChatGPTGet ticket statistics grouped by owner and period.
trigger_automation
ChatGPTStart an automation for a specific contact. The automation must be active and the contact must not be blocked. By default, fails if the contact is already running or queued in the automation; pass force=True to bypass that check and create a new run.
trigger_automation
ChatGPTStart an automation for a specific contact. The automation must be active and the contact must not be blocked. By default, fails if the contact is already running or queued in the automation; pass force=True to bypass that check and create a new run.
update_contact
ChatGPTUpdate a contact's information. Only the provided fields will be changed.
update_contact
ChatGPTUpdate a contact's information. Only the provided fields will be changed.
update_custom_field
ChatGPTUpdate a custom field's label, code, type or example.
update_custom_field
ChatGPTUpdate a custom field's label, code, type or example.
update_deal
ChatGPTUpdate one or more fields of an existing deal. Only the fields you provide are changed — omitted fields are left untouched. Use this tool whenever the user asks to: rename a deal (name), change the amount or currency, reassign the owner (owner_id; pass empty string to unassign), set or clear the expected close date (close_date YYYY-MM-DD; pass null to remove it), set or clear the reference (pass null to remove it), or move a deal to a different stage (stage_id) or a different pipeline (pipeline_id + stage_id together). For kanban reordering within a stage use move_deal_stage instead. Requires deal_id — call search_deals first if you don't have it. Returns the full updated deal.
update_deal
ChatGPTUpdate one or more fields of an existing deal. Only the fields you provide are changed — omitted fields are left untouched. Use this tool whenever the user asks to: rename a deal (name), change the amount or currency, reassign the owner (owner_id; pass empty string to unassign), set or clear the expected close date (close_date YYYY-MM-DD; pass null to remove it), set or clear the reference (pass null to remove it), or move a deal to a different stage (stage_id) or a different pipeline (pipeline_id + stage_id together). For kanban reordering within a stage use move_deal_stage instead. Requires deal_id — call search_deals first if you don't have it. Returns the full updated deal.
update_list
ChatGPTUpdate a contact list's name or color.
update_list
ChatGPTUpdate a contact list's name or color.
update_list_rules
ChatGPTReplace the filter rules of an existing dynamic (auto-updating) list. Membership is recomputed asynchronously after the rules are saved. Only works on lists where list_type='dynamic' — static lists reject this call. Read current rules first via get_list({id}) so you can merge/extend rather than overwrite.
update_list_rules
ChatGPTReplace the filter rules of an existing dynamic (auto-updating) list. Membership is recomputed asynchronously after the rules are saved. Only works on lists where list_type='dynamic' — static lists reject this call. Read current rules first via get_list({id}) so you can merge/extend rather than overwrite.
update_tag
ChatGPTUpdate a tag's name, color, display order, and/or categories. Only the provided fields are changed.
update_tag
ChatGPTUpdate a tag's name, color, display order, and/or categories. Only the provided fields are changed.
update_template
ChatGPTUpdate fields of an existing template. v1 only supports header_media_url — pass it to set/replace the template's header image (applied to ALL localizations, promotes text-format headers to image). On image apply, locks the per-template generation slot (3-attempt cap) and returns slot_key. Future versions will extend to name, category, body, footer, and buttons; the response shape stays the same.
update_template
ChatGPTUpdate fields of an existing template. v1 only supports header_media_url — pass it to set/replace the template's header image (applied to ALL localizations, promotes text-format headers to image). On image apply, locks the per-template generation slot (3-attempt cap) and returns slot_key. Future versions will extend to name, category, body, footer, and buttons; the response shape stays the same.
update_ticket
ChatGPTUpdate a ticket's fields. Only provided fields are changed.
update_ticket
ChatGPTUpdate a ticket's fields. Only provided fields are changed.