✉ ProMailDispatch
PMD API · v3 · Quick Documentation

ProMailDispatch API

Create templates, send single or bulk mail, verify addresses, and read delivery, open, and click tracking. Every route is POST and requires your api_key.

Base URL https://promaildispatch.cloud
Authentication

Send api_key with every request as a form field or JSON property.

Keys are issued manually. They are not generated when you sign up — request access and you will receive your token once the request is reviewed. Add it on the API access page to unlock the console tools.

# All requests are POST and include api_key
curl -X POST https://promaildispatch.cloud/api/v3/mail/send \
  -d "api_key=YOUR_API_KEY" ...

Create template

POSThttps://promaildispatch.cloud/api/v3/mail/template/create

Store a reusable HTML template under your API key. content should be uploaded as an HTML file.

Required
FieldNotes
api_keyrequired
sender_namerequired — display name on the From line
subjectrequired — the same subject is used for each recipient
contentrequired — HTML file upload
Example
curl -X POST https://promaildispatch.cloud/api/v3/mail/template/create \
  -F 'api_key=YOUR_API_KEY' \
  -F 'sender_name=Your team' \
  -F 'subject=Your meeting invitation' \
  -F 'content=@template.html;type=text/html'
Response
{
  "error": false,
  "message": "Template created.",
  "data": {
    "id": 12,
    "sender_name": "Your team",
    "subject": "Your meeting invitation",
    "content": "<p>Hello __name:</p>"
  }
}

Example shows the fields needed for sending. Save data.id and pass it as template_id when sending.

Get templates

POSThttps://promaildispatch.cloud/api/v3/mail/template/get

Returns the templates created under your API key. The v2 template URLs also remain available.

Required
api_keyrequired
Response
{
  "error": false,
  "message": "Found 1 Templates(s)",
  "data": [ { "id": 12, "subject": "Your meeting invitation" } ]
}

Template fields are shortened in this example. When no templates exist, data is null and the message explains that no templates were found.

Send single mail

POSThttps://promaildispatch.cloud/api/v3/mail/send

Send one message built from a stored template.

Required
api_keyrequired
template_idrequired
recipientrequired — a single email, optionally with params
Optional
reply_tooptional — email address for the Reply-To header
Example
api_key=YOUR_API_KEY
template_id=12
recipient=user@example.com
With custom parameters
recipient=user@example.com__id:123__meetingName:Conference__meetingDate:2026-07-20__meetingBanner:https://example.com/banner.jpg

Use matching tokens in the message body: __meetingName: becomes Conference. See custom parameters for a complete example and format limits.

Send mail without template

POSThttps://promaildispatch.cloud/api/v3/mail/send

Send an ad-hoc message by passing the subject and HTML content inline.

Use this mode for one recipient. Bulk sending requires a saved template.

Required
api_keyrequired
recipientrequired
subjectrequired
contentrequired — inline HTML
Optional
reply_tooptional — email address for the Reply-To header
Example
api_key=YOUR_API_KEY
recipient=user@example.com
subject=Welcome
reply_to=support@yourdomain.com
content=<h1>Hello</h1><p>Welcome onboard.</p>

Send bulk mail

POSThttps://promaildispatch.cloud/api/v3/mail/send

Send to many recipients in one call. Bulk requests are queued; use POST /api/v3/mail/process with your api_key and returned batch_id to import and send them in chunks.

Required
api_keyrequired
template_idrequired
is_bulkrequired — set to true
recipientrequired — inline list or uploaded file
Optional
reply_tooptional — email address for the Reply-To header, applied to every message
Inline recipients
recipient=user1@example.com,user2@example.com,user3@example.com
Uploaded .txt file
one@example.com__name:Jordan__meetingName:Conference
two@example.com__name:Casey__meetingName:Workshop

The file may contain one email per line or comma-separated emails. Each line can carry __key:value params, just like single sends.

Upload request
curl -X POST https://promaildispatch.cloud/api/v3/mail/send \
  -F 'api_key=YOUR_API_KEY' \
  -F 'template_id=12' \
  -F 'is_bulk=true' \
  -F 'reply_to=replies@example.com' \
  -F 'recipient=@recipients.txt;type=text/plain'

The API upload field is recipient. Supply either the file or the text list. The optional Reply-To address applies to every message in the batch.

Upload response
{
  "error": false,
  "message": "V3 bulk file request accepted. Use /api/v3/mail/process to import and send in chunks.",
  "data": {
    "batch_id": 42,
    "fileName": "recipients.txt",
    "fileSize": "150 B",
    "fileMime": "text/plain"
  }
}

File details reflect your upload. A text-list request returns data.batch_id and data.queued instead. Acceptance means the batch was submitted; delivery is shown separately in Tracking. Keep the batch ID to check its progress. Review the dashboard limits and workflow when sending from the console.

Custom parameters

Add values after each recipient address using __key:value. Place the matching __key: token in the HTML body.

Recipient
one@example.com__name:Jordan__meetingName:Conference__id:123
Template body
<p>Hello __name:,</p>
<p>Your invitation to __meetingName:. Reference: __id:</p>
Result
Hello Jordan,
Your invitation to Conference. Reference: 123
  • Names are case sensitive. Use letters and digits for simple parameter names.
  • Personalization applies to the body. The subject stays the same for every recipient.
  • Unmatched tokens stay in the message. Supply every value used in your template.
  • To include the address in the body, supply it explicitly, for example __email:one@example.com, and use __email: in the body.
  • __id: also sets the recipient's custom ID.
  • Values must not contain underscores, commas, semicolons, or line breaks. These characters are used to parse the list and its values. URLs with colons and slashes are supported.
  • Values are inserted as supplied. Use trusted values and HTML suitable for the place where each token appears.

