---
title: "Download a job's file"
description: "A finished job's file (a contacts export's CSV) as a signed url that expires in 5 minutes. `GET /api/v1/jobs/{id}/download`"
url: https://www.unitpost.com/docs/platform/get-jobs-id-download
section: "Platform API reference"
updated: 2026-10-13
---
# Download a job's file

`GET /api/v1/jobs/{id}/download`

A finished job's file (a contacts export's CSV) as a signed `url` that expires in 5 minutes. A job that isn't `COMPLETED`, or a kind with no file, is a `409`. Needs the kind's capability now: the file holds that data. Requires the `contacts:read` capability.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes | — |

## Response fields (200)

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `object` | string | yes | — |
| `job_id` | string | yes | — |
| `url` | string | yes | A signed URL to the file; it expires in 5 minutes. |
| `filename` | string | yes | — |
| `expires_at` | string | yes | — |

## Responses

| Status | Description |
| --- | --- |
| 200 | Where to download it. |
| 401 | Missing or invalid API key. |
| 403 | Insufficient scope for this job's kind. |
| 404 | Job not found. |
| 409 | No file yet, or none for this kind. |
| 422 | A query key (this operation takes none). |
| 503 | Downloads aren't available in this environment. |

## Example request

```bash
curl -X GET 'https://www.unitpost.com/api/v1/jobs/job_123/download' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'User-Agent: my-app/1.0'
```

## Example response (200)

```json
{
  "object": "job_download",
  "job_id": "job_123",
  "url": "https://example.com",
  "filename": "string",
  "expires_at": "2026-01-01T00:00:00.000Z"
}
```

## Links

- HTML reference (with Node.js, Python, Ruby, PHP, Laravel, Go, Java, Rust, .NET and CLI examples): https://www.unitpost.com/docs/platform/get-jobs-id-download
- OpenAPI 3.1 (full schemas): https://www.unitpost.com/api/v1/openapi.json
