---
title: "Export Email Events"
method: POST
path: "/v2/exports/email-events"
deprecated: true
---

# Export Email Events

`POST /v2/exports/email-events`

## Request

- Base URL: `https://pub-api.conversion.ai/api`
- URL: `https://pub-api.conversion.ai/api/v2/exports/email-events`
- Auth: one of:
  - API key in header `X-API-Key`
  - API key in query parameter `api_key`

> **Deprecated.**

**Deprecated.** Use [Export Contact Events](/api-reference/export-contact-events) with `types` set to the `EMAIL_*` types you need. It returns the same events, with the email detail and `emailName` in each event's `email` object. To move an existing walk over without re-reading it, send its last cursor as `emailEventsCursor`. This endpoint is still served.

Bulk, incremental export of raw email engagement events of a single type, keyed by `occurredAt`. The email asset name is resolved per row on a best-effort basis (`emailName` may be `null` if it cannot be resolved).

Results are paginated with an opaque cursor returned as `pagination.nextCursor`. Pass it back as `cursor` to fetch the next page; a `null` cursor means there are no more results. Persist the last non-null cursor between syncs to resume.

> **Request Access.** This endpoint is not enabled by default, contact the Conversion team to request access. Calls from accounts without it return `403 export_not_enabled`.

## Request body

- object
  - `eventType` 'EMAIL_SEND' | 'EMAIL_DELIVERY' | 'EMAIL_OPEN' | 'EMAIL_CLICK' | 'EMAIL_BOUNCE' | 'EMAIL_SOFT_BOUNCE' | 'EMAIL_COMPLAINT' | 'EMAIL_UNSUBSCRIBE_ALL' | 'EMAIL_TOPIC_UNSUBSCRIBE', required: The email event type to export. Each call exports a single event type, matched 1:1 against the underlying email event type. Case-insensitive; an unsupported value returns an `invalid_field` error.
  - `cursor` string: The opaque pagination cursor returned as `pagination.nextCursor` by a previous call. Omit (or pass an empty string) to fetch the first page. An invalid or malformed cursor returns an `invalid_cursor` error.
  - `limit` integer: The maximum number of events to return per page. Defaults to 1000. Values are clamped to the range [1, 5000] rather than rejected; values above 5000 return 5000 results.

## Response `200`

A page of email events retrieved successfully.

- object
  - `data` object
    - `events` object[], required: The current page of exported email events.
      - `eventId` string, uuid, required: The Conversion engagement ID for this event. Stable primary key for warehouse upserts.
      - `contactId` string, uuid, required: The Conversion contact ID the event belongs to (joins `contacts.id`).
      - `occurredAt` string, date-time, required: When the event occurred.
      - `eventType` string, required: The underlying email event type.
      - `sourceType` string, nullable: The kind of flow that sent the email (`WORKFLOW` or `BLAST`), or `null` if unknown.
      - `sourceId` string, uuid, nullable: The id of the workflow or blast that sent the email, or `null`.
      - `emailId` string, uuid, nullable: The id of the email asset, or `null`.
      - `emailName` string, nullable: The resolved name of the email asset. Best-effort: `null` if it could not be resolved.
      - `sentEmailId` string, uuid, nullable: The per-send instance id, or `null`.
      - `isBot` boolean, required: `true` if the engagement was classified as bot activity. Filter in the warehouse as needed.
      - `link` string, nullable: For `EMAIL_CLICK` events, the clicked URL; otherwise `null`.
      - `topicIds` string, nullable: Stringified array of topic ids the recipient unsubscribed from. Only populated for `EMAIL_TOPIC_UNSUBSCRIBE` events, otherwise `null`.
      - `bounceType` 'Permanent' | 'Transient' | 'Undetermined' | 'null', nullable: Bounce classification for `EMAIL_BOUNCE` and `EMAIL_SOFT_BOUNCE` events, or `null`. Possible values: `Permanent`, `Transient`, `Undetermined`.
      - `errorMessage` string, nullable: SMTP diagnostic code (e.g. `smtp; 550 5.1.1 user unknown`); only populated for `EMAIL_BOUNCE` and `EMAIL_SOFT_BOUNCE`, otherwise `null`.
  - `pagination` object
    - `nextCursor` string, nullable, required: Opaque cursor for the next page, or `null` when there are no more results. This is the single source of truth for whether more results exist.

## Other responses

- `400`: The request was malformed or contained invalid data.
- `401`: Authentication failed.
- `403`: The export API is not enabled for this account.
- `500`: An unexpected server error occurred.

---

[API](https://skmtc.dev/conversion/apis/conversion-api.md) - [All operations](https://skmtc.dev/conversion/apis/conversion-api/llms.txt) - [OpenAPI document](https://skmtc.dev/conversion/apis/conversion-api/revisions/8422f815402a?raw)
