Videoslash API
Creative Studio

Request a presigned media upload URL

POST
/v1/creative-studio/media-uploads

Request a short-lived presigned URL for uploading a local image, video, or audio file directly to storage.

The client must PUT the file bytes to uploadUrl using the exact requiredHeaders before starting a generation with mediaUploads.

Requires an API key with the creative:generate scope. Credits are checked before a presigned URL is issued.

Authorization

bearerAuth
AuthorizationBearer <token>

API key authentication. Create a key in your Account settings.

Pass the full key in the Authorization header:

Authorization: Bearer vsl_...

Keys are shown only once at creation. Treat them like passwords.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/creative-studio/media-uploads" \  -H "Content-Type: application/json" \  -d '{    "fileName": "reference.jpg",    "contentType": "image/jpeg",    "fileSizeBytes": 245678,    "modelId": "nano-banana-2"  }'
{  "uploadId": "string",  "uploadUrl": "http://example.com",  "method": "PUT",  "requiredHeaders": {    "property1": "string",    "property2": "string"  },  "expiresAt": "2019-08-24T14:15:22Z"}
{  "error": {    "code": "missing_api_key",    "message": "string"  }}
{  "error": {    "code": "missing_api_key",    "message": "string"  }}
{  "error": {    "code": "missing_api_key",    "message": "string"  }}
{  "error": {    "code": "missing_api_key",    "message": "string"  }}
{  "error": {    "code": "missing_api_key",    "message": "string"  }}
{  "error": {    "code": "missing_api_key",    "message": "string"  }}