Get startedAPI referenceGoing to productionExplore models

API reference

Videos

Generate videos as asynchronous jobs. The selected model must advertise the videos endpoint; creation is a native passthrough, and status, download, and delete calls always reach the route that created the job.

Create a video

POST/v1/videos

Accepts JSON or multipart/form-data; SDK clients always send multipart. Each request may contain at most 16 files and 64 text fields.

modelstring · required

Public model ID from /v1/models.

promptstring · required

Text description of the video to generate.

secondsstring | number · optional

Requested clip length in seconds. Accepted values depend on the routed model; numbers and numeric strings are both forwarded.

sizestring · optional

Output resolution such as 1280x720. Accepted values depend on the routed model.

input_referencefile · optional

First-frame reference image sent as a multipart file, for models that support image-to-video.

remix_video_idstring · optional

Identifier of an existing video to remix, for models that support it.

All other JSON fields and form fields are forwarded to the provider unchanged.

Create a video
curl "$PICO_BASE_URL/v1/videos" \
  -H "Authorization: Bearer $PICO_API_KEY" \
  -F "model=pico-video-1" \
  -F "prompt=A timelapse of a city skyline at dusk" \
  -F "seconds=8" \
  -F "size=1280x720"
Create response
{
  "id": "video_abc123",
  "object": "video",
  "status": "queued",
  "model": "pico-video-1",
  "seconds": "8",
  "size": "1280x720",
  "progress": 0,
  "created_at": 1760227200
}

Poll job status

GET/v1/videos/{video_id}

Polls the job on the upstream route that created it; the recorded route means no model parameter is needed and there is no failover. A job owned by another account returns 404 video_not_found, and a route that is no longer available returns 503 video_route_unavailable.

Download the result

GET/v1/videos/{video_id}/content
variantstring · optional

video (default), thumbnail, or spritesheet. Any other value returns 400 invalid_variant.

Streams the finished media from the creating upstream. Only video/* and image/* content types are relayed; any other type downloads as application/octet-stream.

List your videos

GET/v1/videos

Query parameters

afterstring · optional

Cursor from a previous page. An ID outside your account returns 400 invalid_cursor.

limitinteger · optional

Jobs per page, 1–100; defaults to 20.

orderstring · optional

asc or desc (default desc). Any other value returns 400 invalid_order.

Returns your undeleted jobs in the OpenAI list envelope (data, first_id, last_id, has_more). Each item is the latest upstream snapshot; listing never contacts a provider.

Delete a video

DELETE/v1/videos/{video_id}

Deletes the job upstream and removes it from your listing. If the upstream already removed it, the job is still deleted and the response reports deleted: true.

Billing

Creation bills the route’s video output price per second when the job reports a duration such as seconds, otherwise per job. Polling, listing, downloading, and deleting are never billed.

Copied