Без применённого серверного промпта POST /v1/messages изображения передаются блоком image. Самый надёжный способ — base64: файл уже находится в запросе и не зависит от доступности внешнего сайта.
json
{
"model": "claude-opus-5",
"max_tokens": 1024,
"messages": [{
"role": "user",
"content": [
{"type": "image", "source": {
"type": "base64", "media_type": "image/jpeg", "data": "<BASE64>"
}},
{"type": "text", "text": "Что на изображении?"}
]
}]
}json
{"type": "image", "source": {"type": "url", "url": "https://example.com/photo.jpg"}}- Форматы: JPEG, PNG, GIF, WebP.
- Лимиты Anthropic: до 10 MB base64-данных и до 8000×8000 px на изображение. Если изображений больше 20, безопасно заранее уменьшить каждую сторону до 2000 px.
- На один API-запрос допускается до 100 изображений при 200k context window и до 600 при 1M context window; размер запроса и токены могут остановить обработку раньше.
- Анимация GIF не воспроизводится — Claude анализирует только первый кадр.
- URL должен быть прямым публичным
https://без авторизации, cookies, login-страницы и anti-bot проверки. - Сервер должен стабильно отдавать корректный image MIME (
image/jpeg,image/png,image/gifилиimage/webp). - Guard не скачивает URL сам: адрес передаётся в запрос Claude Messages без серверного промпта для удалённой загрузки.
- Официальный
count_tokensAnthropic может отклонить URL-source, хотя Messages принимает тот же файл. Для/v1/messagesGuard в этом случае пропускает внутренний count-preflight и использует безопасный резерв полного контекста; если нужен предварительный точный count, отправьте изображение как base64. - Редиректы, CDN-защита, hotlink-защита и временные signed URL могут не сработать. Доступность произвольного внешнего хоста не гарантируется.
- Если URL отклоняется — скачайте файл сами и отправьте base64.
- В одном сообщении можно несколько изображений, пока весь запрос укладывается в лимит.
- Картинки считаются входными токенами (зависит от разрешения) — см. Биллинг.
| Семейство | Изображения на входе |
|---|---|
| Kimi | блоки image_url, input_image и image принимаются и уходят модели как есть; такое же поведение у видео-блоков |
| Composer | нет: 400 cursor_image_input_unavailable до списания |
| Grok | да: инлайн base64, до 16 изображений на запрос, image/png, image/jpeg, image/webp, image/gif |
json
{
"model": "cursor-grok-4.6-high",
"max_tokens": 512,
"messages": [{
"role": "user",
"content": [
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": "iVBORw0…"}},
{"type": "text", "text": "Что на картинке?"}
]
}]
}