Track delivery & receive callbacks

A 200 from the send request means the email was accepted, not delivered. Final delivery status arrives asynchronously. You can poll the tracking API or receive callbacks (webhooks).

Option A — Poll the tracking API

Use the trackingId returned by the send request.

curl -X GET 'https://connect.routee.net/email/tracking/single/YOUR_TRACKING_ID' \
  -H 'Authorization: Bearer YOUR_ACCESS_TOKEN'

This returns the message timeline (queued → sent → delivered, plus opens and clicks). Tracking rows typically appear 1–2 minutes after a successful send.

To search across messages, use POST /email/tracking with filters (date range, status, recipient). See Search email tracking.

Option B — Receive callbacks (webhooks)

Add a callback object to the send request to have Routee POST status and engagement events to your HTTPS endpoints — no polling required.

curl -X POST 'https://connect.routee.net/transactional-email' \
  -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "from": { "address": "[email protected]" },
    "to": [{ "address": "[email protected]" }],
    "subject": "Password reset",
    "content": { "html": "<p>Click the link to reset your password.</p>" },
    "callback": {
      "statusCallback": {
        "strategy": "OnChange",
        "url": "https://your-app.example/webhooks/email-status"
      },
      "eventCallback": {
        "onOpen": "https://your-app.example/webhooks/email-open",
        "onClick": "https://your-app.example/webhooks/email-click"
      }
    }
  }'
  • statusCallback.strategyOnChange (every status transition) or OnCompletion (final status only).
  • eventCallback — separate URLs for onOpen and onClick engagement events.

Your endpoint should return 2x quickly and process the payload asynchronously.

📘

More detail

See Email tracking, statuses & callbacks and Email Webhooks for payload schemas and the full status list.

Next steps