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

# List Asset Models

> List all available asset generation models with their capabilities, optionally filtered

## Overview

Returns a summary of every model available for asset generation. Each model includes its provider, type, capabilities (aspect ratios, resolutions, durations, etc.), tags, and base cost.

Use this to discover which models exist and what they can do. For the full JSON schema of an individual model (including input schema and settings), use [Get Model](/api-reference/assets/model).

## Authentication

<Info>
  This endpoint requires API key authentication. Include your API key in the `Authorization` header.
</Info>

## Query Parameters

<ParamField query="type" type="string">
  Filter by media type: `image` or `video`.
</ParamField>

<ParamField query="provider" type="string">
  Filter by provider (e.g. `google`, `kling`, `bytedance`, `flux`, `sora`, `xai`).
</ParamField>

<ParamField query="tag" type="string">
  Filter by tag (e.g. `motion-control`, `video-edit`, `extend`, `first-last-frames`, `new`).
</ParamField>

## Response

<ResponseField name="models" type="array">
  Array of model summary objects.

  <Expandable title="model summary">
    <ResponseField name="name" type="string">
      Model identifier — use this in the `model` field of [`/asset/start`](/api-reference/assets/start).
    </ResponseField>

    <ResponseField name="label" type="string">
      Human-readable model name.
    </ResponseField>

    <ResponseField name="type" type="string">
      `image` or `video`.
    </ResponseField>

    <ResponseField name="provider" type="string">
      Omitted from each item when filtering by `provider` (hoisted to the root — see note below).
    </ResponseField>

    <ResponseField name="tags" type="array">
      Omitted entirely when the model has no tags.
    </ResponseField>

    <ResponseField name="base_cost" type="number">
      Base credit cost (for the model's default configuration).
    </ResponseField>

    <ResponseField name="has_audio" type="boolean" />

    <ResponseField name="required_plans" type="array">
      Plan names required to use this model (empty if available on all plans).
    </ResponseField>

    <ResponseField name="capabilities" type="object">
      Includes `max_images`, `min_images`, `supported_aspect_ratios`, `default_aspect_ratio`, `supported_resolutions`, `default_resolution`, `supported_durations`, `default_duration`, `input_types`, `resolution_constraints`. Durations are expressed in **seconds** (numbers).
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="count" type="number">
  Number of models in the response (after filtering).
</ResponseField>

<Note>
  **Hoisted filters.** When you filter by `type` and/or `provider`, that value is the same for every result, so it is returned **once at the root** of the response and omitted from each item (to save payload size). Unfiltered requests keep `type` and `provider` on each item.
</Note>

## Example

<RequestExample>
  ```bash cURL theme={null}
  curl -X GET "https://app.hoox.video/api/public/v1/asset/models?type=video&provider=kling" \
    -H "Authorization: Bearer your_api_key"
  ```

  ```python Python theme={null}
  import requests

  url = "https://app.hoox.video/api/public/v1/asset/models"
  params = {"type": "video", "provider": "kling"}
  headers = {"Authorization": "Bearer your_api_key"}
  response = requests.get(url, headers=headers, params=params)
  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  const url = new URL('https://app.hoox.video/api/public/v1/asset/models');
  url.searchParams.set('type', 'video');
  url.searchParams.set('provider', 'kling');

  const response = await fetch(url, {
    headers: { 'Authorization': 'Bearer your_api_key' },
  });
  const data = await response.json();
  console.log(data);
  ```
</RequestExample>

<ResponseExample>
  ```json 200 OK theme={null}
  {
    "type": "video",
    "provider": "kling",
    "models": [
      {
        "name": "kling-pro",
        "label": "Kling 2.6 Pro",
        "base_cost": 7.5,
        "has_audio": true,
        "capabilities": {
          "max_images": 1,
          "min_images": 0,
          "supported_aspect_ratios": ["16:9", "9:16", "1:1"],
          "default_aspect_ratio": "9:16",
          "supported_durations": [5, 10],
          "default_duration": 5
        }
      }
    ],
    "count": 1
  }
  ```

  ```json 400 Validation Failed theme={null}
  {
    "error": "Validation failed",
    "details": [
      { "code": "invalid_value", "message": "type must be 'image' or 'video'", "field": "type" }
    ]
  }
  ```
</ResponseExample>
