---
title: "Stage a private token image candidate"
method: POST
path: "/v3/changes/uploads"
tags: ["Images"]
---

# Stage a private token image candidate

`POST /v3/changes/uploads`

## Request

- Base URL: `https://v3.euler.finance`
- URL: `https://v3.euler.finance/v3/changes/uploads`
- Auth: API key in header `X-API-Key`

Requires `token-images:propose` or an allowlisted Toolbox session. The normalized image is not served by `/v3/images` until a change is applied. Unclaimed stages expire after 24 hours; decided proposal stages are deleted on a best-effort basis after the decision commits.

## Request body `image/png`

- string, binary

## Response `201`

Upload ID and digest

- object

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `413`: Request body too large
- `415`: Unsupported media type
- `422`: Validation error
- `429`: Rate limited
- `503`: Service unavailable

## Changes

- **2026-10-05** `875b105fe12a`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/euler/apis/euler-data-api-v3/changes/v3/changes/uploads/post.md)

---

[API](https://skmtc.dev/euler/apis/euler-data-api-v3.md) - [All operations](https://skmtc.dev/euler/apis/euler-data-api-v3/llms.txt) - [OpenAPI document](https://skmtc.dev/euler/apis/euler-data-api-v3/revisions/e987d7695ec1?raw)
