Using the API to send emails
It is possible to use the Ortto API to send emails by using a dedicated transactional email API.
Requests to send transactional email messages in Ortto are submitted as a single POST
method to the following URL:
https://api.ap3api.com/v1/transactional/send
NOTE: Ortto customers who have their instance region set to Australia or Europe will need to use specific service endpoints relative to the region:
Australia: https://api.au.ap3api.com/ Europe: https://api.eu.ap3api.com/For example: https://api.eu.ap3api.com/v1/<entity/endpoint>
All other Ortto users will use the default service endpoint (https://api.ap3api.com/).
Sending transactional emails
Ortto supports sending transactional emails, optionally with attachments, via the API. You might want to do this to send tickets, e-books, receipts, invoices, booking confirmation and anything which requires an email to be delivered to a customer.
Example of sending a single transactional email to a single person
The example below sends a single transactional email to the email
chris@ortto.com
.shell
curl --request POST 'https://api.ap3api.com/v1/transactional/send' \ --header 'X-Api-Key: YOUR-CUSTOM-API-KEY' \ --header 'Content-Type: application/json' \ --data-raw '{ "asset": { "from_email": "jenny@ortto.com", "from_name": "Jenny Spencer", "reply_to": "sandra@ortto.com", "cc": [ "help@ortto.com" ], "subject": "Booking confirmation for {{ people.first-name }}", "email_name": "confirm-booking", "no_click_tracks": false, "no_opens_tracks": false, "html_body": "<html></html>", "liquid_syntax_enabled": true }, "emails": [{ "fields": { "bol::sp": true, "str::email": "chris@ortto.com", "str::first": "Chris", "str::last": "Sharkey", "str::soi-ctx": "API (Booking confirmation)" }, "location": null } ], "merge_by": [ "str::email" ], "merge_strategy": 2, "find_strategy": 0, "skip_non_existing": false }'
NOTE: If you see an error like the following:
{"request_id":"0037288a-0882-427a-972b-63b7be6c0304","code":403,"error":"instance myinstance: transactional email feature not activated, please activate on any playbook or journey"}
This is because you do not yet have permission to send transactional emails using Ortto. There are several ways to seek permission. You can either do what the error message says and set up a transactional playbook or journey at which point you will be prompted to seek permission through the system itself. Or you can bypass that and just email help@ortto.com with a request to have transactional emails turned on for your account.
Transactional emails are only available on the Business and Enterprise plans.
Asset options for transactional emails
from_email
The from email can be anything, but ideally should be from a custom domain which you have configured in Ortto to send email from. If you send from a domain you have registered the deliverability rate will be higher. If you use a different domain, it will be sent via "autopilotmail2.io".
from_name
This can be any name you like.
reply_to
The reply to email can be any email address you like.
cc
Carbon copy is optional, and is an array of email addresses you’d like a copy of each email to be sent to. This can be used if you need to keep an official record of all correspondence sent to a particular address, but usually you can just leave this out.
An email can only support up to 5 CC or BCC email addresses.
subject
The subject of the email.
email_name
This is a name you’ll use in Ortto to identify this email for filtering and reporting reasons. So make it is something that is easy to uniquely identify and associate with this email.
no_click_tracks
By default we will generate "Email clicked" activities for any links clicked in your transactional emails. This means that Ortto will rewrite the URLs of you links to go through a redirect before the customer reaches your URL. The user won’t notice as this happens quickly, but sometimes customers like to disable this feature so the URLs are not changed. This is done either because they have a very specific URL structure, or they are concerned about deliverability. Setting
no_click_tracks
totrue
will mean Ortto will not rewrite the links in your email.
no_open_tracks
If you set
no_open_tracks
totrue
, we will not include our tracking pixel in the email. This will mean that "Email opened" activities will not be generated in Ortto, and you won’t be able to report or filter on those as a consequence. However, removing the tracking pixel may help with the deliverability of your email given its transactional nature.
html_body
This is the HTML body for your email. You are required to provide the full email content here. This can be anything you like and it is up to you to make sure that the HTML is valid for as many email clients as you can, and test it to see that it renders correctly before sending to real customers. Because this is transactional email, you are not required to include an {{ unsubscribe }} link, but you can include this if you would like to. You can use any and all Ortto Liquid syntax in the email as long as the
liquid_syntax_enabled
option is set totrue
.
liquid_syntax_enabled
If this is set to
false
, Liquid tags will be ignored. Otherwise, they will be processed as in all Ortto emails. See our guide to Liquid syntax in emails for a list of how to use these correctly.Because Liquid syntax is enabled by default,
liquid_syntax_enabled
is not required in the request if the value is set totrue
(though there is no harm in including it).
campaign_id
This allows you to use a draft or sent Ortto email template for the email. This is for single-send email campaigns only, and not for journey or playbook email assets.
The
campaign_id
value is found in the campaign URL, which you need to collect from the Ortto app. It is then added to the API request body atasset
. If usingcampaign_id
, you do not need to include otherasset
objects in the API request body, however you can include them to override those campaign values.Learn more about
campaign_id
under Using a campaign ID.
asset_id
This allows you to use a draft or published Ortto email asset for the email. This is for assets only, whether attached or unattached to a journey or playbook, and is not for single-send email campaigns.
The
asset_id
value is found in the asset URL, which you need to collect from the Ortto app. It is then added to the API request body atasset
. If usingasset_id
, you do not need to include otherasset
objects in the API request body, however you can include them to override those campaign values.Learn more about
asset_id
under Using an asset ID.Using a campaign ID
To use an email campaign template for a transactional email:
In Ortto, create a new email campaign as a template, or view an existing email campaign (such as a previously sent campaign you are using as a template or an existing draft that is ready to send). If creating a new email, complete the Template, Recipients, Setup and Content steps. Stop at the Review step and don't send the campaign. Pick any audience at the Recipients step; it won't affect the API request as the recipient/s will be specified inemails
. When viewing the existing or new email campaign, copy the campaign ID from the URL. It will look like the below example. Addcampaign_id
and value to theasset
array the transactional email API call.Note you do not need the otherasset
objects shown in the example of sending a single transactional email to a single person. For example, your request can look like this:json
{ "asset": { "campaign_id": "62de45141a2a340b983eec22" }, "emails": [{ "fields": { "bol::sp": true, "str::email": "john.doe@example.com", "str::first": "John", "str::last": "Doe", "str::soi-ctx": "Booking confirmation" }, "location": null } ], "merge_by": [ "str::email" ], "merge_strategy": 2, "find_strategy": 0, "skip_non_existing": false }
The
campaign_id
value will provide the details and data configured at the Template, Setup and Content steps when the email draft/template was created in Ortto.Override option
If required, you can override some of the settings in your email template by providing other
asset
elements in the request (in addition tocampaign_id
). For example, if you need to add a specificsubject
depending on the recipient, you can create a request like the following. In this example, both John and Jane will receive the same email (per the campaign ID), however:
John will receive the email with the subject "Subject line B" because in theemails
object, a subject line variant is specified atasset
and is associated with hisfields
. Jane will receive the email with the subject "Subject line A" because no further customization was set for her inemails
.json
{ "asset": { "campaign_id": "62a030691783cb944fb9f4a5", "subject": "Subject line A" }, "emails": [ { "asset": { "campaign_id": "62a030691783cb944fb9f4a5", "subject": "Subject line B" }, "fields": { "str::email": "jdoe@email.com", "str::first": "John", "str::last": "Doe" } }, { "fields": { "str::email": "jane.smith@email.com", "str::first": "Jane", "str::last": "Smith" } } ], "merge_by": [ "str::email" ] }
Using an asset ID
To use an email asset for a transactional email:
In Ortto, create a new email asset or view an existing email asset (such as one attached to a journey or an unattached draft in your asset manager). If creating a new email asset, at minimum, complete the Template, Setup and Content steps. You can stop at the Review step and leave the asset unpublished if you wish. When viewing the draft or published asset, copy the asset ID from the URL. It will look like the below example. Addasset_id
and value to theasset
array the transactional email API call.Note you do not need the otherasset
objects shown in the example of sending a single transactional email to a single person. For example, your request can look like this:json
{ "asset": { "asset_id": "62de45141a2a340b983eec22" }, "emails": [{ "fields": { "bol::sp": true, "str::email": "john.doe@example.com", "str::first": "John", "str::last": "Doe", }, "location": null } ], "merge_by": [ "str::email" ], "merge_strategy": 2, "find_strategy": 0, "skip_non_existing": false }
The
asset_id
value will provide the details and data configured at the Template, Setup and Content steps when the email asset was created in Ortto.Override option
If required, you can override some of the settings in your email template by providing other
asset
elements in the request (in addition toasset_id
). For example, if you need to use a differentfrom_email
depending on the recipient, you can create a request like the following. In this example, both John and Jane will receive the same email (per the asset ID), however:
John will receive the email with thefrom_email
"support@company.com" because in theemails
object, a from email variant is specified atasset
and is associated with hisfields
. Jane will receive the email with thefrom_email
"sales@company.com" because no further customization was set for her inemails
.json
{ "asset": { "asset_id": "63689f3a0161f5efd0734773", "from_email": "sales@company.com" }, "emails": [ { "asset": { "asset_id": "63689f3a0161f5efd0734773", "from_email": "support@company.com" }, "fields": { "str::email": "jdoe@email.com", "str::first": "John", "str::last": "Doe" } }, { "fields": { "str::email": "jane.smith@email.com", "str::first": "Jane", "str::last": "Smith" } } ], "merge_by": [ "str::email" ] }
Notes about people
The people you send emails to do not necessarily need to exist in your Ortto CDP prior to sending them an email, a contact can be created for them as part of this call. You can read about merge strategy here. If you do not want to send transactional emails to people who do not already exist in the CDP, then provide the
skip_non_existing
option astrue
and those people will not have a contact created in Ortto and will not receive an email.As part of sending transactional email you can add/merge fields for customers in the record provided to this endpoint. For a full description of how this works see here.
Example of sending a single transactional email to a group of people
You can send the same transactional email to a group of people just by including more records in the array of "emails" provided in the call. This will send the same email to each of the people listed, but obviously interpolating their merge tags into the email.
shell
curl --request POST 'https://api.ap3api.com/v1/transactional/send' \ --header 'X-Api-Key: YOUR-CUSTOM-API-KEY' \ --header 'Content-Type: application/json' \ --data-raw '{ "asset": { "from_email": "jenny@ortto.com", "from_name": "Jenny Spencer", "cc": [ "help@ortto.com" ], "subject": "Confirm that you still want to hear from us, {{ people.first-name }}", "email_name": "confirm-subscription", "no_click_tracks": false, "no_opens_tracks": false, "html_body": "<html></html>", "liquid_syntax_enabled": true }, "emails": [{ "fields": { "str::email": "chris+test1@ortto.com", "str::first": "Chris1", "str::last": "Test1", "bol::sp": true, "str::soi-ctx": "API (Subscription confirmation)" } }, { "fields": { "str::email": "chris+test2@ortto.com", "str::first": "Chris2", "str::last": "Test2", "bol::sp": true, "str::soi-ctx": "API (Subscription confirmation)" } }, { "fields": { "str::email": "chris+test3@ortto.com", "str::first": "Chris3", "str::last": "Test3", "bol::sp": true, "str::soi-ctx": "API (Subscription confirmation)" } }, { "fields": { "str::email": "chris+test4@ortto.com", "str::first": "Chris4", "str::last": "Test4", "bol::sp": true, "str::soi-ctx": "API (Subscription confirmation)" } } ], "merge_by": [ "str::email" ], "merge_strategy": 2, "find_strategy": 0, "skip_non_existing": false }'
Example of sending different transactional emails to a group of people on a case by case basis
If you would like to send a different variation of an email to a particular person, you can provide an "asset" per person in your "emails" array. This doesn’t have to be for every contact. In the example below, we have a global asset which is sent as the default, then we override it for
chris+override@ortto.com
who receives different email markup. You can do this for up to 100 people per payload.shell
curl --request POST 'https://api.ap3api.com/v1/transactional/send' \ --header 'X-Api-Key: YOUR-CUSTOM-API-KEY' \ --header 'Content-Type: application/json' \ --data-raw '{ "asset": { "from_email": "jenny@ortto.com", "from_name": "Jenny Spencer", "cc": [ "help@ortto.com" ], "subject": "Confirm that you still want to hear from us, {{ people.first-name }}", "email_name": "confirm-subscription", "no_click_tracks": false, "no_opens_tracks": false, "html_body": "<html></html>", "liquid_syntax_enabled": true }, "emails": [{ "fields": { "str::email": "chris+test1@ortto.com", "str::first": "Chris1", "str::last": "Test1", "bol::sp": true, "str::soi-ctx": "API (Subscription confirmation)" } }, { "fields": { "str::email": "chris+test2@ortto.com", "str::first": "Chris2", "str::last": "Test2", "bol::sp": true, "str::soi-ctx": "API (Subscription confirmation)" } }, { "fields": { "str::email": "chris+test3@ortto.com", "str::first": "Chris3", "str::last": "Test3", "bol::sp": true, "str::soi-ctx": "API (Subscription confirmation)" } }, { "fields": { "str::email": "chris+override@ortto.com", "str::first": "Chris4", "str::last": "Override", "bol::sp": true, "str::soi-ctx": "API (Subscription confirmation)" }, "asset": { "from_email": "override@ortto.com", "from_name": "Override Department", "subject": "An overridden subject for you, {{ people.first-name }}", "email_name": "confirm-subscription-override", "no_click_tracks": false, "no_opens_tracks": false, "html_body": "<html></html>", "liquid_syntax_enabled": true } } ], "merge_by": [ "str::email" ], "merge_strategy": 2, "find_strategy": 0, "skip_non_existing": false }'
Adding attachments to transactional emails
The Ortto transactional email API supports up to 5 attachments per email. Attachments need to be base64 encoded and have the correct MIME type in order to be sent correctly. Here’s a basic example of sending an image as an attachment:
shell
curl --request POST 'https://api.ap3api.com/v1/transactional/send' \ --header 'X-Api-Key: YOUR-CUSTOM-API-KEY' \ --header 'Content-Type: application/json' \ --data-raw '{ "asset": { "from_email": "steve.spencer@ortto.com", "from_name": "Steve Spencer", "subject": "IMPORTANT: a picture ", "email_name": "confirm-booking", "no_click_tracks": false, "no_opens_tracks": false, "html_body": "<html></html>", "liquid_syntax_enabled": true, "attachments": [ { "filename": "ortto.png", "content_type": "image/png", "content": "iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAACAKADAAQAAAABAAACAAAAAAAL+LWFAAAoqElEQVR4Ae3de6xsV1kA8EMBQbEoaS0iBhCwRR7xEcRE0WIBRUMQxX8EISjiW9TEV6ImKqjgg0T/QCMixESMKIiiJqK2ty1iNBiVh4IKlIcIFeRRiQgIfl9vt/fc6bln9sxea+299vxW8t2ZOTN7PX5r7e+sO69zdKQQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ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QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgVsJ/B+u7ewtj7bD5wAAAABJRU5ErkJggg==" } ] }, "emails": [{ "fields": { "bol::sp": true, "str::email": "chris@ortto.com", "str::first": "Chris", "str::last": "Sharkey", "str::soi-ctx": "API (Booking confirmation)" }, "location": null } ], "merge_by": [ "str::email" ], "merge_strategy": 2, "find_strategy": 0, "skip_non_existing": false }'
NOTE: You should use whichever programming language you are using to send transactional email to base64 encode your assets.
If you don’t know how, or would like a way to do this on a case per case basis you can do it here: https://www.base64-image.de/
Passing JSON object data in transactional emails
When sending a transactional email via Ortto's API, you have the ability to pass a JSON object as part of the request body and use the object's values within the email content.
The JSON object data can be used at the per contact or the per campaign level.
You can read the guide to this in Passing JSON object data in a transactional email via API.
Transactional email limits
Total request size
6MB
Individual attachment limit (once encoded to base64)
1MB
Individual email size
2MB
Emails per request
100
CCs per email
5
Standard API rate limits
All standard API rate limits apply, *see here for details.