Skip to main content
The model list changes as Voyager adds models, so read it from the API instead of hard-coding it. GET /v1/models lists what you can run; GET /v1/models/{id} tells you exactly what input a model takes.

List models

The list includes models above your plan, marked available: false, so you can see what an upgrade adds. available is null when it isn’t known yet; creating the job then decides. The response below is an illustrative example of the shape, not a real or complete list:
price is an expected charge in Voyager credits per unit, never a cap. Use POST /v1/estimate for your exact request; prices are on voyager.so/pricing.

Read a model

The response adds operation_details: for each operation, the JSON Schema of input, its defaults and a ready-to-send example, plus price detail. Again an illustrative example:
The example is illustrative: its values aren’t real limits. Model detail fields: Each entry in operation_details: Price detail:

Build a request

  • Pick an operation. Pass operation on create. It’s required when the model lists more than one in operations; only a single-operation model can leave it out. A missing or wrong one is 400 invalid_request with the model’s operations in details.operations. Your plan never changes which operation runs: if it doesn’t include the model, you get model_not_in_plan.
  • Start from example. Each operation’s example is a complete POST /v1/jobs body you can send as is.
  • Build input from that operation’s input_schema. Missing optional fields use its defaults. Validation is strict: an unknown field or a value the schema refuses is invalid_input, before anything is charged.
  • Cast works on image and video models whose input_schema has a cast field. See Cast.
A job pins the model version and schema it was accepted with, so a later model update doesn’t change a job already in flight.

Input fields

input uses Voyager’s own field names, the same on every model, whatever the model calls them. The table lists the shared fields. GET /v1/models/{id} serves each model’s full input schema in these names: the shared fields it supports, with its own values, plus any settings of its own. Image sizes are aspect_ratio values ("16:9", "4:3", "1:1" and so on); a model that takes an exact size also has an image_size object with width and height. Media fields take a file_… ID from uploads or an earlier output, or a public https URL, which Voyager imports into your workspace when the job is created. More fields and settings will be added over time.

Voices

Speech models take a voice as input.voice_id, from GET /v1/voices: Voyager’s premade voices, or your workspace’s voice clones. A voice works only with the models in its compatible_models. Speech on Voyager’s managed voices requires voice_id: those models’ input_schema marks it required, and a tts job without one is refused with 422 voice_required. Pick a voice whose compatible_models includes the model, and pass the words as input.text.
Your own voice clones (source=mine) are on the Ultra and GigaMax plans (voice_cloning_unavailable otherwise); clones are made in the Voyager app.