---
title: "Create a presigned upload URL for one project media object"
method: POST
path: "/api/upload-url"
tags: ["Videos"]
---

# Create a presigned upload URL for one project media object

`POST /api/upload-url`

## Request

- Base URL: `https://api.tutorializer.com`
- URL: `https://api.tutorializer.com/api/upload-url`
- Auth: one of:
  - HTTP basic
  - API key in header `Authorization`

Returns a one-hour presigned PUT for an object inside a project-owned prefix. New direct uploads use `projects/{projectId}/`; the stable shared-publisher layout uses `videos/{projectId}/`. The project must belong to the caller's organization. Requires the `videos:write` scope.

## Response `200`

The presigned URL and the key it writes to

## Other responses

- `400`: Missing or unsafe projectId, fileName or contentType
- `404`: Project not found (or owned by another organization)

---

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