---
title: "Step 1 of an upload: get a presigned PUT URL."
method: POST
path: "/v1/media/uploads"
tags: ["Media"]
---

# Step 1 of an upload: get a presigned PUT URL.

`POST /v1/media/uploads`

## Request

- Base URL: `https://api.ravenpo.st`
- URL: `https://api.ravenpo.st/v1/media/uploads`
- Auth: HTTP bearer

The client sends the bytes straight to object storage, so a large video never travels through the API — and never has to be base64-encoded into a request.

## Request body

- object
  - `filename` string, required: Original filename, used for a readable storage key.
  - `contentType` string, required: MIME type of the bytes you are about to PUT.

## Response `200`

Success

## Other responses

- `401`: Missing, malformed or revoked token
- `429`: Rate limited (60 requests/minute)

---

[API](https://skmtc.dev/ravenpo/apis/ravenpost-api.md) · [All operations](https://skmtc.dev/ravenpo/apis/ravenpost-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ravenpo/apis/ravenpost-api/revisions/82905d43e21d?raw)
