Skip to content

Email API Documentation

Email management endpoints for creating, updating, previewing, and managing email content, templates, and attachments.

Create an Email

POST /api.php

API Usage Notes

  • Authentication required: User API Key
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: email.create
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "email.create",
    "SessionID": "your-session-id"
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "EmailID": 12345
}
json
{
  "Success": false,
  "ErrorCode": [1, 2, 3]
}
txt
0: Success

Get Email Details

POST /api.php

API Usage Notes

  • Authentication required: User API Key
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: email.get
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
EmailIDIntegerYesEmail ID to retrieve
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "email.get",
    "SessionID": "your-session-id",
    "EmailID": 12345
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "EmailInformation": {
    "EmailID": 12345,
    "EmailName": "Newsletter",
    "Subject": "Monthly Update",
    "HTMLContent": "<html>...</html>",
    "PlainContent": "...",
    "FromName": "Company Name",
    "FromEmail": "info@company.com"
  }
}
json
{
  "Success": false,
  "ErrorCode": [1, 2]
}
txt
0: Success
1: Missing required parameter EmailID
2: Email not found or access denied

Get Emails (List or Bulk by IDs)

POST /api.php

API Usage Notes

  • Authentication required: User API Key
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

This endpoint operates in two modes:

  • Legacy list mode (no EmailIDs parameter) — returns every email the calling user owns. Per-row shape is the raw database row: Options is a JSON string, no Attachments key. Default order: EmailName ASC.
  • Bulk-by-IDs mode (with EmailIDs parameter) — returns only the requested rows that the calling user owns. Per-row shape mirrors email.get: Options is JSON-decoded into an object, and Attachments is attached when the full shape is requested OR when Attachments is explicitly listed in Fields. Soft-deleted rows are excluded. Response order is not guaranteed — re-key by EmailID if order matters. Non-owned and non-existent IDs are silently dropped (compare input length vs. response length to detect drops).

The optional Fields parameter is honored in both modes — additive projection that restricts which keys appear on each returned row.

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: emails.get
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
EmailIDsStringNoComma-separated list of email IDs (e.g. 9101,9102,9103). When omitted, returns all emails owned by the user (legacy mode). When set, switches to bulk-by-IDs mode: blank/non-numeric entries are silently dropped, hard-capped at 100 valid IDs per call.
FieldsStringNoComma-separated allow-list of fields to project per row. Possible values: EmailID, RelUserID, EmailName, FromName, FromEmail, ReplyToName, ReplyToEmail, ContentType, Mode, FetchURL, FetchPlainURL, Subject, PlainContent, HTMLContent, ExtraContent1, ExtraContent2, ImageEmbedding, RelTemplateID, PreHeaderText, Options, IsEmailTemplate, CreatedAt, UpdatedAt, DeletedAt, Attachments. Unknown field names are silently dropped. EmailID is always re-added so callers can re-key.
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "emails.get",
    "SessionID": "your-session-id"
  }'
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "emails.get",
    "SessionID": "your-session-id",
    "EmailIDs": "9101,9102,9103",
    "Fields": "EmailID,Subject,Mode,ContentType,UpdatedAt"
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "ErrorText": "",
  "TotalEmailCount": 2,
  "Emails": [
    {
      "EmailID": 9101,
      "Subject": "Welcome aboard",
      "Mode": "Editor",
      "ContentType": "Both",
      "UpdatedAt": "2026-05-02 18:11:07"
    },
    {
      "EmailID": 9102,
      "Subject": "Day-3 tips",
      "Mode": "Stripo",
      "ContentType": "Both",
      "UpdatedAt": "2026-05-03 09:12:14"
    }
  ]
}
json
{
  "Success": false,
  "ErrorCode": [3],
  "ErrorText": ["Too many ids; max 100"]
}
txt
0: Success
1: EmailIDs was provided but contained no valid (numeric, non-blank) entries
3: EmailIDs contained more than 100 valid entries (cap exceeded)

Update an Email

POST /api.php

