Elastic Email

App · 20 actions

Send transactional and bulk email with Elastic Email, track delivery, opens and clicks, and manage contacts, lists and templates.

Actions

ActionWhat it does
Add contactAdd a contact, optionally putting it on one or more lists.
Add contacts to listPut existing contacts on a list.
Create listCreate a contact list holding the given existing contacts.
Create templateCreate an email template from HTML and/or text.
Delete contactDelete a contact by email address.
Delete listDelete a list.
Delete templateDelete a template by its name.
Get contactGet a contact by email address: name, status, custom fields, consent and sending activity.
Get email statusGet the status of a send by its transaction ID: how many recipients were sent to, delivered, opened, clicked, bounced or unsubscribed, optionally with the addresses in each group.
Get statisticsGet the account's sending totals between two dates: emails sent, delivered, opened, clicked, bounced, unsubscribed and complaints.
Get templateGet a template's subject and body by its name.
List contactsList the account's contacts, a page at a time.
List contacts in listList the contacts on one list, a page at a time.
List eventsList delivery events - submissions, sends, opens, clicks, bounces, unsubscribes and more - in a time window.
List listsList the account's contact lists.
List templatesList your email templates, or Elastic Email's gallery.
Remove contacts from listTake contacts off a list.
Send bulk emailSend a separate copy of an email to each recipient, who do not see each other, with per-recipient merge fields.
Send transactional emailSend one email to one or more recipients, who can see each other (To and CC).
Update contactChange a contact's name or custom fields.

Add contact

Add a contact, optionally putting it on one or more lists. Free accounts can hold up to 1,000 contacts.

Inputs

EmailemailtextRequired
The new contact's email address.
First namefirst_nametext
The contact's first name.
Last namelast_nametext
The contact's last name.
Statusstatustext
Active contacts can receive marketing email; Transactional ones only transactional email. Leave empty for Elastic Email's default.One of: Active (Active - can receive marketing email), Transactional (Transactional - transactional email only).
Custom fieldscustom_fieldsobject
Values for the account's custom contact fields. Only fields that already exist in Elastic Email are saved - others are silently dropped.
Listslist_namestext
Lists to add the contact to.

Outputs

activityobject
consentobject
custom_fieldsobject
date_addedtext
date_updatedtext
emailtext
first_nametext
last_nametext
listslist
sourcetext
source_infotext
statustext
status_change_datetext
Example output
{
  "activity": {
    "error_code": null,
    "friendly_error_message": null,
    "last_clicked": "2026-10-02T10:06:00",
    "last_failed": null,
    "last_ip": null,
    "last_opened": "2026-10-02T10:05:00",
    "last_sent": "2026-10-02T10:00:00",
    "total_clicked": 1,
    "total_failed": 0,
    "total_opened": 2,
    "total_sent": 3
  },
  "consent": {
    "date": null,
    "ip": null,
    "tracking": "Unknown"
  },
  "custom_fields": {},
  "date_added": "2026-10-01T09:30:00",
  "date_updated": "2026-10-02T11:00:00",
  "email": "ada@example.com",
  "first_name": "Ada",
  "last_name": "Lovelace",
  "lists": [
    "Newsletter"
  ],
  "source": "ContactApi",
  "source_info": null,
  "status": "Active",
  "status_change_date": null
}

Add contacts to list

Put existing contacts on a list.

Inputs

Listlist_nametextRequired
The list, by its exact name.
Contact emailsemailslistRequired
Email addresses of contacts that already exist in Elastic Email (up to 1,000). Use Add contact to create new ones.

Outputs

emailslist
listobject
list_nametext
Example output
{
  "emails": [
    "ada@example.com"
  ],
  "list": {
    "allow_unsubscribe": true,
    "date_added": "2026-09-15T08:00:00",
    "name": "Newsletter",
    "public_list_id": "2b6c9d1e-3f4a-4b5c-8d7e-9f0a1b2c3d4e"
  },
  "list_name": "Newsletter"
}

Create list

Create a contact list holding the given existing contacts.

Inputs

List namelist_nametextRequired
The new list's name.
Contact emailsemailslist
Email addresses of existing contacts to put on the list. Required unless 'Add every contact' is ticked.
Add every contactinclude_all_contactstrue/false
Put every contact in the account on the list. Elastic Email does this when no emails are given, so it must be chosen explicitly.Default: false.
Allow unsubscribeallow_unsubscribetrue/false
Let contacts unsubscribe from this list.

Outputs

