---
title: "Mint an image upload URL"
method: POST
path: "/uploads/image-url"
tags: ["Uploads"]
---

# Mint an image upload URL

`POST /uploads/image-url`

Returns a short-lived, single-use Convex storage upload URL for the API key owner. POST the image bytes to the returned URL to receive a storageId, then supply that storageId on a downstream write (e.g. a score-ingest screenshotStorageIds). The owner is always derived from the API key. Requires uploads.upload:read-write and the writes feature (api_pro).

## Response `200`

A freshly minted upload URL.

- ImageUploadUrlResponse — A freshly minted Convex storage upload URL. POST the image to it to receive a storageId for use on a downstream write.
  - `uploadUrl` string, required — Short-lived, single-use URL to POST the image bytes to.

## Other responses

- `401` — Missing or invalid API key.
- `403` — API key lacks the required permission.
- `429` — Rate limited.
- `500` — Internal server error.

---

[API](https://skmtc.net/teambattles/apis/teambattles-api.md) · [All operations](https://skmtc.net/teambattles/apis/teambattles-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/teambattles/teambattles-api/revisions/2ffe8fb53b7d/schema)
