Before you start: you need a Voyager API key from a paid plan (trials count) in the
VOYAGER_API_KEY environment variable. See Authentication. The job is paid from your workspace’s Voyager credits; prices are on voyager.so/pricing.The three calls
- Create a job with
POST /v1/jobs. Send anIdempotency-Keyso a retry never buys twice. - Wait with
GET /v1/jobs/{id}?wait=25. The server holds the request for up to 25 seconds and answers as soon as the job finishes. Repeat while the status isqueuedorrunning. - Download
outputs[].url, a signed link that works for 1 hour without your key.
Check it worked
You have an image file next to your script, and the job printed itscredits. credits.charged is what the job cost. If credits.state is still pending, the final amount isn’t confirmed yet: credits.estimated is the estimate, and GET /v1/jobs/{id} will show the final charge later. See Credits.
If something went wrong
401 invalid_api_key
401 invalid_api_key
The key is missing, mistyped or revoked. Check
echo $VOYAGER_API_KEY starts with vy_live_, and that the key is still listed on voyager.so/dashboard/api.402 paid_plan_required or insufficient_credits
402 paid_plan_required or insufficient_credits
The workspace isn’t on a paid plan, or doesn’t have enough Voyager credits for this job. Open
error.details.upgrade_url. See Errors.400 invalid_input
400 invalid_input
The
input doesn’t match the model’s input_schema, or has a field the model doesn’t take. Read error.details, then check the schema with GET /v1/models/nano-banana-2.1. See Models.The job failed
The job failed
Read
job.error.code and look it up on Errors. A failed job releases its held credits unless its type’s settlement rule says otherwise.Next
Jobs and polling
Statuses, credits, cancel, uploads and idempotency.
Models
Find video, speech, music and 3D models and their inputs.