Iterable Export API

The Iterable Export API enables developers to extract data from Iterable projects for analytics, reporting, and data warehousing purposes. It provides asynchronous export endpoints that allow bulk retrieval of user data, event data, campaign metrics, and message engagement information. The export endpoints support filtering by date ranges and other criteria, making it possible to build custom reporting pipelines and synchronize Iterable data with external business intelligence tools.

Operations 7

GET /api/export/data.csv Export data to CSV #
GET /api/export/data.json Export data to JSON #
GET /api/export/jobs Get export jobs #
POST /api/export/start Start export #
GET /api/export/userEvents Export user events #
DELETE /api/export/{jobId} Cancel export #
GET /api/export/{jobId}/files Get export files #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/export-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

iterable-export-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  termsOfService: https://iterable.com/terms/
  title: Iterable Export API
  version: '1.8'
servers:
- url: https://api.iterable.com/
security:
- api_key: []
tags:
- name: export
paths:
  /api/export/data.csv:
    get:
      description: 'Export campaign analytics data in CSV format. Use of either ''range'' or ''startDateTime'' and ''endDateTime'' is required.<br/><b>Rate limit</b>: 4 requests/minute, per project.'
      operationId: exportDataCsv
      parameters:
      - description: Data type name.
        in: query
        name: dataTypeName
        required: true
        schema:
          type: string
          enum:
          - emailSend
          - emailOpen
          - emailClick
          - hostedUnsubscribeClick
          - emailComplaint
          - emailBounce
          - emailSendSkip
          - pushSend
          - pushOpen
          - pushUninstall
          - pushBounce
          - pushSendSkip
          - inAppSend
          - inAppOpen
          - inAppClick
          - inAppClose
          - inAppDelete
          - inAppDelivery
          - inAppSendSkip
          - inAppRecall
          - inboxSession
          - inboxMessageImpression
          - smsSend
          - smsBounce
          - smsClick
          - smsReceived
          - smsSendSkip
          - webPushSend
          - webPushClick
          - webPushSendSkip
          - emailSubscribe
          - emailUnSubscribe
          - purchase
          - customEvent
          - user
          - smsUsageInfo
          - embeddedSend
          - embeddedSendSkip
          - embeddedClick
          - embeddedReceived
          - embeddedImpression
          - embeddedSession
          - unknownSession
          - journeyExit
          - whatsAppBounce
          - whatsAppClick
          - whatsAppReceived
          - whatsAppSeen
          - whatsAppSend
          - whatsAppSendSkip
          - whatsAppUsageInfo
      - description: date range, uses UTC time
        in: query
        name: range
        required: false
        schema:
          type: string
          enum:
          - Today
          - Yesterday
          - BeforeToday
          - All
          default: Today
      - description: CSV file delimiter
        in: query
        name: delimiter
        required: false
        schema:
          type: string
          default: ','
      - description: Export starting from (>=) (yyyy-MM-dd HH:mm:ss [ZZ])
        in: query
        name: startDateTime
        required: false
        schema:
          type: string
      - description: Export ending at (<) (yyyy-MM-dd HH:mm:ss [ZZ])
        in: query
        name: endDateTime
        required: false
        schema:
          type: string
      - description: Fields to omit (comma separated)
        in: query
        name: omitFields
        required: false
        schema:
          type: string
      - description: Only export these fields (comma separated)
        in: query
        name: onlyFields
        required: false
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - description: Only export data from this campaign
        in: query
        name: campaignId
        required: false
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: successful operation
          content:
            text/csv:
              schema:
                type: string
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
        '429':
          description: Rate limit exceeded
      summary: Export data to CSV
      tags:
      - export
  /api/export/data.json:
    get:
      description: 'Export campaign analytics data in JSON format, one entry per line. Use of either ''range'' or ''startDateTime'' and ''endDateTime'' is required.<br/><b>Rate limit</b>: 4 requests/minute, per project.'
      operationId: exportDataJson
      parameters:
      - description: Data type name.
        in: query
        name: dataTypeName
        required: true
        schema:
          type: string
          enum:
          - emailSend
          - emailOpen
          - emailClick
          - hostedUnsubscribeClick
          - emailComplaint
          - emailBounce
          - emailSendSkip
          - pushSend
          - pushOpen
          - pushUninstall
          - pushBounce
          - pushSendSkip
          - inAppSend
          - inAppOpen
          - inAppClick
          - inAppClose
          - inAppDelete
          - inAppDelivery
          - inAppSendSkip
          - inAppRecall
          - inboxSession
          - inboxMessageImpression
          - smsSend
          - smsBounce
          - smsClick
          - smsReceived
          - smsSendSkip
          - webPushSend
          - webPushClick
          - webPushSendSkip
          - emailSubscribe
          - emailUnSubscribe
          - purchase
          - customEvent
          - user
          - smsUsageInfo
          - embeddedSend
          - embeddedSendSkip
          - embeddedClick
          - embeddedReceived
          - embeddedImpression
          - embeddedSession
          - unknownSession
          - journeyExit
          - whatsAppBounce
          - whatsAppClick
          - whatsAppReceived
          - whatsAppSeen
          - whatsAppSend
          - whatsAppSendSkip
          - whatsAppUsageInfo
      - description: date range, uses UTC time
        in: query
        name: range
        required: false
        schema:
          type: string
          enum:
          - Today
          - Yesterday
          - BeforeToday
          - All
          default: Today
      - description: Export starting from (>=) (yyyy-MM-dd HH:mm:ss [ZZ])
        in: query
        name: startDateTime
        required: false
        schema:
          type: string
      - description: Export ending at (<) (yyyy-MM-dd HH:mm:ss [ZZ])
        in: query
        name: endDateTime
        required: false
        schema:
          type: string
      - description: Fields to omit (comma separated)
        in: query
        name: omitFields
        required: false
        schema:
          type: string
      - description: Only export these fields (comma separated)
        in: query
        name: onlyFields
        required: false
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - description: Only export data from this campaign
        in: query
        name: campaignId
        required: false
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: successful operation
          content:
            application/x-json-stream:
              schema:
                type: string
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
        '429':
          description: Rate limit exceeded
      summary: Export data to JSON
      tags:
      - export
  /api/export/jobs:
    get:
      description: Return a list of recent export jobs. Only includes jobs for the current project and not other projects.
      operationId: getExportJobs
      parameters:
      - description: Filter results to only include jobs in the specified state
        in: query
        name: jobState
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobsResponse'
      summary: Get export jobs
      tags:
      - export
  /api/export/start:
    post:
      description: 'Start a data export. The export processes as a background job. Use the "Get export files" endpoint to check export status by <code>jobId</code> and obtain file download links.<br/><br/><b>Rate limit</b>: 1 request/second, per organization. <br/><b>Concurrent request limit</b>: Up to 4 exports process at a time, per organization. Additional requests are queued.'
      operationId: startExport
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartExportResponse'
      summary: Start export
      tags:
      - export
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StartExportRequest'
        description: Start export request
        required: true
  /api/export/userEvents:
    get:
      description: Export all events (in JSON) for the user specified by <code>email</code> or <code>userId</code>. One event per line.<br/><br/>Learn about <a href="https://support.iterable.com/hc/articles/29156459027348">identifying users by <code>userId</code> and <code>email</code></a>.
      operationId: exportUserEvents
      parameters:
      - description: Export by user's email
        in: query
        name: email
        required: false
        schema:
          type: string
      - description: Export by user's ID
        in: query
        name: userId
        required: false
        schema:
          type: string
      - description: Include Custom Events
        in: query
        name: includeCustomEvents
        required: false
        schema:
          type: boolean
          default: false
      responses:
        '200':
          description: successful operation
          content:
            application/x-json-stream:
              schema:
                type: string
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
        '429':
          description: Rate limit exceeded
      summary: Export user events
      tags:
      - export
  /api/export/{jobId}:
    delete:
      description: 'Cancel a queued or running export created with the "Start export" endpoint. <br/><b>Rate limit</b>: 1 request/second, per project.'
      operationId: cancelExport
      parameters:
      - description: The ID of the export job. Use the jobId returned from the "Start export" endpoint.
        in: path
        name: jobId
        required: true
        schema:
          type: integer
          format: int64
      responses:
        default:
          description: successful operation
      summary: Cancel export
      tags:
      - export
  /api/export/{jobId}/files:
    get:
      description: 'Get the job status and files for an export started with the "Start export" endpoint. <br/><br/>Occasionally, a job status may change from running to enqueued because it had to restart. When this happens, the job maintains progress and begins where it previously stopped. Iterable uses exponential backoff for retries.<br/><br/>Files are added to the list as the export job is running. Paginate through the files by using the last file name in the response as the <code>startAfter</code> value for the next request.  Each file is up to 10MB. Exports are limited to 100GB in total size. <br/><br/><b>Rate limit</b>: 1 request/second, per organization. <br/><b>Concurrent request limit</b>: Up to 4 exports process at a time, per organization. Additional requests are queued.'
      operationId: getExportFiles
      parameters:
      - description: The ID of the export job. Use the jobId returned from the "Start export" endpoint.
        in: path
        name: jobId
        required: true
        schema:
          type: integer
          format: int64
      - description: Skip file names up to and including this value. Use for paginating over the files in the export.
        in: query
        name: startAfter
        required: false
        x-example: file-1679086247925.csv
        schema:
          type: string
          default: None
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExportJobStatusAndFiles'
      summary: Get export files
      tags:
      - export
