Skip to main content

Send log

MethodPathScopeSDK
GET/api/v1/sendssends:readsends.list / listPage / listAll

One row per send attempt, newest first, cursor-paginated. Delivery and engagement columns fill in as provider webhooks land.

Query parameters

QueryTypeNotes
templatestringExact template key.
typetransactional | marketing
statussent | failedWhether the attempt reached the provider.
contactIduuidAll mail to one contact.
sourceTypestringWhat triggered it (campaign, sequence, …).
sourceIdstringThe specific campaign/sequence id.
qstringRecipient email substring match.
limitnumberRows per page.
cursorstringOpaque 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

  • status is about the attempt: sent means the provider accepted it, failed means it never left (suppressed recipient, render failure, provider rejection — error says which).
  • delivery_status is about the outcome: queued, delivered, bounced, complained, or null when no provider event has arrived yet.
  • Engagement counters (open_count, click_count, and the first_*_at timestamps) only move for tracked links and images; a plaintext-only reader may never register.
  • resend_id is the provider id returned by POST /send.

The log is a reporting surface, not a queue: polling it to detect bounces works but is wasteful. Subscribe to webhooks for that.