Retrieve one-shot email statistics
Email
Get One-Shot Email Statistics
Poll delivery, open, and click metrics for a single HTML email sent via the one-shot endpoint
GET
Retrieve one-shot email statistics
Overview
After dispatching an email throughPOST /public/v1/emails, use the returned id (or the full statsUrl) to read back delivery and engagement metrics for that single delivery.
Unlike the template-stats endpoint, these numbers refer to one recipient and one HTML payload — not aggregated counters across a campaign.
Request
Response Example
Field Reference
| Field | Type | Description |
|---|---|---|
id | string | Echo of the opaque sqid id returned by the POST endpoint. |
status | "pending" | "sent" | "failed" | Lifecycle state of the delivery. |
to | string | Recipient address as it was sent. |
subject | string | Subject line as it was sent. |
sentAt | date-time | When the delivery row was created (queue-in time, not provider acceptance). |
opened | boolean | true once the tracking pixel has been fetched at least once. |
firstOpenAt | date-time | null | Timestamp of the first open; null until the pixel is fetched. |
clickCount | integer | Total number of clicks across all tracked links in the email. |
firstClickAt | date-time | null | Timestamp of the earliest tracked click; null until the first click. |
failureReason | string | null | Populated when status = "failed" — the provider’s rejection reason. |
How the Counters Are Updated
- Open: triggered the first time the recipient’s email client fetches the embedded
<img>open-pixel. Image proxies (Gmail, Apple Mail Privacy Protection) trigger this immediately on arrival, which inflates open rates compared to pre-2021 baselines. - Click: every fetch of a rewritten
/api/click/...URL appends a row to the click ledger.clickCountis the cardinality of that ledger;firstClickAtis its minimum timestamp.
id do not affect this row.
Use Cases
Confirm a magic link landed
Confirm a magic link landed
After sending a sign-in email, poll the stats endpoint to surface “Email opened by recipient” in your internal dashboard.
Detect failed deliveries in a queue worker
Detect failed deliveries in a queue worker
When
status === "failed", persist failureReason against the originating business object so support can react.Attribute a CTA click back to the trigger
Attribute a CTA click back to the trigger
The first click timestamp lets you measure end-to-end latency from “we sent it” to “user acted.”
Common Errors
| Status | Cause |
|---|---|
401 | API key missing or malformed. |
403 | API key lacks the TRANSACTIONAL permission. |
404 | The id doesn’t exist, or it belongs to a different company than the one this API key authorizes. |
Polling Guidance
- Open events: usually surface within seconds for image-proxied clients (Gmail, Apple Mail Privacy Protection). For other clients, wait until the recipient actually opens the message.
- Click events: stored synchronously the moment the rewritten URL is fetched — they appear in the next stats response.
- Rate: a steady cadence of one poll every 30–60 seconds for the first ~10 minutes is plenty. Aggressive polling won’t surface data faster.
Related Endpoints
- Send One-Shot HTML Email — the producer side of these statistics
- Get Email Template Stats — aggregated stats for template-backed sends