# Models

> Model IDs, the GET /v1/models catalog, private models and providers.

## Model list

`GET /v1/models` returns the current catalog. A key is optional, but with your
key in the Authorization header the list also includes models opened to your
account personally.

```bash [curl]
curl https://ai-seller.vibe-codes.ru/v1/models \
  -H "Authorization: Bearer $AISELLER_API_KEY"
```

```python [Python]
from openai import OpenAI

client = OpenAI(base_url="https://ai-seller.vibe-codes.ru/v1", api_key="$AISELLER_API_KEY")
for model in client.models.list():
    print(model.id)
```

The response uses the OpenAI format:

```json
{
  "object": "list",
  "data": [
    {"id": "gpt-5.6-sol", "object": "model", "owned_by": "ai-seller"},
    {"id": "gpt-image-2.5", "object": "model", "owned_by": "ai-seller"}
  ]
}
```

If a key header is sent, the key must be valid: an invalid key gets
`401 invalid_api_key`, not the anonymous list.

## Model ID

An ID is a string from the catalog, e.g. `gpt-5.6-sol`. The vendor prefix is
optional: you will see both `model` and `vendor/model`. Pass the ID exactly as
`GET /v1/models` returns it; the `model` field in gateway responses carries the
same ID.

## Model type and endpoint

Every model has one type — text, images or video — and works only on endpoints
of that type:

| Type | Endpoints |
| --- | --- |
| Text | `POST /v1/chat/completions`, `POST /v1/messages`, `POST /v1/responses` |
| Images | `POST /v1/images/generations` |
| Video | `POST /v1/videos` |

A model on an endpoint of another type gets `404 model_not_found`, just like a
model that does not exist. Among text endpoints, a model works on those whose
format its provider supports: the gateway does not translate between request
formats (see [API overview](https://ai-seller.vibe-codes.ru/en/docs/endpoints#request-format-and-model)).

## Providers and failover

A model can have several providers. If a provider does not answer or fails
before the response starts, the gateway retries with the next one — for you it
is a single request with a single `request_id`. Once the response has started
there is no switching: a mid-stream failure arrives as an error event (see
[Streaming](https://ai-seller.vibe-codes.ru/en/docs/streaming)).

## Private models and pricing

Some models are opened to an account personally: they appear in
`GET /v1/models` only with your key and return `404 model_not_found` to
everyone else. Your account may have personal prices. How a request is priced
is covered in [Balance and pricing](https://ai-seller.vibe-codes.ru/en/docs/pricing); ask support@example.com for
current per-model rates.