API Usage Notes

  • Authentication required: User API Key
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: email.update
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
EmailIDIntegerYesEmail ID to update
ValidateScopeStringYesValidation scope: OptIn, Campaign, or AutoResponder
EmailNameStringNoEmail name
SubjectStringNoEmail subject
PreHeaderTextStringNoEmail preheader text
FromNameStringNoSender name
FromEmailStringNoSender email address
ReplyToNameStringNoReply-to name
ReplyToEmailStringNoReply-to email address
HTMLContentStringNoHTML email content
PlainContentStringNoPlain text email content
ModeStringNoEditor mode: Unlayer, Stripo, Editor, Empty, Template, Import
FetchURLStringNoURL to fetch HTML content from (for Import mode)
FetchPlainURLStringNoURL to fetch plain content from (for Import mode)
ImageEmbeddingStringNoImage embedding setting
SenderDomainStringNoSender domain. Only enforced when ValidateScope=Campaign and the user's group has SenderDomainManagement=Enabled; ignored for OptIn and AutoResponder scopes (transactional traffic).
OpenTrackingBooleanNoEnable open tracking (default: true)
LinkTrackingBooleanNoEnable link tracking (default: true)
UTMTrackingBooleanNoEnable UTM tracking
UTMSourceStringConditionalUTM source (required if UTMTracking is true)
UTMMediumStringConditionalUTM medium (required if UTMTracking is true)
UTMCampaignStringConditionalUTM campaign (required if UTMTracking is true)
UTMTermStringNoUTM term parameter
UTMContentStringNoUTM content parameter
UTMMergeTagsBooleanNoUse merge tags in UTM parameters
RelTemplateIDIntegerConditionalTemplate ID (required if Mode is Template)
IsEmailTemplateIntegerNoMark as email template (0 or 1)
ExtraContent1StringNoExtra content field 1 (for Stripo/Unlayer)
ExtraContent2StringNoExtra content field 2 (for Stripo/Unlayer)
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "email.update",
    "SessionID": "your-session-id",
    "EmailID": 12345,
    "ValidateScope": "Campaign",
    "EmailName": "Updated Newsletter",
    "Subject": "New Monthly Update",
    "HTMLContent": "<html><body>Updated content</body></html>",
    "PlainContent": "Updated content",
    "FromName": "Company Name",
    "FromEmail": "info@company.com",
    "OpenTracking": true,
    "LinkTracking": true
  }'
json
{
  "Success": true,
  "ErrorCode": 0
}
json
{
  "Success": false,
  "ErrorCode": [1, 3, 4, 8, 9, 10, 11, 12, 17, 18, 19, 20]
}
txt
0: Success
1: Missing required parameter EmailID
3: Email not found or access denied
4: Invalid Mode parameter
8: Email content cannot be empty
9: Missing required parameter ValidateScope
10: Invalid ValidateScope parameter (must be OptIn, Campaign, or AutoResponder)
11: Missing unsubscribe link in HTML content
12: Missing unsubscribe link in plain content
17: Invalid sender domain (only raised when ValidateScope=Campaign; OptIn and AutoResponder scopes bypass this check)
18: Missing UTMSource parameter (required when UTMTracking is enabled)
19: Missing UTMMedium parameter (required when UTMTracking is enabled)
20: Missing UTMCampaign parameter (required when UTMTracking is enabled)

Delete an Email

POST /api.php

API Usage Notes

  • Authentication required: User API Key
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: email.delete
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
EmailIDIntegerYesEmail ID to delete
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "email.delete",
    "SessionID": "your-session-id",
    "EmailID": 12345
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "ErrorText": ""
}
json
{
  "Success": false,
  "ErrorCode": [1]
}
txt
0: Success
1: Missing required parameter EmailID

Duplicate an Email

POST /api.php

API Usage Notes

  • Authentication required: User API Key
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: email.duplicate
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
EmailIDIntegerYesEmail ID to duplicate
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "email.duplicate",
    "SessionID": "your-session-id",
    "EmailID": 12345
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "EmailID": 12346,
  "EmailName": "Copy of Newsletter"
}
json
{
  "Success": false,
  "ErrorCode": [1, 2]
}
txt
0: Success
1: Missing required parameter EmailID
2: Email not found or access denied

Send Email Preview

POST /api.php

API Usage Notes

  • Authentication required: User API Key
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: email.emailpreview
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
EmailIDIntegerConditionalEmail ID to preview (or provide HTMLContent/PlainContent)
EmailAddressStringConditionalRecipient email address (required if SubscriberID not provided)
SubscriberIDIntegerNoSubscriber ID to use for personalization
ListIDIntegerNoList ID for subscriber lookup
CampaignIDIntegerNoCampaign ID for context
HTMLContentStringConditionalHTML content (if EmailID not provided)
PlainTextContentStringConditionalPlain text content (if EmailID not provided)
FromNameStringNoOverride sender name
FromEmailAddressStringNoOverride sender email
SubjectStringNoOverride email subject
PreHeaderTextStringNoOverride preheader text
ReplyToNameStringNoOverride reply-to name
ReplyToEmailStringNoOverride reply-to email
SenderDomainStringNoOverride sender domain
AddUserGroupHeaderFooterBooleanNoAdd user group header/footer (default: true)
EmailTypeStringNoEmail type: optinconfirmation or regular (default)
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "email.emailpreview",
    "SessionID": "your-session-id",
    "EmailID": 12345,
    "EmailAddress": "test@example.com",
    "ListID": 100
  }'
