Dashboard
Total Sent
-
Queued
-
Failed
-
Bounced
-
Service Health
Loading...
Quick Actions
Compose Email
Email Logs
| ID | Recipient | Subject | Template | Status | Date |
|---|---|---|---|---|---|
| Enter a recipient email or select a status to search | |||||
Loading templates...
Template Gallery
Browse professionally designed email templates.
Coming soon!
Building Blocks
Reusable content blocks for your emails.
Coming soon!
Brand Kit
Manage your brand colors, fonts, and logos.
Coming soon!
Bounce Records
| Type ↕ | Subtype | Diagnostic | Message ID | Date ↕ | |
|---|---|---|---|---|---|
| Search by email or click "Show All" to view all bounces | |||||
Suppression List
| Reason | Date Added | Actions | |
|---|---|---|---|
| Loading... | |||
Verify Single Email
Bulk Verify Emails
Paste emails (one per line or comma-separated) or upload a CSV file
Max 50 emails per request
CSV/TXT file with emails (one per line or email column)
Total
0
Valid
0
Invalid
0
Free
0
Business
0
| Status | Type | MX | Domain | Reason |
|---|
API Keys
| Name | Key | Status | Rate Limit | Last Used | Expires | Actions |
|---|---|---|---|---|---|---|
| Loading... | ||||||
Webhooks
Loading...
Total Contacts
-
Subscribed
-
Unsubscribed
-
Last 30 Days
-
| Name | City | Source | Status | Tags | Added | Actions | |
|---|---|---|---|---|---|---|---|
| Loading... | |||||||
Contact Lists
Loading...
Segments
Dynamic contact groups based on filters
Loading...
Elements & layouts
Drag and drop elements & layouts to design your email from scratch
Pre-made Designs
Click to load a complete email design template
Widgets & Extras
Special purpose blocks for advanced layouts
Email Style
Configure your email's global appearance
Saved Templates
Load a previously saved email template
No saved templates yet. Use "Save Template" to save your work.
Drag & drop blocks here
or click a block from the left panel
Properties
Select a block to edit its properties
Email Campaigns
Create, schedule, and track marketing campaigns
Total Campaigns
-
Active / Sending
-
Completed
-
Draft
-
| Campaign | Status | Sent | Open Rate | Click Rate | Created | Actions |
|---|---|---|---|---|---|---|
| Loading... | ||||||
Campaign Detail
Create Campaign
Automations
Create automated email workflows triggered by events
| Name | Trigger | Status | Entered | Completed | Actions |
|---|---|---|---|---|---|
| Loading... | |||||
Automation Detail
Trigger
-
Total Entered
-
Total Completed
-
Workflow Steps
Add Step
Recent Enrollments
Create Automation
API Documentation
Complete reference for the Mail Service REST API. All endpoints require the x-api-key header.
Base URL:
Auth Header: x-api-key: your_api_key
Endpoints
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| to | string | string[] | Yes | Recipient email(s) |
| subject | string | Yes | Email subject line |
| html | string | Conditional | HTML body (required if no template/text) |
| text | string | No | Plain text fallback |
| template | string | No | Template name (overrides subject/html) |
| data | object | No | Template variables |
| from | string | No | Override sender email |
| replyTo | string | string[] | No | Reply-to address(es) |
| cc | string | string[] | No | CC recipient(s) |
| bcc | string | string[] | No | BCC recipient(s) |
Example
curl -X POST {baseUrl}/email/send \
-H "Content-Type: application/json" \
-H "x-api-key: your_api_key" \
-d '{
"to": "user@example.com",
"subject": "Hello!",
"html": "<h1>Welcome</h1><p>Your content here</p>",
"text": "Welcome - plain text version",
"cc": ["cc1@example.com", "cc2@example.com"],
"bcc": "bcc@example.com"
}'
Response 202 Accepted
{
"message": "Email queued",
"id": 123,
"messageId": "abc-123-def-456"
}
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| to | string | string[] | Yes | Recipient email(s) |
| template | string | Yes | Template name (e.g. welcome, otp_verification) |
| data | object | No | Variables to inject (e.g. {"name": "John"}) |
| from | string | No | Override sender |
| replyTo | string | string[] | No | Reply-to address(es) |
| cc | string | string[] | No | CC recipient(s) |
| bcc | string | string[] | No | BCC recipient(s) |
Example
curl -X POST {baseUrl}/email/send-template \
-H "Content-Type: application/json" \
-H "x-api-key: your_api_key" \
-d '{
"to": "user@example.com",
"template": "welcome",
"data": {
"name": "John Doe"
},
"cc": "manager@example.com",
"bcc": ["admin@example.com"]
}'
Available Templates
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| template | string | Yes | Template name to use |
| recipients | array | Yes | Array of {to, data} objects (max 500) |
| defaultData | object | No | Default variables for all recipients |
| from | string | No | Override sender |
| replyTo | string | string[] | No | Reply-to address(es) |
Example
curl -X POST {baseUrl}/email/send-bulk \
-H "Content-Type: application/json" \
-H "x-api-key: your_api_key" \
-d '{
"template": "payment_receipt",
"defaultData": { "company": "Acme Inc" },
"recipients": [
{ "to": "alice@example.com", "data": { "name": "Alice", "amount": "$100" } },
{ "to": "bob@example.com", "data": { "name": "Bob", "amount": "$250" } }
]
}'
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| string | One of | Single email to verify | |
| emails | string[] | One of | Array of emails to verify (max 50) |
Checks Performed
- Format - Valid email syntax
- Disposable - Detects temporary/disposable email providers
- MX Record - Verifies domain has mail servers
- Domain - Checks domain DNS resolution
- Free/Business - Detects free providers (Gmail, Yahoo, etc.) vs business/paid domains
Example (Single)
curl -X POST {baseUrl}/email/verify \
-H "Content-Type: application/json" \
-H "x-api-key: your_api_key" \
-d '{
"email": "user@example.com"
}'
Example (Bulk)
curl -X POST {baseUrl}/email/verify \
-H "Content-Type: application/json" \
-H "x-api-key: your_api_key" \
-d '{
"emails": ["user1@example.com", "fake@nonexistent.xyz", "test@mailinator.com"]
}'
Response 200 OK (Single)
{
"email": "user@example.com",
"valid": true,
"reason": "Valid email address",
"details": {
"format": true,
"domain": true,
"mx": true,
"disposable": false,
"free": false // false = business/paid, true = free (gmail, yahoo, etc.)
}
}
Response 200 OK (Bulk)
{
"total": 3,
"valid": 1,
"invalid": 2,
"free": 0, // count of valid free emails
"business": 1, // count of valid business/paid emails
"results": [
{ "email": "user1@company.com", "valid": true, "reason": "Valid email address", "details": {"format":true,"domain":true,"mx":true,"disposable":false,"free":false} },
{ "email": "fake@nonexistent.xyz", "valid": false, "reason": "Domain does not exist", "details": {"format":true,"domain":false,"mx":false,"disposable":false,"free":false} },
{ "email": "test@mailinator.com", "valid": false, "reason": "Disposable email address", "details": {"format":true,"domain":false,"mx":false,"disposable":true,"free":false} }
]
}
Path Parameters
| id | Email log ID returned from send |
Response Statuses
Example
curl {baseUrl}/email/status/123 \
-H "x-api-key: your_api_key"
Query Parameters
| Param | Type | Description |
|---|---|---|
| recipient | string | Filter by recipient email |
| status | string | Filter by status (pending, sent, failed, etc.) |
| limit | number | Results per page (default: 50) |
| offset | number | Pagination offset (default: 0) |
Example
curl "{baseUrl}/email/logs?recipient=user@example.com&limit=20" \
-H "x-api-key: your_api_key"
Query Parameters
| Param | Type | Description |
|---|---|---|
| startDate | ISO date | Start of date range (default: 24h ago) |
| endDate | ISO date | End of date range (default: now) |
Example
curl "{baseUrl}/email/stats?startDate=2026-03-01&endDate=2026-03-07" \
-H "x-api-key: your_api_key"
Endpoints
/templatesList all (query: ?search=&active=true&sortBy=name&sortOrder=ASC)/templates/:nameGet by name/templatesCreate (body: name, subject, bodyHtml, bodyText, variables, description)/templates/:idUpdate/templates/:idDelete/templates/:id/cloneClone (body: {name})/templates/:id/toggleToggle active/inactive/templates/:name/previewPreview with sample data (body: {data})/templates/:name/statsUsage statistics/templates/exportExport all as JSON/templates/importImport (body: {templates[], overwrite})/templates/renderRender inline Handlebars (body: {subject, bodyHtml, data})Create Template Example
curl -X POST {baseUrl}/templates \
-H "Content-Type: application/json" \
-H "x-api-key: your_api_key" \
-d '{
"name": "order_confirmation",
"subject": "Order #{{order_id}} Confirmed",
"bodyHtml": "<h1>Thank you {{name}}</h1><p>Order #{{order_id}} total: {{amount}}</p>",
"description": "Order confirmation email"
}'
Endpoints
/imagesUpload single (multipart, field: image)/images/bulkUpload multiple (multipart, field: images, max 10)/imagesList all uploaded images/images/:filenameDelete an imageUpload Example
curl -X POST {baseUrl}/images \
-H "x-api-key: your_api_key" \
-F "image=@/path/to/logo.png"
Limits: Max 5MB per file. Accepted: JPEG, PNG, GIF, WebP, SVG
| Code | Meaning |
|---|---|
| 200 | Success |
| 201 | Created (template, image, API key) |
| 202 | Accepted (email queued for delivery) |
| 400 | Bad Request (validation errors in details array) |
| 401 | Unauthorized (missing or invalid API key) |
| 404 | Not Found |
| 409 | Conflict (duplicate template name) |
| 429 | Rate limited |
| 500 | Internal Server Error |
Error Response Format
{
"error": "Validation failed",
"details": ["Recipient (to) is required", "Subject is required"]
}