---
title: "Mint a signed (private) URL"
method: POST
path: "/v1/images/{id}/sign-url"
tags: ["Images"]
---

# Mint a signed (private) URL

`POST /v1/images/{id}/sign-url`

## Request

- Base URL: `https://api.pixelvault.dev`
- URL: `https://api.pixelvault.dev/v1/images/{id}/sign-url`
- Auth: HTTP bearer

Return a time-limited signed URL for a private image. The signature binds the image (and project), so the URL can't be replayed against another image. Generates the project's signing secret on first use. Use a long expires_in (e.g. for a PR's lifetime) and re-sign on updates to avoid link rot.

## Path parameters

- `id` string, required

## Request body

- object
  - `expires_in` integer: Signature lifetime in seconds (60–2592000). Defaults to 3600 (1 hour).

## Response `200`

Signed URL

- object
  - `data` object
    - `url` string
    - `expires` integer: Unix timestamp (seconds) when the URL expires.

## Other responses

- `400`: Invalid expires_in
- `401`: Invalid or missing API key
- `404`: Image not found

---

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