---
title: "Get presigned URLs for bulk image upload"
method: POST
path: "/v1/listings/bulk/presign"
tags: ["Listings"]
---

# Get presigned URLs for bulk image upload

`POST /v1/listings/bulk/presign`

## Request

- Base URL: `https://api.shopfront.app`
- URL: `https://api.shopfront.app/v1/listings/bulk/presign`
- Auth: HTTP bearer

Get presigned S3 upload URLs for large batches (up to 1000 images).
Use this when you have more than 50 images — the URL input on
`POST /v1/listings/bulk` is limited to 50.

**Flow:**
1. Call this endpoint with `batchId` and `imageCount`
2. Upload images directly to S3 using the returned presigned URLs (parallel PUT requests)
3. Call `POST /v1/listings/bulk` with the returned `keys` as `imageS3Keys`

Presigned URLs expire after 10 minutes.

## Request body

- object
  - `batchId` string, uuid, required: Client-generated UUID for batch tracking
  - `imageCount` integer, required: Number of presigned URLs to generate
  - `offset` integer: Starting index for image keys (for chunked uploads)

## Response `200`

Presigned URLs generated

- object
  - `data` object
    - `imageUrls` string[]: Presigned PUT URLs for uploading images to S3
    - `keys` string[]: S3 keys to pass to `POST /v1/listings/bulk` as `imageS3Keys`

## Other responses

- `400`: Invalid request
- `401`: Unauthorized - missing or invalid token

---

[API](https://skmtc.dev/shopfront/apis/shopfront-public-api.md) - [All operations](https://skmtc.dev/shopfront/apis/shopfront-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/shopfront/apis/shopfront-public-api/revisions/4dbfb90550d4?raw)