json
{
  "Success": true,
  "ErrorCode": 0
}
json
{
  "Success": false,
  "ErrorCode": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}
txt
0: Success
1: Missing required parameter EmailID
2: Missing required parameter EmailAddress
3: Email not found
4: Invalid email address format
5: Subscriber not found
6: List not found
7: Campaign not found
8: Email delivery failed or sender domain not found
9: Missing required parameter HTMLContent or PlainTextContent
10: Missing required parameter PlainTextContent

Test Email Delivery Settings

POST /api.php

API Usage Notes

  • Authentication required: Admin API Key
  • Not available in demo mode
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: email.delivery.test
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "email.delivery.test",
    "SessionID": "admin-session-id"
  }'
json
{
  "Success": true
}
json
{
  "Success": false,
  "ErrorCode": "NOT AVAILABLE IN DEMO MODE."
}
txt
1: Email delivery test failed

Test Email Against Spam Filters

POST /api.php

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: Email.SpamTest
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: email.spamtest
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
EmailIDIntegerYesEmail ID to test
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "email.spamtest",
    "SessionID": "your-session-id",
    "EmailID": 12345
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "TestResults": {
    "score": 2.5,
    "tests": [
      {
        "name": "BAYES_00",
        "score": -1.9,
        "description": "Bayes spam probability is 0 to 1%"
      }
    ]
  }
}
json
{
  "Success": false,
  "ErrorCode": [1, 2, 3]
}
txt
0: Success
1: Missing required parameter EmailID
2: Email not found
3: Spam test service error

Render Email in Browser

GET /api/v1/email.render

API Usage Notes

  • Authentication required: User API Key
  • Rate limit: 10000 requests per 60 seconds
  • Legacy endpoint access via /api.php is also supported

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: email.render
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
UserIDIntegerYesUser ID
ListIDIntegerYesList ID
SubscriberIDIntegerYesSubscriber ID
CampaignIDIntegerYesCampaign ID
AutoResponderIDIntegerYesAutoResponder ID
EmailIDIntegerYesEmail ID
QueueRowIDIntegerYesEmail Gateway queue row ID
IsPreviewBooleanYesPreview mode flag (1 or 0)
DisablePersonalizationBooleanYesDisable personalization (1 or 0)
bash
curl -X GET "https://example.com/api/v1/email.render?UserID=100&ListID=50&SubscriberID=1000&CampaignID=200&EmailID=300&IsPreview=0&DisablePersonalization=0" \
  -H "Content-Type: application/json"
json
{
  "Subject": "Monthly Newsletter",
  "EmailContent": "<html><body>Personalized content...</body></html>"
}
json
{
  "Errors": [
    {
      "Code": 1,
      "Message": "Missing UserID parameter"
    }
  ]
}
txt
1: Missing UserID parameter
2: Missing ListID parameter
3: Missing SubscriberID parameter
4: Missing CampaignID parameter
5: Missing AutoResponderID parameter
6: Missing EmailID parameter
7: Missing QueueRowID parameter
8: Missing IsPreview parameter
9: Missing DisablePersonalization parameter
10: Invalid UserID parameter
11: Invalid ListID parameter
12: Invalid SubscriberID parameter
13: Invalid CampaignID parameter
14: Invalid AutoResponderID parameter
15: Invalid EmailID parameter
16: Invalid QueueRowID parameter

Render Email for SMTP Delivery

POST /api/v1/email.smtp.render

API Usage Notes

  • Authentication required: User API Key or Admin API Key
  • Rate limit: 10000 requests per 60 seconds
  • Legacy endpoint access via /api.php is also supported

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: email.smtp.render
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
UserIDIntegerNoUser ID (auto-inferred from session or AdminAPIKey required)
CampaignIDIntegerNoCampaign ID (auto-infers EmailID and ListID)
AutoResponderIDIntegerNoAutoResponder ID (auto-infers EmailID and ListID)
EmailIDIntegerNoEmail ID (auto-inferred from Campaign/AutoResponder)
ListIDIntegerNoList ID (auto-inferred from Campaign)
SubscriberIDIntegerNoSubscriber ID (random subscriber selected if not provided)
IsPreviewBooleanNoPreview mode flag (accepts: 1/true/on/yes or 0/false/off/no)
bash
curl -X POST https://example.com/api/v1/email.smtp.render \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "email.smtp.render",
    "SessionID": "your-session-id",
    "CampaignID": 200
  }'
