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.
| Model | Tasks | Runs on | Per image | Per reference image | 1,000 images |
|---|---|---|---|---|---|
FLUX 3 Image Kleinflux-3-klein | Text to image, Image editing | Our GPUs | $0.01 | +$0.004 | $10.00 |
Z-Image Turboz-image-turbo | Text to image | Our GPUs | $0.006 | — | $6.00 |
Qwen Image 3.0qwen-image-3.0 | Text to image, Image editing | Publisher's API | $0.035 | +$0.004 | $35.00 |
Qwen Image 3.0 Proqwen-image-3.0-pro | Text to image, Image editing | Publisher's API | $0.045 | +$0.004 | $45.00 |
Seedream 5.0 Proseedream-5.0-pro | Text to image, Image editing | Publisher'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.
Read models from the API
Section titled “Read models from the API”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.
curl https://api.velvetapi.dev/v1/modelsPrice a request
Section titled “Price a request”POST /v1/quotes returns the exact price of a request without running it or needing a key:
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.