Skip to documentation
Dashboard
Guides

Track delivery

Use normalized states and timestamps to understand what happened after acceptance.

On this page

Retrieve a message

Use the message ID returned by the send request. Retrieval requires email:read or email:send.

Status request
const response = await fetch(  "https://routekite.com/api/v1/emails/7dd5da7f-40b0-4c29-bb78-7e0d95ef9eb7",  { headers: { Authorization: `Bearer ${process.env.ROUTEKITE_API_KEY}` } },); const email = await response.json();
200 Response
{  "object": "email",  "id": "7dd5da7f-40b0-4c29-bb78-7e0d95ef9eb7",  "state": "delivered",  "purpose": "transactional",  "from_email": "updates@example.com",  "from_name": "Example Store",  "reply_to_email": "support@example.com",  "to_email": "customer@example.net",  "subject": "Your order is confirmed",  "queued_at": "2026-08-27T10:30:00.000Z",  "submitted_at": "2026-08-27T10:30:02.000Z",  "delivered_at": "2026-08-27T10:30:05.000Z",  "terminal_at": "2026-08-27T10:30:05.000Z",  "failure_code": null,  "failure_message": null,  "created_at": "2026-08-27T10:30:00.000Z"}

Interpret the result

Queued and submitted are progress states. Delivered confirms delivery. Bounced, complained, rejected, failed, and suppressed need attention. Delayed may recover.

Failure details

When available, failure_code supports application branching while failure_message explains the incident. Keep the message ID and X-Request-Id for support.

On this page