---
title: Models
url: https://base_url.placeholder/docs/api/models
group: Surfaces
---

# Models

The models the AI ops run on — what `model` may name on a job or a preset step, with each model's price, its categories and how big an image it is handed

1 endpoint under `/api/v1/ai-models`. What every call shares is on [the REST overview](https://base_url.placeholder/docs/api#conventions), and what they are for — with the calls for every SDK, the CLI and MCP — on [Ops & models → Models](https://base_url.placeholder/docs/ops#models). `*` marks a required field.

- GET /api/v1/ai-models — List AI models

## List AI models

GET /api/v1/ai-models

Every model an AI op can run on, across the providers behind this API. A model runs an op when its `categories` include the op's `modelCategory` (`GET /api/v1/ops`); naming any other model is `400 invalid_param`, with the models that fit in `details.allowed`. Leave `model` out and the op's `defaultModel` runs.

Each entry carries its price per image after markup (`image_price_range`) beside the provider's own list price (`provider_price`, `provider_price_range`), the parameters it takes, and `max_input_edge` / `max_input_images` — how big an input it is handed and how many images one call takes (what bounds a preset's reference images). The exact price of one request is the dry run.

USE THIS WHEN:

- Choosing a `model` for an AI op, or checking one before a submit
- Checking what a model costs, or how many reference images it takes

DO NOT USE WHEN:

- You want each op's default model and its price → `GET /api/v1/ops`, which carries them

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| mode | query | string | ai_image (the default): the models the image ops run · analyze: the models the analyze op sells, priced per image<br>one of ai_image · analyze |

### Returns `200` — `data` is `ModelDTO[]`

The models of that mode

### Errors

| Status | Code and when |
| --- | --- |
| 400 | `invalid_param` on `mode` — neither `ai_image` nor `analyze` |

## Objects

Each described once; a linked type is another object on this page.

### ModelDTO

A model an AI op can run on, with its price and what it accepts

| Field | Type | Description |
| --- | --- | --- |
| categories | string[] | What the model is sold for. It runs an op when this includes the op's `modelCategory` (GET /api/v1/ops)<br>e.g. ["image_generate","image_edit"] |
| completion_price | string | Price per 1M output tokens in USD<br>e.g. "15.00" |
| context_length | integer (int32) | Maximum context window supported by the model (tokens)<br>e.g. 128000 |
| created | integer (int64) | Unix timestamp when the model metadata was last updated<br>e.g. 1711500000 |
| description | string | Short description of the model's capabilities<br>e.g. "Large multimodal model with fast responses." |
| id | string | The model's id — what `model` names on a job or a preset step<br>e.g. "fal-ai/bria/background/remove" |
| image_price_range | string | Our price per image in USD — the provider's list price plus our markup — as one figure, or min - max across sizes, qualities or scale factors<br>e.g. "$0.009 - $0.133" |
| image_required | boolean | Whether an input image is required (true), optional (false), or not supported (null)<br>e.g. true |
| input_modalities | string[] | Input modalities supported by the model<br>e.g. ["text","image"] |
| max_input_edge | integer (int32) | The longest edge, in pixels, of an input image this model is handed: a larger input is turned upright, scaled down to it and re-encoded as WebP with no metadata before the provider sees it. For a model billed per megapixel it is also what the quoted price assumes. Absent for a model that takes no image.<br>e.g. 2048 |
| max_input_images | integer (int32) | Maximum number of input images accepted. null = no image input, 1 = single image, >1 = multi-image<br>e.g. 1 |
| mode | string | Model mode: ai_image, or analyze for the models the analyze op sells<br>e.g. "ai_image" |
| name | string | Human readable model name<br>e.g. "OpenAI GPT-4o" |
| output_modalities | string[] | Output modalities supported by the model<br>e.g. ["text","image"] |
| parameters | any | The parameters the model takes in a job's `parameters`: a list of `{key, label, type, defaultValue}`, with `options` or `min` / `max` where the value is bounded |
| prompt_price | string | Price per 1M input tokens in USD<br>e.g. "5.00" |
| provider_price | string | The provider's list price per image in USD, before our markup — the cheapest end when the price has a range. Every model carries one, so our multiple of it can be checked.<br>e.g. "0.039" |
| provider_price_range | string | The provider's list price range in USD across the same span as image_price_range. Present only for models whose provider price depends on a parameter.<br>e.g. "$0.12 - $0.48" |
| series | string | Provider family derived from the model id prefix<br>e.g. "Openai" |
| support_structured_output | boolean | Whether the model supports JSON schema structured output<br>e.g. true |
| supported_parameters | any | Supported optional parameters and their constraints (may be object or array) |
