---
title: "Start a photo upload for note generation: returns a presigned PUT URL"
method: POST
path: "/note/generate/upload-url"
tags: ["note"]
---

# Start a photo upload for note generation: returns a presigned PUT URL

`POST /note/generate/upload-url`

## Request

- Base URL: `https://api.focusbear.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.focusbear.io/note/generate/upload-url`
- Auth: HTTP bearer

## Request body

- CreateNoteGenerationUploadDto
  - `content_type` 'image/png' | 'image/jpeg' | 'image/webp', required: MIME type of the photo the client will upload
  - `file_size` number, required: File size in bytes, up to 10 MB

## Response `200`

- NoteGenerationUploadResponseDto
  - `image_id` string, required: Id of the uploaded photo; pass it to POST /note/generate
  - `upload_url` string, required: Presigned URL to PUT the raw file bytes to
  - `upload_headers` object, required: Headers the PUT must send exactly (the signature covers them)
  - `upload_url_expires_at` string, required: When upload_url stops working (ISO 8601)

## Other responses

- `400`: note_generation_unsupported_type | note_generation_too_large

---

[API](https://skmtc.dev/focusbear/apis/focusbear-api.md) - [All operations](https://skmtc.dev/focusbear/apis/focusbear-api/llms.txt) - [OpenAPI document](https://skmtc.dev/focusbear/apis/focusbear-api/revisions/3a83a3b9a811?raw)
