---
title: "Upload a photo, video or file"
method: POST
path: "/api/v1/files"
tags: ["Save and read"]
---

# Upload a photo, video or file

`POST /api/v1/files`

## Request

- Base URL: `https://savehq.app`
- URL: `https://savehq.app/api/v1/files`
- Auth: HTTP bearer

As a new save, or attached to an existing one (itemId). With itemId and cover: true, a photo or video becomes the picture on that save's tile (nothing is deleted; a file that was in front stays behind it). fileUrl: a public https link, up to 25 MB. data: base64, up to 3 MB. Counts against the person's storage.

## Request body

- object
  - `fileUrl` string
  - `data` string: base64
  - `filename` string
  - `mimeType` string
  - `itemId` string
  - `cover` boolean: With itemId: make this photo or video the save's tile picture.
  - `caption` string
  - `categoryId` string
  - `private` boolean

## Response `201`

Stored: save_id, file_id, kind, size_bytes, new_save, title, title_is_automatic, remaining_bytes, and cover.previous_file_id when cover was set. With no caption the title is "Photo: IMG_4823" (kind and file name), renamed to what the file shows once SaveHQ has read it.

## Other responses

- `400`: Something to fix in the request
- `401`: Missing, expired or revoked API key or token
- `404`: No such save on this board
- `429`: Over 60 requests a minute for this person; retry after 60 seconds

---

[API](https://skmtc.dev/savehq/apis/savehq-api.md) · [All operations](https://skmtc.dev/savehq/apis/savehq-api/llms.txt) · [OpenAPI document](https://skmtc.dev/savehq/apis/savehq-api/revisions/14aa80bad77d?raw)
