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.