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

> ## Agent Instructions
> Agents: start with https://docs.pre.dev/agents.md, which has complete recipes, plan access, polling rules, errors and limits.
> Authenticate with the workspace API key (pdk_…) from Integrations → Built-in, sent as Authorization: Bearer <key>.
> REST API: https://api.pre.dev (OpenAPI: https://docs.pre.dev/api-reference/openapi.json). AI Gateway: https://api.pre.dev/v1, OpenAI-compatible (OpenAPI: https://docs.pre.dev/api-reference/ai-gateway.openapi.json).
> pre.dev MCP server: https://api.pre.dev/mcp. Search these docs over MCP at https://docs.pre.dev/mcp.

# Multimodal

> Images, files, audio, and video through the same key and credits.

Images, documents, audio, and video are all available through the gateway with the same key and credits. Request and response shapes are the standard OpenAI-compatible ones; this page shows where each one lives.

| Need | Endpoint | Reference |
| - | - | - |
| Image or file input to a chat model | `POST /v1/chat/completions` with content parts | below |
| Parse an uploaded document | `plugins: [{ "id": "file-parser" }]` | below |
| Generate an image | `POST /v1/images` | [Images and video](/ai-gateway/api/images-and-video) |
| Generate a video | `POST /v1/videos`, then poll | [Images and video](/ai-gateway/api/images-and-video) |
| Text to speech, music | `POST /v1/audio/speech` | [Audio](/ai-gateway/api/audio) |
| Transcribe audio | `POST /v1/audio/transcriptions` | [Audio](/ai-gateway/api/audio) |
| Upload and reuse a file | `POST /v1/files` | [Files](/ai-gateway/api/files) |

## Image input

Send an `image_url` content part. Models that price image inputs show `credits_per_image` in the [catalog](/ai-gateway/api/models).

<CodeGroup>
  ```bash curl theme={null}
  curl --fail-with-body https://api.pre.dev/v1/chat/completions \
    -H "Authorization: Bearer $PREDEV_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "google/gemini-3.8-flash",
      "messages": [{
        "role": "user",
        "content": [
          { "type": "text", "text": "Describe this image." },
          { "type": "image_url", "image_url": { "url": "https://pre.dev/predevlogosquare.png" } }
        ]
      }]
    }'
  ```

  ```typescript Node.js theme={null}
  const completion = await client.chat.completions.create({
    model: 'google/gemini-3.8-flash',
    messages: [{
      role: 'user',
      content: [
        { type: 'text', text: 'Describe this image.' },
        { type: 'image_url', image_url: { url: 'https://pre.dev/predevlogosquare.png' } },
      ],
    }],
  });
  ```

  ```python Python theme={null}
  completion = client.chat.completions.create(
      model="google/gemini-3.8-flash",
      messages=[{
          "role": "user",
          "content": [
              {"type": "text", "text": "Describe this image."},
              {"type": "image_url", "image_url": {"url": "https://pre.dev/predevlogosquare.png"}},
          ],
      }],
  )
  ```
</CodeGroup>

## Documents

Attach a PDF or other document as a `file` content part and add the `file-parser` plugin so any model can read it:

```json theme={null}
{
  "model": "anthropic/claude-sonnet-5",
  "plugins": [{ "id": "file-parser" }],
  "messages": [{
    "role": "user",
    "content": [
      { "type": "text", "text": "Summarize this contract in five bullets." },
      { "type": "file", "file": { "filename": "contract.pdf", "file_data": "data:application/pdf;base64,JVBERi0xLjQK..." } }
    ]
  }]
}
```

Upload once with [`POST /v1/files`](/ai-gateway/api/files) when the same document is used across many calls. Files are scoped to the workspace that uploaded them.

## Web search

Add `plugins: [{ "id": "web" }]`, or append `:online` to the model id, and tune with `web_search_options`. Search cost is part of the call's charge. See [fallbacks and advanced options](/ai-gateway/routing-and-fallbacks).

## Generated images, video, and audio

Image, video, and speech models are listed by `/v1/images/models`, `/v1/videos/models`, and the main catalog. Video is asynchronous: submit, poll `GET /v1/videos/{jobId}`, then download from `/content`; the job is charged once it finishes, whether you poll it to completion, download its content, or stop polling and let pre.dev settle it. See [images and video](/ai-gateway/api/images-and-video) and [audio](/ai-gateway/api/audio).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.