allow_unsubscribetrue/false
date_addedtext
nametext
public_list_idtext
Example output
{
  "allow_unsubscribe": true,
  "date_added": "2026-09-15T08:00:00",
  "name": "Newsletter",
  "public_list_id": "2b6c9d1e-3f4a-4b5c-8d7e-9f0a1b2c3d4e"
}

Create template

Create an email template from HTML and/or text. Use {name} for merge fields.

Inputs

Template nametemplate_nametextRequired
The new template's name, which sends refer to.
Subjectsubjecttext
The subject line emails using it get.
HTML bodyhtml_bodytext
The HTML content.
Text bodytext_bodytext
The plain-text content, for mail clients that do not show HTML.

Outputs

bodylist
date_addedtext
html_bodytext
nametext
scopetext
subjecttext
text_bodytext
typetext
Example output
{
  "body": [
    {
      "charset": null,
      "content": "<p>Hello {firstname}</p>",
      "content_type": "HTML"
    }
  ],
  "date_added": "2026-09-20T12:00:00",
  "html_body": "<p>Hello {firstname}</p>",
  "name": "Welcome",
  "scope": "Personal",
  "subject": "Welcome aboard",
  "text_body": null,
  "type": "RawHTML"
}

Delete contact

Delete a contact by email address.

Inputs

Contact emailemailtextRequired
The contact's email address.

Outputs

deletedtrue/false
emailtext
Example output
{
  "deleted": true,
  "email": "ada@example.com"
}

Delete list

Delete a list. Its contacts are kept in the account.

Inputs

Listlist_nametextRequired
The list, by its exact name.

Outputs

deletedtrue/false
list_nametext
Example output
{
  "deleted": true,
  "list_name": "Newsletter"
}

Delete template

Delete a template by its name.

Inputs

Templatetemplate_nametextRequired
The template, by its exact name.

Outputs

deletedtrue/false
template_nametext
Example output
{
  "deleted": true,
  "template_name": "Welcome"
}

Get contact

Get a contact by email address: name, status, custom fields, consent and sending activity.

Inputs

Contact emailemailtextRequired
The contact's email address.

Outputs

activityobject
consentobject
custom_fieldsobject
date_addedtext
date_updatedtext
emailtext
first_nametext
last_nametext
sourcetext
source_infotext
statustext
status_change_datetext
Example output
{
  "activity": {
    "error_code": null,
    "friendly_error_message": null,
    "last_clicked": "2026-10-02T10:06:00",
    "last_failed": null,
    "last_ip": null,
    "last_opened": "2026-10-02T10:05:00",
    "last_sent": "2026-10-02T10:00:00",
    "total_clicked": 1,
    "total_failed": 0,
    "total_opened": 2,
    "total_sent": 3
  },
  "consent": {
    "date": null,
    "ip": null,
    "tracking": "Unknown"
  },
  "custom_fields": {},
  "date_added": "2026-10-01T09:30:00",
  "date_updated": "2026-10-02T11:00:00",
  "email": "ada@example.com",
  "first_name": "Ada",
  "last_name": "Lovelace",
  "source": "ContactApi",
  "source_info": null,
  "status": "Active",
  "status_change_date": null
}

Get email status

Get the status of a send by its transaction ID: how many recipients were sent to, delivered, opened, clicked, bounced or unsubscribed, optionally with the addresses in each group.

Inputs

Transaction IDtransaction_idtextRequired
The transaction_id a send step returned.
Includeincludetext
Which address lists to return alongside the counts. Leave empty for counts only.One or more of: failed (Failed (bounced) addresses), errors (Error messages for bounces), sent (Sent addresses), delivered (Delivered addresses), pending (Pending addresses), opened (Opened addresses), clicked (Clicked addresses), unsubscribed (Unsubscribed addresses), abuse (Abuse reports), message_ids (Message IDs).

Outputs

abuse_reportslist
abuse_reports_countnumber
clickedlist
clicked_countnumber
deliveredlist
delivered_countnumber
failedlist
failed_countnumber
idtext
message_idslist
openedlist
opened_countnumber
pendinglist
pending_countnumber
recipients_countnumber
sentlist
sent_countnumber
statustext
unsubscribedlist
unsubscribed_countnumber
Example output
{
  "abuse_reports": [],
  "abuse_reports_count": 0,
  "clicked": [],
  "clicked_count": 0,
  "delivered": [],
  "delivered_count": 1,
  "failed": [],
  "failed_count": 0,
  "id": "8c2f0a5e-1d9b-4b7e-9c41-5f0b2a7d6e10",
  "message_ids": [],
  "opened": [],
  "opened_count": 0,
  "pending": [],
  "pending_count": 0,
  "recipients_count": 1,
  "sent": [],
  "sent_count": 1,
  "status": "complete",
  "unsubscribed": [],
  "unsubscribed_count": 0
}

