---
title: "Start a PDF upload: returns a presigned PUT URL and the future PDF id"
method: POST
path: "/projects/{project_id}/notes/{note_id}/pdfs/upload-url"
tags: ["project-note-pdfs"]
---

# Start a PDF upload: returns a presigned PUT URL and the future PDF id

`POST /projects/{project_id}/notes/{note_id}/pdfs/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/projects/{project_id}/notes/{note_id}/pdfs/upload-url`
- Auth: HTTP bearer

## Path parameters

- `project_id` string, uuid, required
- `note_id` string, uuid, required

## Request body

- CreateNotePdfUploadDto
  - `content_type` 'application/pdf', required: MIME type the client will upload with
  - `file_size` number, required: File size in bytes

## Response `200`

- NoteImageUploadResponseDto
  - `image_id` string, required: Id the image will have once confirmed; use it in the complete call
  - `reference` string, required: Embed reference to write into the note body once the upload is confirmed
  - `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_pdf_unsupported_type | note_pdf_too_large
- `409`: note_pdf_limit_reached

---

[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)
