---
title: "List sent campaign emails"
method: GET
path: "/emails/sent"
tags: ["Sent emails"]
---

# List sent campaign emails

`GET /emails/sent`

## Request

- Base URL: `https://warmysender.com/api/v1`
- URL: `https://warmysender.com/api/v1/emails/sent`
- Auth: HTTP bearer

One record per campaign email your mailboxes sent: who it went to, the campaign and step, the From address, the subject, the Message-ID and when it was sent. Each record has exactly the same fields as the email.sent webhook, so you can backfill any event your endpoint missed. "Sent" means the email was accepted by your sending mailbox's server — not yet a delivery confirmation. Problems found later arrive as the email.bounced webhook. Newest first unless you pass order=asc. Cursor paginated.

Required scope: `campaigns:read`.

Returns a cursor-paginated list — pass `cursor` from the previous page to continue.

messageId is unique per email. Use it to skip records you already have, and to match replies: a reply.received event carries inReplyToMessageId, which equals the messageId of the email it answered.

stepIndex counts from 0; stepNumber is the "Step N" you see in the app.

Only campaign emails are listed. Warmup emails and test sends are not.

Records are kept for as long as the campaign exists, and for at least 13 months after a contact finishes the campaign. Deleting a campaign deletes its records. Emails sent before July 2026 are not available.

Polling for new emails? Use order=asc with since set a few minutes before your previous check, and skip any messageId you already have.

## Query parameters

- `campaignId` string
- `prospectId` string
- `since` string
- `until` string
- `order` 'desc' | 'asc'
- `limit` integer
- `cursor` string

## Response `200`

Success

## Other responses

- `400`: `validation_error` — A filter, the order, the limit or the cursor is not valid. The message says which.
- `401`: `unauthorized` — Missing or invalid API key.
- `403`: `insufficient_scope` — The API key lacks the scope this endpoint requires.
- `429`: `rate_limited` — Too many requests — slow down and retry after the Retry-After delay.

---

[API](https://skmtc.dev/warmysender/apis/warmysender-public-api.md) · [All operations](https://skmtc.dev/warmysender/apis/warmysender-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/warmysender/apis/warmysender-public-api/revisions/289e9c167a1a?raw)
