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

# Media

> Images, video, clips, audio and stock photos — the media routes, the catalogue of models they accept, and the library every result lands in.

Media is one catalogue, one library and five routes, shared by the REST API and an agent's tools:

|                                          | Route                                                                                                        | Answers                                                                                                      |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
| [Images](/docs/api/images)                    | `POST /v1/media/images`                                                                                      | Synchronous — the finished [files](/docs/api/files), in one call.                                                 |
| [Stock photos](/docs/api/images#stock-photos) | `GET /v1/media/stock`                                                                                        | Licensed photos by description; import one as a file with `POST /v1/files/imports`.                          |
| [Video](/docs/api/video)                      | `POST /v1/media/videos`                                                                                      | A `202` **media job** you read back with `GET /v1/media/{id}` and list with `GET /v1/media`.                 |
| [Clips](/docs/api/clips)                      | `POST /v1/media/clips`                                                                                       | A `202` clip job — scored, captioned short clips cut from a long video.                                      |
| [Audio](/docs/api/audio)                      | `POST /v1/media/audio/transcriptions` · `POST /v1/media/audio/speech` · `POST /v1/media/audio/conversations` | Transcription as a media job; speech and a spoken reply as finished files.                                   |
| Models                                   | `GET /v1/media/models`                                                                                       | The catalogue below — which `model` each route accepts.                                                      |
| [Library](/docs/api/files)                    | `GET /v1/files`                                                                                              | Every result lands in [Files](/docs/api/files) with its `source` — filter by `kind`, `source`, `tag` or `search`. |

<Info>There is **no fixed list of generation models**. The catalogue is read from the provider on every call, so a model published today is callable today. Search it here; pass what you find as `model` to [`POST /v1/media/images`](/docs/api/images) / [`POST /v1/media/videos`](/docs/api/video) or to [`generate_image` / `generate_video`](/docs/capabilities/tools#generation-tools), or pin it on an agent with `tools.configs.<tool>.config.models`.</Info>

## The media model object

<ResponseField name="object" type="string">Always `media_model`.</ResponseField>
<ResponseField name="id" type="string">The model's id. This is what `model` takes, on the generation routes and on the tools.</ResponseField>
<ResponseField name="name" type="string">The model's display name.</ResponseField>
<ResponseField name="kind" type="string">`image` · `video` · `stt` · `tts` · `s2s`. The three audio kinds are [the audio catalogues](/docs/api/audio#the-catalogues).</ResponseField>
<ResponseField name="description" type="string">What the model is good at, in the model author's own words.</ResponseField>

No price is published here, for the same reason [`GET /v1/models`](/docs/api/models) publishes none: a generation job is billed **what it actually cost**, and that is only knowable once the job has finished. See [Pricing](/docs/platform/pricing#media-generation--per-finished-job-media-component).

## Search models

`GET /v1/media/models` — scope `agents:read`

<ParamField query="kind" type="string" required>`image` · `video` · `stt` · `tts` · `s2s`. Required: each is its own capability with its own catalogue — the audio ones are described on [Audio](/docs/api/audio#the-catalogues).</ParamField>
<ParamField query="search" type="string">Matches a model's id, name or description. Omit it to list them all.</ParamField>
<ParamField query="limit" type="number">Page size, 1–100.</ParamField>
<ParamField query="after" type="string">The `next_cursor` of the previous page. Opaque — it is not a row id.</ParamField>

<CodeGroup>
  ```bash cURL theme={"system"}
  curl -fsSL "https://api.vetta.sh/v1/media/models?kind=video&search=seedance" \
    -H "authorization: Bearer sk_live_..."
  ```
</CodeGroup>

<ResponseExample>
  ```json Response theme={"system"}
  {
    "object": "list",
    "data": [
      {
        "object": "media_model",
        "id": "bytedance/seedance-2.5",
        "name": "Seedance 2.5",
        "kind": "video",
        "description": "A text- and image-to-video model for short cinematic clips.",
      }
    ],
    "has_more": false,
    "next_cursor": null
  }
  ```
</ResponseExample>

Ordering is cheapest-first where the provider publishes a per-output price, which today is the image catalogue only. That is why an image request can leave `model` out and a video request must name one.

A deploy with no generation provider configured answers `501 feature_not_configured` rather than an empty list — "nothing is configured here" and "the provider has no models" are different facts.
