Reading emails
API base URL: https://api.relayloft.com
These need a Full access key; a Sending only key gets 401 restricted_api_key.
GET /emails/:id
curl https://api.relayloft.com/emails/<id> -H "Authorization: Bearer $RESEND_API_KEY"Returns object ("email"), id, from, to, cc, bcc, reply_to, subject, html, text, tags, created_at, scheduled_at (ISO 8601, or null) and last_event (scheduled, queued, sent, delivered, delivery_delayed, bounced, complained, failed, suppressed or canceled; with tracking on, opened or clicked once the email was sent, unless it bounced or was marked as spam).
GET /emails
Newest first: { "object": "list", "has_more": true, "data": [...] }. limit is 1 to 100 (default 20). For the next page, pass after with the last id you got; to go back towards newer emails, pass before with the first id you got (not both).
curl "https://api.relayloft.com/emails?limit=50&after=<last id>" -H "Authorization: Bearer $RESEND_API_KEY"Emails are kept for 30 days (a scheduled email, 30 days from when it was due).
GET /emails/:id/attachments
The email's attachments (resend.emails.attachments.list and .get, or GET /emails/:id/attachments/:attachment_id): id, filename, size (bytes), content_type, content_disposition (inline with a content_id, otherwise attachment), download_url and expires_at. limit is optional: without it, all of them.
The download_url works for an hour without an API key, so treat it like the file itself. It's signed for that one attachment; a changed or expired link gets 404. Once the email is past the 30 days (or a scheduled email is canceled), its attachments are gone.
GET /emails/metrics
Counts for your emails, as Resend's resend.emails.metrics(). Needs a Full access key. Without parameters: the last 7 days (today and the 6 before), every metric, totals only. At most 120 requests an hour and 20,000 emails per request (use a shorter range or a domain_id). Counting is per email: an email to several people where one bounced counts as both delivered and bounced. Canceled emails aren't counted; a scheduled email counts in the period it was accepted. A datetime without an offset is UTC.
curl "https://api.relayloft.com/emails/metrics?start_date=2026-09-01&end_date=2026-09-07&dimensions=period,domain&metrics=sent,delivered,bounce_rate&timezone=Europe/London" \
-H "Authorization: Bearer $RESEND_API_KEY"start_date,end_date: ISO dates (whole days intimezone) or datetimes. The start is moved up to the 30 days we keep; the end is at most now.granularity(hourly,daily,weeklyfrom Monday,monthly) andtimezone(IANA, default UTC) shapeperiod. Withperiodas the only dimension, every period is listed, empty ones as zeros.dimensions: any ofperiod,domainandemail(at most 1,000 emails; narrow withemail_id).domain_idandemail_idfilter (up to 100 each).- Each email counts in the period it was accepted, with everything that has happened to it since. Rates are percentages.
unsubscribedis always 0, and there are no broadcasts:broadcastandbroadcast_idget422. - At most 120 requests an hour, and 100,000 emails per request (use a shorter range above that).