---
title: "Download Data Export"
description: "Issues a short-lived download URL for a finished organization data export."
---

`GET /api/organization/data-export/{exportId}/download`

Returns a presigned URL for the export ZIP. The URL is valid for 5 minutes; the
object key itself is never exposed and the storage bucket is not browsable, so
knowing an export id is not access — an authenticated administrator of the owning
organization is.

## Query parameters

| Parameter | Type | Description |
| --- | --- | --- |
| `redirect` | `1` | Respond with `302` to the presigned URL instead of returning JSON. Convenient for `curl -L` and browser links. |

## Example (cURL)

```bash
BASE_URL="https://uptimeify.io"
TOKEN="<your-api-token>"
EXPORT_ID="0f0f2f6a-2b3b-4a2f-9a7c-3e5f8c1d2b44"

# Straight to the file
curl -L -o export.zip \
  "$BASE_URL/api/organization/data-export/$EXPORT_ID/download?redirect=1" \
  -H "Authorization: Bearer $TOKEN"
```

## Response

```json
{
  "url": "https://<bucket>.<region>.your-objectstorage.com/data-exports/org-12/0f0f2f6a-...zip?X-Amz-Signature=...",
  "expiresInSeconds": 300,
  "sizeBytes": 18446721,
  "filename": "uptimeify-export-0f0f2f6a-2b3b-4a2f-9a7c-3e5f8c1d2b44.zip"
}
```

Each call increments `downloadCount` and updates `lastDownloadedAt` on the export
record.

## Common errors

- `400 User must belong to an organization` when no organization can be derived from the session or token
- `401 Unauthorized` when you are not authenticated
- `403 Forbidden` when your role cannot administer the organization
- `404 Export not found` when the id does not belong to your organization
- `409 Export is not downloadable` (`data.code: exportNotReady`) while the export is queued, generating or failed
- `410 Export download window has expired` (`data.code: exportExpired`) after the 7-day window
