Send log
| Method | Path | Scope | SDK |
|---|---|---|---|
GET | /api/v1/sends | sends:read | sends.list / listPage / listAll |
One row per send attempt, newest first, cursor-paginated. Delivery and engagement columns fill in as provider webhooks land.
Query parameters
| Query | Type | Notes |
|---|---|---|
template | string | Exact template key. |
type | transactional | marketing | |
status | sent | failed | Whether the attempt reached the provider. |
contactId | uuid | All mail to one contact. |
sourceType | string | What triggered it (campaign, sequence, …). |
sourceId | string | The specific campaign/sequence id. |
q | string | Recipient email substring match. |
limit | number | Rows per page. |
cursor | string | Opaque cursor from a previous nextCursor. |
curl "https://mailroom.example.com/api/v1/sends?template=welcome&status=failed&limit=20" \
-H "Authorization: Bearer pk_live_…"
Response
{
"ok": true,
"sends": [
{
"id": "7b2e…",
"contact_id": "9f0c…",
"brand_id": "b1…",
"to_email": "ada@example.com",
"template": "welcome",
"type": "transactional",
"subject": "Welcome to Acme",
"status": "sent",
"error": null,
"delivery_status": "delivered",
"resend_id": "3f8b1c0a-…",
"source_type": "api",
"source_id": null,
"first_opened_at": "2026-07-28T10:31:44.010Z",
"open_count": 2,
"first_clicked_at": null,
"click_count": 0,
"last_event_at": "2026-07-28T10:31:44.010Z",
"created_at": "2026-07-28T10:12:05.882Z"
}
],
"nextCursor": null
}
Reading the fields
statusis about the attempt:sentmeans the provider accepted it,failedmeans it never left (suppressed recipient, render failure, provider rejection —errorsays which).delivery_statusis about the outcome:queued,delivered,bounced,complained, ornullwhen no provider event has arrived yet.- Engagement counters (
open_count,click_count, and thefirst_*_attimestamps) only move for tracked links and images; a plaintext-only reader may never register. resend_idis the provider id returned byPOST /send.
The log is a reporting surface, not a queue: polling it to detect bounces works but is wasteful. Subscribe to webhooks for that.