---
title: "Download all files as ZIP"
method: GET
path: "/api/jobs/{job_id}/download/all.zip"
tags: ["Jobs and downloads"]
---

# Download all files as ZIP

`GET /api/jobs/{job_id}/download/all.zip`

## Request

- Base URL: `https://epw.tools`
- URL: `https://epw.tools/api/jobs/{job_id}/download/all.zip`
- Auth: API key in header `X-API-Key`

Stream every file in this job as a single in-memory ZIP.

Review #39 -- users typically want EPW + DDY + STAT (and any
sidecar JSON / CSV diagnostics) in one click; the per-file route
forces three separate downloads.  This builds the archive
in-memory using ``zipfile`` rather than touching the filesystem,
which keeps the OWASP path-traversal surface zero (we only ever
iterate the job's own output directory).

## Path parameters

- `job_id` string, required

## Query parameters

- `key` string, nullable

## Headers

- `X-API-Key` string, nullable

## Response `200`

Successful Response

- unknown

## Other responses

- `402`: Insufficient credits for this operation.
- `422`: Validation Error
- `429`: Rate limit exceeded — retry after a short delay.

---

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