Introduction

Introduction

EmailsDone is a transactional email API for sending common application emails using ready-made templates.

It is designed for product emails such as password resets, email verification, welcome emails, billing emails, account notifications and other app events.

Instead of writing and maintaining email HTML, you choose a template, pass the required data, and EmailsDone renders and sends the email.

How EmailsDone works

EmailsDone uses a template-first approach.

Each email is sent by calling the API with:

  • a templateId
  • a recipient email address
  • a data object containing the fields required by that template

For example, a password reset email needs a reset URL:

{
  "templateId": "password-reset",
  "to": "user@example.com",
  "data": {
    "actionButton": {
      "url": "https://app.example.com/reset-password?token=abc"
    }
  }
}

EmailsDone uses that data to generate the email, queue it, and send it to the recipient.

Templates

Templates define the structure and required fields for each type of email.

For example:

  • password-reset sends a password reset link
  • verify-email sends an email verification link
  • welcome sends a welcome message to a new user
  • payment-failed notifies a user about a failed payment
  • trial-ending warns that a trial is ending
  • export-ready tells a user that a file or export is ready

Each template has sensible default content, with optional fields you can override when needed.

For example, many templates support optional fields such as:

  • subject
  • preheader
  • actionButton.label
  • actionButton.url

Required and optional fields are documented on each template page.

Sending email

Emails are sent using the EmailsDone API:

POST https://api.emailsdone.dev/v1/send
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Example request:

{
  "templateId": "welcome",
  "to": "user@example.com",
  "data": {}
}

API keys should only be used from server-side code. Do not expose your EmailsDone API key in browser JavaScript, mobile apps, public environment variables or frontend configuration.

Projects and environments

EmailsDone is organised around projects and environments.

A project represents an application or product.

An environment represents where the email is being sent from, such as:

  • development
  • staging
  • production

Each environment can have its own API key and sending configuration. This lets you separate test email from production email and avoid mixing development activity with live users.

Unsubscribe support

EmailsDone includes unsubscribe support for email types where unsubscribing is appropriate.

Some emails are essential to account access or security, such as password reset and email verification emails. These are normally still sent because the user needs them to use the application.

Other emails, such as reminders, updates and non-critical notifications, can include unsubscribe support so users can opt out of messages they no longer want.

EmailsDone can handle unsubscribe and resubscribe requests and include unsubscribe information in supported emails.

Delivery flow

When an email is accepted by the API, it is queued for sending.

A typical email moves through states such as:

  • accepted
  • queued
  • sent
  • delivered, bounced or complained

This gives your application a clear result when the API accepts the request, while allowing EmailsDone to handle the actual sending process reliably.

Common use cases

EmailsDone is commonly used for:

  • password reset emails
  • email verification
  • welcome emails
  • magic links
  • billing and subscription emails
  • product notifications
  • reminders
  • account alerts
  • export or report completion emails

The template documentation shows which fields each email supports.

Next steps

To start sending email:

  1. Create or select a project
  2. Choose an environment
  3. Store the environment API key on your server
  4. Call the send email endpoint from your backend
  5. Pass the fields required by the template

See the API reference for request details, or browse the template documentation to choose the right template for your flow.