Export
Asynchronously export contacts or delivery reports as downloadable files.
List exports
Returns a paginated list of all export jobs for your account, ordered by creation date. This is the primary polling endpoint in the asynchronous export workflow. After you create an export job via POST /exports/contacts or POST /exports/delivery-reports, the job is queued and processed in the background. Call this endpoint periodically (recommended interval: every 5-10 seconds) to monitor progress. Each export entry includes a status field and an isAvailableForDownload flag. Once isAvailableForDownload becomes true, call GET /exports/{exportId} to retrieve the time-limited download URL. Download URLs expire after a period of time. If the URL has expired, the isAvailableForDownload flag may revert to false; in that case use POST /exports/{exportId} to regenerate the export and obtain a fresh URL. Pagination is controlled by page (0-based) and limit (items per page, default 10). Returns 500 if an internal error occurs while fetching the export list.
Export contacts
Queues an asynchronous CSV export of contacts from your account. You can scope the export in three ways: (1) provide listIds to export all contacts belonging to one or more contact lists, (2) provide contactIds to export a specific set of contacts by their IDs, or (3) omit both to export every contact in your account. The endpoint returns 202 Accepted immediately, meaning the export job has been queued but not yet completed. To track progress, poll GET /exports periodically (every 5-10 seconds is recommended). When the job finishes and isAvailableForDownload becomes true, call GET /exports/{exportId} to retrieve the time-limited download URL for the CSV file. If you need to export the same data again after the URL expires, use POST /exports/{exportId} to regenerate the export. Returns 400 if the request body is invalid (e.g. malformed list IDs or contact IDs). Returns 500 if an internal error occurs while queuing the job.
Export delivery reports
Queues an asynchronous CSV export of delivery reports (message-level send and delivery statuses). You can scope the export in two ways: (1) provide a campaignId to export delivery reports for a specific campaign, or (2) provide a date range using startDateTime and endDateTime to export all delivery reports within that period. The endpoint returns 202 Accepted immediately, meaning the export job has been queued but not yet completed. To track progress, poll GET /exports periodically (every 5-10 seconds is recommended). When the job finishes and isAvailableForDownload becomes true, call GET /exports/{exportId} to retrieve the time-limited download URL for the CSV file. If you need to export the same data again after the URL expires, use POST /exports/{exportId} to regenerate the export. Returns 400 if the request body is invalid (e.g. missing both campaignId and date range, or invalid date format). Returns 500 if an internal error occurs while queuing the job.
Regenerate expired export
Re-queues an expired export job so that a fresh downloadable file is generated using the same filters and parameters as the original export. This is useful when the download URL returned by GET /exports/{exportId} has expired and you still need the data. The endpoint returns 202 Accepted immediately. The regeneration is processed asynchronously just like the original export. Poll GET /exports to monitor the new job and, once isAvailableForDownload becomes true, call GET /exports/{exportId} to retrieve the fresh download URL. Returns 400 if the export is still available and has not expired yet (there is no need to regenerate it; just download it). Returns 404 if the exportId does not exist or does not belong to your account. Returns 500 if an internal error occurs.
Get export download URL
Returns a pre-signed download URL for a completed export file. You should only call this endpoint after confirming that the export has finished processing by checking that isAvailableForDownload is true in the GET /exports list response. The returned URL is time-limited and will expire after a certain period. Once expired, any attempt to download the file using that URL will fail. If you need a fresh link after expiration, call POST /exports/{exportId} to regenerate the export, then poll GET /exports again until the new export is ready and retrieve the new download URL from this endpoint. Returns 400 if the export has expired and is no longer available for direct download (use POST /exports/{exportId} to regenerate). Returns 404 if the exportId does not exist or does not belong to your account. Returns 500 if an internal error occurs.