> ## Documentation Index
> Fetch the complete documentation index at: https://docs.blon.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Models

> Find a model, read its inputs and its price.

The model list and prices change, so this site does not copy them. Read them from the API, or browse each model's page at `https://blon.ai/models/<model_id>`.

## List models

```bash theme={null}
curl https://api.blon.ai/v1/models \
  -H "Authorization: Bearer $BLON_API_KEY"
```

Each entry in `data` is a model summary:

| Field | Meaning |
| - | - |
| `id` | The id you pass as `model` |
| `name` | Display name |
| `category` | Output and task, such as `image.edit` or `video.generate` |
| `availability` | `operational`, or `disabled` while the model is stopped |
| `output` | `type` (`image`, `video` or `audio`) and `content_type` |
| `pricing` | The current price, in your currency |
| `price_until` | When a limited-time price ends; `null` when it has no end |
| `docs_url` | A page about the model |

The list shows only models offered to the caller. A model that is not offered returns `404 model_not_found`, just like one that does not exist.

## Read a model's inputs

```bash theme={null}
curl https://api.blon.ai/v1/models/nano-banana-2-lite \
  -H "Authorization: Bearer $BLON_API_KEY"
```

The single model adds `inputs`. Each input has an `id` (the key in the job's `input`), `required`, a `schema` and an optional `default`.

| `schema.type` | Value in `input` | Extra schema fields |
| - | - | - |
| `text` | String | `enum`, `min_length`, `max_length` |
| `integer` | Whole number | `enum`, `min`, `max` |
| `number` | Number | `enum`, `min`, `max` |
| `boolean` | `true` or `false` | — |
| `media` | `{ "asset_id": "…" }` or `{ "url": "https://…" }` | `media_type` |
| `list` | Array of `items` values | `items`, `min_items`, `max_items` |
| `voice` | A voice selection, below | `preset_model_id`, `preset_ids`, `workspace` |

### Voice inputs

A voice value picks either one of the model's preset voices or a voice in your workspace:

```json theme={null}
{ "kind": "preset", "modelId": "<preset_model_id>", "presetId": "<one of preset_ids>" }
```

```json theme={null}
{ "kind": "workspace", "voiceId": "<voice id>" }
```

| Schema field | Meaning |
| - | - |
| `preset_model_id` | The `modelId` to send with a preset voice. Absent when the model has no preset voices |
| `preset_ids` | The preset voices you can choose |
| `workspace` | Whether a workspace voice is allowed |

The voice value keeps `camelCase` keys.

## Pricing

```json theme={null}
{
  "currency": "USD",
  "components": [
    { "meter": "output_images", "rate": "0.04" }
  ]
}
```

`pricing.components` lists separate meters, such as `output_images` or `output_seconds`, each with a `rate` per unit. A component can also have:

* `applies_when`: conditions on the inputs (`input`, `op`, `value`) under which the component applies.
* `tiers`: other rates that apply when their `when` conditions match; `rate` is used otherwise.

To get the amount for a specific request, use [the estimate endpoint](https://docs.blon.ai/concepts/billing.md#estimate). A finished job lists the units it used in `usage`, with the same meter names.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.