Template previews show the saved HTML before recipient values are applied.

Verify email

POSThttps://promaildispatch.cloud/api/v3/mail/verify

Check an address for valid syntax, a resolvable domain (MX), and disposable/role patterns.

Required
api_keyrequired
emailrequired
Example
api_key=YOUR_API_KEY
email=user@example.com
Response
{
  "error": false,
  "message": "Verification complete.",
  "data": {
    "email": "user@example.com",
    "valid": true,
    "reason": "ok",
    "has_mx": true,
    "is_disposable": false,
    "is_role": false
  }
}

Tracking summary

POSThttps://promaildispatch.cloud/api/v3/mail/tracking/summary

Aggregate delivery and engagement funnel for a scope.

Required
api_keyrequired
And at least one
batch_idscope to one batch
template_idscope to one template
recipientscope to one address
Example
api_key=YOUR_API_KEY
batch_id=20
Returns
{
  "total": 1000,   "queued": 0,
  "accepted": 980, "delivered": 920,
  "opened": 400,   "clicked": 70,
  "bounced": 30,   "complained": 0,
  "failed": 10,    "skipped": 10,
  "open_count": 540, "click_count": 90
}

Tracking recipients

POSThttps://promaildispatch.cloud/api/v3/mail/tracking/recipients

Recipient-level delivery and engagement status.

Required
api_keyrequired
And at least one
batch_id—
template_id—
recipient—
Optional
statusoptional — filter by delivery status
limitoptional — max rows (default 100, maximum 500)

Tracking events

POSThttps://promaildispatch.cloud/api/v3/mail/tracking/events

Recent event history for one tracked recipient, returned newest record first.

Required
api_keyrequired
recipient_idrequired — from the recipients endpoint
Optional
limitoptional — default 100, maximum 500

Tracking notes

Tracking is included when emails are sent through v3. An open pixel and tracked links are added automatically.

StatusMeaning
queuedWaiting to be processed.
acceptedAccepted for delivery. This does not confirm receipt by the destination mail server.
deliveredThe destination mail server accepted the message. This does not guarantee inbox placement.
openedThe tracking image was requested. Image blocking, caching, and mail privacy tools can affect this result.
clickedA tracked link was requested. Automated link checks can also generate clicks.
bouncedThe destination mail server rejected the message.
complainedA spam complaint was reported.
failedPMD could not submit the message for delivery.
skippedThe recipient did not pass the checks needed for sending.

Delivery results may arrive after acceptance. Open Tracking and leave Auto refresh on to see updates. Summary counts overlap: one message can count as accepted, delivered, and opened. Times in the dashboard timeline are shown in UTC.

Using the dashboard

Add your PMD API key on the API access page to use these tools.

Sending
  1. For one recipient, choose a saved template or write inline HTML. For bulk email, choose a saved template.
  2. Paste the addresses or upload a .txt list. Leave the text box empty when uploading. Bulk recipient files in the dashboard are limited to 5 MB.
  3. Review the subject, recipient count, and optional Reply-To address. The dashboard removes invalid addresses and duplicates before confirmation. If an address appears more than once, its first set of custom values is kept.
  4. Confirm the reviewed email once, then follow its results in Tracking. Keep the tracking page open until batch processing finishes; return to the saved batch to continue if needed.

Drafts save while you work. A file upload must be selected again when you return to a draft. Saved template previews show the HTML before personalization.

Verification

Check one address, paste a list, or upload a .txt file up to 1 MB. Each list supports up to 500 unique valid-format addresses and 2,000 entries before duplicates are removed. Duplicates are checked once; invalid-format entries appear in the results. Pause or resume a list as needed.

An unavailable check is marked for retry and is not counted as an invalid address. Use Retry unavailable to try again. Keep the page open while checks run. Verification describes the address at the time of the check and does not guarantee future delivery.

Exports and results

Verification CSV exports include every row in the current saved list. Tracking CSV exports include the latest 200 matching recipient records, matching the displayed list. Choose Events beside a recipient to view its timeline. Use the batch ID to return to a bulk send.

Dashboard review and upload limits apply to the console. Direct API integrations should validate and deduplicate their own lists.

Handling errors

Check the HTTP status and the JSON error field. PMD returns a message explaining a rejected request; correct the relevant input before trying again.

ProblemWhat to check
API key rejectedCopy the complete PMD key and include it as api_key. Confirm it is accepted on the API access page.
Template not foundUse a template created under the same API key. Read its ID from the template creation or listing response.
Recipient requiredPass text or a multipart file in the recipient API field. For bulk, also pass is_bulk=true and template_id.
List rejectedUse a .txt file within the displayed limit. Keep recipient values in the supported format.
Reply-To rejectedSupply one valid email address or omit the field.
Send request timed outCheck the saved batch or tracking results before submitting again, to avoid sending a second copy.

Keep API keys private. Use your application's server to call PMD; do not place a key in public JavaScript or a shared screenshot.