PineRouterDocs
GuidesModelsAPI referenceApps

Veo 3.1

Video model, from $0.188 per job.

Videoveo-3-1

Use with POST /v1/jobs, POST /v1/videos.

Price

SettingsPrice
720p, lite, reference to video$0.188 per job
720p, lite, text to video$0.188 per job
720p, image to video, lite$0.188 per job
1080p, lite, reference to video$0.219 per job
1080p, lite, text to video$0.219 per job
1080p, image to video, lite$0.219 per job
720p, fast, text to video$0.375 per job
720p, fast, image to video$0.375 per job
720p, fast, reference to video$0.375 per job
1080p, fast, reference to video$0.406 per job
1080p, fast, text to video$0.406 per job
1080p, fast, image to video$0.406 per job
4k, lite, reference to video$0.938 per job
4k, lite, text to video$0.938 per job
4k, image to video, lite$0.938 per job
4k, fast, reference to video$1.13 per job
4k, fast, text to video$1.13 per job
4k, fast, image to video$1.13 per job
720p, quality, text to video$1.56 per job
720p, image to video, quality$1.56 per job
1080p, quality, text to video$1.59 per job
1080p, image to video, quality$1.59 per job
4k, quality, text to video$2.31 per job
4k, image to video, quality$2.31 per job

Input fields

FieldType or optionsDefault
promptstring
modelveo3_fast veo3_lite veo3"veo3_fast"
image_urlslist
generation_typeTEXT_2_VIDEO FIRST_AND_LAST_FRAMES_2_VIDEO REFERENCE_2_VIDEO
aspect_ratio16:9 9:16 Auto"16:9"
enable_fallbackbooleanfalse
enable_translationboolean
watermarkstring
resolution720p 1080p 4k"720p"
duration4 6 88

Files are public https links. Safety filters are always on.

Example

curl https://pinerouter.ai/v1/jobs \
  -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"veo-3-1","input":{"model":"veo3_fast","aspect_ratio":"16:9","enable_fallback":false,"resolution":"720p","duration":8,"prompt":"Describe what you want"}}'

Then poll GET /v1/jobs/<id> until data.status is succeeded (links in data.outputs), or pass webhook_url to be called when it finishes; see Jobs.

import time, requests

BASE, H = "https://pinerouter.ai", {"Authorization": "Bearer YOUR_API_KEY"}
job = requests.post(f"{BASE}/v1/jobs", headers=H, json={"model":"veo-3-1","input":{"model":"veo3_fast","aspect_ratio":"16:9","enable_fallback":False,"resolution":"720p","duration":8,"prompt":"Describe what you want"}}).json()["data"]
while job["status"] not in ("succeeded", "failed"):
    time.sleep(5)
    job = requests.get(f"{BASE}/v1/jobs/{job['id']}", headers=H).json()["data"]
print(job["outputs"] or job.get("error"))