---
title: "Create image upload URL"
method: PUT
path: "/task/image-upload/{id}"
tags: ["Tasks"]
---

# Create image upload URL

`PUT /task/image-upload/{id}`

Get a presigned URL for uploading an image used in a task description or comment. PUT the bytes to it, then call the finalize route.

## Path parameters

- `id` string, required

## Request body

- object
  - `filename` string, required
  - `contentType` string, required
  - `size` number, required
  - `surface` 'description' | 'comment', required — Where the image is used, which decides how it is scoped.

## Response `200`

The presigned upload

- TaskImageUpload
  - `key` string, required — Object key to send back to the finalize route.
  - `uploadUrl` string, required — Presigned URL to PUT the image bytes to.
  - `headers` object, required — Headers that must accompany the upload request, including Content-Type.

## Other responses

- `400` — Unsupported content type, or the file is too large
- `401` — Missing or invalid credentials
- `403` — No workspace access, or missing task:update permission
- `404` — Task not found
- `503` — Image uploads are not configured on this instance

## Changes

- **2026-08-24** `08bbb5bedb5d` — 8 info
  - added the non-success response with the status `400`
  - added the non-success response with the status `401`
  - added the non-success response with the status `403`
  - added the non-success response with the status `404`
  - …4 more
- **2026-07-11** `32cece1ebe43` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/usekaneo/apis/kaneo-api/changes/task/image-upload/:id/put.md)

---

[API](https://skmtc.dev/usekaneo/apis/kaneo-api.md) · [All operations](https://skmtc.dev/usekaneo/apis/kaneo-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/usekaneo/kaneo-api/revisions/9d1da42c10ce/schema)
