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.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
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
- Obtain a Bearer token with OAuth 2.0 client credentials —
POST https://auth.routee.net/oauth/tokenusing HTTP Basic auth (Application ID:Application Secret),grant_type=client_credentials, andscope=transactional_email. See Get authenticated using your application credentials. - 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
| Field | Description |
|---|---|
trackingId | Primary 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
| errorCode | Typical cause |
|---|---|
000000 | Invalid or unverified sending domain |
000001 | Invalid sender address |
000002 | Unverified sender |
000003 | Message size limit exceeded |
000004 | No active subscription |
000005 | Insufficient 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).
400Validation or business rule failure (domain, sender, subscription, size limits)
401Missing or invalid Bearer token
403Insufficient role or OAuth scope (transactional_email required)

