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 to true will mean Ortto will not rewrite the links in your email.

no_open_tracks

If you set no_open_tracks to true, 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 to true.

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 to true (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 at asset. If using campaign_id, you do not need to include other asset 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 at asset. If using asset_id, you do not need to include other asset 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:

  1. 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 in emails.
  2. When viewing the existing or new email campaign, copy the campaign ID from the URL. It will look like the below example.
    Example campaign ID found in the campaign URL
  3. Add campaign_id and value to the asset array the transactional email API call.
    Note you do not need the other asset 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 TemplateSetup 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 to campaign_id). For example, if you need to add a specific subject 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 the emails object, a subject line variant is specified at asset and is associated with his fields.
  • Jane will receive the email with the subject "Subject line A" because no further customization was set for her in emails.

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:

  1. 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.
  2. When viewing the draft or published asset, copy the asset ID from the URL. It will look like the below example.
    Example asset ID found in the asset URL
  3. Add asset_id and value to the asset array the transactional email API call.
    Note you do not need the other asset 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 TemplateSetup 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 to asset_id). For example, if you need to use a different from_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 the from_email "support@company.com" because in the emails object, a from email variant is specified at asset and is associated with his fields.
  • Jane will receive the email with the from_email "sales@company.com" because no further customization was set for her in emails.

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 as true 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.