add_campaign_attachment
ChatGPTAttaches one file to a campaign that is still a draft, from the campaign id, a filename and the file contents as base64 in content_base64. The file travels inside the request, which suits small files such as a PDF or an image rather than large ones. Only draft campaigns accept attachments. Requires the 'campaigns:draft' OAuth scope.
add_contact_note
ChatGPTRecords a note on one contact, from the contact id and the note text, optionally with the date it happened. The note is visible to the whole team on the contact record and comes back in get_contact_activity. Requires the 'contacts:write' OAuth scope.
add_contact_to_contact_list
ChatGPTAdds one existing contact to one existing list, from contact_id and contact_list_id. search_contacts or create_contact supplies the person and list_contact_lists or create_contact_list the audience. A repeat call for somebody already on the list comes back with an informational message rather than an error. Returns status and info. Requires the 'contacts:write' OAuth scope.
add_contacts_to_contact_list
ChatGPTAdds several people to one list in a single call, from contact_list_id and a contacts array of objects with email, first_name and last_name. An address with no contact yet is created, so the array can come straight from a pasted set of addresses or from search_contacts results. Returns status, added_count and an errors array. add_contact_to_contact_list adds one contact by id. Requires the 'contacts:write' OAuth scope.
add_domain
ChatGPTStarts authenticating a domain the account owns (a bare domain like example.com). Returns the DNS records to add at the domain's DNS host; verify_domain then checks them. Idempotent. Requires the 'campaigns:draft' OAuth scope.
assign_tags_to_contact
ChatGPTApplies tags to one contact, from contact_id and a tags array of objects with tag_name and an optional tag_color. A tag name new to the account is created on the fly and a tag the contact carries already is skipped. list_tags holds the existing tag names and search_contacts the contact id. Returns status, added_tags and skipped_tags. Requires the 'contacts:write' OAuth scope.
create_automation
ChatGPTCreates an automation from the same vocabulary as the in-app builder, saved inactive. Takes name, a trigger object carrying its event and that event's target id, and steps as an ordered array; entry_filter, extra_triggers, run_once_per_contact and time_zone are optional. The events, the step kinds and their fields are documented in the request schema. Ids come from list_contact_lists, list_tags, list_email_templates, list_forms and list_senders. Returns the automation with its steps. Requires the 'campaigns:draft' OAuth scope.
create_contact
ChatGPTCreates one contact on the account. email is required; first_name, last_name, company, job_title, mobile_phone, work_phone, website, address, country, city, state, zip_code and note are optional. email is unique within the account, so a second contact with the same address comes back as a validation error rather than a merge. search_contacts finds an address already on file. Returns the created contact with its new id. Requires the 'contacts:write' OAuth scope.
create_contact_list
ChatGPTCreates a new, empty contact list under a given name; add_contact_to_contact_list then populates it. List names are not unique, so a second call with the same name leaves two lists sharing it and later sends become ambiguous; list_contact_lists holds the names already in use. Returns the new list including its contact_list_id. Requires the 'contacts:write' OAuth scope.
create_custom_block
ChatGPTSaves a chunk of campaign HTML for reuse (name plus html), for example a signature footer or an event banner. is_public false keeps the block inside this account; true shares it with the wider block gallery other accounts can browse. Requires the 'campaigns:draft' OAuth scope.
create_custom_field
ChatGPTDefines a new custom field for contacts (name, type text|number|date|select|multi_select, options for select types). Values are then set in the app or through the REST endpoint add_custom_field_to_contact, which is not one of these tools. Idempotent for an existing name. Requires the 'contacts:write' OAuth scope.
create_email_template
ChatGPTSaves a reusable email template from complete HTML: name, subject and html. Its id is what draft_campaign's template_id and an automation's send_email step take. Requires the 'campaigns:draft' OAuth scope.
create_email_type
ChatGPTCreates a subscription category (email type) from a name, an optional description and an optional contact_list_id it feeds. list_email_types holds the categories already defined. Returns the new email type with its id. Requires the 'contacts:write' OAuth scope.
create_form
ChatGPTCreates a signup or lead form from name and a fields array, each field with its name, label, type, required flag and options, plus an optional contact_list_id submitters join and a tag_id applied to them. An email field is part of every form. Returns the form with its fields and its embed token. list_forms holds the forms already defined. Requires the 'contacts:write' OAuth scope.
create_landing_page
ChatGPTCreates a landing page as an unpublished draft from complete html, taking name and html plus an optional meta_title, meta_description, goal and contact_list_id for lead capture. Returns the page with its future public url. publish_landing_page puts the page on the web, and list_landing_pages holds the pages already defined. Requires the 'campaigns:draft' OAuth scope.
create_or_update_contact
ChatGPTUpdates the contact whose contact_id is passed. Without contact_id, updates the contact that already has the given email (matched without regard to case), or creates one when none does. Returns status, a message of 'Contact created' or 'Contact updated', and the contact. Requires the 'contacts:write' OAuth scope.
create_reply_to_address
ChatGPTRegisters a reply-to address and emails it a one-click verification link. The address becomes usable once the owner of that inbox opens the link. Requires the 'campaigns:draft' OAuth scope.
create_segment
ChatGPTCreates a saved segment from conditions on contact fields, from name, an optional description and a conditions object of groups, each group joining its own field conditions. The field operators are documented in the request schema. The member count is calculated in the background, and list_segments carries it once it lands. Requires the 'contacts:write' OAuth scope.
create_sender
ChatGPTCreates a from address on one of the account's verified domains, from from plus an optional reply_to and display_name. list_domains carries the verified domains and add_domain starts authenticating a new one. The new address then appears in list_senders for use on a draft. Requires the 'campaigns:draft' OAuth scope.
create_signature
ChatGPTCreates an HTML email signature for the connected user, from a name and html, so drafts and replies can carry it. list_signatures holds the signatures already saved, and update_signature changes one in place. Requires the 'campaigns:draft' OAuth scope.
create_sms_campaign
ChatGPTCreates an SMS campaign draft: contact_list_id, message_body, optional name, sender_number (a verified number on the account) and tracking_enabled. The response carries the estimated credits. Sending is a separate call. Requires the 'campaigns:draft' OAuth scope.
create_tag
ChatGPTCreates a tag from a name, with an optional color as a hex value. A name already in use comes back as the existing tag with its id, which makes a call before assign_tags_to_contact idempotent. list_tags holds the names already on the account. Returns the tag with its tag_id. Requires the 'contacts:write' OAuth scope.
create_webhook_endpoint
ChatGPTCreates an inbound webhook endpoint by name and returns its POST url. Its id is the trigger.endpoint_id of an automation with a webhook trigger. Requires the 'contacts:write' OAuth scope.
delete_automation
ChatGPTDeletes an automation by id. The automation has to be inactive first, which update_automation_status makes it. Requires the 'campaigns:draft' OAuth scope.
delete_campaign
ChatGPTDeletes an unsent (draft or trashed) campaign by id for good, unlike trash_campaign, which restore_campaign can undo. A sent campaign keeps its reports and stays; trash it instead. It also frees a contact list that delete_contact_list keeps while a draft campaign still targets it. Requires the 'campaigns:draft' OAuth scope.
delete_contact
ChatGPTDeletes one contact by contact_id, along with its list memberships, tags and activity. unsubscribe_contact stops mail to the address and keeps the record. search_contacts supplies the id. Requires the 'contacts:write' OAuth scope.
delete_contact_list
ChatGPTDeletes a list by contact_list_id. The contacts on the list stay in the account and keep their other list memberships. Requires the 'contacts:write' OAuth scope.
delete_custom_block
ChatGPTDeletes a saved block by custom_block_id. Campaigns already built from it keep their HTML, but the block itself is gone. Requires the 'campaigns:draft' OAuth scope.
delete_email_template
ChatGPTDeletes a saved template by template_id. A template an automation step still sends stays in place instead, and drafts already built from the template keep their content. list_email_templates holds the ids. Requires the 'campaigns:draft' OAuth scope.
delete_file
ChatGPTRemoves a hosted file from the gallery by file_id and frees its storage. Links already sitting in delivered email keep working, so this only takes the file out of the gallery listing. Requires the 'campaigns:draft' OAuth scope.
delete_form
ChatGPTDeletes a form by form_id, along with its embed and its stored submissions. Contacts the form created stay on the account, and a form an automation starts from stays in place instead. list_forms holds the ids. Requires the 'contacts:write' OAuth scope.
delete_segment
ChatGPTDeletes a custom segment by segment_id, and the contacts in it stay on the account. A system segment stays in place instead. list_segments holds the ids, and update_segment changes a custom segment's rules. Requires the 'contacts:write' OAuth scope.
delete_sender
ChatGPTRemoves a sender address by email_sender_id. A sender campaigns have already used is archived with its history kept; an unused one is deleted. Requires the 'campaigns:draft' OAuth scope.
delete_signature
ChatGPTDeletes an email signature by signature_id. It leaves the signature picker, and campaigns already sent keep the signature in their content. Requires the 'campaigns:draft' OAuth scope.
delete_tag
ChatGPTDeletes a tag by tag_id, taking it off every contact that carries it. A tag an automation starts from stays in place instead. list_tags holds the ids, and remove_tags_from_contact takes a tag off one contact. Requires the 'contacts:write' OAuth scope.
delete_webhook_endpoint
ChatGPTDeletes a webhook endpoint by endpoint_id. Its url stops receiving events as soon as the call returns. Requires the 'contacts:write' OAuth scope.
draft_campaign
ChatGPTCreates an email campaign in the account as a draft. Takes subject, and usually body with body_format, name and an audience: contact_list_id for an existing list, or a recipients array of objects with email, first_name and last_name. sender_id and email_sender_id come from list_senders, template_id from list_email_templates and contact_list_id from list_contact_lists. Returns status and drafts, each draft with its id. update_campaign edits an existing draft in place. Requires the 'campaigns:draft' OAuth scope.
duplicate_campaign
ChatGPTCopies a campaign into a brand new draft, from the campaign id and an optional name. It is how a campaign is sent again or a new version of an earlier newsletter starts; the returned draft id is what update_campaign edits before a send. Requires the 'campaigns:draft' OAuth scope.
enroll_contact_in_automation
ChatGPTEnrolls one contact in an active automation, from automation_id and either contact_id or email. The automation steps then run in the background. list_automations holds the automation id and search_contacts the contact id. Returns status, message, automation_id, contact_id and enrollment_id. Requires the 'campaigns:send' OAuth scope.
get_account
ChatGPTReads the account: plan tier, sending limits with their usage, contact count against the plan limit, connected sending channels, plan entitlements and the current rate limits. list_senders covers the from addresses the account can send campaigns from, and list_team_members the people on it. Requires the 'account:read' OAuth scope.
get_automation
ChatGPTReads one automation by id: its name, status, trigger and the ordered steps it runs. Read-only; it describes what a specific automation does and whether it is active. Requires the 'campaigns:read' OAuth scope.
get_brand_kit
ChatGPTReads the account brand kit: logo_url, primary, secondary and accent colors, palette, site title and description, and social links. It is the brand a campaign body or a landing page matches. update_brand_kit sets the same fields by hand. Requires the 'account:read' OAuth scope.
get_campaign
ChatGPTReads one campaign in full, from the campaign id: subject, preheader, from address, contact list, attachments, ab_test and sharing state. include_body=true adds the HTML body, which is left out by default because it is large. list_campaigns resolves a campaign named in words into the id this takes. Requires the 'campaigns:read' OAuth scope.
get_campaign_links
ChatGPTRanks the links of one sent campaign by clicks, from the campaign id: each url with its total_clicks, unique_clicks and share_of_clicks, plus campaign totals and the paging fields. get_campaign_report covers the campaign's engagement as a whole. Requires the 'campaigns:read' OAuth scope.
get_campaign_recipients
ChatGPTLists who a sent campaign reached and what each recipient did with it, from the campaign id and an engagement filter (all, opened, clicked, not_opened, bounced, unsubscribed). Returns contact_id, email, sent_at, opened_at, clicked_at, bounced and unsubscribed per recipient, with the paging fields. Requires the 'campaigns:read' OAuth scope.
get_campaign_report
ChatGPTReports the full performance picture for one sent campaign, from the campaign id: opens, clicks, bounces, unsubscribes and complaints with their rates, the account average alongside them, the mailbox providers and recipient domains that engaged, and a timeline of how fast opens and clicks arrived. get_campaign_stats carries the headline numbers on their own. Requires the 'campaigns:read' OAuth scope.
get_campaign_stats
ChatGPTReports delivery and engagement figures for one campaign, from the campaign id list_campaigns returns: sent, delivered, opened, clicked, bounced, unsubscribed, complained and the matching rates, which are percentages of delivered mail. get_campaign_report carries the fuller picture, and get_campaign_status the state of a draft that has no figures yet. Requires the 'campaigns:read' OAuth scope.
get_campaign_status
ChatGPTReports where an email draft stands, given its id: its status ('Draft', 'sending', 'Sent'), its ready_to_send flag and a sender object with the lane, the from address and authorized. It is the readiness check before send_campaign: after draft_campaign with recipients or attachments a background job takes roughly 5 to 15 seconds. list_campaigns and draft_campaign hold the id. Requires the 'campaigns:read' OAuth scope.
get_compliance_summary
ChatGPTReports how one account stands against the email rules of a sending region: us, ca, eu or tr. Takes an optional region, and uses the account's own region when it is left out. Returns region, region_name, frameworks, contactable_count, opt_out_count, postal_address_on_file, the last export timestamps, obligations, handled_automatically, and a registry object for a region that runs one. Requires the 'contacts:read' OAuth scope.
get_consent_evidence
ChatGPTLists the consent record behind each contact: consent_at, consent_source, consent_source_detail, recipient_type, consent_status and opted_out_at. Takes an optional contact_list_id from list_contact_lists, an optional email for one address, and paging. Returns an evidence array with page, per_page, total and has_more. get_opt_outs pages through the opt-outs on their own. Requires the 'contacts:read' OAuth scope.
get_contact
ChatGPTReads one contact by its numeric id, which search_contacts returns for a person named in words. The default response holds id, first_name, last_name and email; type='detailed' adds company, job title, address, subscription state, custom fields and timestamps. It reports what is currently on file, which is the state an update would change. Requires the 'contacts:read' OAuth scope.
get_contact_activity
ChatGPTLists the history of one contact, from the contact id, newest first: list joins and departures, the campaigns sent to them with their opens and clicks, and the notes teammates recorded. Returns the contact, an activity array and the paging fields. add_contact_note records a new note. Requires the 'contacts:read' OAuth scope.
get_contact_subscriptions
ChatGPTReports what one contact still receives from this account, from the contact id: each email type with its subscribed flag, opted_out_by and opted_out_at, plus email_sending_status, globally_unsubscribed and suppressed. update_contact_subscriptions changes the email types a contact takes. Requires the 'contacts:read' OAuth scope.
get_custom_block
ChatGPTReads a saved block's full HTML by custom_block_id, the HTML a campaign body reuses or an edit starts from. Requires the 'campaigns:read' OAuth scope.
get_custom_fields
ChatGPTLists the custom contact fields this account has defined, as field-name to field-type pairs. It carries the exact names the account uses for anything beyond the standard contact attributes. create_custom_field defines a new field. Values on a contact are set in the app or through the REST endpoint add_custom_field_to_contact, which is not one of these tools. Returns one entry per custom field. Requires the 'contacts:read' OAuth scope.
get_email_template
ChatGPTReads one saved template by id, including its HTML body, which is the design and copy a draft built from it would start with. Requires the 'campaigns:read' OAuth scope.
get_form
ChatGPTReads one signup or lead form by id: its fields, the contact list it feeds, its submission count and its embed token. list_forms holds the ids, and get_form_responses pages through the submissions themselves. Requires the 'contacts:read' OAuth scope.
get_form_responses
ChatGPTPages through the submissions of one form, from form_id, newest first, with the answer given for each field. page and per_page (max 100) control pagination. list_forms holds the form id, and get_form describes the fields the answers belong to. Requires the 'contacts:read' OAuth scope.
get_import
ChatGPTReports the state of one contact import, from the import id import_contacts returns: status, rows_processed against rows_total, success_count, failed_count and errors_preview. list_imports carries the recent imports when the id is not at hand. Requires the 'contacts:read' OAuth scope.
get_iys_summary
ChatGPTReports the figures this account would file with the Turkish commercial message registry: sendable_count, ret_count, tacir_count, unreported_ret_count, and when each file was last produced. It applies to accounts sending in Türkiye. Requires the 'contacts:read' OAuth scope.
get_landing_page
ChatGPTReads one landing page by id: its public url, meta title and description, goal, and the contact list it captures leads into. list_landing_pages holds the ids, and update_landing_page changes these values. Requires the 'campaigns:read' OAuth scope.
get_opt_outs
ChatGPTLists the addresses that opted out of this account's mail, newest first, with id, email, opted_out_at and a scope of 'all' or 'campaigns'. Takes an optional ISO8601 since for a delta, plus page and per_page. Returns an opt_outs array with page, per_page, total and has_more. list_suppressions covers global unsubscribes on their own. Requires the 'contacts:read' OAuth scope.
get_sms_campaign
ChatGPTReads one SMS campaign by id, including its message body, status, audience list and send date. list_sms_campaigns holds the ids, update_sms_campaign changes a draft and send_sms_campaign submits one. Requires the 'campaigns:read' OAuth scope.
import_contacts
ChatGPTImports contacts from CSV text, into an existing list (contact_list_id) or a new one (contact_list_name). Columns are mapped automatically from the header row, and columns maps them exactly when the headers are unclear. Returns the import id, the row count and the mapping it used; get_import carries the progress of the background job. Requires the 'contacts:write' OAuth scope.
invite_team_member
ChatGPTInvites a colleague to the account from an email address and a role, which sends them an invitation email. The roles this account can assign are documented in the request schema. Returns status and the team_member with its id, role and invited_at. list_pending_invitations carries invitations still outstanding, and revoke_invitation cancels one. Requires the 'account:write' OAuth scope.
list_api_keys
ChatGPTLists the API keys issued for this account with their scopes, key_prefix, created_at, expires_at, last_used_at and expired flag, which is where an expiring key shows up. Keys are created and revoked in the app under Settings > API Keys, and the key value itself stays outside the API. Requires the 'account:read' OAuth scope.
list_audit_events
ChatGPTLists the workspace audit trail, newest first, optionally filtered to one action such as role_changed or invite_sent, and paged with page and per_page. Returns audit_events with action, actor, target_type, target_id, metadata and created_at. Requires the 'account:read' OAuth scope.
list_automations
ChatGPTLists the account's automations (id, name, status, trigger). Read-only: it holds which automations exist in the account and identifies the one behind a name. Requires the 'campaigns:read' OAuth scope.
list_campaigns
ChatGPTLists campaigns by recency, status or a word from the subject, which resolves a campaign named in words ('my last newsletter', 'drafts not yet sent') into an id. Returns campaigns with page, per_page, total and has_more. The ids go to get_campaign, get_campaign_stats, get_campaign_status, update_campaign and send_campaign. Requires the 'campaigns:read' OAuth scope.
list_connected_apps
ChatGPTLists the third-party apps that currently hold access to this account, each with its scopes, who authorized it and when. Connections are cut in the app under Settings > Connected apps. list_integrations covers the integrations configured on the account. Requires the 'account:read' OAuth scope.
list_contact_lists
ChatGPTLists the account's contact lists (audiences) with their ids, names and contact counts. Every campaign and membership call takes the numeric contact_list_id rather than the list name, and this is where an audience named in words ('the newsletter list', 'Customers') resolves to that id. It also holds the answer to which audiences exist in the account. Requires the 'contacts:read' OAuth scope.
list_contacts
ChatGPTPages through the account's contacts (id, first_name, last_name, email). page and per_page (max 100) control pagination; the response carries has_more. search_contacts is the lookup by name or email address, and list_contacts_in_list returns the members of one named list. Requires the 'contacts:read' OAuth scope.
list_contacts_in_list
ChatGPTReturns the contacts that belong to one contact list, given its contact_list_id from list_contact_lists. It shows who is in an audience, whether somebody is already a member, and what a send to that list would reach. Large lists come back truncated with a note saying so, and the authoritative member total is the count list_contact_lists carries. Requires the 'contacts:read' OAuth scope.
list_custom_blocks
ChatGPTLists the account's saved reusable HTML blocks (footers, headers, promo panels) with an html_preview of each and the paging fields. get_custom_block returns one block in full, and create_custom_block saves a new one. Requires the 'campaigns:read' OAuth scope.
list_domain_health_checks
ChatGPTLists the domains this account has checked, with their spf, dmarc and blocklist readings and the last_checked timestamp of each. Each row is the stored result of the run at that timestamp. run_domain_health_check takes a fresh reading for one domain. Requires the 'account:read' OAuth scope.
list_domains
ChatGPTShows the account's sending domains, whether each is verified, and the DNS records still to add. create_sender needs a verified domain, and this is where verification progress after verify_domain shows up. Requires the 'account:read' OAuth scope.
list_email_sender_addresses
ChatGPTLists every from address configured on the account with its kind and status. list_senders is the view built for choosing the from address of a draft, and it also carries the account sending state. Requires the 'account:read' OAuth scope.
list_email_templates
ChatGPTLists the saved email templates in the account (id, name, subject, body_format). A template id is what draft_campaign's template_id takes to reuse an existing design; q searches by name. Requires the 'campaigns:read' OAuth scope.
list_email_types
ChatGPTLists the subscription categories (email types) this account publishes on its preference page, each with its id and name, so a campaign or a form can target one. get_contact_subscriptions reports what a single contact accepts, and create_email_type adds a category. Requires the 'contacts:read' OAuth scope.
list_files
ChatGPTLists the account's hosted files with their public links, folders and storage usage, optionally filtered by a search term, a folder or a kind (image, pdf, video, audio, archive, document, other). A public_url is the link a campaign body points at. upload_file adds a file and list_images covers the image library. Requires the 'campaigns:read' OAuth scope.
list_forms
ChatGPTLists the account's signup and lead forms (id, name, form_type, responses_count). It carries the form id that get_form_responses takes. Requires the 'contacts:read' OAuth scope.
list_images
ChatGPTLists the account's images with their public urls, alt text and folders, optionally filtered by folder or by a filename search. A url from here is what campaign HTML takes as an image src. upload_image adds an image to the library. Requires the 'campaigns:read' OAuth scope.
list_imports
ChatGPTLists the recent contact imports with their contact list, row counts and status, optionally filtered to one contact_list_id, alongside the paging fields. It carries the import id get_import takes. Requires the 'contacts:read' OAuth scope.
list_integrations
ChatGPTLists the third-party apps connected to the account by name (Shopify, HubSpot, Zapier and so on). Names only; the response excludes credentials. Requires the 'account:read' OAuth scope.
list_landing_pages
ChatGPTLists the account's landing pages (id, name, active, public url, linked list). It holds which pages exist in the account and identifies the one behind a name. Requires the 'campaigns:read' OAuth scope.
list_pending_invitations
ChatGPTLists the invitations to this workspace that have been sent and not yet accepted, with the role, who sent each one and when. It carries the id revoke_invitation takes as user_id, and invite_team_member sends a fresh invitation. Requires the 'account:read' OAuth scope.
list_reply_to_addresses
ChatGPTLists the reply-to addresses on the account with their verification state, so a draft can carry one. create_reply_to_address registers an address and emails it a verification link, which the owner of that inbox opens. Requires the 'account:read' OAuth scope.
list_segments
ChatGPTLists the account's saved segments with their id, name, description and contacts_count. A segment carrying a contact_list_id serves as the audience of a draft. create_segment defines a new segment and refresh_segment recalculates a count. Requires the 'contacts:read' OAuth scope.
list_senders
ChatGPTLists the from addresses this account can send campaigns from. Each entry names in usable_as the argument that selects it: sender_id on a kind 'user' entry, email_sender_id on 'gmail_mailbox', 'outlook_mailbox' and 'shared_fallback' entries. Returns senders with kind, name, email, label, is_default and connected_by, plus default_sender_id, which a draft carrying neither argument takes. Requires the 'account:read' OAuth scope.
list_signatures
ChatGPTLists the email signatures defined by the team (name, active, html). A signature's html is what a draft carries when it includes one. Requires the 'account:read' OAuth scope.
list_sms_campaigns
ChatGPTLists the account's SMS campaigns with their id, name, status, contact list and send date. It identifies the campaign behind a name and carries the id get_sms_campaign, update_sms_campaign and send_sms_campaign take. Requires the 'campaigns:read' OAuth scope.
list_suppressions
ChatGPTPages through globally unsubscribed addresses (email, unsubscribed_at). It answers whether an address is unsubscribed and shows what the suppression list holds. Read-only: removing an address is a separate operation, reinstate_contact. Requires the 'contacts:read' OAuth scope.
list_tags
ChatGPTLists the contact tags defined in the account, each with its name and colour. Tags are the free-form labels used to categorise contacts ('vip', 'trial', 'conference-2026'). Tag names are matched literally elsewhere in the product, so this is the source of their exact spelling and of the answer to which tags exist. Requires the 'contacts:read' OAuth scope.
list_team_members
ChatGPTLists the people on the account with their name, email and role. Their user ids are the sender_id values a draft takes once the sending domain is verified, and update_team_member_role takes the same id. list_pending_invitations covers invitations that are still outstanding. Requires the 'account:read' OAuth scope.
list_webhook_endpoints
ChatGPTLists the account's inbound webhook endpoints with their POST url and how many requests each has received. An automation with a webhook trigger starts when JSON is posted to that url. create_webhook_endpoint adds an endpoint and returns the id create_automation takes as trigger.endpoint_id. Requires the 'account:read' OAuth scope.
preview_campaign_audience
ChatGPTReports who a campaign would reach if it went out now, from the campaign id: the list or segment behind it, total_contacts, eligible_recipients, excluded and a sample of recipients. get_campaign_recipients covers a campaign that has already gone out. Requires the 'campaigns:read' OAuth scope.
publish_landing_page
ChatGPTPuts a landing page on the web with status 'published', or takes it down with status 'unpublished', from the page id and the status. Publishing calls for a verified account. create_landing_page saves a page as an unpublished draft, and list_landing_pages holds the ids and the public urls. Requires the 'campaigns:draft' OAuth scope.
record_consent
ChatGPTRecords a dated consent row on the audit trail of one contact, for consent collected outside Mailsoftly. Takes email, an optional ISO8601 consented_at in the past, an optional source such as form or import, and an optional source_detail naming where it came from. Returns contact_id, email, consent_at, consent_source, consent_source_detail, consent_status and opted_out_at. get_consent_evidence lists the rows back. Requires the 'contacts:write' OAuth scope.
refresh_segment
ChatGPTRecalculates a segment's member count in the background; list_segments carries the fresh number about a minute later. Requires the 'contacts:write' OAuth scope.
reinstate_contact
ChatGPTTakes an email address off the account's global unsubscribe list so it can receive campaigns again. The contact exists on the account beforehand, and the consent for the change comes from the person themselves. Returns status, message and contact_id. unsubscribe_contact is the call in the other direction. Requires the 'suppressions:write' OAuth scope.
reinstate_sms
ChatGPTTakes a phone number off the account's SMS opt-out list so it can receive texts again. The contact exists on the account beforehand, and the consent for the change comes from the person themselves. Returns status, message and contact_id. unsubscribe_sms is the call in the other direction. Requires the 'suppressions:write' OAuth scope.
remove_campaign_attachment
ChatGPTRemoves one attached file from a campaign that is still a draft, from the campaign id and the attachment id get_campaign reports. The file is deleted for good, and only draft campaigns allow it. Requires the 'campaigns:draft' OAuth scope.
remove_contact_from_list
ChatGPTRemoves one contact from one list, from contact_id and contact_list_id. The contact stays on the account with its other list memberships. add_contact_to_contact_list is the call in the other direction, and list_contacts_in_list shows who is on the list. Requires the 'contacts:write' OAuth scope.
remove_domain
ChatGPTArchives a sending domain by domain_id. Senders on that domain have to be removed first, and add_domain puts the domain back. Requires the 'campaigns:draft' OAuth scope.
remove_tags_from_contact
ChatGPTRemoves tags from one contact, from contact_id plus tag_ids or tag_names. The tag definitions stay on the account for other contacts. assign_tags_to_contact adds tags to the same contact, and list_tags holds the current names and ids. Requires the 'contacts:write' OAuth scope.
rename_contact_list
ChatGPTRenames a contact list, from contact_list_id and the new name. Nothing else about the list changes, so its contacts and the automations and campaigns pointing at it carry on. list_contact_lists holds the ids and the names already in use. Requires the 'contacts:write' OAuth scope.
restore_campaign
ChatGPTBrings a trashed campaign back by id, so it appears in the campaign list again. It reverses trash_campaign. Requires the 'campaigns:draft' OAuth scope.
revoke_invitation
ChatGPTCancels an invitation that has not been accepted, from the user_id list_pending_invitations returns. The invitation link stops working straight away; a fresh link is a new call to invite_team_member. Requires the 'account:write' OAuth scope.
run_domain_health_check
ChatGPTChecks one domain against public DNS and public blocklists and saves the result on the account. Takes the domain as a hostname and returns the SPF, DMARC and blocklist readings with the detail lines explaining each one. It is a live reading, unlike the stored results list_domain_health_checks carries, so it also covers a first campaign from a new domain and a stale stored check. Requires the 'campaigns:draft' OAuth scope.
schedule_campaign
ChatGPTSets a send time on a draft, from the draft id, send_at as an ISO 8601 datetime and an optional time_zone, with at least 15 minutes of lead time. Returns the campaign summary with scheduled_for, time_zone and a sender object with lane and authorized. unschedule_campaign cancels a scheduled send, and send_campaign goes out at once instead. Requires the 'campaigns:send' OAuth scope.
search_contacts
ChatGPTSearches contacts by exact email address, first name or last name, which turns a person named in words into the contact id other tools take. Matching is exact rather than fuzzy, so a partial name finds nothing. Takes at least one of email, first_name and last_name; several together narrow the search. Returns id, first_name, last_name, email and source per match. list_contacts pages through every contact. Requires the 'contacts:read' OAuth scope.
send_campaign
ChatGPTSends the draft with the given id to its recipient list. The id comes from draft_campaign or list_campaigns, and get_campaign_status carries the ready_to_send flag for a draft still being assembled. Returns status, message, the campaign id and a sender object with lane, from and authorized. schedule_campaign sets a send time on the same draft instead. A gate object accompanies a campaign the account was not able to send. Requires the 'campaigns:send' OAuth scope.
send_sms_campaign
ChatGPTSubmits the draft SMS campaign with the given id, which list_sms_campaigns supplies. Returns the campaign summary with recipients and estimated_credits. create_sms_campaign writes the draft and update_sms_campaign changes it before submission. Requires the 'campaigns:send' OAuth scope.
send_test_email
ChatGPTSends the campaign with the given id to 1 to 5 addresses as a test, with an optional note carried in the test message. list_campaigns and draft_campaign hold the campaign id. Returns status and sent_to with the addresses. send_campaign goes to the campaign's own recipient list. Requires the 'campaigns:send' OAuth scope.
start_ab_test
ChatGPTConfigures an A/B subject test on a draft, from the draft id, subject_b, an optional subject_a, test_percentage 10, 20 or 30 and wait_hours 2, 4 or 24. The test slice receives both subjects and the winning subject goes to the rest after wait_hours. Available on paid plans. Returns the campaign summary with an ab_test object and a sender object with lane and authorized. Requires the 'campaigns:send' OAuth scope.
trash_campaign
ChatGPTMoves a draft or sent campaign to the trash, which is what deleting a campaign means here. restore_campaign takes it back out of the trash. Requires the 'campaigns:draft' OAuth scope.
trash_landing_page
ChatGPTUnpublishes a landing page and moves it to the trash. It is what deleting a page means here; the app can restore it. Requires the 'campaigns:draft' OAuth scope.
unschedule_campaign
ChatGPTCancels a campaign's scheduled send by id. The draft is kept with its content and audience, so it can be sent or rescheduled later; nothing is deleted. Requires the 'campaigns:draft' OAuth scope.
unsubscribe_contact
ChatGPTAdds an email address to the account wide email suppression list, so it takes no further campaign or newsletter from this account on any list and a later import keeps that state. Only email is required; first_name, last_name and phone are optional. When no contact exists for that address, one is created in the unsubscribed state. Returns status, message and contact_id. Requires the 'suppressions:write' OAuth scope.
unsubscribe_sms
ChatGPTOpts a phone number out of the account's SMS campaigns across every list. Takes the phone number of a contact on the account. Returns status, message and contact_id. reinstate_sms is the call in the other direction, and the consent for that comes from the person themselves. Requires the 'suppressions:write' OAuth scope.
update_automation
ChatGPTUpdates an inactive automation by id: its name, trigger, extra_triggers, entry_filter or steps, where steps replaces the whole tree and carries the full list. An inactive automation takes the edit, and update_automation_status deactivates one. The trigger events and step kinds are documented in the request schema, the same vocabulary create_automation takes. Requires the 'campaigns:draft' OAuth scope.
update_automation_status
ChatGPTSets the status of an automation to active or inactive, from the automation id and the status value. list_automations and get_automation hold the id, and create_automation saves an automation inactive. Returns status, id, name and automation_status. Requires the 'campaigns:send' OAuth scope.
update_brand_kit
ChatGPTSets the account brand fields by hand: logo URL, hex colors, palette, site title and description, social links. It covers a fetched brand that is wrong or missing; every field set here is remembered as hand edited and a later refresh from the website leaves it alone. Requires the 'campaigns:draft' OAuth scope.
update_campaign
ChatGPTChanges an existing draft in place, from the draft id plus any of subject, body (with body_format), name, reply_to, contact_list_id, template_id, and the from address as either sender_id or email_sender_id from list_senders. Returns the draft and a sender object with lane and authorized. Only unsent drafts can change. Requires the 'campaigns:draft' OAuth scope.
update_campaign_sharing
ChatGPTControls the public side of a campaign, from the campaign id with web_version, show_in_archive or regenerate_public_link: taking a delivered campaign off the web, listing it in the account's public archive, or retiring and replacing a public link that leaked. The response carries the new public_url. Requires the 'campaigns:draft' OAuth scope.
update_contact
ChatGPTChanges fields on an existing contact identified by contact_id. Only the fields present in the request are touched and omitted fields keep their current values, which suits corrections and enrichment (a new job title, a fixed typo in an address). Returns the full updated contact. search_contacts turns a person into the contact_id this takes. Requires the 'contacts:write' OAuth scope.
update_contact_subscriptions
ChatGPTSubscribes or unsubscribes one contact for specific email types, from the contact id plus subscribe and/or unsubscribe arrays of email type ids read from list_email_types or get_contact_subscriptions. Returns the requested changes, the contact, and its email type state. Opt-outs the recipient made themselves stay in place and come back with a note. Requires the 'suppressions:write' OAuth scope.
update_custom_block
ChatGPTRenames a saved block, replaces its HTML, or changes whether it is shared. Takes custom_block_id plus only the fields that change. Requires the 'campaigns:draft' OAuth scope.
update_email_template
ChatGPTUpdates a saved email template by template_id: its name, its subject or its html. Drafts already created from the template keep the content they were built with. list_email_templates holds the ids and get_email_template the current html. Requires the 'campaigns:draft' OAuth scope.
update_form
ChatGPTUpdates a form by form_id: its name, its fields, which replaces the whole field list, or the contact_list_id submitters join. get_form holds the current field list and list_forms the ids. Requires the 'contacts:write' OAuth scope.
update_landing_page
ChatGPTUpdates a landing page by id: its html, name, meta_title, meta_description, goal or the contact_list_id it captures leads into. get_landing_page holds the current values, and publish_landing_page puts the page on the web. Requires the 'campaigns:draft' OAuth scope.
update_segment
ChatGPTUpdates a segment by segment_id: its name, its description or its conditions, which replace the whole rule set. A custom segment takes the edit and a system segment is read only. list_segments holds the ids and the current names. Requires the 'contacts:write' OAuth scope.
update_signature
ChatGPTUpdates a saved email signature by signature_id: its name, its html, or whether it is the active signature drafts and replies carry. list_signatures holds the ids and the current html. Requires the 'campaigns:draft' OAuth scope.
update_sms_campaign
ChatGPTUpdates a draft SMS campaign by id: its name, its message_body, where segments and credits are re-estimated, or the contact_list_id it goes to. A draft takes the edit. list_sms_campaigns holds the ids and send_sms_campaign submits the draft. Requires the 'campaigns:draft' OAuth scope.
update_tag
ChatGPTRenames or recolors a tag, from tag_id plus the new name or color. Every contact carrying the tag follows automatically. list_tags holds the current names and ids, and delete_tag takes a tag off the account altogether. Requires the 'contacts:write' OAuth scope.
update_team_member_role
ChatGPTChanges the role of somebody who already belongs to this workspace, from the user_id list_team_members returns and the new role. The roles this account can assign are documented in the request schema. The workspace owner and the caller keep the role they have. Requires the 'account:write' OAuth scope.
upload_file
ChatGPTHosts a file (PDF, document, spreadsheet, image, short clip) so a campaign can link to it. Takes filename, content_base64 and content_type; the content is base64 encoded inside the request, which suits small files. The public_url that comes back is the link a campaign body carries. Requires the 'campaigns:draft' OAuth scope.
upload_image
ChatGPTAdds an image (PNG, JPG or GIF) to the account library and returns a public URL for campaign HTML. Takes filename, content_base64, content_type and an optional alt_text describing the picture; the content is base64 encoded inside the request, which suits small images. Requires the 'campaigns:draft' OAuth scope.
verify_domain
ChatGPTTriggers the DNS check for a domain once its records are in place. DNS changes can take a few hours to propagate, so a domain that does not verify at once may verify later; list_domains carries the result. Requires the 'campaigns:draft' OAuth scope.
add_contact_to_contact_list
Claudecreate_contact
Claudecreate_contact_list
Claudecreate_or_update_contact
Claudedraft_campaign
Claudeget_campaign_status
Claudeget_contact
Claudeget_custom_fields
Claudelist_contact_lists
Claudelist_contacts_in_list
Claudelist_senders
Claudelist_tags
Claudesearch_contacts
Claudesend_campaign
Claudeunsubscribe_contact
Claudeupdate_contact
Claude