components:
  schemas:
    StartExportRequest:
      properties:
        campaignId:
          description: Only export data from this campaign
          format: int64
          type: integer
        dataTypeName:
          description: Data type name.
          enum:
          - emailSend
          - emailOpen
          - emailClick
          - hostedUnsubscribeClick
          - emailComplaint
          - emailBounce
          - emailSendSkip
          - pushSend
          - pushOpen
          - pushUninstall
          - pushBounce
          - pushSendSkip
          - inAppSend
          - inAppOpen
          - inAppClick
          - inAppClose
          - inAppDelete
          - inAppDelivery
          - inAppSendSkip
          - inAppRecall
          - inboxSession
          - inboxMessageImpression
          - smsSend
          - smsBounce
          - smsClick
          - smsReceived
          - smsSendSkip
          - webPushSend
          - webPushClick
          - webPushSendSkip
          - emailSubscribe
          - emailUnSubscribe
          - purchase
          - customEvent
          - user
          - smsUsageInfo
          - embeddedSend
          - embeddedSendSkip
          - embeddedClick
          - embeddedReceived
          - embeddedImpression
          - embeddedSession
          - unknownSession
          - journeyExit
          - whatsAppBounce
          - whatsAppClick
          - whatsAppReceived
          - whatsAppSeen
          - whatsAppSend
          - whatsAppSendSkip
          - whatsAppUsageInfo
          type: string
        delimiter:
          description: CSV file delimiter
          example: ','
          type: string
        endDateTime:
          description: Export events occurring or users updated before date and time exclusive (yyyy-MM-dd HH:mm:ss [ZZ])
          type: string
        omitFields:
          description: Fields to omit from the export (comma separated)
          type: string
        onlyFields:
          description: Only include these fields in the export (comma separated)
          type: string
        outputFormat:
          description: Output format
          enum:
          - text/csv
          - application/x-json-stream
          type: string
        startDateTime:
          description: Export events occurring or users updated after date and time inclusive (yyyy-MM-dd HH:mm:ss [ZZ])
          type: string
      required:
      - dataTypeName
      - outputFormat
      type: object
    ClientDataType:
      properties:
        send:
          type: boolean
        updatable:
          type: boolean
      required:
      - send
      - updatable
      type: object
    ExportJobStatusAndFiles:
      properties:
        exportTruncated:
          description: Whether the export was truncated because it exceeded the max allowed export size
          type: boolean
        files:
          description: The current page of files
          items:
            $ref: '#/components/schemas/ExportFileAndUrl'
          type: array
        jobId:
          description: The ID of the export job
          example: 3562
          format: int64
          type: integer
        jobState:
          description: The state of the export job
          enum:
          - Enqueued
          - Running
          - Completed
          - Failed
          example: Running
          type: string
      required:
      - exportTruncated
      - files
      - jobId
      - jobState
      type: object
    JobsResponse:
      properties:
        jobs:
          description: The list of jobs
          items:
            $ref: '#/components/schemas/JobModel'
          type: array
      type: object
    JobState:
      properties:
        final:
          type: boolean
      required:
      - final
      type: object
    JobModel:
      properties:
        bytesExported:
          description: Number of bytes exported
          example: 2453629
          format: int64
          type: integer
        dataTypeName:
          $ref: '#/components/schemas/ClientDataType'
          description: Data type name.
          example: user
        endTime:
          description: The time at which the job completed or failed
          example: '2023-12-19T10:12:28.214-06:00'
          format: date-time
          type: string
        id:
          description: The ID of the job
          example: 3562
          format: int64
          type: integer
        jobState:
          $ref: '#/components/schemas/JobState'
          description: The state of the job
          example: Running
        scheduledStartTime:
          description: The earliest time the job can start
          example: '2023-12-19T10:12:27.732-06:00'
          format: date-time
          type: string
      required:
      - jobState
      type: object
    ExportFileAndUrl:
      properties:
        file:
          description: The name of the file.
          example: file-1679086247925.csv
          type: string
        url:
          description: A URL that can be used to download the file. Expires after 30 minutes.
          type: string
      required:
      - file
      - url
      type: object
    StartExportResponse:
      properties:
        jobId:
          description: The ID of the export job
          example: 3562
          format: int64
          type: integer
      required:
      - jobId
      type: object
  securitySchemes:
    api_key:
      in: header
      name: Api-Key
      type: apiKey