EmailElement
Developers

Integrate once. Send through any provider.

Send email, sync contacts and manage suppressions through our APIs. Switch or combine ESPs without touching your code, and get the same webhook events from all of them.

# Send one email through your relay
POST https://transactional.emailelement.com/api/Email
x-api-key: YOUR_API_KEY

{
  "to": { "name": "Jane Smith", "email": "jane@example.com" },
  "subject": "Your Order Confirmation",
  "htmlBody": "<h1>Hello {firstName}!</h1>",
  "transactionRelayId": 2,
  "substitutions": { "firstName": "Jane" }
}

APIs and webhooks

Transactional Email API

One email per call, with templates, Handlebars-style substitutions, attachments up to 20 MB, a delay of up to about 12 hours, and five tracking IDs echoed back in webhooks.

POST transactional.emailelement.com/api/Email
API reference ↗

Contact API

Add or update contacts in a list. Existing contacts are updated when you ask, and you can require fields. If more than 10% of a batch fails, the whole request is rejected.

POST /api/contactList/{listId}/Contacts
API reference ↗

Suppression API

Add up to 10,000 records per call, remove records, or request a ZIP download of a whole list.

POST /api/SuppressionList/{listId}/Records
API reference ↗

Webhooks

JSON posted to your HTTPS endpoint, with retries. The payload names the ESP, send integration, sender domain and content.

SubmittedInitiatedSentSoftBouncedHardBouncedComplainedSuppressedUnsubscribedOpenedClickedFailedRetryPausedCanceled
Webhook guide ↗
Authentication

One key, permissions per API

Every request sends an x-api-key header. Each key gets None, Read Only or Full Access for each API, so a form backend never needs your suppression rights.

// Webhook payload (trimmed)
{
  "type": "Clicked",
  "messageId": "84213907",
  "recipient": "jane@example.com",
  "esp": "SendGrid",
  "sendIntegration": { "name": "Production SendGrid" },
  "senderDomain": { "domain": "mail.yourdomain.com" },
  "source": "April Newsletter [Scheduled Email]"
}

Get an API key in minutes

Something went wrong. Reloading the page usually fixes it. Reload ×

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.