# List Emails

GET /api/v2/projects/{projectId}/email-campaigns/{campaignId}/emails

The per-recipient send log for one campaign: who it went to, current status, and delivery timestamps. Paginated, and returns `total` alongside the rows so you can page without a second call. Filter by `status` to answer questions like "who bounced", or by `messageId` / `sendPhase` to isolate one side of an A/B test.

## Request

- projectId: string, path, required — ID of the project that owns the campaign.
- campaignId: string, path, required — ID of the campaign whose emails to list.
- dateFrom: string, query — Only include emails sent on or after this `YYYY-MM-DD` date.
- dateTo: string, query — Only include emails sent on or before this `YYYY-MM-DD` date.
- messageId: string, query — Only include emails sent from this campaign message, one A/B variant, for example.
- sendPhase: sample | rollout, query — For A/B campaigns, restrict to one phase: `sample` for the initial test split, `rollout` for the winning variant sent to the remaining audience.
- skip: number, query — Number of emails to skip before collecting results.
- sortBy: sentAt | deliveredAt | openedAt | clickedAt | bouncedAt | suppressedAt | to | status | lastEventAt, query — Field to sort by, e.g. `sentAt` or `lastEventAt`.
- sortOrder: asc | desc, query — Sort direction.
- status: pending | sent | delivered | opened | clicked | bounced | complained | suppressed | deliveryDelayed, query — Only include emails currently in this delivery state, e.g. `bounced` or `opened`.
- take: number, query — Maximum number of emails to return.

## Response

- 200: Successful response
  - emails: object[], required
    - bounced: boolean, required
    - clicked: boolean, required
    - complained: boolean, required
    - contactDistinctId: string, required
    - createdAt: string, required
    - delivered: boolean, required
    - distinctId: string, required
    - emailCampaignId: string, required
    - id: string, required
    - messageId: string, required
    - opened: boolean, required
    - projectId: string, required
    - sendPhase: sample | rollout, required, default sample
    - sent: boolean, required
    - status: pending | sent | delivered | opened | clicked | bounced | complained | suppressed | deliveryDelayed, required
    - subject: string, required
    - suppressed: boolean, required
    - to: string, required
    - updatedAt: string, required
    - bouncedAt: string
    - clickedAt: string
    - complainedAt: string
    - deliveredAt: string
    - lastEventAt: string
    - …
  - total: number, required
- 400: Invalid input data
- 401: Authorization not provided
- 403: Insufficient access
- 404: Not found
- 500: Internal server error
