Email Gateway
Manage reusable email templates, preview rendered output, and send transactional emails.
Email Gateway API
The Email Gateway API manages template files and transactional sends.
List Templates
GET
Required permission
email_templates:readApiAccessPermission::EMAIL_TEMPLATES_READQuery Parameters
sizeintegerRecords per page (max 100).
pageintegerPage index (starting from 1).
Responses
Template list returned.
{
"entities": "Email Templates",
"count": 2,
"per_page": 100,
"pages": {
"current": 1,
"max": 1
},
"elements": [
{
"id": "welcome.html",
"endpoint": [
{
"type": "POST",
"action": "Send email using this template",
"url": "https://api.hub.donutwork.com/2026-02-01/email-gateway/welcome.html/send.json"
}
]
}
]
}Create Template
POST
Required permission
email_templates:writeApiAccessPermission::EMAIL_TEMPLATES_WRITEQuery Parameters
No query parameters required.
Request Body
{
"template": {
"id": "welcome.html",
"content": "<h1>Hello FIRST_NAME</h1>"
}
}template.idstringRequiredTemplate filename identifier.
template.contentstringOptional initial template content.
Responses
Template created.
{
"id": "welcome.html"
}Template already exists.
{
"error": "Template already exists"
}Get Template
GET
Required permission
email_templates:readApiAccessPermission::EMAIL_TEMPLATES_READQuery Parameters
templateIdstringRequiredTemplate identifier.
Responses
Template returned.
{
"id": "welcome.html",
"content": "<h1>Hello FIRST_NAME</h1>"
}Template not found.
{
"error": "Template not found"
}Update Template
PUT
Required permission
email_templates:writeApiAccessPermission::EMAIL_TEMPLATES_WRITEQuery Parameters
templateIdstringRequiredTemplate identifier.
Request Body
{
"template": {
"content": "<h1>Hello FIRST_NAME</h1><p>Updated</p>"
}
}template.contentstringRequiredTemplate content to persist.
Responses
Template updated.
{
"id": "welcome.html",
"updated": true
}Delete Template
DELETE
Required permission
email_templates:writeApiAccessPermission::EMAIL_TEMPLATES_WRITEQuery Parameters
templateIdstringRequiredTemplate identifier.
Responses
Template deleted.
{
"id": "welcome.html",
"deleted": true
}Preview Template
POST
Required permission
email_templates:writeApiAccessPermission::EMAIL_TEMPLATES_WRITEQuery Parameters
templateIdstringRequiredTemplate identifier.
Request Body
{
"preview": {
"vars": {
"first_name": "Alex"
}
}
}preview.varsobjectVariables used for server-side placeholder rendering.
Responses
Rendered HTML preview returned.
{
"template_id": "welcome.html",
"html": "<h1>Hello Alex</h1>"
}Dispatch Transactional Email
POST
Required permission
email_messages:writeApiAccessPermission::EMAIL_MESSAGES_WRITEQuery Parameters
templateIdstringRequiredTemplate identifier.
Request Body
{
"email": {
"to": "recipient@example.com",
"subject": "Operational Update",
"from": "notifications@example.com",
"cc": [
"ops@example.com"
],
"vars": {
"first_name": "Alex"
},
"attachments": [
{
"content": "SGVsbG8gd29ybGQ=",
"filename": "summary.txt",
"type": "text/plain"
}
]
}
}email.tostringRequiredPrimary recipient email.
email.subjectstringRequiredMessage subject.
email.fromstringOptional sender email from configured alternative senders.
email.ccarrayCC recipients.
email.bccarrayBCC recipients.
email.varsobjectTemplate variables.
email.attachmentsarrayAttachments in base64 format.
Responses
Email accepted for delivery.
{
"email": {
"id": "msg_123"
}
}Template not found.
{
"error": "Template not found or empty"
}