---
title: "Download a page scan as a zip"
method: GET
path: "/scans/{id}/download"
tags: ["Page scans"]
---

# Download a page scan as a zip

`GET /scans/{id}/download`

## Request

- Base URL: `https://www.iminify.com/api/v1`
- URL: `https://www.iminify.com/api/v1/scans/{id}/download`
- Auth: HTTP bearer

One zip with the optimized copy of every image of the scan that has finished, in the order the scanner found them. Images still compressing are left out, so wait for `images_in_progress` to reach 0 first.

The zip is laid out like the page: each image sits in the folders of its address (`wp-content/uploads/hero.jpg`), and an image from another host under a folder named after that host. It keeps its file name while its format is unchanged; a converted one takes its new extension. `manifest.csv` at the root lists every image address the scan fetched with its file in the zip, status, formats and sizes, then the addresses it passed over (a duplicate names the file it shares) and how many images your plan's per-scan limit left out.

## Path parameters

- `id` string, uuid, required

## Response `200`

The zip.

## Other responses

- `401`: `unauthenticated`: No key was sent, or the key does not exist (it was mistyped or deleted). Send it as `Authorization: Bearer <key>`.
- `403`: `email_not_verified`: The key belongs to an account whose email address is not verified yet. Follow the link in the verification email, then call again with the same key. `account_banned`: The account behind the key has been banned. Its keys stop working with the ban.
- `404`: `not_found`: No image or scan with that id on your account, or no such address. An id from another account answers the same way as one that never existed.
- `409`: `image_not_finished`: The call needs an optimized copy (to download, rename or zip it, or to write its alt text) and the image has not finished. In a batch call, none of the images named had finished.
- `429`: `rate_limited`: One of your per-minute limits is spent: requests, compressions or page scans. The compressions and scans are counted together with the website's, so work queued there counts too. Nothing was done; wait for the number of seconds in the `Retry-After` header and send it again.

---

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