Перейти к навигации

Нативный API Gemini

Вызывайте Gemini 4 Argon, Gemini 3.8 Flash и Gemini 3.1 Pro запросами Gemini generateContent с одним ключом BeatAPI.

  • Для всех актуальных моделей Gemini: POST /v1beta/models/{model}:generateContent, а для потоковой передачи — :streamGenerateContent?alt=sse.
  • Текст и изображения на входе, текст на выходе, потоковая передача, вызовы функций и рассуждения.
  • Передавайте ключ в заголовке x-goog-api-key либо как токен Bearer.
  • Модель указывается в URL, а не в теле запроса.

Для текстовых запросов используйте базовый URL https://direct.beatapi.io. Этот адрес не ограничен 100-секундным тайм-аутом Cloudflare, который может прервать долгий запрос без потоковой передачи. Если ваша сеть не может подключиться к нему, используйте https://api.beatapi.io. Ключи, модели и цены одинаковы. API изображений и видео используют только https://api.beatapi.io.

POST/v1beta/models/{model}:generateContentПопробовать

Открывает эндпоинт в API Explorer. Если ввести ключ BeatAPI и отправить запрос, будет выполнен реальный вызов с оплатой из вашего баланса.

Модели

Подставьте один из этих ID в URL вместо {model}.

ID моделиКонтекст (токены)Максимальный вывод (токены)НазначениеВвод, USD за миллион токеновВывод, USD за миллион токенов
gemini-4-argon—1 000 000Флагманская модель Google Gemini 4 с выводом до 1M токенов$1.00$5.00
gemini-3.8-flash——Самая интеллектуальная модель Google Flash для длительной разработки ПО, автономных агентов и сложных корпоративных процессов$0.375$1.875
gemini-3.1-pro-preview1 048 57665 536Предварительная версия Gemini с упором на рассуждения для программирования с агентом и решения сложных задач$1.00$6.00
  • Указаны базовые цены со скидкой. Не включены тарифы для длинного контекста, кэшированного ввода и записи в кэш. См. страницу цен.
  • — означает, что каталог не публикует это значение.

Старые ID этого семейства остаются доступны. См. старые модели.

Быстрый старт

Храните ключ в BEATAPI_API_KEY и не помещайте его в код браузерного приложения. ID модели указывается в URL, поэтому в теле нет поля model. Ниже показаны примеры запросов, а не записанные ответы модели.

Прочитайте ответ в candidates[0].content.parts[0].text, затем проверьте candidates[0].finishReason и usageMetadata. Сам по себе HTTP 200 не означает, что ответ решает вашу задачу: проверяйте результат в приложении. Текстовые запросы возвращают ответ напрямую; опрашивать /v1/tasks для них не нужно.

curl --request POST \
--url https://direct.beatapi.io/v1beta/models/gemini-3.8-flash:generateContent \
--header "x-goog-api-key: $BEATAPI_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"contents": [
{
"role": "user",
"parts": [
{
"text": "Design a resilient webhook retry strategy for a payments API."
}
]
}
]
}'

Эндпоинт и аутентификация

POST https://direct.beatapi.io/v1beta/models/{model}:generateContent

x-goog-api-key string Обязательно

Передайте ключ BeatAPI в заголовке x-goog-api-key. Также поддерживается Authorization: Bearer <BEATAPI_API_KEY>.

Для потоковой передачи используйте POST /v1beta/models/{model}:streamGenerateContent?alt=sse. Ключ можно передать в x-goog-api-key или в Authorization: Bearer <key>: работают оба варианта.

:countTokens недоступен и возвращает 404.

Параметры запроса

Перечислены поля, которые действительно влияют на запрос. Остальные поля Gemini принимаются, но не действуют: generationConfig.thinkingConfig, generationConfig.responseMimeType, generationConfig.responseSchema, generationConfig.seed, safetySettings, toolConfig и cachedContent. Не полагайтесь на них.

contents object[] Обязательно

История диалога, от самого раннего хода к последнему. У каждого элемента есть role (user или model) и parts. Части могут иметь тип text, inlineData (mimeType и base64 data), fileData (mimeType и fileUri), functionCall или functionResponse.

  • Все актуальные модели Gemini поддерживают изображения на входе: используйте inlineData или fileData со ссылкой на изображение. Для других медиа сначала проверьте нужный тип файла, прежде чем полагаться на него в приложении.
  • Пустой или отсутствующий contents приводит к 400 bad_request.

Пример

[
{
"role": "user",
"parts": [
{ "text": "What is in this image?" },
{ "inlineData": { "mimeType": "image/png", "data": "<base64>" } }
]
}
]

systemInstruction object Необязательно

