Send a transactional email

Creates and queues a transactional email for delivery. Routed by menshen to the transactional-email service.

HTTP 200 means the message was accepted for processing, not delivered to the recipient's mailbox. Poll Search email tracking or Get email tracking (single message timeline) after a short delay (typically 1–2 minutes), or use optional callback URLs on the send request.

The response trackingId is the primary id for log lookup. See Email API for trackingId vs messageId.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…

Send a transactional email over HTTP API v2 on Connect (https://connect.routee.net/transactional-email).

HTTP 200 means the message was accepted for processing, not delivered to the recipient's inbox. Delivery status arrives asynchronously via optional callbacks or the Email Tracking API.

Authentication

  1. Obtain a Bearer token with OAuth 2.0 client credentialsPOST https://auth.routee.net/oauth/token using HTTP Basic auth (Application ID : Application Secret), grant_type=client_credentials, and scope=transactional_email. See Get authenticated using your application credentials.
  2. Call this endpoint with Authorization: Bearer {access_token}.

Do not send a Principal header (or any account-id header). Routee resolves your tenant from the OAuth token.

Usage is charged against your Transactional Email subscription on go.routee.net (Email → Pricing → My Plan). Ensure the subscription is active before sending; otherwise the API returns HTTP 400 with error code 000004 (No active subscription exists).

Example — cURL

# 1) Token (Basic auth with application credentials)
curl -s -X POST 'https://auth.routee.net/oauth/token' \
  -u 'YOUR_APPLICATION_ID:YOUR_APPLICATION_SECRET' \
  -d 'grant_type=client_credentials&scope=transactional_email'

# 2) Send (Bearer token from step 1)
curl -X POST 'https://connect.routee.net/transactional-email' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
  -d '{
    "from": { "name": "Acme", "address": "[email protected]" },
    "to": [{ "address": "[email protected]" }],
    "subject": "Order confirmed",
    "content": { "html": "<p>Thank you.</p>" }
  }'

Response

FieldDescription
trackingIdPrimary id for Search email tracking and Get email tracking (single message timeline).

Tracking rows typically appear within 1–2 minutes after a successful send.

Common HTTP 400 errors

errorCodeTypical cause
000000Invalid or unverified sending domain
000001Invalid sender address
000002Unverified sender
000003Message size limit exceeded
000004No active subscription
000005Insufficient subscription resources

Skip link and open tracking

By default Routee rewrites HTML links for click tracking and injects an open-tracking pixel (trackLinks and trackOpens default to true). Set either flag to false on this request to leave original hrefs and/or skip the pixel.

{
  "from": { "address": "[email protected]" },
  "to": [{ "address": "[email protected]" }],
  "subject": "Order confirmed",
  "content": { "html": "<p>Thanks. <a href=\"https://example.com/order\">View order</a></p>" },
  "trackLinks": false,
  "trackOpens": false
}

These flags control instrumentation of the message. callback.eventCallback is separate — it only configures webhook URLs for opens and clicks that actually occur. HTTP API only; SMTP has no equivalent fields. Field reference: Track Links & Opens Explained.

Optional callback.statusCallback and callback.eventCallback (onOpen, onClick) receive HTTPS POST notifications as the message progresses. Engagement callbacks fire on every open/click; webhook results[] is latest-only — see Email callback payloads. Set send-time label to your campaign id for searchable tracking (fieldName=label / tags).

Body Params
from
object
required
replyTo
object
to
array of objects
required
length ≥ 1
to*
string
required
string
cc
array of objects
cc
bcc
array of objects
bcc
customHeaders
array of objects
length ≤ 10
customHeaders
string
length ≤ 144
content
object
required
attachments
array of objects
attachments
date-time
integer
≥ 0

Time-to-live in minutes.

integer
≥ 0
footer
object
callback
object
string
length ≤ 80
dsn
object
boolean
Defaults to true
boolean
Defaults to true

When false, open tracking via the tracking pixel is disabled.

Responses

400

Validation or business rule failure (domain, sender, subscription, size limits)

401

Missing or invalid Bearer token

403

Insufficient role or OAuth scope (transactional_email required)

Language
Credentials
Bearer
JWT
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json