/broadcasts
application/json- body
name?stringInternal name shown in the dashboard
segment_id?stringSegment to send to; omitted means every contact of the team
uuidfrom*stringSender, "Name user@domain"; the domain must be one of the team's own verified domains when the broadcast is sent: sending from an address on the shared inbox domain answers 403
subject*stringSubject line; supports {{{FIRST_NAME|there}}} merge fields
1 <= length <= 998html?stringHTML body; include {{{UNSUBSCRIBE_URL}}} for the opt-out link
text?stringPlain-text body; at least one of html/text is required
reply_to?|array<string>Reply-To address or list
preview_text?stringInbox preview (preheader) text
topic_id?stringTopic id; only contacts subscribed to it receive the broadcast
uuidsend?booleantrue sends (or schedules) immediately instead of saving a draft
scheduled_at?stringDeliver later (requires send: true): ISO 8601 with offset or relative like "in 1 hour"
Broadcast created (and scheduled when send: true)
application/json- response
id*stringuuidfinishes_at?stringWhen the last email is expected to go out (ISO 8601); null when unknown
estimated?truefinishes_at is an estimate that moves as other sends come in
truewarning?curl -X POST 'https://api.millionsend.com/broadcasts' \ -H 'Content-Type: application/json' \ -d '{ "from": "string", "subject": "string"}'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "finishes_at": "string", "estimated": true, "warning": { "code": "paced", "days": 0, "message": "string" }}