json
{
  "Subject": "Monthly Newsletter",
  "PreHeader": "Check out our latest updates",
  "HTMLBody": "<html><body>...</body></html>",
  "PlainBody": "Plain text version...",
  "SMTPHeaders": "From: sender@example.com\r\nTo: recipient@example.com\r\n...",
  "SMTPBody": "MIME encoded body with boundaries...",
  "EmailSizeBytes": 45678,
  "EmailSizeKB": 44.61,
  "EmailSizeMB": 0.04,
  "AttachmentCount": 2,
  "ContentType": "MultiPart",
  "HasHTMLContent": true,
  "HasPlainContent": true,
  "ImageEmbeddingEnabled": true,
  "FromEmail": "sender@example.com",
  "FromName": "Company Name",
  "ReplyToEmail": "reply@example.com",
  "ReplyToName": "Support Team",
  "MFROMDomain": "return.example.com",
  "TrackingDomain": "track.example.com"
}
json
{
  "Errors": [
    {
      "Code": 1,
      "Message": "Missing or invalid UserID parameter"
    }
  ]
}
txt
1: Missing or invalid UserID parameter
2: Invalid CampaignID parameter
3: Invalid AutoResponderID parameter
4: Missing or invalid EmailID parameter
5: Missing or invalid ListID parameter
6: Missing or invalid SubscriberID parameter

Get Personalization Tags

POST /api.php

API Usage Notes

  • Authentication required: User API Key
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: email.personalizationtags
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
ScopeArrayYesTag scopes: Subscriber, CampaignLinks, OptLinks, ListLinks, AllLinks, User
ListIDIntegerConditionalList ID (required if Scope contains Subscriber)
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "email.personalizationtags",
    "SessionID": "your-session-id",
    "Scope": ["Subscriber", "CampaignLinks", "User"],
    "ListID": 100
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "PersonalizationTags": [
    {
      "Tag": "%EmailAddress%",
      "Description": "Subscriber email address",
      "Category": "Subscriber"
    },
    {
      "Tag": "%Link:Unsubscribe%",
      "Description": "Unsubscribe link",
      "Category": "Links"
    }
  ]
}
json
{
  "Success": false,
  "ErrorCode": [1, 2]
}
txt
0: Success
1: Missing required parameter Scope
2: Missing required parameter ListID (when Subscriber scope is included)

Create Email Template

POST /api.php

API Usage Notes

  • Authentication required: User API Key or Admin API Key
  • Required permissions: EmailTemplates.Manage
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: email.template.create
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
TemplateNameStringYesTemplate name
TemplateDescriptionStringNoTemplate description
TemplateSubjectStringNoDefault subject line
TemplateHTMLContentStringConditionalHTML template content (at least one required)
TemplatePlainContentStringConditionalPlain text template content (at least one required)
TemplateThumbnailPathStringNoPath to thumbnail image in tmp directory
RelOwnerUserIDIntegerNoOwner user ID (admin only)
AccessTypeStringNoAccess type setting
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "email.template.create",
    "SessionID": "your-session-id",
    "TemplateName": "Newsletter Template",
    "TemplateDescription": "Monthly newsletter design",
    "TemplateSubject": "Newsletter",
    "TemplateHTMLContent": "<html><body>Template content</body></html>"
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "TemplateID": 500
}
json
{
  "Success": false,
  "ErrorCode": [1, 2]
}
txt
0: Success
1: Missing required parameter TemplateName
2: At least one of TemplateHTMLContent or TemplatePlainContent must be provided

Get Email Template

POST /api.php

API Usage Notes

  • Authentication required: User API Key or Admin API Key
  • Required permissions: EmailTemplates.Manage
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: email.template.get
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
TemplateIDIntegerYesTemplate ID to retrieve
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "email.template.get",
    "SessionID": "your-session-id",
    "TemplateID": 500
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "Template": {
    "TemplateID": 500,
    "TemplateName": "Newsletter Template",
    "TemplateDescription": "Monthly newsletter design",
    "TemplateSubject": "Newsletter",
    "TemplateHTMLContent": "<html><body>Template content</body></html>",
    "TemplatePlainContent": "Template content",
    "RelOwnerUserID": 100
  }
}
json
{
  "Success": false,
  "ErrorCode": [1, 2, 3]
}
txt
0: Success
1: Missing required parameter TemplateID
2: Template not found
3: Access denied to template

