Upload and manage Word document templates specifically formatted for email generation, including HTML conversion and variable replacement.
---
https://app.datapublisher.io/api/email-templates
---
All endpoints require JWT authentication via Authorization: Bearer header.
---
The Email Templates API allows you to:
Supported File Types:
File Size Limit: 25 MB
Key Features:
---
Get all email templates for the authenticated user.
Endpoint: GET /list
Headers:
Authorization: Bearer
Response (200 OK):
{
"success": true,
"templates": [
{
"id": "uuid",
"templateName": "Welcome Email",
"description": "Welcome email for new customers",
"originalFilename": "welcome-template.docx",
"fileSize": 35000,
"status": "active",
"variables": ["FirstName", "CompanyName", "SignupDate"],
"createdAt": "2026-01-15T10:00:00Z",
"updatedAt": "2026-02-01T14:30:00Z"
},
{
"id": "uuid-2",
"templateName": "Monthly Newsletter",
"description": "Monthly company newsletter template",
"originalFilename": "newsletter.docx",
"fileSize": 125000,
"status": "active",
"variables": ["RecipientName", "Month", "Year", "TopStory"],
"createdAt": "2026-01-20T09:00:00Z",
"updatedAt": "2026-02-10T11:00:00Z"
}
],
"count": 2
}
---
Upload a new Word document as an email template.
Endpoint: POST /upload
Headers:
Authorization: Bearer
Content-Type: multipart/form-data
Form Data:
template (file, required): Word document (.docx or .doc)
templateName (string, required): Display name for template
description (string, optional): Template description
Response (200 OK):
{
"success": true,
"template": {
"id": "uuid",
"templateName": "Welcome Email",
"description": "Welcome email for new customers",
"originalFilename": "welcome-template.docx",
"fileName": "abc123-def456.docx",
"fileSize": 35000,
"status": "active",
"variables": ["FirstName", "CompanyName", "SignupDate"],
"createdAt": "2026-02-12T10:00:00Z"
},
"message": "Email template uploaded successfully"
}
Error Responses:
400 Bad Request - Missing template name:
{
"success": false,
"message": "Template name is required"
}
400 Bad Request - No file provided:
{
"success": false,
"message": "No template file provided"
}
400 Bad Request - Invalid file type:
{
"success": false,
"message": "File type not supported. Only Word documents (.docx, .doc) are allowed."
}
---
Retrieve metadata for a specific email template.
Endpoint: GET /:templateId
Headers:
Authorization: Bearer
Response (200 OK):
{
"success": true,
"template": {
"id": "uuid",
"userId": "user-uuid",
"templateName": "Welcome Email",
"description": "Welcome email for new customers",
"originalFilename": "welcome-template.docx",
"fileName": "abc123.docx",
"fileSize": 35000,
"filePath": "/uploads/email-templates/user-uuid/abc123.docx",
"status": "active",
"variables": ["FirstName", "CompanyName", "SignupDate"],
"htmlContent": "...",
"createdAt": "2026-01-15T10:00:00Z",
"updatedAt": "2026-02-01T14:30:00Z"
}
}
Error Responses:
404 Not Found:
{
"success": false,
"message": "Email template not found"
}
---
Download the original Word document file.
Endpoint: GET /:templateId/download
Headers:
Authorization: Bearer
Response (200 OK):
application/vnd.openxmlformats-officedocument.wordprocessingml.document
attachment; filename="TemplateName.docx"
Error Responses:
404 Not Found - Template not found:
{
"success": false,
"message": "Email template not found"
}
404 Not Found - File missing:
{
"success": false,
"message": "Template file not found"
}
---
Update template metadata (name and description).
Endpoint: PUT /:templateId
Headers:
Authorization: Bearer
Content-Type: application/json
Request Body:
{
"templateName": "Welcome Email v2",
"description": "Updated welcome email for new customers"
}
Response (200 OK):
{
"success": true,
"template": {
"id": "uuid",
"templateName": "Welcome Email v2",
"description": "Updated welcome email for new customers",
"updatedAt": "2026-02-12T11:00:00Z"
},
"message": "Email template updated successfully"
}
Error Responses:
404 Not Found:
{
"success": false,
"message": "Email template not found"
}
---
Permanently delete an email template and its file.
Endpoint: DELETE /:templateId
Headers:
Authorization: Bearer
Response (200 OK):
{
"success": true,
"message": "Email template deleted successfully"
}
Error Responses:
404 Not Found:
{
"success": false,
"message": "Email template not found"
}
---
Email templates support field placeholders in the format:
{{FieldName}}
Examples:
Dear {{FirstName}} {{LastName}},
Thank you for joining {{CompanyName}}!
Your account was created on {{SignupDate}}.
{{First_Name}}, {{Email2024}}, {{ContactEmail}}
When you upload a template:
{{...}} patterns
---
Word documents are automatically converted to HTML for email rendering:
Supported Features:
Limitations:
HTML output is optimized for:
---
---
| Status Code | Description |
|-------------|-------------|
| 400 | Invalid file type, missing required fields |
| 401 | Unauthorized - missing or invalid JWT token |
| 404 | Template not found or access denied |
| 413 | File too large (>25 MB) |
| 429 | Too many upload requests |
| 500 | Internal server error |
---
// Upload email template
const formData = new FormData();
formData.append('template', fileInput.files[0]);
formData.append('templateName', 'Welcome Email');
formData.append('description', 'Welcome email for new customers');
const uploadResponse = await fetch('https://app.datapublisher.io/api/email-templates/upload', {
method: 'POST',
headers: {
'Authorization': Bearer ${jwtToken}
},
body: formData
});
const uploaded = await uploadResponse.json();
console.log('Template uploaded:', uploaded.template.id);
console.log('Variables found:', uploaded.template.variables);
// List templates
const listResponse = await fetch('https://app.datapublisher.io/api/email-templates/list', {
headers: {
'Authorization': Bearer ${jwtToken}
}
});
const templates = await listResponse.json();
console.log(Found ${templates.count} templates);
// Get template details
const templateResponse = await fetch(
https://app.datapublisher.io/api/email-templates/${templateId},
{
headers: {
'Authorization': Bearer ${jwtToken}
}
}
);
const template = await templateResponse.json();
console.log('Variables:', template.template.variables);
import requests
API_URL = 'https://app.datapublisher.io/api/email-templates'
headers = {'Authorization': f'Bearer {jwt_token}'}
Upload template
with open('welcome-email.docx', 'rb') as f:
files = {'template': f}
data = {
'templateName': 'Welcome Email',
'description': 'Welcome email for new customers'
}
response = requests.post(f'{API_URL}/upload', files=files, data=data, headers=headers)
uploaded = response.json()
template_id = uploaded['template']['id']
print(f"Template uploaded: {template_id}")
print(f"Variables: {uploaded['template']['variables']}")
List templates
response = requests.get(f'{API_URL}/list', headers=headers)
templates = response.json()
print(f"Found {templates['count']} templates")
Get template
response = requests.get(f'{API_URL}/{template_id}', headers=headers)
template = response.json()
print(f"Variables: {template['template']['variables']}")
Download template
response = requests.get(f'{API_URL}/{template_id}/download', headers=headers)
with open('downloaded-template.docx', 'wb') as f:
f.write(response.content)
print("Template downloaded")
Upload template
curl -X POST https://app.datapublisher.io/api/email-templates/upload \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-F "template=@welcome-email.docx" \
-F "templateName=Welcome Email" \
-F "description=Welcome email for new customers"
List templates
curl -X GET https://app.datapublisher.io/api/email-templates/list \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
Get template
curl -X GET "https://app.datapublisher.io/api/email-templates/TEMPLATE_ID" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
Download template
curl -X GET "https://app.datapublisher.io/api/email-templates/TEMPLATE_ID/download" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-o template.docx
Delete template
curl -X DELETE "https://app.datapublisher.io/api/email-templates/TEMPLATE_ID" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
---
---
Subject: Welcome to {{CompanyName}}, {{FirstName}}!
Dear {{FirstName}},
Thank you for signing up on {{SignupDate}}.
We're excited to have you as part of {{CompanyName}}.
Best regards,
The {{CompanyName}} Team
Personal:
Dates:
Custom:
---