---
title: Model catalog
description: GET /v1/models — Clipia image, video and audio models with exact slugs, input schema and pricing, including slugs that contain a slash.
icon: Boxes
---

The catalog returns the exact slugs, capabilities, input parameters and base prices of the models available to your API key. It changes without a new SDK release, so the source of truth is the live `GET /v1/models` response, not the tables on this page.

<Cards>
  <Card title="Seedance 2.5 API" href="/en/docs/api-reference/models/seedance-2-5">
    Exact T2V/I2V slugs, parameters, and live-catalog availability checks.
  </Card>
  <Card title="Submit a generation" href="/en/docs/api-reference/submit">
    The universal POST request for every active model.
  </Card>
  <Card title="Estimate cost" href="/en/docs/api-reference/estimate">
    Get the exact price for a model and input before submitting it.
  </Card>
</Cards>

## Live catalog

<Callout type="info" title="Use a test key here">
Paste a `clipia_test_…` key into the form below: it charges no credits and calls no models, and the response has the same shape. The form keeps the key in this browser, so never enter a live `clipia_live_…` key here: it is a server-side secret. See [Sandbox](/en/docs/getting-started/sandbox).
</Callout>

<ApiPlayground path="/v1/models" method="get" />

<Method name="GET" path="/v1/models" />

| Query parameter | Default | What it does |
| --- | --- | --- |
| `limit` | `100` | how many generation models to return |
| `offset` | `0` | how many generation models to skip |

<Tabs items={['cURL', 'TypeScript', 'Python']}>
<Tab value="cURL">

```bash
curl https://api.clipia.ai/v1/models \
  -H "Authorization: Bearer $CLIPIA_KEY"
```

</Tab>
<Tab value="TypeScript">

```ts
const { data } = await clipia.models.list();

// The list also includes LLM models without a slug — keep generation models only
const media = data.filter((model) => "slug" in model && model.slug);
console.log(media.map(({ slug, type }) => ({ slug, type })));
```

</Tab>
<Tab value="Python">

```python
catalog = clipia.models.list()

# The list also includes LLM models without a slug — keep generation models only
media = [m for m in catalog["data"] if m.get("slug")]
print([(m["slug"], m["type"]) for m in media])
```

</Tab>
</Tabs>

Every generation model in the response has `slug`, `type`, `name`, `capabilities` and `pricing`. The set can differ between environments and change faster than these docs. `limit` and `offset` apply to generation models only: LLM models are always included in the response.

<Callout type="info" title="LLM models in the same list">
[AI Gateway](/en/docs/llm-gateway) is enabled, so the response uses the OpenAI list format (`object: "list"`) and LLM models come first in `data`: they have an `id` but no `slug`. Generation models follow and, in addition to `slug`, carry `id`, `object`, `created` and `owned_by`. Filter items by the presence of `slug`, as in the examples above. `GET /v1/models/{id}` for an LLM model returns the same kind of entry as the list. For LLM models, see [LLM models and pricing](/en/docs/llm-gateway/models).
</Callout>

<Callout type="info" title="Pricing">
Prices are current as of November 2026. The exact cost is always shown on the run button before anything is charged. Through the API, the price of a specific job comes from [`POST /v1/models/{model}/estimate`](/en/docs/api-reference/estimate).
</Callout>

