---
title: "Download Report PDF"
description: "Streams the archived PDF of a report run as the response body."
---

`GET /api/organization/report-runs/:id/pdf`

Streams the PDF archived for a report run directly in the response body. `:id` is the run's `id` (a UUID), as returned by [List Report Runs](/api/organization/reports/list-report-runs). The run must belong to your organization. Available to any organization role, including **read-only** users.

The bytes are read from object storage server-side and returned to you; the object itself is never exposed as a URL, so the session/token check on this request is the entire access control for the file.

Only runs with `format: "email_pdf"` that completed successfully archive a PDF. Check `hasPdf` on the run before calling this endpoint. `format: "email"` runs, and runs that failed or were skipped, have no PDF and return `404`.

## Example (cURL)

```bash
BASE_URL="https://uptimeify.io"
TOKEN="<your-api-token>"
RUN_ID="9a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d"

curl -X GET "$BASE_URL/api/organization/report-runs/$RUN_ID/pdf" \
  -H "Authorization: Bearer $TOKEN" \
  -o report.pdf
```

## Response

`200 OK` with the PDF bytes as the response body.

`Content-Type: application/pdf`, `Content-Disposition: attachment; filename="report-<period>.pdf"` (`<period>` is derived from the run's own period label, e.g. `report-08-2026.pdf`), `Cache-Control: private, max-age=300`, `X-Content-Type-Options: nosniff`.

## Common errors

- `401 Unauthorized`: not authenticated.
- `403 Forbidden` (`forbidden`): you do not have access to this organization.
- `404 Not Found` (`reportRunNotFound`): no run with this id exists for your organization.
- `404 Not Found` (`reportRunNoPdf`): the run has no archived PDF (it was an email-only report, or generation failed/was skipped).
- `404 Not Found` (`reportPdfNotFound`): the run record has a PDF path, but the object could not be read from object storage.
