Videoslash API
Creative Studio

Creative Studio API

Generate images and videos asynchronously through the public API.

Creative Studio API

Creative Studio lets you generate images and videos using your credit balance. Generations run asynchronously — start a job, then poll its status until it completes.

Authentication

All endpoints require an API key. Write endpoints require the creative:generate scope. Enable Allow Creative Studio generation when creating a key in your Account settings.

Model catalog endpoints require the read scope.

Workflow

  1. List models with GET /v1/creative-studio/models
  2. Start a generation with POST /v1/creative-studio/generations
  3. Poll GET /v1/creative-studio/generations/{id} until status is completed or failed
  4. When completed, use outputUrl — a CDN URL on cdn.videoslash.com

Media inputs

Hosted URLs

Pass reference images, videos, or audio as HTTPS URLs in the mediaUrls object. Keys must match the model's media parameter names (for example input_images, start_image, video_urls).

{
  "modelId": "nano-banana-2",
  "prompt": "A cinematic product photo on marble",
  "mediaUrls": {
    "input_images": ["https://example.com/reference.jpg"]
  },
  "parameters": {
    "aspect_ratio": "1:1"
  }
}

Local files

For local files, request a presigned upload URL, PUT the bytes directly to storage, then reference the returned uploadId in mediaUploads:

# 1. Request upload URL
curl -s -X POST "$API_BASE_URL/v1/creative-studio/media-uploads" \
  -H "Authorization: Bearer vsl_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "fileName": "reference.jpg",
    "contentType": "image/jpeg",
    "fileSizeBytes": 245678,
    "modelId": "nano-banana-2"
  }'

# 2. Upload bytes (use requiredHeaders from the response)
curl -s -X PUT "$UPLOAD_URL" \
  -H "Content-Type: image/jpeg" \
  -H "Content-Length: 245678" \
  --data-binary @reference.jpg

# 3. Start generation with uploadId
curl -s -X POST "$API_BASE_URL/v1/creative-studio/generations" \
  -H "Authorization: Bearer vsl_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "modelId": "nano-banana-2",
    "prompt": "A cinematic product photo on marble",
    "mediaUploads": {
      "image_input": ["UPLOAD_ID_FROM_STEP_1"]
    }
  }'

Uploaded files are stored temporarily until a generation references them. Permanent reference storage is only created after credits are verified for the generation request.

Model reference

Each model has its own parameter set. Browse the generated model pages in the sidebar for request examples and parameter tables.

Credits

Credits are checked before a generation starts. The actual charge happens when processing begins, matching dashboard behavior. Failed generations are refunded automatically.

On this page