> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.beatapi.io/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.beatapi.io/_mcp/server.

# Нативный API Gemini

POST https://direct.beatapi.io/v1beta/models/{model}:generateContent
Content-Type: application/json

Вызывайте 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-preview` | 1 048 576         | 65 536                      | Предварительная версия Gemini с упором на рассуждения для программирования с агентом и решения сложных задач                  | \$1.00                       | \$6.00                        |- Указаны базовые цены со скидкой. Не включены тарифы для длинного контекста, кэшированного ввода и записи в кэш. См. [страницу цен](https://beatapi.io/pricing).
- `—` означает, что каталог не публикует это значение.Старые ID этого семейства остаются доступны. См. [старые модели](/text-api/legacy-models).## Быстрый стартХраните ключ в `BEATAPI_API_KEY` и не помещайте его в код браузерного приложения. ID модели указывается в URL, поэтому в теле нет поля `model`. Ниже показаны примеры запросов, а не записанные ответы модели.Прочитайте ответ в `candidates[0].content.parts[0].text`, затем проверьте `candidates[0].finishReason` и `usageMetadata`. Сам по себе HTTP 200 не означает, что ответ решает вашу задачу: проверяйте результат в приложении. Текстовые запросы возвращают ответ напрямую; опрашивать `/v1/tasks` для них не нужно.```bash title="cURL"
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."
        }
      ]
    }
  ]
}'
``````python title="Python"
import os
import requests

