---
title: "List data_exports"
method: GET
path: "/data-exports"
tags: ["data-exports"]
---

# List data_exports

`GET /data-exports`

## Request

- Base URL: `https://api.cogram.com/v1`
- URL: `https://api.cogram.com/v1/data-exports`
- Auth: HTTP bearer

List every data_export for the org, newest first.

Paginated per the external-API contract ``{data, total, page,
page_size}``. Defaults: page=1, page_size=50, max page_size=100.

Includes terminal rows (``completed``, ``failed``, ``cancelled``,
``expired``) — they're the audit trail. ``parts`` (with signed URLs)
is populated only on rows in ``completed`` status; signed URLs
expire one hour after generation and are regenerated on every read.

## Query parameters

- `page` integer: Page number (1-indexed).
- `page_size` integer

## Response `200`

Successful Response

- DataExportListV1: Paginated data export list response — matches the standard ``{data, total, page, page_size}`` envelope used across the external API.
  - `data` DataExportResponse[], required: Newest first.
    - `id` string, required
    - `organization_id` string, required
    - `source` 'ui' | 'api', required
    - `requester_user_id` string, nullable, required: `ui` source only.
    - `requester_api_key_id` string, nullable, required: `api` source only.
    - `requester_api_key_name` string, nullable, required: `api` source only. Prefer this over parsing `requester_display`.
    - `requester_forwarded_user` string, nullable, required: `X-Forwarded-User` header value at create time.
    - `requester_display` string, required: Human-readable attribution: the user's name (their email if the name is empty), `API key '<name>'`, or `<forwarded_user> (via API key '<name>')`. Degrades to `<forwarded_user> (via deleted API key)` or `unknown` when the linked user or key row was deleted after the export was created.
    - `project_ids` string[], required: Scope as requested — empty for org-wide exports. Retains ids of projects deleted after the export was created, so `projects` may be shorter.
    - `projects` DataExportProjectRef[]: Scope projects that still exist, in `project_ids` order.
      - `id` string, required
      - `name` string, required
      - `customer_project_id` string, nullable, required: Customer's own project label. Not unique — use `id` for identity.
    - `project_id` string, nullable, required: Set only for single-project exports; null otherwise.
    - `project_name` string, nullable: Set only when `project_id` is set.
    - `project_customer_id` string, nullable: Customer's own project label. Not unique — use `project_id` for identity.
    - `time_filter` union, required: Discriminated-union wrapper so the JSONB column can use ``PydanticJsonbType``. Stored shape mirrors ``root`` directly (``RootModel`` serializes without a wrapping field), e.g. ``{"mode": "range", "start": ..., "end": ...}``.
      - TimeRangeFilter: Closed time range. Both bounds timezone-aware; ``end`` must be >= ``start``.
        - `mode` 'range'
        - `start` string, date-time, required: Inclusive. Must be timezone-aware.
        - `end` string, date-time, required: Inclusive. Must be timezone-aware.
      - AllTimeFilter: All available data, no time bound. Only valid for project-scoped data_exports (one or more ``project_ids``).
        - `mode` 'all_time'
    - `document_formats` string[], required: Echo of the request. Typed loosely so a row written by a newer deployment, carrying a format this one does not know, still serializes instead of failing the whole listing.
    - `status` 'pending' | 'running' | 'cancelling' | 'cancelled' | 'completed' | 'failed' | 'expired', required
    - `error` string, nullable, required: Set when `status` is `failed`.
    - `requested_at` string, date-time, required
    - `started_at` string, date-time, nullable, required
    - `completed_at` string, date-time, nullable, required: Also set on failure and cancellation.
    - `expires_at` string, date-time, nullable, required: Parts are deleted at this time, 7 days after completion.
    - `parts` DataExportPartResponse[]: Zip parts with signed URLs. Empty until `status` is `completed`.
      - `id` string, required
      - `part_index` integer, required: Zero-indexed.
      - `size_bytes` integer, required: Compressed size.
      - `signed_url` string, required: Pre-signed, valid 1 hour. Re-fetch on each read, never cache.
  - `total` integer, required: Total matches across all pages, not just this page.
  - `page` integer, required
  - `page_size` integer, required

## Other responses

- `401`: Unauthorized
- `422`: Validation error
- `429`: Rate limit exceeded
- `500`: Internal server error

---

[API](https://skmtc.dev/cogram/apis/cogram-api.md) · [All operations](https://skmtc.dev/cogram/apis/cogram-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cogram/apis/cogram-api/revisions/5a3c9c40fca5?raw)
