add-contact-to-list
ChatGPTAdd one of your contacts to a list. Returns the contact.
batch-create-contacts
ChatGPTBatch import up to 1000 contacts in one call. Existing contacts (by email) are updated; new ones are created. Rejects when the import would exceed the account contact limit. Returns created/updated counts.
bulk-contact-operation
ChatGPTApply one action to every contact matching a filter: apply_tag, remove_tag, add_to_list, or remove_from_list. Runs in the background in chunks and returns an id to poll with get-bulk-action-status. ALWAYS run with dry_run true first — that reports how many contacts match without touching anything, and is the only way to catch a filter that matches more than intended. Deleting and unsubscribing in bulk are deliberately not available here.
create-automation
ChatGPTCreate an automation. Optionally attach a trigger (apply_list requires trigger_list_id; open_campaign/click_campaign require trigger_campaign_id). Activating requires an active subscription and a verified email.
create-automation-email
ChatGPTAdd an email step to an automation. Creates the underlying campaign and links it to a new automation item, with an optional delay in hours before it sends.
create-campaign
ChatGPTCreate a draft email campaign. The audience is any combination of lists and included tags (to_contact_tags). excluded_lists removes contacts in those lists and excluded_contact_tags removes contacts carrying those tags from the send. HTML must include {{unsubscribe_url}}.
create-contact
ChatGPTCreate a contact (or attach lists to an existing one) via the API. Rejects when the account has reached its contact limit. Optionally attach owned lists and set custom contact fields.
create-contact-field
ChatGPTCreate a custom contact field. The internal name is derived by slugging the label; labels that slug to an existing field's name are rejected.
create-contact-tag
ChatGPTCreate a new contact tag. A brand color is auto-assigned when none is provided. Tag names are unique per account.
create-domain
ChatGPTAdd a white-label sending domain and provision its SendGrid record so DNS records can be generated.
create-form
ChatGPTCreate an embeddable signup form that subscribes contacts to one or more of your lists. Optionally set a redirect URL and whether GDPR consent is required.
create-list
ChatGPTCreate a new contact list.
delete-automation
ChatGPTDelete an automation and cancel any of its scheduled deliverables.
delete-automation-email
ChatGPTRemove an email from an automation and cancel any of its scheduled deliverables.
delete-campaign
ChatGPTDelete a draft campaign. A campaign that has already been sent cannot be deleted.
delete-contact
ChatGPTDelete a contact owned by the account. Any scheduled deliverables for the contact are removed first.
delete-contact-field
ChatGPTDelete a custom contact field.
delete-contact-tag
ChatGPTDelete a tag. Tagged contacts are kept — only the tag and its attachments (including any campaign audience use) are removed.
delete-domain
ChatGPTDelete a white-label sending domain, removing its SendGrid record.
delete-form
ChatGPTDelete a signup form.
delete-list
ChatGPTDelete a contact list. The list cannot be deleted while it is used by a form, landing page, or automation.
get-account
ChatGPTGet the authenticated SendFox account (the "me" endpoint): profile, plan, timezone, and contact usage.
get-automation
ChatGPTFetch a single automation with its triggers and emails, including each email's campaign stats.
get-batch-campaign-stats
ChatGPTGet stored counts and rates for up to 100 owned campaigns in one call, in request order. Duplicate, missing or foreign IDs reject the whole request. Does not return link stats.
get-bulk-action-status
ChatGPTCheck a bulk contact action started by bulk-contact-operation: its status (pending, processing, completed, failed), how many contacts matched, and how many have been processed so far. For a dry run, matched_count is the answer and nothing was modified.
get-campaign
ChatGPTGet a single campaign by ID, including its lists, excluded lists, and included and excluded tag audiences.
get-campaign-section
ChatGPTGet one saved campaign section owned by this account, including its HTML. Shared gallery content is not included.
get-campaign-stats
ChatGPTReturn a campaign's performance statistics: sent, open, click, unsubscribe, bounce, and spam counts and rates. Pass include_link_stats true to also get link_stats — the campaign's links ranked by click count, so you can see which link earned the clicks. That part costs one count per link over a nine-figure table, so only ask for it when the question is about links.
get-campaign-template
ChatGPTGet one saved campaign template owned by this account, including its HTML. Shared gallery content is not included.
get-contact
ChatGPTFetch a single contact owned by the account by its ID.
get-contact-activity
ChatGPTReturn email activity (opens, clicks, bounces, unsubscribes, spam) for a contact owned by the account, alongside a summary of the contact's last engagement timestamps. Deliverables are paginated 50 per page.
get-contact-field
ChatGPTGet a single custom contact field.
get-domain
ChatGPTGet a single white-label sending domain, including its SendGrid DNS records when available.
get-form
ChatGPTGet a single signup form, including the lists it subscribes contacts to.
get-list
ChatGPTGet a single contact list, including its average email open and click percentages.
list-automations
ChatGPTList the account's automations, newest first. Paginated 100 per page.
list-campaign-engagement
ChatGPTList the contacts behind a sent campaign's engagement: openers, clickers, non_openers, bounced, or unsubscribed. Paginated, newest first. Use this for wave-2 resends, click-based segments, and bounce cleanup.
list-campaign-sections
ChatGPTList saved campaign sections owned by this account, 20 per page, newest first. Shared gallery content is not included.
list-campaign-templates
ChatGPTList saved campaign templates owned by this account, 20 per page, newest first. Shared gallery content is not included.
list-campaigns
ChatGPTList the account's campaigns, newest first. Paginated 100 per page.
list-contact-fields
ChatGPTList the account's custom contact fields. Paginated 20 per page.
list-contact-tags
ChatGPTList the account's contact tags, newest first, each with its contact count. Paginated 100 per page.
list-contacts
ChatGPTList the account's contacts, newest first, each with its lists. Filter by a free-text search query, an exact email, unsubscribed status, or engagement (filter.status, filter.last_opened_before/after, filter.never_opened, filter.in_list_ids, filter.tag_ids, …). Use count_only to get just the matched count — the right way to size an audience before acting on it, instead of paging through every contact. Up to 1000 per page.
list-domains
ChatGPTList the account's white-label sending domains, newest first. Paginated 10 per page.
list-forms
ChatGPTList the account's embeddable signup forms, newest first. Landing-page forms are excluded. Optionally filter by a free-text search query. Paginated 10 per page.
list-list-contacts
ChatGPTList the contacts belonging to a list, newest first. Optionally filter by a search query. Paginated 100 per page.
list-lists
ChatGPTList the account's contact lists, newest first. Optionally filter by a search query. Paginated 10 per page.
list-smart-pages
ChatGPTList the account's Smart Pages, primary first, each with its URL, whether its Newsletters tab is on, and the tags that decide which emails it lists. Use publish-to-smart-page to put emails on a page. Paginated 100 per page.
list-tags-for-contact
ChatGPTList the tags attached to a single contact.
list-unsubscribed-contacts
ChatGPTList the account's unsubscribed contacts, most recently unsubscribed first, each with its lists. Optionally filter by a free-text search query. Paginated 100 per page.
publish-to-smart-page
ChatGPTPublish emails to one Smart Page, or take them off it (published: false). Works on sent emails and drafts; a draft appears on the page once it sends. Publishing adds the page's tags to each email (creating a tag named after the page if it has none) and turns the page's Newsletters tab on. Unpublishing removes the page's tags, which also takes the email off any other page that shares one of those tags; each email's published_pages in the result shows where it ends up. Find page IDs with list-smart-pages.
remove-contact-from-list
ChatGPTRemove a contact from a list. Returns the contact.
resend-campaign
ChatGPTClone a sent campaign into a new draft aimed at part of its original audience (non_openers, openers, or clickers) — the wave-2 resend. Optionally give it a new subject and a send time; omit scheduled_at to leave it as a draft you can review first. The clone keeps the original's content, sender, and tag exclusions. estimated_recipient_count is the size of the engagement group before the campaign's Skip lists/tags and unsubscribes are removed, so the real send is at most that.
send-campaign
ChatGPTSend a draft campaign now. All existing abuse, approval, and deliverability checks still apply. The campaign must have a list or tag audience and the required content fields.
send-test-email
ChatGPTSend a test of a campaign to one or more email addresses so it can be checked in a real inbox before send-campaign. The rendered email is really delivered to those addresses only; the campaign audience is untouched and the campaign stays a draft. Recipients are not added as contacts, and links in a test are not tracked.
tag-contact
ChatGPTAttach a tag to a contact (idempotent). Returns the contact's tags after the change.
unsubscribe-contact
ChatGPTUnsubscribe a contact by email address. Already-unsubscribed contacts are left unchanged. Returns the contact, or a message when no contact matches the email.
untag-contact
ChatGPTRemove a tag from a contact. Returns the contact's remaining tags.
update-automation
ChatGPTUpdate an automation's title, trigger, or active state. Activating requires an active subscription and a verified email.
update-automation-email
ChatGPTUpdate an automation email — its delay, send order, and/or campaign content (subject, html, from_name, from_email).
update-campaign
ChatGPTUpdate a draft campaign. A campaign that has already been sent cannot be updated. Only the fields you provide are changed; when html is provided it must contain {{unsubscribe_url}}. The audience is any combination of lists and included tags (to_contact_tags); excluded_lists removes contacts in those lists and excluded_contact_tags removes contacts carrying those tags from the send.
update-contact
ChatGPTUpdate a contact owned by the account. Set first_name/last_name, replace its list membership, or set custom contact fields.
update-contact-field
ChatGPTRename a custom contact field. The internal name is re-derived from the new label; labels that slug to another field's name are rejected.
update-contact-tag
ChatGPTRename a tag or change its color. Only tags owned by the account can be updated.
update-form
ChatGPTUpdate a signup form. Only the provided fields change. Supplying lists replaces the form's current lists.
update-list
ChatGPTRename a contact list.
validate-domain
ChatGPTTrigger DNS validation for a white-label sending domain. On success the domain is marked validated; failures return the per-record validation errors.