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

# Vision via Chat

> Ввод изображений в стиле OpenAI: оба варианта — base64 и удалённый URL

> Дата обновления: 2026-06-06

# Vision via Chat

```
POST /v1/chat/completions
```

В продакшене Crazyrouter проверена работа `image_url` в стиле OpenAI на основных визуальных моделях:

* `gpt-4o`, `gpt-4o-mini`, `gpt-4.1`, `gpt-5.5` и другие визуальные модели OpenAI
* Поддерживаются как data URL `data:image/...;base64,...`, так и публичные `https://` URL
* `message.content` сейчас возвращается обычной строкой

> Рекомендуемый порядок: для локальных файлов сначала вызывайте [эндпоинт загрузки изображений](/ru/upload), чтобы получить временный URL `media.crazyrouter.com`, затем передавайте его в `image_url`; либо сразу отправляйте base64 data URL. Удалённые публичные URL тоже работают, но должны удовлетворять условиям ниже.

***

## Через base64 data URL (самый надёжный путь)

```bash theme={null}
curl https://api.crazyrouter.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "gpt-4o-mini",
    "messages": [
      {
        "role": "user",
        "content": [
          {"type": "text", "text": "What color is this image?"},
          {
            "type": "image_url",
            "image_url": {
              "url": "data:image/png;base64,iVBORw0KGgoAAA..."
            }
          }
        ]
      }
    ],
    "max_tokens": 100
  }'
```

Пример ответа:

```json theme={null}
{
  "model": "gpt-4o-mini",
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "Red."
      }
    }
  ]
}
```

***

## Через удалённый https URL

```bash theme={null}
curl https://api.crazyrouter.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "gpt-4o-mini",
    "messages": [
      {
        "role": "user",
        "content": [
          {"type": "text", "text": "Describe in 5 words."},
          {
            "type": "image_url",
            "image_url": {
              "url": "https://www.gstatic.com/webp/gallery/1.jpg"
            }
          }
        ]
      }
    ],
    "max_tokens": 40
  }'
```

### Ограничения удалённых URL

URL должен быть **доступен с серверов Crazyrouter**, а не просто открываться в браузере. Типичные причины ошибок:

| Сбой                      | Причина                                                                            | Решение                                                 |
| ------------------------- | ---------------------------------------------------------------------------------- | ------------------------------------------------------- |
| Домен не резолвится       | Приватный/некорректный адрес                                                       | Использовать публичный https URL                        |
| 403 Forbidden             | Некоторые CDN (wikimedia, приватные S3) блокируют серверный UA или требуют Referer | Использовать [эндпоинт загрузки](/ru/upload) или base64 |
| Content-Type не `image/*` | URL возвращает HTML или редирект на страницу логина                                | Убедиться, что это прямая ссылка на изображение         |
| Файл больше 20MB          | Лимит на размер одного файла                                                       | Сжать или обрезать                                      |

Если видите ошибку `Unable to process the image you provided. Please verify the image URL is publicly accessible, or upload it as base64.`, значит URL недоступен серверу — пройдитесь по таблице выше.

***

## Рекомендуемый подход

* Для внутренних ассетов, приватных и непроверенных по доступности изображений: сначала вызовите [`POST /v1/files/uploads`](/ru/upload) и получите 72-часовой URL `media.crazyrouter.com/...`, затем передайте его в `image_url`
* Для маленьких (\< 1MB) и одноразовых изображений: отправляйте base64 data URL напрямую, экономя один лишний запрос
* Несколько изображений, параметр `detail` и другие продвинутые опции: апстрим OpenAI это поддерживает, передавайте по официальной спецификации OpenAI