Get Email Templates List

POST /api.php

API Usage Notes

  • Authentication required: User API Key or Admin API Key
  • Required permissions: EmailTemplates.Manage
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: email.templates.get
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "email.templates.get",
    "SessionID": "your-session-id"
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "TotalTemplateCount": 5,
  "Templates": [
    {
      "TemplateID": 500,
      "TemplateName": "Newsletter Template",
      "TemplateSubject": "Newsletter",
      "TemplateHTMLContent": "<html>...</html>",
      "TemplatePlainContent": "..."
    }
  ]
}
json
{
  "Success": false,
  "ErrorCode": []
}
txt
0: Success

Update Email Template

POST /api.php

API Usage Notes

  • Authentication required: User API Key or Admin API Key
  • Required permissions: EmailTemplates.Manage
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: email.template.update
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
TemplateIDIntegerYesTemplate ID to update
TemplateNameStringNoTemplate name
TemplateDescriptionStringNoTemplate description
TemplateSubjectStringNoDefault subject line
TemplateHTMLContentStringNoHTML template content
TemplatePlainContentStringNoPlain text template content
TemplateThumbnailPathStringNoPath to thumbnail image in tmp directory
RelOwnerUserIDIntegerNoOwner user ID (admin only)
AccessTypeStringNoAccess type setting (admin only)
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "email.template.update",
    "SessionID": "your-session-id",
    "TemplateID": 500,
    "TemplateName": "Updated Newsletter Template",
    "TemplateHTMLContent": "<html><body>Updated content</body></html>"
  }'
json
{
  "Success": true,
  "ErrorCode": 0
}
json
{
  "Success": false,
  "ErrorCode": [1, 2]
}
txt
0: Success
1: Missing required parameter TemplateID
2: Template not found or access denied

Delete Email Template

POST /api.php

API Usage Notes

  • Authentication required: User API Key or Admin API Key
  • Required permissions: EmailTemplates.Manage
  • Not available in demo mode
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: email.template.delete
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
TemplatesStringYesComma-separated template IDs to delete (e.g., "500,501,502")
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "email.template.delete",
    "SessionID": "your-session-id",
    "Templates": "500,501,502"
  }'
json
{
  "Success": true,
  "ErrorCode": 0
}
json
{
  "Success": false,
  "ErrorCode": [1, 2]
}
txt
0: Success
1: Missing required parameter Templates
2: No templates found or access denied for deletion

Create Design Preview (Deprecated)

DEPRECATED POST /api.php

Deprecated Endpoint

This endpoint is deprecated with no replacement or alternative. It was used for PreviewMyEmail.com integration which is no longer supported.

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: Email.DesignPreview
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: email.designpreview.create
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
EmailIDIntegerYesEmail ID to preview
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "email.designpreview.create",
    "SessionID": "your-session-id",
    "EmailID": 12345
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "JobID": 1000,
  "PreviewMyEmailJobID": "abc123"
}
json
{
  "Success": false,
  "ErrorCode": [1, 2, 3, 4, 5]
}
txt
0: Success
1: Missing required parameter EmailID
2: Email not found
3: Preview service connection error
4: Out of admin credits
5: Out of user credits

Delete Design Preview (Deprecated)

DEPRECATED POST /api.php

Deprecated Endpoint

This endpoint is deprecated with no replacement or alternative. It was used for PreviewMyEmail.com integration which is no longer supported.

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: Email.DesignPreview
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: email.designpreview.delete
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
EmailIDIntegerYesEmail ID
JobIDIntegerYesPreview job ID
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "email.designpreview.delete",
    "SessionID": "your-session-id",
    "EmailID": 12345,
    "JobID": 1000
  }'
json
{
  "Success": true,
  "ErrorCode": 0
}
json
{
  "Success": false,
  "ErrorCode": [1, 2, 3, 4, 5]
}
txt
0: Success
1: Missing required parameter EmailID
2: Missing required parameter JobID
3: Email not found
4: Preview job not found
5: Preview service connection error

Get Design Preview Details (Deprecated)

DEPRECATED POST /api.php

Deprecated Endpoint

