Start Free
VideoUnlimited$0 per request

PicassoIA Video

Turns a prompt or a starting image into a video with its audio track: up to 20 seconds at 480p, 10 at 720p and 5 at 1080p. The prompt can be enhanced automatically for a better video.

Try the modelView docs
curl -s -X POST https://api.picassoia.com/v1/models/picassoia/picassoia-video/predictions \  -H "Authorization: Bearer $PICASSOIA_API_KEY" \  -H "Content-Type: application/json" \  -d '{"input":{"prompt":"waves crashing on a rocky shore at night, cinematic"}}'

How to call it

One run takes three requests: create the prediction, poll it until it finishes and read the result. The code and the answers below are for this model and the mode you chose.

Before you start

Create an API key and keep it on your server in the PICASSOIA_API_KEY environment variable. Every request sends it in the Authorization header.

Get your API key
  1. Create the prediction

    Send the input in a POST. The API answers 201 at once, without waiting for the result: the prediction is in the starting state, with an estimate in eta and the address to poll in urls.get.

    Request
    curl -s -X POST https://api.picassoia.com/v1/models/picassoia/picassoia-video/predictions \
      -H "Authorization: Bearer $PICASSOIA_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"input":{"prompt":"waves crashing on a rocky shore at night, cinematic"}}'
    Response · 201 Createdstarting
    {
      "id": "api_3f9c2b7e8d1a4c6f9e0b1a2c3d4e5f60",
      "model": "picassoia/picassoia-video",
      "input": {
        "prompt": "waves crashing on a rocky shore at night, cinematic",
        "resolution": "480p",
        "duration": 5,
        "aspect_ratio": "16:9",
        "save_audio": true,
        "enhance_prompt": true
      },
      "output": null,
      "error": null,
      "status": "starting",
      "created_at": "2026-10-01T09:30:00.000Z",
      "started_at": null,
      "completed_at": null,
      "metrics": {
        "predict_time": null
      },
      "urls": {
        "get": "https://api.picassoia.com/v1/predictions/api_3f9c2b7e8d1a4c6f9e0b1a2c3d4e5f60",
        "cancel": "https://api.picassoia.com/v1/predictions/api_3f9c2b7e8d1a4c6f9e0b1a2c3d4e5f60/cancel"
      },
      "eta": {
        "seconds": 60,
        "next_poll_in_seconds": 30
      }
    }
  2. Poll it until it finishes

    Ask urls.get again after eta.next_poll_in_seconds: at half the estimate, when the estimate is reached, then every 2 seconds. Polling faster gets you nothing sooner.

    Statuses:startingprocessingsucceeded·failed·canceled

    Request
    # Repeat after eta.next_poll_in_seconds until status is
    # succeeded, failed or canceled.
    curl -s https://api.picassoia.com/v1/predictions/api_3f9c2b7e8d1a4c6f9e0b1a2c3d4e5f60 \
      -H "Authorization: Bearer $PICASSOIA_API_KEY"
    Response · 200 OK · in progressprocessing
    {
      "id": "api_3f9c2b7e8d1a4c6f9e0b1a2c3d4e5f60",
      "status": "processing",
      "output": null,
      "eta": {
        "seconds": 30,
        "next_poll_in_seconds": 30
      }
    }

    Only the fields that change are shown; the rest are as in step 1.

  3. Read the result

    When status is succeeded, output is the URL of the MP4. Download the files you want to keep.

    If status is failed, error says why; canceled means it was canceled before it finished. These three statuses are final: the prediction never changes again.

    Request
    # The last poll holds the result: "output" when "status" is succeeded,
    # "error" when it is failed. With jq, just those three fields:
    curl -s https://api.picassoia.com/v1/predictions/api_3f9c2b7e8d1a4c6f9e0b1a2c3d4e5f60 \
      -H "Authorization: Bearer $PICASSOIA_API_KEY" | jq '.status, .output, .error'
    Response · 200 OK · finishedsucceeded
    {
      "id": "api_3f9c2b7e8d1a4c6f9e0b1a2c3d4e5f60",
      "status": "succeeded",
      "output": "https://…/output.mp4",
      "error": null,
      "completed_at": "2026-10-01T09:30:54.000Z",
      "metrics": {
        "predict_time": 52.8
      },
      "eta": null
    }

    Only the fields that change are shown; the rest are as in step 1.

The ids, times and URLs in these answers are examples: yours come in each answer.

This model in the API

Create a prediction with a POST, then poll it until it finishes. These are the model's inputs:

Endpoint

POST https://api.picassoia.com/v1/models/picassoia/picassoia-video/predictions

picassoia/picassoia-video

FieldTypeDefaultNotes
promptstring, 1–4000 charactersrequiredWhat happens in the video.
imageimage (https or data URL)—Opening frame (image to video).
resolution480p, 720p, 1080p480p
durationinteger, seconds51–20 at 480p, up to 10 at 720p, up to 5 at 1080p.
aspect_ratiomatch_input_image, 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3match_input_image with an image, 16:9 without
save_audiobooleantrueKeep the generated audio track.
seedintegerrandom
enhance_promptbooleantruePicassoIA rewrites the prompt for a better video before generating it. Your own prompt stays in input.

Output: one MP4 URL (a string).

Open the full API reference

Compare with other providers

See how our prices compare with what other providers charge for the model of the same name.

ModelPicasso IAOther providers
PicassoIA Video · Text to Video · Image to VideoUnlimited$0 per requestfrom $0.06/s

Comparison based on other providers' public prices as of October 1, 2026. On Picasso IA, API predictions are free with the Infinite plan, with up to 5 in progress at once.