---
title: "Ask for a version's zip."
method: POST
path: "/pitch-decks/{jobId}/versions/{number}/zip"
tags: ["Pitch Deck"]
---

# Ask for a version's zip.

`POST /pitch-decks/{jobId}/versions/{number}/zip`

## Request

- Base URL: `https://docs.sleeperhit.studio/api/v1`
- URL: `https://docs.sleeperhit.studio/api/v1/pitch-decks/{jobId}/versions/{number}/zip`
- Auth: HTTP bearer

Asks for a zip of the version's folder: its manifest.json and every clip, stored as they are (never re-encoded). Made once, off the request path, and then kept: a ready zip answers its signed `zip.url` (valid for an hour); otherwise the zip is queued (`queued: true`, `zip.status: queued`) — read the version again (`GET /pitch-decks/{jobId}/versions/{number}`) until `zip.status` is `ready`. Free. Requires `Idempotency-Key`. Scope: `story:write`.

## Headers

- `Idempotency-Key` string, required

## Response `200`

The zip, or that it is being made.

- VideoVersionZipAck
  - `jobId` string, required
  - `number` integer, required
  - `zip` VideoVersionZip, required: A version's zip: its manifest.json and every clip of its folder, stored as they are. Made on request, then kept.
    - `status` 'none' | 'queued' | 'building' | 'ready' | 'failed', required: `none` until asked for; `queued` / `building` while it is made; `ready`; `failed` (ask again).
    - `bytes` integer, nullable, required
    - `builtAt` string, date-time, nullable, required
    - `error` string, nullable, required: Why it could not be made (`failed` only).
    - `url` string, nullable, required: A signed download link while `ready` (it expires: read again for a fresh one).
    - `expiresAt` string, date-time, nullable, required
  - `queued` boolean, required: True when this call asked for the zip to be made.
  - `note` string, required

## Other responses

- `400`: Request payload failed validation. The error message names the offending field.
- `401`: Missing, malformed, revoked, or expired API key.
- `403`: API key is valid but lacks the scope, is blocked by IP allowlist, or the account is disabled.
- `404`: The named project or source does not exist or is owned by another account.
- `429`: Rate limit for this API key + IP + route family was exceeded.
- `500`: The API failed unexpectedly. Safe to retry with the same Idempotency-Key.

---

[API](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api.md) · [All operations](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api/revisions/86e084144cef?raw)
