New: AI video tools. Cut, clip, caption and dub your videos. See all video tools →
Uploads

Upload a file

POST
/v1/uploads

Creates an upload link. PUT the file to upload_url with the same Content-Type within 2 hours, then pass file_id to another endpoint.

Authorization

bearer
headerAuthorizationBearer <API key>

An API key from Settings, starting vcp_live_.

Request Body

application/json
  1. body
content_type*string

The file format. Send the same Content-Type when you upload the file.

Value in"audio/wav""audio/x-wav""audio/wave""audio/vnd.wave""audio/flac""audio/x-flac""audio/ogg""audio/opus""audio/mpeg""image/jpeg""image/png""image/webp""video/mp4""video/quicktime""video/x-matroska""video/webm"
size*integer

The file size in bytes. Audio can be up to 209715200 bytes, a photo up to 20971520 bytes and a video up to 2147483648 bytes.

Range1 <= value <= 2147483648

Response Body

Created.

application/json
  1. response
file_id*string

Pass as audio_file_id, photo_file_id or video_file_id. The file is kept for 24 hours.

upload_url*string

PUT the file here.

Formaturi
expires_at*string

When upload_url stops working, 2 hours from now.

Formatdate-time
Example Request
curl -X POST 'https://api.vcp.name/v1/uploads' \  -H 'Content-Type: application/json' \  -d '{  "content_type": "video/mp4",  "size": 284023112}'
Example Response
{  "file_id": "8383fc02-625a-4b71-a226-cbb2d19aaf17",  "upload_url": "https://files.example.com/upload/8383fc02-625a-4b71-a226-cbb2d19aaf17?token=abc",  "expires_at": "2026-10-31T00:10:42Z"}