---
title: "Create an upload link for a person to use"
method: POST
path: "/v1/uploads/links"
tags: ["uploads"]
---

# Create an upload link for a person to use

`POST /v1/uploads/links`

## Request

- Base URL: `https://api.framelane.io`
- URL: `https://api.framelane.io/v1/uploads/links`
- Auth: HTTP bearer

Returns a URL valid for **one hour**. Anyone who opens it in a browser can upload one video, audio, image or font file into this workspace; the page reads the file's type and duration itself, so nothing has to be declared up front. Poll `GET /v1/uploads/links/{id}` to learn which asset the upload produced.

Use this when you cannot PUT to storage yourself (a sandbox that blocks outbound hosts) and the host you run in cannot show an interactive upload panel, but a person is present. Never paste a raw `upload_url` into a chat instead: it is a live storage credential, and this page is what it would have to become anyway.

## Response `201`

Successful Response

- UploadLinkOut: Response from POST /v1/uploads/links: a page a person can upload through.
  - `id` string, required: The link id; poll `GET /v1/uploads/links/{id}` for the asset it produces.
  - `url` string, required: Open this in a browser to upload one file into the workspace. Valid for one hour; the file's type and duration are taken from the file itself.
  - `expires_at` string, date-time, required: When the link stops accepting uploads.

## Other responses

- `401`: Missing or invalid API key.

---

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