---
title: "Start Download Endpoint"
method: POST
path: "/startDownload"
---

# Start Download Endpoint

`POST /startDownload`

## Request

- Base URL: `https://api.pavoot.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.pavoot.com/startDownload`
- Auth: none declared

Like /generateDownloadUrl, but a multi-image ORIGINAL download is queued to the shared-zip
Lambda and returned as {status: "queued", parts: [{jobId, filename, ...}]} for the client to
poll at /downloadJobStatus/{jobId}. See auxiliary/app_download_jobs.py for why.

Single images and reduced sizes still answer inline with {downloadUrl, filename, isZip}: a
single image is only a presigned URL, and the worker only packages originals. Same inline
answer when the queue is not configured (local dev).

A new endpoint rather than a new response shape on /generateDownloadUrl, so a browser still
running the previous frontend bundle keeps getting the {downloadUrl} it understands.

## Request body

- ZipDownloadRequest
  - `imageIds` string[], required
  - `projectId` integer, required
  - `size` string, nullable

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

## Changes

- **2026-10-06** `f550df02fad3`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/pavoot/apis/pavoot-api/changes/startDownload/post.md)

---

[API](https://skmtc.dev/pavoot/apis/pavoot-api.md) - [All operations](https://skmtc.dev/pavoot/apis/pavoot-api/llms.txt) - [OpenAPI document](https://skmtc.dev/pavoot/apis/pavoot-api/revisions/8c0cd91c2a05?raw)
