Email tracking, statuses & callbacks

Statuses and callbacks

Email tracking, statuses & callbacks

Start here: E-mail — documentation hub.

After a message is accepted (HTTP 200 or SMTP 250), delivery and engagement events are recorded asynchronously. Use the Tracking API, portal logs, or webhooks to follow progress.

Allow 1–2 minutes after send before expecting log rows.


Tracking endpoints

OperationMethodPathReference
Search logsPOST/email/trackingSearch email tracking
Message timelineGET/email/tracking/single/{trackingId}Get email tracking (single message timeline)

Base URL: https://connect.routee.net

Identifiers

IdSourceUse
trackingIdHTTP send responsePrimary key in your application
messageIdTracking rowsSame message — either id works for lookup

Delivery lifecycle

Typical event progression on the single-message timeline (GET /email/tracking/single/{trackingId}):

event / deliveryStatusMeaning
QUEUEDAccepted by Routee; waiting in mail pipeline
SENTHanded off to recipient MTA or next hop
DELIVEREDRecipient server accepted the message (may include DSN)
BOUNCEDPermanent failure (bad address, policy reject, etc.)
FAILEDCould not be delivered after retries
DEFERREDTemporary failure; may retry

Human-readable status (e.g. Queued, Delivered) appears alongside machine-oriented deliveryStatus.

SMTP diagnostics

Timeline rows may include:

FieldDescription
results[]SMTP attempts — deliveryStatus, description, dsn flag
dsnDelivery Status Notification (action, status code) when available
envelopeSMTP envelope recipient

Useful for diagnosing bounces on SMTP sends and downstream MTA behaviour.


Engagement events (opens & clicks)

When you configure callback.eventCallback on HTTP send, Routee tracks opens and clicks. Timeline rows may include:

FieldDescription
openedCount, clickCountCounters on search/list rows
callbackBodyMetadata on timeline events — e.g. IP, country, device

Engagement tracking requires the HTTP API send path with event callbacks configured (or equivalent platform tracking pixels in HTML content).


HTTP send — status callback

Configure on POST /transactional-email:

{
  "callback": {
    "statusCallback": {
      "strategy": "OnChange",
      "url": "https://partner.example/webhooks/email-status"
    }
  }
}
FieldDescription
strategyOnChange — notify on every status transition; OnCompletion — notify when delivery reaches a final state
urlHTTPS endpoint Routee POSTs to

Routee POSTs JSON to your URL as delivery status changes. Treat unknown fields as optional for forward compatibility.

Retry policy: Return HTTP 200 within 2 seconds. Routee retries failed callbacks (same platform policy as Viber callbacks — up to 12 retries over 24 hours). Whitelist callbacksallow.routee.net on your firewall.

Tutorial: Receive transactional email delivery callbacks


HTTP send — event callback (open / click)

{
  "callback": {
    "eventCallback": {
      "onOpen": "https://partner.example/webhooks/email-open",
      "onClick": "https://partner.example/webhooks/email-click"
    }
  }
}
FieldDescription
onOpenHTTPS URL notified when the recipient opens the message
onClickHTTPS URL notified when a tracked link is clicked

Event callbacks are independent of statusCallback — you may use either or both.


Polling vs callbacks

ApproachWhen to use
Polling POST /email/trackingSimple integrations, low volume, no public webhook
Timeline GETSupport tools, manual inspection, one-off debugging
statusCallbackPush delivery updates to your backend
eventCallbackMarketing analytics, engagement funnels
Portal logsOperators on go.routee.net — same underlying data

Search filters

POST /email/tracking accepts a JSON array of filters (same pattern as SMS tracking):

fieldNameExample use
recipient, from, toFind mail to/from an address
deliveryStatus, event, statusFilter by state
subjectSubject line search
dateCombined with dateStart / dateEnd query params

Pass [] for an unfiltered date-bounded list.


SMTP sends

SMTP-submitted messages appear in the same logs as HTTP sends. There is no SMTP-equivalent of callback in the MIME session — use polling or portal logs, or send via HTTP when webhooks are required.


Related