This endpoint is deprecated with no replacement or alternative. It was used for PreviewMyEmail.com integration which is no longer supported.

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: Email.DesignPreview
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: email.designpreview.details
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
EmailIDIntegerYesEmail ID
JobIDIntegerYesPreview job ID
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "email.designpreview.details",
    "SessionID": "your-session-id",
    "EmailID": 12345,
    "JobID": 1000
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "PreviewRequest": {
    "JobID": 1000,
    "PreviewMyEmailJobID": "abc123",
    "Status": "Complete",
    "PreviewResults": [
      {
        "ClientCode": "outlook2019",
        "ImagesOnURL": "https://...",
        "ImagesOffURL": "https://...",
        "ThumbnailURL": "https://..."
      }
    ]
  }
}
json
{
  "Success": false,
  "ErrorCode": [1, 2, 3, 4, 5]
}
txt
0: Success
1: Missing required parameter EmailID
2: Email not found
3: Missing required parameter JobID
4: Preview job not found
5: Preview service connection error

Get Design Preview List (Deprecated)

DEPRECATED POST /api.php

Deprecated Endpoint

This endpoint is deprecated with no replacement or alternative. It was used for PreviewMyEmail.com integration which is no longer supported.

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: Email.DesignPreview
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: email.designpreview.getlist
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
EmailIDIntegerYesEmail ID
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "email.designpreview.getlist",
    "SessionID": "your-session-id",
    "EmailID": 12345
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "PreviewList": [
    {
      "JobID": 1000,
      "PreviewMyEmailJobID": "abc123",
      "Status": "Complete",
      "SubmitDate": "2024-01-15 10:30:00"
    }
  ]
}
json
{
  "Success": false,
  "ErrorCode": [1, 2]
}
txt
0: Success
1: Missing required parameter EmailID
2: Email not found

Delete Attachment

POST /api.php

API Usage Notes

  • Authentication required: User API Key
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: attachment.delete
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
AttachmentIDIntegerYesAttachment ID to delete
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "attachment.delete",
    "SessionID": "your-session-id",
    "AttachmentID": 789
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "ErrorText": ""
}
json
{
  "Success": false,
  "ErrorCode": [1]
}
txt
0: Success
1: Missing required parameter AttachmentID

Convert HTML to Plain Text

POST /api/v1/email.html2text

API Usage Notes

  • Authentication required: User API Key
  • Rate limit: 1000 requests per 60 seconds
  • Legacy endpoint access via /api.php is also supported

Stateless utility endpoint that converts an HTML email body into its plain-text equivalent. Useful when generating the PlainContent variant of a campaign email programmatically — e.g., during automated campaign creation or before sending through email.render.

Internally calls the same Soundasleep\Html2Text library used by the campaign-create UI's "Generate plain text from HTML" button, the email model's auto-conversion (when PlainContentAutoConvert is enabled), and the queue worker. Conversion options are hard-coded to match the UI verbatim (ignore_errors=true, drop_links=false), so the output is byte-for-byte identical to what users see in the in-app editor.

Behavior details:

  • Link URLs are preserved inline (e.g. <a href="https://example.com">Click</a> becomes Click [https://example.com]).
  • Merge tags such as [SUBSCRIBER_FIRSTNAME] are preserved verbatim — the library only strips HTML markup, and merge tags live in text nodes.
  • Malformed HTML is tolerated; the library returns partial output rather than throwing.
  • An empty HTMLContent value returns an empty PlainContent.
  • Character encoding is auto-detected via mb_detect_encoding; UTF-8 is handled safely.
  • The endpoint performs no database access and has no per-user resource ownership — it is purely a stateless transform of the request payload.

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: email.html2text
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
HTMLContentStringYesThe HTML to convert. Empty string is allowed and returns an empty PlainContent.
bash
curl -X POST https://example.com/api/v1/email.html2text \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "email.html2text",
    "APIKey": "your-api-key",
    "HTMLContent": "<h1>Hello</h1><p>Visit <a href=\"https://example.com\">our site</a> for details.</p>"
  }'
json
{
  "Success": true,
  "PlainContent": "HELLO\n\nVisit our site [https://example.com] for details."
}
json
{
  "Errors": [
    {
      "Code": 1,
      "Message": "Missing HTMLContent parameter"
    }
  ]
}
txt
1: Missing HTMLContent parameter (returned with HTTP 422)
2: HTML conversion failed (returned with HTTP 500 — defensive catch for the rare case the library throws despite ignore_errors=true)

Any questions? Contact us.