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

# Image Input

> Send PNG, JPEG, or WebP images to a vision-capable model.

An image is a content part inside a chat message. `content` becomes an array: a `text` part for your words and an `image_url` part for the picture.

```json wrap theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "type": "image_url",
  "image_url": {
    "url": "https://static.example.org/chart.png",
    "detail": "auto"
  }
}
```

`url` is required; `detail` is an optional hint about how closely to look.

## Three Ways to Supply It

1. **An `https` URL.** The gateway fetches it. No credentials, no private or loopback hosts.
2. **A data URL.** `data:image/png;base64,<bytes>`. Nothing is fetched.
3. **Raw base64 plus `media_type`.** The gateway builds the data URL.

There is no `file_id` for images. Send the image each time.

## Model Support

The model must advertise `supports_image_inputs`; otherwise the request is rejected. The catalog changes, so select at runtime:

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl https://app.trynito.ai/v1/models \
  -H "Authorization: Bearer $NITO_API_KEY"
```

## Multipart Limits

A chat request can also carry images as multipart form parts alongside a JSON `request` field. That path enforces:

| Limit | Value |
| - | - |
| Formats | PNG, JPEG, WebP |
| Images per request | 10 |
| Size per image | 5 MiB |
| Combined size | 50 MiB |
| Long edge | 2048 px |

## Example

```shellscript wrap theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl https://app.trynito.ai/v1/chat/completions \
  -H "Authorization: Bearer $NITO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen/qwen3-vl-235b-a22b-instruct",
    "messages": [
      {
        "role": "user",
        "content": [
          { "type": "text", "text": "What does this chart show? Summarize the trend." },
          {
            "type": "image_url",
            "image_url": {
              "url": "https://static.example.org/quarterly-revenue.png",
              "detail": "auto"
            }
          }
        ]
      }
    ]
  }'
```

Inline bytes instead of a URL:

```json wrap theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "type": "image_url",
  "image_url": { "url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." }
}
```

Raw base64 with a media type:

```json wrap theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "type": "image_url",
  "image_url": { "url": "iVBORw0KGgoAAAANSUhEUgAA...", "media_type": "image/png"     }
}
```

The response is an ordinary chat completion; the model's reading comes back as text. Documents take a different part and path: [PDF and Document Input](/api/features/multimodal/pdf-input).

## Related

<CardGroup cols={3}>
  <Card title="Multimodal" icon="square-code" href="/api/features/multimodal">
    Overview.
  </Card>

  <Card title="PDF and Document Input" icon="file-pdf" href="/api/features/multimodal/pdf-input">
    Documents in chat.
  </Card>

  <Card title="How the API Works" icon="gears" href="/api/get-started/how-nito-works">
    The request lifecycle.
  </Card>
</CardGroup>


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