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

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

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

## Path parameters

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

## Request body

- CreateNoteAudioUploadDto
  - `content_type` 'audio/mp4' | 'audio/mpeg' | 'audio/webm' | 'audio/ogg' | 'audio/wav' | 'audio/x-m4a' | 'audio/m4a' | 'audio/x-wav' | 'audio/wave' | 'audio/vnd.wave', 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_audio_unsupported_type | note_audio_too_large
- `409`: note_audio_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)