Get statistics

Get the account's sending totals between two dates: emails sent, delivered, opened, clicked, bounced, unsubscribed and complaints.

Inputs

FromstartdateRequired
The first day to count (UTC).
Toenddate
The last day to count (UTC). Defaults to now.

Outputs

bouncednumber
clickednumber
complaintsnumber
deliverednumber
email_totalnumber
in_progressnumber
inboundnumber
manual_cancelnumber
not_deliverednumber
openednumber
recipientsnumber
sms_totalnumber
unsubscribednumber
Example output
{
  "bounced": 3,
  "clicked": 21,
  "complaints": 0,
  "delivered": 117,
  "email_total": 120,
  "in_progress": 0,
  "inbound": 0,
  "manual_cancel": 0,
  "not_delivered": 0,
  "opened": 64,
  "recipients": 120,
  "sms_total": 0,
  "unsubscribed": 1
}

Get template

Get a template's subject and body by its name.

Inputs

Templatetemplate_nametextRequired
The template, by its exact name.

Outputs

bodylist
date_addedtext
html_bodytext
nametext
scopetext
subjecttext
text_bodytext
typetext
Example output
{
  "body": [
    {
      "charset": null,
      "content": "<p>Hello {firstname}</p>",
      "content_type": "HTML"
    }
  ],
  "date_added": "2026-09-20T12:00:00",
  "html_body": "<p>Hello {firstname}</p>",
  "name": "Welcome",
  "scope": "Personal",
  "subject": "Welcome aboard",
  "text_body": null,
  "type": "RawHTML"
}

List contacts

List the account's contacts, a page at a time.

Inputs

Limitlimitnumber
How many to return, up to 1,000. Defaults to 100.From 1 to 1000. Default: 100.
Offsetoffsetnumber
How many to skip, for the next page. Defaults to 0.From 0 to 1000000. Default: 0.

Outputs

contactslist
Contacts
countnumber
has_moretrue/false
limitnumber
offsetnumber
Example output
{
  "contacts": [
    {
      "activity": {
        "error_code": null,
        "friendly_error_message": null,
        "last_clicked": "2026-10-02T10:06:00",
        "last_failed": null,
        "last_ip": null,
        "last_opened": "2026-10-02T10:05:00",
        "last_sent": "2026-10-02T10:00:00",
        "total_clicked": 1,
        "total_failed": 0,
        "total_opened": 2,
        "total_sent": 3
      },
      "consent": {
        "date": null,
        "ip": null,
        "tracking": "Unknown"
      },
      "custom_fields": {},
      "date_added": "2026-10-01T09:30:00",
      "date_updated": "2026-10-02T11:00:00",
      "email": "ada@example.com",
      "first_name": "Ada",
      "last_name": "Lovelace",
      "source": "ContactApi",
      "source_info": null,
      "status": "Active",
      "status_change_date": null
    }
  ],
  "count": 1,
  "has_more": false,
  "limit": 100,
  "offset": 0
}

List contacts in list

List the contacts on one list, a page at a time.

Inputs

Listlist_nametextRequired
The list, by its exact name.
Limitlimitnumber
How many to return, up to 1,000. Defaults to 100.From 1 to 1000. Default: 100.
Offsetoffsetnumber
How many to skip, for the next page. Defaults to 0.From 0 to 1000000. Default: 0.

Outputs

contactslist
Contacts on the list
countnumber
has_moretrue/false
limitnumber
list_nametext
offsetnumber
Example output
{
  "contacts": [
    {
      "activity": {
        "error_code": null,
        "friendly_error_message": null,
        "last_clicked": "2026-10-02T10:06:00",
        "last_failed": null,
        "last_ip": null,
        "last_opened": "2026-10-02T10:05:00",
        "last_sent": "2026-10-02T10:00:00",
        "total_clicked": 1,
        "total_failed": 0,
        "total_opened": 2,
        "total_sent": 3
      },
      "consent": {
        "date": null,
        "ip": null,
        "tracking": "Unknown"
      },
      "custom_fields": {},
      "date_added": "2026-10-01T09:30:00",
      "date_updated": "2026-10-02T11:00:00",
      "email": "ada@example.com",
      "first_name": "Ada",
      "last_name": "Lovelace",
      "source": "ContactApi",
      "source_info": null,
      "status": "Active",
      "status_change_date": null
    }
  ],
  "count": 1,
  "has_more": false,
  "limit": 100,
  "list_name": "Newsletter",
  "offset": 0
}

