add_contact_to_segment
ChatGPTAdd a contact to a manual segment. Idempotent: adding twice is not an error.
add_suppressions
ChatGPTBlock up to 1000 addresses in one call. origin (default manual) is recorded on rows this call creates: bounce, complaint and manual block every send; unsubscribe (a migrated opt-out list) blocks topic sends and broadcasts only, so topic-less POST /emails still delivers. An address already suppressed keeps its origin and reports its existing id.
cancel_broadcast
ChatGPTCancel a queued broadcast. Emails already sent are not recalled; the broadcast's sent_count says how many went out and canceled_remaining says how many were stopped.
cancel_email
ChatGPTCancel a scheduled email before it is sent.
create_broadcast
ChatGPTCreate a broadcast (bulk email to a segment or the whole audience). Saved as a draft unless send is true; send_broadcast sends a saved draft. A large audience is paced over days; the response's finishes_at and warning say when it finishes.
create_contact
ChatGPTCreate a contact in the team audience, optionally placing it in segments and setting topic subscriptions. Fails with 409 if the email already exists.
create_contact_batch
ChatGPTCreate up to 1000 contacts in one call. Each item has the same shape as create_contact. on_conflict decides what happens to an email that already belongs to a contact, or repeats inside the batch: error (default) counts it as a failed item, skip keeps the existing contact and reports its id, upsert merges names, properties, segments and topics into it (a batch never re-subscribes anyone). validation strict (default) is all-or-nothing: any failed item — invalid, conflicting, or naming an unknown segment or topic — rejects the whole batch with that item's status and nothing is written; permissive writes every item that succeeds and lists the failures in errors.
create_contact_preferences_link
ChatGPTMint the hosted preference-center URL for a contact (by id or email): the page their unsubscribe links open, listing the team's public topics with a global unsubscribe. The link never expires and lets its holder change that contact's preferences.
create_contact_property
ChatGPTDefine a custom contact property (key, type, optional fallback value).
create_domain
ChatGPTAdd a sending domain. region is optional: this deployment serves sa-east-1, us-east-1 (default sa-east-1) and refuses any other. A domain has one region, fixed when it is added. Returns the DNS records to create; the domain sends once they verify. Open and click tracking start off; open_tracking/click_tracking together with a tracking_subdomain set the domain up tracked in one call — its Tracking CNAME then comes back with the other records (same rules as update_domain).
create_segment
ChatGPTCreate a segment. With a filter it selects contacts dynamically; without one it is a manual membership list fed by add_contact_to_segment.
create_template
ChatGPTCreate an email template: name, html, optional subject, text and alias (a stable handle, unique per team). Live immediately. A template created with html opens in the dashboard's code mode and keeps its HTML byte for byte; converting it to blocks is the user's explicit choice there. from, reply_to and variables are not supported yet; passing them is a 422.
create_topic
ChatGPTCreate a subscription topic (name, description, default_subscription, visibility). Topic ids scope sends and broadcasts.
create_webhook
ChatGPTCreate a webhook endpoint subscribed to email events. MillionSend generates its Standard Webhooks signing secret, which these tools never return; the full secret is available by rotating it in the MillionSend dashboard or from the REST API (GET /webhooks/{id}).
delete_broadcast
ChatGPTDelete a draft broadcast. Sent broadcasts cannot be deleted.
delete_contact
ChatGPTDelete a contact and its segment memberships; its emails stay in the log. erase=true also scrubs the address from email history, event payloads and API logs (GDPR/LGPD). This cannot be undone.
delete_contact_property
ChatGPTDelete a custom contact property definition.
delete_contacts
ChatGPTDelete up to 1000 contacts in one call, by ids or by email addresses (exactly one of the two). Returns the contacts actually deleted; unknown ones are skipped. Emails stay in the log; erase=true also scrubs each address from email history, like delete_contact. This cannot be undone.
delete_domain
ChatGPTRemove a sending domain and its SES identity. Sends from it stop immediately; this cannot be undone.
delete_segment
ChatGPTDelete a segment. Its contacts remain in the audience.
delete_suppression
ChatGPTRemove one suppression by id or email address; the address can receive email again.
delete_template
ChatGPTDelete a template. Broadcasts keep their own copy of its content. This cannot be undone.
delete_topic
ChatGPTDelete a subscription topic and the per-contact choices recorded for it.
delete_webhook
ChatGPTDelete a webhook endpoint. Deliveries to it stop immediately.
get_broadcast
ChatGPTGet one broadcast: audience, content, schedule and status.
get_contact
ChatGPTGet one contact by id or email, including custom properties and global unsubscribe state.
get_contact_topics
ChatGPTList every topic of the team with the contact's effective subscription (their explicit choice, else the topic's default) and whether it was explicit.
get_deliverability
ChatGPTGet the team's deliverability standing over the trailing 30 days: a 0-10 headline score with band, content and outcome sub-scores, complaint and hard-bounce rates, and guardrail status. The score measures best-practice compliance and recipient outcomes for the account — it is NOT an inbox-placement probability. Per-email check results come from get_email_insights.
get_domain
ChatGPTGet one sending domain with its DNS records (DKIM, MAIL FROM, DMARC, and the Tracking CNAME once a tracking subdomain is set) and per-record status. Only the DKIM and MAIL FROM (SPF) rows gate sending. The DMARC row is recommended, and reads verified when a parent-domain policy covers the subdomain (see inherited_from and policy). Each record's live field says what public DNS answers now; detail explains a pending or failed row.
get_email
ChatGPTGet one email by id: sender, recipients, subject, body, schedule and delivery status (last_event: queued, sent, delivered, bounced, complained, ...).
get_email_insights
ChatGPTGet the best-practice report for one email, computed when it was sent: per-check results (id, severity, pass/fail, points deducted) and a 0-10 score. The score measures compliance with sending best practices — it is NOT an inbox-placement probability. Each failing check describes what lowered the score.
get_segment
ChatGPTGet one segment: its name and filter, or manual membership when it has no filter.
get_suppression
ChatGPTGet one suppression by id or email address: its origin and the email that caused it.
get_template
ChatGPTGet one template by id or alias, including its subject, html and text. Every save is live: there is no draft/publish cycle.
get_topic
ChatGPTGet one subscription topic: name, description, default and visibility.
get_usage
ChatGPTGet the team's plan name (plan), sending limits and usage: the send limit (emails_per_day or emails_per_month), domain limit and contact limit (limits.contacts, null when unlimited), emails accepted so far today (UTC) and when that counter resets, and on a monthly limit a period object with the period's emails_sent, included volume, whether sending past it is on and when the period ends. A self-hosted instance reports cloud=false with null plan, limits and period; the instance's own (system) team reports cloud=true with the same nulls.
get_webhook
ChatGPTGet one webhook endpoint by id: URL, subscribed events and status. The signing secret is not returned by these tools; it is available by rotating it in the MillionSend dashboard or from the REST API.
list_api_keys
ChatGPTList the team's active API keys: name, creation and last-used times. Tokens are never returned; a lost token means a new key.
list_broadcasts
ChatGPTList broadcasts with their status (draft, scheduled, sending, sent).
list_contact_properties
ChatGPTList the custom contact property definitions (key, type, fallback) usable on contacts and in templates.
list_contacts
ChatGPTList contacts of the team, oldest first, with cursor pagination. segment_id limits the list to that segment's members; include=properties,topics attaches the typed property map and the topic subscriptions to every item.
list_domains
ChatGPTList sending domains with verification status. Emails can only be sent from a verified domain.
list_emails
ChatGPTList the team's transactional emails (sent, queued and scheduled), oldest first, with cursor pagination.
list_segments
ChatGPTList segments (saved audience filters or manual contact lists) — the targets broadcasts are sent to.
list_suppressions
ChatGPTList suppressed addresses — bounces, complaints and manual blocks that every send skips, plus unsubscribes that block topic sends and broadcasts only — oldest first, with cursor pagination. origin filters to one kind. Addresses erased for GDPR/LGPD are hidden here and reachable by id only.
list_templates
ChatGPTList email templates (name, alias, timestamps), oldest first, with cursor pagination.
list_topics
ChatGPTList subscription topics (newsletter, product updates, ...) contacts can opt in or out of; topic ids scope sends and broadcasts.
list_webhooks
ChatGPTList webhook endpoints with their subscribed events and status (list rows never carry signing secrets).
remove_contact_from_segment
ChatGPTRemove a contact from a manual segment. The contact itself is kept.
remove_suppressions
ChatGPTUnblock up to 1000 addresses in one call, by emails or by ids (exactly one of the two). Returns only the rows actually removed.
revoke_api_key
ChatGPTRevoke an API key. Requests carrying it fail from now on; this cannot be undone.
send_broadcast
ChatGPTSend a draft broadcast now, or schedule it with scheduled_at. Recipients are resolved at send time; unsubscribed and topic-opted-out contacts are skipped. A large audience is paced over days; the response's finishes_at and warning say when it finishes.
send_email
ChatGPTSend a transactional email (or schedule it with scheduled_at). Suppressed and topic-opted-out recipients are skipped automatically. Returns the email id. Each call is a new send: repeating it delivers the email again.
send_email_batch
ChatGPTSend up to 100 emails in one call; each entry has the same shape as send_email. Returns one id per accepted email. Each call is a new send: repeating it delivers every email again.
update_broadcast
ChatGPTUpdate a draft broadcast's audience, content or subject.
update_contact
ChatGPTUpdate a contact's name, custom properties or global unsubscribe flag. Omitted fields are left unchanged.
update_contact_property
ChatGPTUpdate a custom contact property definition.
update_contact_topics
ChatGPTSet a contact's per-topic subscription choices. Topics not listed are left unchanged.
update_domain
ChatGPTChange a domain's open/click tracking. Tracking is served from the domain's own tracking subdomain: tracking_subdomain (a label such as "links") sets it, and the returned records include its CNAME; links are tracked through it once that CNAME resolves (verify_domain re-checks it). On MillionSend Cloud, turning tracking on without a subdomain is refused.
update_email
ChatGPTReschedule a scheduled email that has not been sent yet.
update_segment
ChatGPTRename a segment or change its filter (null clears the filter, making it manual).
update_template
ChatGPTChange a template's name, subject, html, text or alias (null clears the alias). Omitted fields are left unchanged; the change is live immediately. Writing html makes the template html-authored: it opens in the dashboard's code mode and keeps its HTML byte for byte; converting it to blocks is the user's explicit choice there.
update_topic
ChatGPTUpdate a topic's name, description or visibility. The default subscription is immutable.
update_webhook
ChatGPTUpdate a webhook's endpoint URL, subscribed events, or enabled/disabled status.
verify_domain
ChatGPTRe-check a domain's DNS records and SES verification, returning the domain with fresh per-record status. Only the DKIM and MAIL FROM (SPF) rows gate sending. The DMARC row is recommended, and reads verified when a parent-domain policy covers the subdomain (see inherited_from and policy). Each record's live field says what public DNS answers now; detail explains a pending or failed row.