Системный промпт в формате { "parts": [{ "text": "..." }] }. Используются только части text.

Пример

{
"parts": [{ "text": "Answer in one short paragraph." }]
}

generationConfig object Необязательно

Параметры генерации. Действуют следующие вложенные поля: maxOutputTokens, temperature, topP, topK, stopSequences и candidateCount.

Пример

{
"temperature": 0.7,
"topP": 0.95,
"maxOutputTokens": 2048,
"stopSequences": ["END"]
}

generationConfig.maxOutputTokens integer Необязательно

Максимальное число генерируемых токенов, включая рассуждения.

  • Максимально допустимое значение — 1 073 741 823; превышение возвращает 400 bad_request. При этом не превышайте максимальный объём вывода модели из таблицы выше.
  • Модели Gemini рассуждают по умолчанию. Токены рассуждений оплачиваются как выходные и входят в этот лимит. Маленький лимит может быть полностью потрачен на рассуждения: ответ окажется пустым, а finishReason — равным "MAX_TOKENS". Для короткого ответа оставляйте не менее 1 000 токенов.
  • maxOutputTokens также используется для оценки необходимого баланса. Слишком большое значение может привести к 402 insufficient_credits, даже если фактический ответ был бы коротким. Указывайте столько токенов, сколько требуется задаче.

generationConfig.temperature number Необязательно

Температура семплирования.

generationConfig.topP number Необязательно

Выборка по ядру (nucleus sampling). Значение 0 игнорируется.

generationConfig.topK integer Необязательно

Выборка Top-K. Значение 0 игнорируется.

generationConfig.stopSequences string[] Необязательно

Строки, при обнаружении которых генерация останавливается. Используется не более 4 строк.

generationConfig.candidateCount integer Необязательно

Число возвращаемых вариантов ответа. Не задавайте, если нужен только один.

tools object[] Необязательно

Объявления функций, которые может вызвать модель, в формате [{ "functionDeclarations": [...] }]. У каждого объявления есть name, description и parameters (JSON Schema). Вызов возвращается частью functionCall; передайте результат частью functionResponse в следующем ходе user.

  • Используются только functionDeclarations. Встроенные инструменты, например googleSearch и codeExecution, игнорируются.

Пример

[
{
"functionDeclarations": [
{
"name": "get_weather",
"description": "Get the current weather for a city.",
"parameters": {
"type": "object",
"properties": { "city": { "type": "string" } },
"required": ["city"]
}
}
]
}
]

Ответ

Без потоковой передачи запрос возвращает один JSON-объект. Ниже приведён сокращённый пример.

{
"candidates": [
{
"content": {
"role": "model",
"parts": [
{
"text": "Retry with exponential backoff and jitter, and make every handler idempotent."
}
]
},
"finishReason": "STOP",
"index": 0
}
],
"usageMetadata": {
"promptTokenCount": 19,
"candidatesTokenCount": 16,
"totalTokenCount": 120,
"thoughtsTokenCount": 85
}
}

Поля ответа

ПолеТипОписание
candidates[].content.parts[].textstringТекст ответа.
candidates[].content.parts[].functionCallobjectВызов инструмента с name и args.
candidates[].finishReasonstringSTOP — ответ завершён или запрошен инструмент; MAX_TOKENS — достигнут лимит maxOutputTokens; SAFETY — ответ отфильтрован.
usageMetadata.promptTokenCountintegerВходные токены.
usageMetadata.candidatesTokenCountintegerВыходные токены видимого ответа.
usageMetadata.thoughtsTokenCountintegerТокены рассуждений. Оплачиваются как выходные. Сам текст рассуждений не возвращается.
usageMetadata.totalTokenCountintegerОбщее число токенов вызова.

Потоковая передача

Вызовите :streamGenerateContent?alt=sse. Каждое событие — строка data: {...} с объектом candidates в том же формате, что и ответ без потоковой передачи.

  • Последнее событие содержит finishReason, например "STOP".
  • Тип ответа — text/event-stream. Ошибка до вызова модели возвращается обычным JSON-ответом с HTTP-кодом, а не событием потока.
  • Явно задайте тайм-ауты и предусмотрите безопасное восстановление соединения при потоковой передаче.
data: {"candidates":[{"content":{"role":"model","parts":[{"text":"Retry"}]},"index":0}]}
data: {"candidates":[{"content":{"role":"model","parts":[{"text":" with backoff"}]},"finishReason":"STOP","index":0}],"usageMetadata":{"promptTokenCount":19,"candidatesTokenCount":16,"totalTokenCount":120,"thoughtsTokenCount":85}}

Устранение ошибок

