Skip to main content
Two separate limits apply: how many requests a key can send per minute, and how many generations you can run at once.

Request limits

Every response carries: Over the limit you get 429 rate_limited with a Retry-After header in seconds. Wait that long, then retry with the same Idempotency-Key. A long-poll (GET /v1/jobs/{id}?wait=25) is one request however long it waits, so it’s the cheapest way to wait for a job.

Concurrency

You can run as many generations at once as your plan’s parallel generations. The limit is per person, not per key or per workspace, and it’s shared with the Voyager app: jobs you start from the app, the dashboard, a connected AI and the API all count toward the same number. voyager.so/pricing has the current plans. GET /v1/account returns your limit as limits.concurrency.parallel_generations. Speech and 3D jobs also share a workspace-wide cap that counts every member’s jobs together, on top of your own limit: limits.concurrency.workspace.speech and limits.concurrency.workspace.3d. A job over either cap waits queued.

The queue

Creating a job while you’re at your limit doesn’t fail: the job is accepted as queued and starts when one of yours finishes.
  • You can have up to 100 active jobs (queued plus running) at once, counted per person across all your workspaces. Past that, create returns 429 queue_full and nothing is accepted; the Idempotency-Key stays reusable.
  • A job that waits more than 1 hour without starting is canceled with error.code queue_timeout. Nothing is charged.

Credits and your account

GET /v1/account shows the workspace, plan, credits available and your limits:
An example (values are illustrative):
plan: credits: limits: limits.requests_per_minute: limits.concurrency: limits.concurrency.workspace: limits.queue: Credits are shared across the workspace: the app, the dashboard, connected AIs and the API all draw from the same Voyager credits. Running jobs hold credits until they settle, so credits.available drops when a job starts. Prices are on voyager.so/pricing.

Usage per key

The API tab on voyager.so/dashboard/api shows credits used by each key over the last 30 days and when each key was last used. Every job created with a key is counted against that key, including its later settlement and any refunds. Workspace-wide usage, across the app and the API, is on the dashboard’s usage page.

Avoid hitting limits

  • Wait with ?wait=25 or webhooks, not tight polling loops. Honor poll_after_ms and Retry-After.
  • Read X-RateLimit-Remaining and slow down before you reach zero.
  • Batch work by creating jobs at a steady pace; extra jobs queue on their own.
  • Use separate keys per app so one busy integration doesn’t use up another’s request limit. They still share your parallel generations.