Raw sending APIs give you infrastructure, not workflow
Postmark, Resend and SendGrid let you send emails. They do not help you manage which template fires for which plan or locale.
Developer-first
POST domain events. else.events handles routing, template rendering and provider delivery. No SDKs required — plain HTTP/JSON from any language.
Postmark, Resend and SendGrid let you send emails. They do not help you manage which template fires for which plan or locale.
Most email APIs bolt on templates as a secondary feature — hard to version, preview or hand off to non-developers.
Connecting a domain event (subscription.cancelled) to the right email requires custom middleware in your application.
Provider-level logs tell you if an email bounced. They do not tell you which product event caused it or which rule matched.
POST to /api/events with an event type and payload. Rules match, templates render, provider delivers.
Create, version and preview templates in the dashboard or via the management API. No deployment required for copy changes.
Route by event type, plan, locale, tenant or any payload field. No conditional logic in your application code.
Every event, matched rule and email delivery logged together. Query by event type, user or time range.
// send an event
await fetch('https://app.else.events/api/events', {
method: 'POST',
headers: {
Authorization: `Bearer ${API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
type: 'invoice.payment_failed',
user: { email: 'customer@example.com', name: 'Alex' },
data: { plan: 'Pro', amount: '29.00', currency: 'EUR',
update_payment_url: 'https://app.example.com/billing' },
}),
}); No SDK required. Two headers and a JSON body. The event payload is your schema — else.events adapts to it.
One endpoint. Every product email. No hardcoded templates.