---
title: "Request Data Export"
description: "Queues a complete export of your organization's content as JSON and CSV, delivered as a downloadable ZIP and announced by email."
---

`POST /api/organization/data-export`

Starts a full export of everything your organization holds in Uptimeify: customers,
monitors of every type, incidents and incident updates, maintenance windows,
notification channels, tags, status pages, reports and their run history, billing
records, team members, API token metadata, incident-management configuration and
history, and — unless you opt out — the raw check history behind your monitors.

The request returns immediately with `202 Accepted`. The bundle is built in the
background; when it is ready, an email with a download link goes to the
recipients, and the export appears as `ready` in
`GET /api/organization/data-export`.

## Request body

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `includeCheckHistory` | boolean | `true` | Include raw per-check rows. This is the bulk of the bundle; set `false` for a configuration-only export. |
| `recipientEmails` | string[] | administrators of the organization | Who receives the "export is ready" email. Every address must belong to a member of this organization. Max 20. |

## Example (cURL)

```bash
BASE_URL="https://uptimeify.io"
TOKEN="<your-api-token>"

curl -X POST "$BASE_URL/api/organization/data-export" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "includeCheckHistory": true
  }'
```

## Response

```json
{
  "id": "0f0f2f6a-2b3b-4a2f-9a7c-3e5f8c1d2b44",
  "status": "queued",
  "format": "json_csv",
  "includeCheckHistory": true,
  "recipientEmails": ["admin@youragency.com"],
  "sizeBytes": null,
  "retentionCutoff": null,
  "expiresAt": null,
  "downloadCount": 0,
  "lastDownloadedAt": null,
  "error": null,
  "manifest": null,
  "createdAt": "2026-07-30T09:12:44.101Z",
  "startedAt": null,
  "completedAt": null
}
```

## What the bundle contains

A ZIP with both formats plus an index:

- `manifest.json` — every section with its row count, the retention cutoff per package, and truncation flags
- `README.txt` — what is included, what is redacted, what is capped
- `json/<section>.json` — full-fidelity records
- `csv/<section>.csv` — the same records, flat and spreadsheet-ready

Two rules bound the contents:

- **Retention.** Time-series data (check history, alert deliveries, SMS log) reaches
  back as far as the data retention of the packages your customers are on. Older
  rows are not withheld — they no longer exist.
- **Credentials.** Passwords, webhook secrets, integration and ingest tokens, API
  token hashes and SMTP passwords are replaced with `[redacted]`. The surrounding
  record is exported in full.

Raw check history is capped per monitor type (100,000 newest rows by default). A
capped section is flagged in `manifest.json`; pull the remainder per monitor via
`GET /api/websites/{id}/check-history?format=csv` and the equivalent endpoints of
the other monitor types.

## Rate limits

- One export at a time per organization (`409 exportAlreadyRunning`).
- One request per organization every 6 hours (`429 exportCooldown`).
- A finished export stays downloadable for 7 days, then the file is deleted and the
  record flips to `expired`.

## Common errors

- `400 User must belong to an organization` when no organization can be derived from the session or token
- `400 Recipients must be members of this organization` (`data.code: invalidExportRecipient`) when `recipientEmails` contains an outside address
- `401 Unauthorized` when you are not authenticated
- `403 Forbidden` when your role cannot administer the organization
- `409 An export is already being generated` (`data.code: exportAlreadyRunning`)
- `429 An export was already requested within the last 6 hours` (`data.code: exportCooldown`)
