# List Models

> List available models. Public — no authentication required. Filter by type.

Discover which models are available and what they cost. This endpoint is public, so you can call it before adding a key.

## `GET /v1/models`

List available models. Public endpoint; no authentication required.

**Auth:** Public

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `type` | `string` | No | Filter by type: image, video, or audio. Returns all types when omitted. |

**Response**

```json
{
  "models": [
    {
      "id": "gemini-3.1-flash-image-preview",
      "name": "Nano Banana 2 🍌🍌",
      "type": "image",
      "credits": { "0.5K": 27, "1K": 35, "2K": 53, "4K": 105 }
    },
    {
      "id": "fal-ai/bytedance/seedance/v2",
      "name": "Seedance 2.0",
      "type": "video",
      "credits": {
        "480p": { "sound_on": 35, "sound_off": 35 },
        "720p": { "sound_on": 75, "sound_off": 75 }
      }
    }
  ]
}
```

Image models price by size bucket (credits per image). Video models price by resolution and sound (credits per generation).

## List models

**JavaScript SDK**

```bash
npm install picx-ai
```

```js
import { PicX } from "picx-ai";

const picx = new PicX(); // no key required for this call

const { models } = await picx.models.list();
console.log(`${models.length} models available`);

const videoModels = await picx.models.list({ type: "video" });
for (const model of videoModels.models) {
  console.log(model.id, model.name, model.credits);
}
```

**Python SDK**

```bash
pip install picx-ai
```

```python
from picx import PicX

picx = PicX()  # no key required for this call

all_models = picx.models.list()
print(f"{len(all_models)} models available")

video_models = picx.models.list(type="video")
for model in video_models:
    print(model.id, model.name, model.credits)
```

**curl**

```bash
# All models
curl https://api.picxstudio.com/v1/models

# Only image models
curl "https://api.picxstudio.com/v1/models?type=image"

# Only video models
curl "https://api.picxstudio.com/v1/models?type=video"
```

> [!NOTE]
> The `credits` field structure varies by model type. Image models return a flat object keyed by size (`{"1K": 35, "2K": 53}`). Video models return a nested object keyed by resolution and sound (`{"720p": {"sound_on": 75, "sound_off": 75}}`).

## FAQ

### Do I need an API key to list models?

No — `GET /v1/models` is public. Call it before you have a key to see what's available and what it costs.

### How do I see only image models, or only video models?

Pass `type=image` or `type=video` as a query parameter. Omit `type` to get every model across all types.

### How is pricing structured for image vs. video models?

Image models return a flat object keyed by size, e.g. `{"1K": 35, "2K": 53}` credits. Video models return a nested object keyed by resolution and sound, e.g. `{"720p": {"sound_on": 75, "sound_off": 75}}` credits.

### What's the default image model if I don't specify one?

`gemini-3.1-flash-image-preview` ("Nano Banana 2") — see [Generate Image](/docs/api-reference/generate-image) for the generation endpoint that uses it by default.
