Skip to content

Models

Every model is called the same way: POST /v1/tasks with the model’s id and an input object that matches its schema. Each model’s page lists its inputs, limits and defaults, with an example request.

ModelTasksRuns onPer imagePer reference image1,000 images
FLUX 3 Image Klein
flux-3-klein
Text to image, Image editingOur GPUs$0.01+$0.004$10.00
Z-Image Turbo
z-image-turbo
Text to imageOur GPUs$0.006—$6.00
Qwen Image 3.0
qwen-image-3.0
Text to image, Image editingPublisher's API$0.035+$0.004$35.00
Qwen Image 3.0 Pro
qwen-image-3.0-pro
Text to image, Image editingPublisher's API$0.045+$0.004$45.00
Seedream 5.0 Pro
seedream-5.0-pro
Text to image, Image editingPublisher's API$0.05+$0.004$50.00

Prices are per output image. Edits also pay the per-reference-image price for each reference image, for every image they produce.

Models that run on our GPUs are uncensored, and every image they make passes our output safety check. Models on a publisher’s API are resold: they keep the publisher’s moderation, which refuses adult content. Both kinds take the same requests and are billed the same way.

GET /v1/models lists every model with its pricing and its input_schema (a JSON Schema), and GET /v1/models/{id} returns one. Neither needs an API key.

Terminal window
curl https://api.velvetapi.dev/v1/models

POST /v1/quotes returns the exact price of a request without running it or needing a key:

Terminal window
curl https://api.velvetapi.dev/v1/quotes \
-H "Content-Type: application/json" \
-d '{"model": "flux-3-klein", "input": {"prompt": "...", "num_images": 2}}'
{
"model": "flux-3-klein",
"price_usd": 0.02
}

Invalid input gets the same 400 invalid_input error that creating the task would.