Ошибка или симптомПричинаРешение
400: требуется contentscontents пустой или отсутствует.Передайте хотя бы один ход диалога в contents.
400: недопустимое значение maxOutputTokensgenerationConfig.maxOutputTokens превышает 1 073 741 823.Уменьшите значение до необходимого для вашей задачи.
402 insufficient_creditsБаланс меньше оценочной стоимости запроса, часто из-за слишком большого maxOutputTokens.Пополните баланс или уменьшите maxOutputTokens.
403 forbiddenНа аккаунте только регистрационный бонус, а модель не входит в разрешённый список, либо она недоступна группе ключа.Пополните баланс, выберите бесплатную модель или используйте ключ с доступом к нужной модели.
404 not_foundНеизвестный ID модели, модель недоступна этому ключу либо запрошено действие :countTokens.Получите список доступных моделей через GET /v1/models.
429 rate_limit_exceededДостигнут лимит запросов аккаунта или бесплатной модели.Подождите время, указанное в Retry-After, затем повторите запрос.
200 с finishReason: "MAX_TOKENS" без textРассуждения исчерпали maxOutputTokens до формирования ответа.Увеличьте generationConfig.maxOutputTokens; для короткого ответа нужно не менее 1 000 токенов.

Обзор HTTP-ошибок

Нативные эндпоинты Gemini возвращают ошибки в формате {"error": {"message", "type": "beatapi_error", "code"}}. Код находится в error.code, ID запроса — в конце message. Поля retryable нет. См. ошибки.

HTTP-статусКодыЧто делать
400bad_request, content_policy_violationИсправьте запрос или ввод. Не отправляйте его повторно без изменений.
401missing_api_key, invalid_api_keyПроверьте ключ. Не повторяйте запрос без исправления.
402insufficient_creditsПополните баланс или увеличьте лимит ключа. Слишком высокий max_tokens может вызвать эту ошибку.
403forbiddenПроверьте группу ключа, список разрешённых IP и доступность модели за бесплатные кредиты.
404not_foundНеизвестная модель. Проверьте активные модели через GET /v1/models.
429rate_limit_exceededПодождите согласно Retry-After или retry_after_seconds, затем повторите запрос с увеличивающимися интервалами.
500internal_error, temporary_errorПовторите запрос один-два раза с увеличивающимися интервалами.
503model_unavailable, upstream_timeout, temporary_errorПовторите запрос с увеличивающимися интервалами или выберите другую модель.

Все коды и правила повторных запросов: ошибки.

Примечания

  • Модели Gemini также доступны через Chat Completions, Responses и Anthropic Messages. См. другие страницы Gemini.
  • Токены рассуждений оплачиваются как выходные. Оставляйте лимит и для рассуждений, и для ответа, а не только для видимого ответа.
  • Храните ключи на доверенных серверах, записывайте ID запроса из ответа и повторяйте запросы только при ошибках 429, 500 и 503.

Аутентификация

AuthorizationBearer

Передавайте API-ключ в виде Authorization: Bearer <BEATAPI_API_KEY>.

Параметры пути

modelenumОбязательный
Допустимые значения:

Запрос

This endpoint expects an object.
contentslist of objectsОбязательный

История диалога, от самого раннего хода к последнему. У каждого элемента есть role (user или model) и parts. Части могут иметь тип text, inlineData (mimeType и base64 data), fileData (mimeType и fileUri), functionCall или functionResponse.

Все актуальные модели Gemini поддерживают изображения на входе: используйте inlineData или fileData со ссылкой на изображение. Для других медиа сначала проверьте нужный тип файла, прежде чем полагаться на него в приложении.

Пустой или отсутствующий contents приводит к 400 bad_request.

systemInstructionobjectОпциональный

Системный промпт в формате { "parts": [{ "text": "..." }] }. Используются только части text.

generationConfigobjectОпциональный

Параметры генерации. Действуют следующие вложенные поля: maxOutputTokens, temperature, topP, topK, stopSequences и candidateCount.

toolslist of objectsОпциональный

Объявления функций, которые может вызвать модель, в формате [{ "functionDeclarations": [...] }]. У каждого объявления есть name, description и parameters (JSON Schema). Вызов возвращается частью functionCall; передайте результат частью functionResponse в следующем ходе user.

Используются только functionDeclarations. Встроенные инструменты, например googleSearch и codeExecution, игнорируются.

Ответ

Без потоковой передачи запрос возвращает один JSON-объект. Ниже приведён сокращённый пример.

candidateslist of objectsОпциональный
usageMetadataobjectОпциональный

Ошибки

400
Bad Request Error
401
Unauthorized Error
402
Payment Required Error
403
Forbidden Error
404
Not Found Error
429
Too Many Requests Error
500
Internal Server Error
503
Service Unavailable Error