---
title: "Job Expires At"
method: GET
path: "/api/jobs/{job_id}/expires_at"
tags: ["Jobs and downloads"]
---

# Job Expires At

`GET /api/jobs/{job_id}/expires_at`

## Request

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

Return when this job's downloadable files will be cleaned up.

Round-3 hostile-review T1-32 — the frontend polls this once on
job-complete render so it can display a "Files available until
Tue 24 Jun 07:00 UTC (in 6 days)" badge next to the download
buttons.  Previously users only saw an opaque 404 when a
bookmarked link expired.

Response shape::

    {
      "job_id":              "abc-123",
      "expires_at":          "2026-06-24T07:00:00Z",  # null if disabled
      "expires_in_seconds":  518400,                  # null if disabled
      "retention_days":      7,                       # 0 = cleanup disabled
    }

## 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)