List events

List delivery events - submissions, sends, opens, clicks, bounces, unsubscribes and more - in a time window. The Free plan keeps 3 days of email logs.

Inputs

Event typesevent_typestext
Only these kinds of event. Leave empty for all.One or more of: Submission, FailedAttempt (Failed attempt), Error, Sent, Open, Click, Unsubscribe, Complaint, Bounce, TransactionalUnsubscribe (Transactional unsubscribe), Suppress.
Fromstartdate and time
Only events at or after this time (UTC).
Toenddate and time
Only events at or before this time (UTC).
Orderordertext
Defaults to Elastic Email's order.One of: DateDescending (Newest first), DateAscending (Oldest first).
Limitlimitnumber
How many to return, up to 1,000. Defaults to 100.From 1 to 1000. Default: 100.
Offsetoffsetnumber
How many to skip, for the next page. Defaults to 0.From 0 to 1000000. Default: 0.

Outputs

countnumber
eventslist
Delivery events
has_moretrue/false
limitnumber
offsetnumber
Example output
{
  "count": 1,
  "events": [
    {
      "channel_name": null,
      "event_date": "2026-10-02T10:00:00",
      "event_type": "Sent",
      "from_email": "news@example.com",
      "ip_address": null,
      "message": null,
      "message_category": null,
      "message_id": "Xy7Kq2Zr9pLw3Nv8Tb4Hm1",
      "next_try_on": null,
      "subject": "Welcome aboard",
      "to": "ada@example.com",
      "transaction_id": "8c2f0a5e-1d9b-4b7e-9c41-5f0b2a7d6e10"
    }
  ],
  "has_more": false,
  "limit": 100,
  "offset": 0
}

List lists

List the account's contact lists.

Inputs

Limitlimitnumber
How many to return, up to 1,000. Defaults to 100.From 1 to 1000. Default: 100.
Offsetoffsetnumber
How many to skip, for the next page. Defaults to 0.From 0 to 1000000. Default: 0.

Outputs

countnumber
has_moretrue/false
limitnumber
listslist
Contact lists
offsetnumber
Example output
{
  "count": 1,
  "has_more": false,
  "limit": 100,
  "lists": [
    {
      "allow_unsubscribe": true,
      "date_added": "2026-09-15T08:00:00",
      "name": "Newsletter",
      "public_list_id": "2b6c9d1e-3f4a-4b5c-8d7e-9f0a1b2c3d4e"
    }
  ],
  "offset": 0
}

List templates

List your email templates, or Elastic Email's gallery.

Inputs

Scopescopetext
Defaults to My templates.One or more of: Personal (My templates), Global (Elastic Email gallery).
Template typestemplate_typestext
Only templates made this way. Leave empty for all.One or more of: RawHTML (Raw HTML), DragDropEditor (Drag and drop editor), TemplateEditor (Template editor).
Limitlimitnumber
How many to return, up to 1,000. Defaults to 100.From 1 to 1000. Default: 100.
Offsetoffsetnumber
How many to skip, for the next page. Defaults to 0.From 0 to 1000000. Default: 0.

Outputs

countnumber
has_moretrue/false
limitnumber
offsetnumber
templateslist
Templates
Example output
{
  "count": 1,
  "has_more": false,
  "limit": 100,
  "offset": 0,
  "templates": [
    {
      "body": [
        {
          "charset": null,
          "content": "<p>Hello {firstname}</p>",
          "content_type": "HTML"
        }
      ],
      "date_added": "2026-09-20T12:00:00",
      "html_body": "<p>Hello {firstname}</p>",
      "name": "Welcome",
      "scope": "Personal",
      "subject": "Welcome aboard",
      "text_body": null,
      "type": "RawHTML"
    }
  ]
}

Remove contacts from list

Take contacts off a list. The contacts stay in the account.

Inputs

Listlist_nametextRequired
The list, by its exact name.
Contact emailsemailslistRequired
Email addresses of contacts that already exist in Elastic Email (up to 1,000). Use Add contact to create new ones.

Outputs

emailslist
list_nametext
removedtrue/false
Example output
{
  "emails": [
    "ada@example.com"
  ],
  "list_name": "Newsletter",
  "removed": true
}

Send bulk email

Send a separate copy of an email to each recipient, who do not see each other, with per-recipient merge fields. Returns the transaction ID.

Inputs