<Callout type="info" title="Catalog snapshot">
Below is a readable snapshot of the live catalog as of November 4, 2026: 90 active public models — 27 for images, 55 for video and 8 for audio. All of them can be called through MCP and, except for `midjourney/v8.1`, through the REST API; 10 of them have a slug with a slash — see [Slugs with a slash](#mcp-only) for how to pass one. Always fetch the live catalog before submitting a job.
</Callout>

## Image models

| Family | REST API slugs |
| --- | --- |
| FLUX 2 | `flux-2-flex`, `flux-2-pro` |
| FLUX 3 | `flux-3-klein` |
| FLUX Kontext | `flux-kontext-max`, `flux-kontext-pro` |
| GPT Image | `gpt-image-1-5`, `gpt-image-2`, `gpt-image-2-5-flare`, `gpt-image-2-5-sunburst`, `gpt-image-2-6-flare`, `gpt-image-2-6-sunburst` |
| Imagen 4 | `google/imagen4`, `google/imagen4-fast`, `google/imagen4-ultra` |
| Grok Imagine | `grok-imagine/text-to-image`, `grok-imagine/image-to-image` |
| Midjourney | `midjourney/v7`, `midjourney/v8.1` |
| Nano Banana | `nano-banana-2`, `nano-banana-2-1`, `nano-banana-pro` |
| Qwen Image | `qwen-image-2` |
| Seedream | `seedream-4-5`, `seedream-5-0-lite`, `seedream-5-0-pro`, `seedream-v4`, `seedream-v4-edit` |
| Wan Image | `wan-2-7-image` |
| Z-Image | `z-image` |

## Video models

| Family | REST API slugs |
| --- | --- |
| Gemini Omni 1.2 | `gemini-omni-video` |
| Grok Imagine | `grok-imagine-video-1-5`, `grok-imagine/text-to-video`, `grok-imagine/image-to-video` |
| Hailuo | `hailuo-02`, `hailuo-02-standard`, `hailuo-2-3`, `hailuo-2-3-fast` |
| HappyHorse | `happy-horse-t2v`, `happy-horse-i2v`, `happy-horse-r2v`, `happy-horse-edit` |
| HeyGen Video | `heygen-video-t2v`, `heygen-video-i2v`, `heygen-video-r2v` |
| Kling 2.5 | `kling-v2-5-turbo-text-to-video-pro`, `kling-v2-5-turbo-image-to-video-pro` |
| Kling 2.6 | `kling-2-6-text-to-video`, `kling-2-6-image-to-video`, `kling-2-6-motion-control` |
| Kling 3 | `kling-3-text-to-video`, `kling-3-image-to-video`, `kling-3-multi-shot`, `kling-3-motion-control` |
| Kling 4.0 | `kling-4-t2v`, `kling-4-i2v`, `kling-4-r2v` |
| Kling 4.0 Flash | `kling-4-flash-t2v`, `kling-4-flash-i2v`, `kling-4-flash-r2v` |
| Kling O3 | `kling-o3-t2v`, `kling-o3-i2v`, `kling-o3-r2v`, `kling-o3-transform` |
| Kling Lip Sync | `kling-lip-sync` |
| Midjourney Video | `midjourney/v7-image-to-video` |
| MiniMax H3 | `h3-t2v`, `h3-i2v` |
| OmniHuman | `omnihuman-2` |
| Seedance 1.5 | `seedance-1-5-text-to-video`, `seedance-1-5-image-to-video` |
| Seedance 2.0 | `seedance-2-t2v`, `seedance-2-i2v`, `seedance-2-fast-t2v`, `seedance-2-fast-i2v`, `seedance-2-mini-t2v`, `seedance-2-mini-i2v` |
| Seedance 2.5 | `seedance-2-5-t2v`, `seedance-2-5-i2v` |
| Veo | `veo3-fast`, `veo3-lite`, `veo3-quality` |
| Wan | `wan-2-5`, `wan-2-7`, `wan-2-7-image-to-video` |
| Wan 3.0 | `wan-3-0`, `wan-3-0-i2v`, `wan-3-0-r2v` |

## Audio models

| Family | REST API slugs |
| --- | --- |
| ElevenLabs | `eleven-v4`, `eleven-v4-turbo` |
| Gemini TTS | `gemini-3-1-flash-tts`, `gemini-2-5-pro-tts` |
| Suno | `suno-music`, `suno-v6`, `suno-v6-mini`, `suno-v6-wild` |

## Slugs with a slash [#mcp-only]

Ten models have a `family/model` slug. Pass it in the path as is, without encoding the slash: `POST /v1/models/google/imagen4`, `GET /v1/models/google/imagen4`, `POST /v1/models/google/imagen4/estimate`. The encoded form `google%2Fimagen4` is accepted too — that is how the SDKs send it. In the [MCP server](/en/docs/mcp), pass it as the `model` parameter of the `generate_image` or `generate_video` tool.

| Type | Family | Slugs |
| --- | --- | --- |
| image | Imagen 4 | `google/imagen4`, `google/imagen4-fast`, `google/imagen4-ultra` |
| image | Grok Imagine | `grok-imagine/text-to-image`, `grok-imagine/image-to-image` |
| image | Midjourney | `midjourney/v7`, `midjourney/v8.1` |
| video | Grok Imagine | `grok-imagine/text-to-video`, `grok-imagine/image-to-video` |
| video | Midjourney Video | `midjourney/v7-image-to-video` |

Grok Imagine video also has the short slug `grok-imagine-video-1-5` — both point to the same model.

<Callout type="warn" title="midjourney/v8.1 cannot be submitted over REST">
The slug `midjourney/v8.1` contains a dot, while the format check of `POST /v1/models/:model` allows only lowercase letters, digits, hyphens and a single slash: a submit returns `400 invalid_request` with the message `invalid_model`. `GET /v1/models/midjourney/v8.1` and the cost estimate work. Until the check is fixed, run this model through [MCP](/en/docs/mcp) or pick `midjourney/v7`.
</Callout>

## Single model schema

<Method name="GET" path="/v1/models/:model" />

```bash
curl https://api.clipia.ai/v1/models/gpt-image-2 \
  -H "Authorization: Bearer $CLIPIA_KEY"
```

On submit, pass only keys from `input_schema` inside the `input` field. If the model doesn't exist or is inactive, the response is `404` with the code `not_found` and the message `model_not_found`. Parameter labels and hints (`label`, `hint`) come in English.

<TypeTable
  type={{
    slug: { type: 'string', description: 'Exact identifier for POST /v1/models/:model' },
    type: { type: 'string', description: 'image, video, or audio' },
    name: { type: 'string', description: 'Public model name' },
    capabilities: { type: 'string[]', description: 'Supported generation modes' },
    text_limits: { type: 'object', description: '{ min_chars, max_chars } — character bounds of the narration text; present only for text-to-speech models. Text outside the bounds is rejected with 400 before any credits are reserved' },
    input_schema: { type: 'object', description: '{ parameters: [{ name, type, required, default, options, validation, min, max, … }] } — current parameters, allowed values and execution defaults' },
    pricing: { type: 'object', description: 'Reference price in credits: credits — the price of one run with defaults; estimate_required: true — the price depends on the input (length of the source media or text), credits is absent, call estimate; available: false — the quote could not be computed right now, note explains why. For text-to-speech models credits is quoted per 1,000 characters (billing_unit: characters, unit_size: 1000, rounding: ceil, minimum_credits: 1)' }
  }}
/>

The `default` value in `input_schema` is the execution default: a request without that parameter is priced and run with it. The server does not inject defaults into your request body, so an `estimate` for an `input` without the parameter and one with the parameter equal to `default` returns the same price.

<Callout type="warn" title="Don't hard-code a schema from this page">
Variants in one family can have different required fields, durations, resolutions and reference inputs. Fetch `input_schema` for the exact slug and call `POST /v1/models/:model/estimate` before generation.
</Callout>

## New model availability

A model is available through the API only once its exact slug appears in `GET /v1/models`. An announcement or a product page is not that signal. For example, the slugs `seedance-2-5-t2v` and `seedance-2-5-i2v` for [Seedance 2.5](/en/docs/api-reference/models/seedance-2-5) are enabled separately in each environment and are present in the production catalog; the customer-facing [Seedance 2.5 landing](/en/video-models/seedance-2-5) opens only when both modes are active. A model that is switched off disappears from the list, and requests to it get `404 model_not_found`. Always check the live catalog before submitting.
