---
title: "Start Media Upload"
method: POST
path: "/api/upload/media/start"
tags: ["upload", "upload"]
---

# Start Media Upload

`POST /api/upload/media/start`

Open a RESUMABLE upload for a coursework video or audio file.

`{content_type, size, filename?, org_id?}` -> `{mode: "resumable",
session_url, object_path, chunk_bytes, ...}`. The browser sends the file to
`session_url` in `chunk_bytes` pieces, asks the session how much landed
whenever a piece fails, and carries on from there; then it calls
`/upload/video/complete` with `object_path`, exactly as the single-PUT rail
does. Nothing passes through the pod.

Same gates as `/upload/video/sign`: a media type we take, a size within
the cap, a caller who belongs to a school (to the named one, if named).
The session is minted for an object under THIS caller's prefix, so
`/complete` refuses to record it for anybody else.

## Headers

- `authorization` string, nullable

## Request body

- object

## Response `200`

Successful Response

- unknown

## Other responses

- `422` — Validation Error

## Changes

> 31 revisions in range; 1 not diffed.

- **2026-10-02** `fb80bff64fd3` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/fluentea/apis/aurqa-language-learning-platform-refactored/changes/api/upload/media/start/post.md)

---

[API](https://skmtc.dev/fluentea/apis/aurqa-language-learning-platform-refactored.md) · [All operations](https://skmtc.dev/fluentea/apis/aurqa-language-learning-platform-refactored/llms.txt) · [OpenAPI document](https://skmtc.dev/fluentea/apis/aurqa-language-learning-platform-refactored/revisions/1081e55cf1b9?raw)
