---
title: "Get an export and its download links"
method: GET
path: "/v1/exports/{export_id}"
tags: ["Exports"]
---

# Get an export and its download links

`GET /v1/exports/{export_id}`

## Request

- Base URL: `https://api.slashy.com`
- URL: `https://api.slashy.com/v1/exports/{export_id}`
- Auth: HTTP bearer

The export's status and, once it has succeeded, a fresh presigned link to each inbox's file (valid for up to an hour; GET again for new ones). Files are deleted 7 days after the export started (`expires_at`); after that `url` is `null`. Only inboxes the key can still read are listed, and an export with content columns needs `mail.content.read` (`insufficient_scope` otherwise).

**Scope:** `mail.metadata.read`. **Rate limit class:** `read` (600/minute per key).

## Path parameters

- `export_id` string, uuid, required

## Response `200`

OK

- Export
  - `id` string, uuid, required
  - `status` 'queued' | 'running' | 'succeeded' | 'failed', required
  - `created_at` string, date-time, required
  - `started_at` string, date-time, nullable, required
  - `finished_at` string, date-time, nullable, required
  - `expires_at` string, date-time, nullable, required: When the files are deleted (7 days after the export started); set once it succeeds.
  - `inbox_ids` string[], required: The exported inboxes this key can read.
  - `since` string, date-time, nullable, required
  - `include_content` boolean, required: Whether the files have the `mail.content.read` columns. Downloading them needs that scope.
  - `row_count` integer, nullable, required: Messages across the files this key can read; set once it succeeds.
  - `error` string, nullable, required: Why the export failed.
  - `files` ExportFile[]: One Parquet file per inbox, once the export succeeds. Only on `GET /v1/exports/{id}`.
    - `inbox_id` string, uuid, required
    - `rows` integer, required: Messages in the file.
    - `bytes` integer, required
    - `url` string, uri, nullable, required: Presigned download link. `null` once the files are deleted (after `expires_at`).
    - `url_expires_at` string, date-time, nullable, required: The link stops working at this time, at most an hour after this request. GET the export again for a fresh link.

## Other responses

- `401`: Missing, malformed, unknown, revoked or expired API key. `error` is one of: `invalid_api_key`, `api_key_revoked`, `api_key_expired`.
- `403`: The key is valid but may not make this call. `error` is one of: `browser_not_allowed`, `ip_not_allowed`, `not_enterprise`, `key_owner_inactive`, `insufficient_scope`.
- `404`: Not found, or not readable by this key (the two look the same). `error` is one of: `export_not_found`.
- `422`: A parameter is missing or invalid. The body lists each problem (not the `Error` shape).
- `429`: Too many requests. Wait `Retry-After` seconds, then retry. `error` is one of: `too_many_auth_failures`, `rate_limited`, `too_many_concurrent_requests`.

---

[API](https://skmtc.dev/slashy/apis/slashy-enterprise-api.md) - [All operations](https://skmtc.dev/slashy/apis/slashy-enterprise-api/llms.txt) - [OpenAPI document](https://skmtc.dev/slashy/apis/slashy-enterprise-api/revisions/49841c75ad9f?raw)
