Skip to content

Transactional email API

Send the email your product depends on.

Submit product email through one clear API, retry uncertain requests safely, and follow each message from acceptance to its final delivery outcome.

Transactional emailCompose with the preview in sight
Composer tour
A transactional email being composed with custom HTML and a live message preview in RouteKite
Inside RouteKite

Write the message, add custom HTML, and review the recipient-facing result beside the form.

RequestHTML, text, preview text, and attachments
RetryIdempotent submission
ResultMessage state and delivery history

One request

A send call that says exactly what it needs.

Authenticate with a workspace API key, provide a verified Sending Address, choose the recipient, and send HTML, plain text, or a published transactional template.

The response returns a RouteKite message ID immediately. Use that ID to retrieve the current state and the complete delivery history.

Open the complete API reference
Send an email
const response = await fetch(  "https://routekite.com/api/v1/emails",  {    method: "POST",    headers: {      Authorization: "Bearer " + process.env.ROUTEKITE_API_KEY,      "Content-Type": "application/json",      "Idempotency-Key": crypto.randomUUID(),    },    body: JSON.stringify({      from: "orders@yourdomain.com",      to: "alex@example.com",      subject: "Your order is confirmed",      preview_text: "Order RK-2048 is now being prepared.",      html: "<h1>Thanks, Alex.</h1><p>We have your order.</p>",    }),  },); const message = await response.json();
202 response
{  "id": "7dd5da7f-40b0-4c29-bb78-7e0d95ef9eb7",  "status": "queued",  "created_at": "2026-09-04T14:32:18.000Z"}

Acceptance is not the same as delivery.

A successful API response means RouteKite recorded the message. Delivery history shows what happened next, including delays, bounces, complaints, rejections, and configuration failures.

  1. Queued

    RouteKite accepted the request and recorded the message.

  2. Submitted

    The message was handed to the delivery network.

  3. Delivered

    The recipient system confirmed delivery.

When something needs attention

RouteKite separates configuration problems from recipient or delivery failures and keeps the technical event details available when your team needs them.

Delivery visibilityThe result after acceptance
Workspace view
RouteKite Overview showing delivery rate, message states, daily volume, and recent messages
Inside RouteKite

Use the message ID returned by the API to connect each request with its visible delivery outcome.

Safe retries

Network uncertainty should not create duplicate email.

Send an idempotency key with each logical request. If your application loses the response, retry with the same key and the same content. RouteKite returns the original message instead of submitting another one.

If the content changes under the same key, RouteKite rejects the request so the mismatch cannot go unnoticed.

Understand idempotency

Attachments

Use the simple path for small files and the prepared path for larger workflows.

Direct

Include Base64 content in the send request.

Best when the file is already in memory and no separate upload step is useful.

Up to 5 MB per direct file
Prepared upload

Upload privately, then reference the attachment ID.

Best when upload and message creation happen at different points in your application.

Direct and prepared files can be mixed

Up to 10 attachments and 10 MB combined decoded attachment content per email.

First request

Verify a sender, create a key, and send one real message.

The quickstart keeps the setup path short. The API reference carries the complete contract.