Fromfrom_addresstextRequired
The sender, optionally with a name: Ada Lovelace <ada@example.com>. It must be on a domain verified in Elastic Email, or the address the account was registered with.
RecipientsrecipientslistRequired
Email addresses, or objects with each recipient's own merge fields: {"email": "ada@example.com", "fields": {"firstname": "Ada"}}.
Subjectsubjecttext
The subject line. Optional when a template supplies one.
HTML bodyhtml_bodytext
The HTML content. Merge fields are written in braces, such as {firstname}. Give an HTML body, a text body or a template.
Text bodytext_bodytext
The plain-text content, for mail clients that do not show HTML.
Templatetemplate_nametext
Send this template instead of (or as well as) a body.
Reply toreply_totext
Where replies go, if not to the sender.
Merge fieldsmergeobject
Values shared by every recipient, used in the body as {name}. For example firstname = Ada fills {firstname}.
Channelchannel_nametext
A channel name to group this send under in Elastic Email reports.
Track openstrack_openstrue/false
Leave empty to use the account's default.
Track clickstrack_clickstrue/false
Leave empty to use the account's default.
Delay (minutes)delay_minutesnumber
Hold the email back this many minutes before sending (up to 35 days).From 0 to 50400.

Outputs

message_idtext
transaction_idtext
Example output
{
  "message_id": "Xy7Kq2Zr9pLw3Nv8Tb4Hm1",
  "transaction_id": "8c2f0a5e-1d9b-4b7e-9c41-5f0b2a7d6e10"
}

Send transactional email

Send one email to one or more recipients, who can see each other (To and CC). Write the body or use a template. Returns the transaction ID to check its status with.

Inputs

Fromfrom_addresstextRequired
The sender, optionally with a name: Ada Lovelace <ada@example.com>. It must be on a domain verified in Elastic Email, or the address the account was registered with.
TotolistRequired
Recipient email addresses.
CCcclist
Copy recipients, visible to everyone.
BCCbcclist
Hidden copy recipients.
Subjectsubjecttext
The subject line. Optional when a template supplies one.
HTML bodyhtml_bodytext
The HTML content. Merge fields are written in braces, such as {firstname}. Give an HTML body, a text body or a template.
Text bodytext_bodytext
The plain-text content, for mail clients that do not show HTML.
Templatetemplate_nametext
Send this template instead of (or as well as) a body.
Reply toreply_totext
Where replies go, if not to the sender.
Merge fieldsmergeobject
Values shared by every recipient, used in the body as {name}. For example firstname = Ada fills {firstname}.
Channelchannel_nametext
A channel name to group this send under in Elastic Email reports.
Track openstrack_openstrue/false
Leave empty to use the account's default.
Track clickstrack_clickstrue/false
Leave empty to use the account's default.
Delay (minutes)delay_minutesnumber
Hold the email back this many minutes before sending (up to 35 days).From 0 to 50400.

Outputs

message_idtext
transaction_idtext
Example output
{
  "message_id": "Xy7Kq2Zr9pLw3Nv8Tb4Hm1",
  "transaction_id": "8c2f0a5e-1d9b-4b7e-9c41-5f0b2a7d6e10"
}

Update contact

Change a contact's name or custom fields. Fields left empty are not changed.

Inputs

Contact emailemailtextRequired
The contact's email address.
First namefirst_nametext
The contact's first name.
Last namelast_nametext
The contact's last name.
Custom fieldscustom_fieldsobject
Values for the account's custom contact fields. Only fields that already exist in Elastic Email are saved - others are silently dropped.

Outputs

activityobject
consentobject
custom_fieldsobject
date_addedtext
date_updatedtext
emailtext
first_nametext
last_nametext
sourcetext
source_infotext
statustext
status_change_datetext
Example output
{
  "activity": {
    "error_code": null,
    "friendly_error_message": null,
    "last_clicked": "2026-10-02T10:06:00",
    "last_failed": null,
    "last_ip": null,
    "last_opened": "2026-10-02T10:05:00",
    "last_sent": "2026-10-02T10:00:00",
    "total_clicked": 1,
    "total_failed": 0,
    "total_opened": 2,
    "total_sent": 3
  },
  "consent": {
    "date": null,
    "ip": null,
    "tracking": "Unknown"
  },
  "custom_fields": {},
  "date_added": "2026-10-01T09:30:00",
  "date_updated": "2026-10-02T11:00:00",
  "email": "ada@example.com",
  "first_name": "Ada",
  "last_name": "Lovelace",
  "source": "ContactApi",
  "source_info": null,
  "status": "Active",
  "status_change_date": null
}

On this page