response = requests.post(
    "https://direct.beatapi.io/v1beta/models/gemini-3.8-flash:generateContent",
    headers={"x-goog-api-key": os.environ["BEATAPI_API_KEY"]},
    json={
      "contents": [
        {
          "role": "user",
          "parts": [
            {
              "text": "Design a resilient webhook retry strategy for a payments API."
            }
          ]
        }
      ]
    },
    timeout=120,
)
response.raise_for_status()
print(response.json()["candidates"][0]["content"]["parts"][0]["text"])
``````javascript title="JavaScript"
const response = await fetch("https://direct.beatapi.io/v1beta/models/gemini-3.8-flash:generateContent", {
  method: "POST",
  headers: {
    "x-goog-api-key": process.env.BEATAPI_API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "contents": [
      {
        "role": "user",
        "parts": [
          {
            "text": "Design a resilient webhook retry strategy for a payments API."
          }
        ]
      }
    ]
  }),
});
if (!response.ok) throw new Error(await response.text());
const data = await response.json();
console.log(data.candidates[0].content.parts[0].text);
```## Эндпоинт и аутентификация`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`.**Пример**```json
[
  {
    "role": "user",
    "parts": [
      { "text": "What is in this image?" },
      { "inlineData": { "mimeType": "image/png", "data": "<base64>" } }
    ]
  }
]
```systemInstruction
object
НеобязательноСистемный промпт в формате `{ "parts": [{ "text": "..." }] }`. Используются только части `text`.**Пример**```json
{
  "parts": [{ "text": "Answer in one short paragraph." }]
}
```generationConfig
object
НеобязательноПараметры генерации. Действуют следующие вложенные поля: `maxOutputTokens`, `temperature`, `topP`, `topK`, `stopSequences` и `candidateCount`.**Пример**```json
{
  "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`, игнорируются.**Пример**```json
[
  {
    "functionDeclarations": [
      {
        "name": "get_weather",
        "description": "Get the current weather for a city.",
        "parameters": {
          "type": "object",
          "properties": { "city": { "type": "string" } },
          "required": ["city"]
        }
      }
    ]
  }
]
```## ОтветБез потоковой передачи запрос возвращает один JSON-объект. Ниже приведён сокращённый пример.```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[].text`         | `string`  | Текст ответа.                                                                                                                     |
| `candidates[].content.parts[].functionCall` | `object`  | Вызов инструмента с `name` и `args`.                                                                                              |
| `candidates[].finishReason`                 | `string`  | `STOP` — ответ завершён или запрошен инструмент; `MAX_TOKENS` — достигнут лимит `maxOutputTokens`; `SAFETY` — ответ отфильтрован. |
| `usageMetadata.promptTokenCount`            | `integer` | Входные токены.                                                                                                                   |
| `usageMetadata.candidatesTokenCount`        | `integer` | Выходные токены видимого ответа.                                                                                                  |
| `usageMetadata.thoughtsTokenCount`          | `integer` | Токены рассуждений. Оплачиваются как выходные. Сам текст рассуждений не возвращается.                                             |
| `usageMetadata.totalTokenCount`             | `integer` | Общее число токенов вызова.                                                                                                       |## Потоковая передачаВызовите `:streamGenerateContent?alt=sse`. Каждое событие — строка `data: {...}` с объектом `candidates` в том же формате, что и ответ без потоковой передачи.- Последнее событие содержит `finishReason`, например `"STOP"`.
- Тип ответа — `text/event-stream`. Ошибка до вызова модели возвращается обычным JSON-ответом с HTTP-кодом, а не событием потока.
- Явно задайте тайм-ауты и предусмотрите безопасное восстановление соединения при потоковой передаче.```text
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`: требуется `contents`                     | `contents` пустой или отсутствует.                                                                                   | Передайте хотя бы один ход диалога в `contents`.                                                 |
| `400`: недопустимое значение `maxOutputTokens`  | `generationConfig.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` нет. См. [ошибки](/errors#text-endpoints).| HTTP-статус | Коды                                                       | Что делать                                                                                                         |
| ----------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| 400         | `bad_request`, `content_policy_violation`                  | Исправьте запрос или ввод. Не отправляйте его повторно без изменений.                                              |
| 401         | `missing_api_key`, `invalid_api_key`                       | Проверьте ключ. Не повторяйте запрос без исправления.                                                              |
| 402         | `insufficient_credits`                                     | Пополните баланс или увеличьте лимит ключа. Слишком высокий `max_tokens` может вызвать эту ошибку.                 |
| 403         | `forbidden`                                                | Проверьте группу ключа, список разрешённых IP и доступность модели за бесплатные кредиты.                          |
| 404         | `not_found`                                                | Неизвестная модель. Проверьте активные модели через `GET /v1/models`.                                              |
| 429         | `rate_limit_exceeded`                                      | Подождите согласно `Retry-After` или `retry_after_seconds`, затем повторите запрос с увеличивающимися интервалами. |
| 500         | `internal_error`, `temporary_error`                        | Повторите запрос один-два раза с увеличивающимися интервалами.                                                     |
| 503         | `model_unavailable`, `upstream_timeout`, `temporary_error` | Повторите запрос с увеличивающимися интервалами или выберите другую модель.                                        |Все коды и правила повторных запросов: [ошибки](/errors#text-endpoints).## Примечания- Модели Gemini также доступны через Chat Completions, Responses и Anthropic Messages. См. другие страницы Gemini.
- Токены рассуждений оплачиваются как выходные. Оставляйте лимит и для рассуждений, и для ответа, а не только для видимого ответа.
- Храните ключи на доверенных серверах, записывайте ID запроса из ответа и повторяйте запросы только при ошибках `429`, `500` и `503`.

Reference: https://docs.beatapi.io/api-reference/text-api/gemini-native

## Authentication

- `Authorization` header (bearer token, required) — Передавайте API-ключ в виде `Authorization: Bearer <BEATAPI_API_KEY>`.

## Servers

- `https://direct.beatapi.io` (Direct, default)
- `https://api.beatapi.io` (API)

## Request

### Path parameters

- `model` (enum, required)
  - Allowed values: `gemini-4-argon`, `gemini-3.8-flash`, `gemini-3.1-pro-preview`

### Body (application/json)

This endpoint expects an object.

- `contents` (list of V1BetaModelsModelGenerateContentPostRequestBodyContentApplicationJsonSchemaContentsItems, required) — История диалога, от самого раннего хода к последнему. У каждого элемента есть `role` (`user` или `model`) и `parts`. Части могут иметь тип `text`, `inlineData` (`mimeType` и base64 `data`), `fileData` (`mimeType` и `fileUri`), `functionCall` или `functionResponse`. Все актуальные модели Gemini поддерживают изображения на входе: используйте `inlineData` или `fileData` со ссылкой на изображение. Для других медиа сначала проверьте нужный тип файла, прежде чем полагаться на него в приложении. Пустой или отсутствующий `contents` приводит к `400 bad_request`.
- `systemInstruction` (V1BetaModelsModelGenerateContentPostRequestBodyContentApplicationJsonSchemaSystemInstruction, optional) — Системный промпт в формате `{ "parts": [{ "text": "..." }] }`. Используются только части `text`.
- `generationConfig` (V1BetaModelsModelGenerateContentPostRequestBodyContentApplicationJsonSchemaGenerationConfig, optional) — Параметры генерации. Действуют следующие вложенные поля: `maxOutputTokens`, `temperature`, `topP`, `topK`, `stopSequences` и `candidateCount`.
- `tools` (list of V1BetaModelsModelGenerateContentPostRequestBodyContentApplicationJsonSchemaToolsItems, optional) — Объявления функций, которые может вызвать модель, в формате `[{ "functionDeclarations": [...] }]`. У каждого объявления есть `name`, `description` и `parameters` (JSON Schema). Вызов возвращается частью `functionCall`; передайте результат частью `functionResponse` в следующем ходе `user`. Используются только `functionDeclarations`. Встроенные инструменты, например `googleSearch` и `codeExecution`, игнорируются.

## Response

### 200

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

- `candidates` (list of V1BetaModelsModelGenerateContentPostResponsesContentApplicationJsonSchemaCandidatesItems, optional)
- `usageMetadata` (V1BetaModelsModelGenerateContentPostResponsesContentApplicationJsonSchemaUsageMetadata, optional)

## Errors

### 400 Bad Request Error

`bad_request`, `content_policy_violation` Исправьте запрос или ввод. Не отправляйте его повторно без изменений. Нативные эндпоинты Gemini возвращают ошибки в формате `{"error": {"message", "type": "beatapi_error", "code"}}`. Код находится в `error.code`, ID запроса — в конце `message`. Поля `retryable` нет. См. [ошибки](/errors#text-endpoints).

- `map from string to any`

### 401 Unauthorized Error

`missing_api_key`, `invalid_api_key` Проверьте ключ. Не повторяйте запрос без исправления. Нативные эндпоинты Gemini возвращают ошибки в формате `{"error": {"message", "type": "beatapi_error", "code"}}`. Код находится в `error.code`, ID запроса — в конце `message`. Поля `retryable` нет. См. [ошибки](/errors#text-endpoints).

- `map from string to any`

### 402 Payment Required Error

`insufficient_credits` Пополните баланс или увеличьте лимит ключа. Слишком высокий `max_tokens` может вызвать эту ошибку. Нативные эндпоинты Gemini возвращают ошибки в формате `{"error": {"message", "type": "beatapi_error", "code"}}`. Код находится в `error.code`, ID запроса — в конце `message`. Поля `retryable` нет. См. [ошибки](/errors#text-endpoints).

- `map from string to any`

### 403 Forbidden Error

`forbidden` Проверьте группу ключа, список разрешённых IP и доступность модели за бесплатные кредиты. Нативные эндпоинты Gemini возвращают ошибки в формате `{"error": {"message", "type": "beatapi_error", "code"}}`. Код находится в `error.code`, ID запроса — в конце `message`. Поля `retryable` нет. См. [ошибки](/errors#text-endpoints).

- `map from string to any`

### 404 Not Found Error

`not_found` Неизвестная модель. Проверьте активные модели через `GET /v1/models`. Нативные эндпоинты Gemini возвращают ошибки в формате `{"error": {"message", "type": "beatapi_error", "code"}}`. Код находится в `error.code`, ID запроса — в конце `message`. Поля `retryable` нет. См. [ошибки](/errors#text-endpoints).

- `map from string to any`

### 429 Too Many Requests Error

`rate_limit_exceeded` Подождите согласно `Retry-After` или `retry_after_seconds`, затем повторите запрос с увеличивающимися интервалами. Нативные эндпоинты Gemini возвращают ошибки в формате `{"error": {"message", "type": "beatapi_error", "code"}}`. Код находится в `error.code`, ID запроса — в конце `message`. Поля `retryable` нет. См. [ошибки](/errors#text-endpoints).

- `map from string to any`

### 500 Internal Server Error

`internal_error`, `temporary_error` Повторите запрос один-два раза с увеличивающимися интервалами. Нативные эндпоинты Gemini возвращают ошибки в формате `{"error": {"message", "type": "beatapi_error", "code"}}`. Код находится в `error.code`, ID запроса — в конце `message`. Поля `retryable` нет. См. [ошибки](/errors#text-endpoints).

- `map from string to any`

### 503 Service Unavailable Error

`model_unavailable`, `upstream_timeout`, `temporary_error` Повторите запрос с увеличивающимися интервалами или выберите другую модель. Нативные эндпоинты Gemini возвращают ошибки в формате `{"error": {"message", "type": "beatapi_error", "code"}}`. Код находится в `error.code`, ID запроса — в конце `message`. Поля `retryable` нет. См. [ошибки](/errors#text-endpoints).

- `map from string to any`

## Types

### V1BetaModelsModelGenerateContentPostRequestBodyContentApplicationJsonSchemaContentsItems

- `parts` (list of V1BetaModelsModelGenerateContentPostRequestBodyContentApplicationJsonSchemaContentsItemsPartsItems, required)
- `role` (string, optional)

### V1BetaModelsModelGenerateContentPostRequestBodyContentApplicationJsonSchemaSystemInstruction

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

### V1BetaModelsModelGenerateContentPostRequestBodyContentApplicationJsonSchemaGenerationConfig

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

- `maxOutputTokens` (integer, optional) — Максимальное число генерируемых токенов, включая рассуждения. Максимально допустимое значение — 1 073 741 823; превышение возвращает `400 bad_request`. При этом не превышайте максимальный объём вывода модели из таблицы выше. Модели Gemini рассуждают по умолчанию. Токены рассуждений оплачиваются как выходные и входят в этот лимит. Маленький лимит может быть полностью потрачен на рассуждения: ответ окажется пустым, а `finishReason` — равным `"MAX_TOKENS"`. Для короткого ответа оставляйте не менее 1 000 токенов. `maxOutputTokens` также используется для оценки необходимого баланса. Слишком большое значение может привести к `402 insufficient_credits`, даже если фактический ответ был бы коротким. Указывайте столько токенов, сколько требуется задаче.
- `temperature` (double, optional) — Температура семплирования.
- `topP` (double, optional) — Выборка по ядру (nucleus sampling). Значение `0` игнорируется.
- `topK` (integer, optional) — Выборка Top-K. Значение `0` игнорируется.
- `stopSequences` (list of string, optional) — Строки, при обнаружении которых генерация останавливается. Используется не более 4 строк.
- `candidateCount` (integer, optional) — Число возвращаемых вариантов ответа. Не задавайте, если нужен только один.

### V1BetaModelsModelGenerateContentPostRequestBodyContentApplicationJsonSchemaToolsItems

### V1BetaModelsModelGenerateContentPostResponsesContentApplicationJsonSchemaCandidatesItems

- `content` (V1BetaModelsModelGenerateContentPostResponsesContentApplicationJsonSchemaCandidatesItemsContent, optional)
- `finishReason` (string, optional) — `STOP` — ответ завершён или запрошен инструмент; `MAX_TOKENS` — достигнут лимит `maxOutputTokens`; `SAFETY` — ответ отфильтрован.

### V1BetaModelsModelGenerateContentPostResponsesContentApplicationJsonSchemaUsageMetadata

- `promptTokenCount` (integer, optional) — Входные токены.
- `candidatesTokenCount` (integer, optional) — Выходные токены видимого ответа.
- `thoughtsTokenCount` (integer, optional) — Токены рассуждений. Оплачиваются как выходные. Сам текст рассуждений не возвращается.
- `totalTokenCount` (integer, optional) — Общее число токенов вызова.

### V1BetaModelsModelGenerateContentPostRequestBodyContentApplicationJsonSchemaContentsItemsPartsItems

- `text` (string, optional)
- `inlineData` (V1BetaModelsModelGenerateContentPostRequestBodyContentApplicationJsonSchemaContentsItemsPartsItemsInlineData, optional)
- `fileData` (V1BetaModelsModelGenerateContentPostRequestBodyContentApplicationJsonSchemaContentsItemsPartsItemsFileData, optional)
- `functionCall` (V1BetaModelsModelGenerateContentPostRequestBodyContentApplicationJsonSchemaContentsItemsPartsItemsFunctionCall, optional)
- `functionResponse` (V1BetaModelsModelGenerateContentPostRequestBodyContentApplicationJsonSchemaContentsItemsPartsItemsFunctionResponse, optional)

### V1BetaModelsModelGenerateContentPostResponsesContentApplicationJsonSchemaCandidatesItemsContent

- `parts` (list of V1BetaModelsModelGenerateContentPostResponsesContentApplicationJsonSchemaCandidatesItemsContentPartsItems, optional)

### V1BetaModelsModelGenerateContentPostRequestBodyContentApplicationJsonSchemaContentsItemsPartsItemsInlineData

- `mimeType` (string, optional)
- `data` (string, optional)

### V1BetaModelsModelGenerateContentPostRequestBodyContentApplicationJsonSchemaContentsItemsPartsItemsFileData

- `mimeType` (string, optional)
- `fileUri` (string, optional)

### V1BetaModelsModelGenerateContentPostRequestBodyContentApplicationJsonSchemaContentsItemsPartsItemsFunctionCall

### V1BetaModelsModelGenerateContentPostRequestBodyContentApplicationJsonSchemaContentsItemsPartsItemsFunctionResponse

### V1BetaModelsModelGenerateContentPostResponsesContentApplicationJsonSchemaCandidatesItemsContentPartsItems

- `text` (string, optional) — Текст ответа.
- `functionCall` (V1BetaModelsModelGenerateContentPostResponsesContentApplicationJsonSchemaCandidatesItemsContentPartsItemsFunctionCall, optional) — Вызов инструмента с `name` и `args`.

### V1BetaModelsModelGenerateContentPostResponsesContentApplicationJsonSchemaCandidatesItemsContentPartsItemsFunctionCall

Вызов инструмента с `name` и `args`.

## Examples

**Request**

```json
{
  "contents": [
    {
      "parts": [
        {
          "text": "Design a resilient webhook retry strategy for a payments API."
        }
      ],
      "role": "user"
    }
  ]
}
```

**Response**

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

**SDK Code**

```python Быстрый старт
import requests

url = "https://direct.beatapi.io/v1beta/models/gemini-3.8-flash:generateContent"

payload = { "contents": [
        {
            "parts": [{ "text": "Design a resilient webhook retry strategy for a payments API." }],
            "role": "user"
        }
    ] }
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Быстрый старт
const url = 'https://direct.beatapi.io/v1beta/models/gemini-3.8-flash:generateContent';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"contents":[{"parts":[{"text":"Design a resilient webhook retry strategy for a payments API."}],"role":"user"}]}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Быстрый старт
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://direct.beatapi.io/v1beta/models/gemini-3.8-flash:generateContent"

	payload := strings.NewReader("{\n  \"contents\": [\n    {\n      \"parts\": [\n        {\n          \"text\": \"Design a resilient webhook retry strategy for a payments API.\"\n        }\n      ],\n      \"role\": \"user\"\n    }\n  ]\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Быстрый старт
require 'uri'
require 'net/http'

url = URI("https://direct.beatapi.io/v1beta/models/gemini-3.8-flash:generateContent")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"contents\": [\n    {\n      \"parts\": [\n        {\n          \"text\": \"Design a resilient webhook retry strategy for a payments API.\"\n        }\n      ],\n      \"role\": \"user\"\n    }\n  ]\n}"

response = http.request(request)
puts response.read_body
```

```java Быстрый старт
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://direct.beatapi.io/v1beta/models/gemini-3.8-flash:generateContent")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"contents\": [\n    {\n      \"parts\": [\n        {\n          \"text\": \"Design a resilient webhook retry strategy for a payments API.\"\n        }\n      ],\n      \"role\": \"user\"\n    }\n  ]\n}")
  .asString();
```

```php Быстрый старт
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://direct.beatapi.io/v1beta/models/gemini-3.8-flash:generateContent', [
  'body' => '{
  "contents": [
    {
      "parts": [
        {
          "text": "Design a resilient webhook retry strategy for a payments API."
        }
      ],
      "role": "user"
    }
  ]
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Быстрый старт
using RestSharp;

var client = new RestClient("https://direct.beatapi.io/v1beta/models/gemini-3.8-flash:generateContent");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"contents\": [\n    {\n      \"parts\": [\n        {\n          \"text\": \"Design a resilient webhook retry strategy for a payments API.\"\n        }\n      ],\n      \"role\": \"user\"\n    }\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Быстрый старт
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = ["contents": [
    [
      "parts": [["text": "Design a resilient webhook retry strategy for a payments API."]],
      "role": "user"
    ]
  ]] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://direct.beatapi.io/v1beta/models/gemini-3.8-flash:generateContent")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```