> 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.

# DeepSeek Chat Completions

POST https://direct.beatapi.io/v1/chat/completions
Content-Type: application/json

Вызывайте DeepSeek V4.1 Flash, V4 Pro и их варианты с усиленным кэшированием через единый эндпоинт OpenAI Chat Completions с ключом BeatAPI.- Текущие модели DeepSeek используют единый эндпоинт `POST /v1/chat/completions`. Для переключения измените `model`.
- Модели в таблице поддерживают текстовый ввод и вывод, потоковую передачу, вызовы функций и контекст в миллион токенов.
- Используйте OpenAI SDK, заменив базовый URL и указав ключ BeatAPI.
- Те же модели доступны через [OpenAI Responses](/text-api/deepseek/responses) и [Anthropic Messages](/text-api/deepseek/messages).Для текстовых запросов используйте базовый URL `https://direct.beatapi.io`. Этот адрес не ограничен 100-секундным тайм-аутом Cloudflare, который может прервать долгий запрос без потоковой передачи. Если ваша сеть не может подключиться к нему, используйте `https://api.beatapi.io`. Ключи, модели и цены одинаковы. API изображений и видео используют только `https://api.beatapi.io`.POST/v1/chat/completionsПопробоватьОткрывает эндпоинт в API Explorer. Если ввести ключ BeatAPI и отправить запрос, будет выполнен реальный вызов с оплатой из вашего баланса.## МоделиПередайте один из этих ID в `model`. Это отдельные модели, а не псевдонимы друг друга.| ID модели                 | Контекст (токены) | Максимальный вывод (токены) | Назначение                                                                                     | Ввод, USD за миллион токенов | Вывод, USD за миллион токенов | Примечания                                                                                |
| ------------------------- | ----------------- | --------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------- | ----------------------------- | ----------------------------------------------------------------------------------------- |
| `deepseek-v4.1-flash`     | —                 | —                           | V4.1 Flash для повседневных задач и больших объёмов обработки                                  | \$0.075                      | \$0.30                        | V4.1 Flash для повседневных задач и больших объёмов обработки. Рассуждает перед ответом.  |
| `deepseek-v4-pro-0813`    | 1 000 000         | 128 000                     | Флагман для сложных рассуждений и длительных задач агентов                                     | \$0.33                       | \$0.99                        | Флагманская модель рассуждений для сложных проблем и длительных задач агентов.            |
| `deepseek-v4.1-flash-hc`  | —                 | —                           | V4.1 Flash на маршруте с усиленным кэшированием для вызовов с общими длинными префиксами       | \$0.105\*                    | \$0.42\*                      | V4.1 Flash на маршруте с усиленным кэшированием. В часы пик по будням тарифы удваиваются. |
| `deepseek-v4-pro-0813-hc` | 1 000 000         | 128 000                     | V4 Pro на маршруте с усиленным кэшированием для агентов и диалогов с повторяющимися префиксами | \$0.462\*                    | \$1.386\*                     | V4 Pro на маршруте с усиленным кэшированием. В часы пик по будням тарифы удваиваются.     |- Указаны базовые цены со скидкой. Не включены тарифы для длинного контекста, кэшированного ввода и записи в кэш. См. [страницу цен](https://beatapi.io/pricing).
- `—` означает, что каталог не публикует это значение.
- \* В часы пик модели действует множитель. Показаны базовые тарифы вне часов пик.Старые ID этого семейства остаются доступны. См. [старые модели](/text-api/legacy-models).## Быстрый стартУстановите пакет `openai` на сервере и сохраните ключ в `BEATAPI_API_KEY`. Не включайте ключ в код браузера. Ниже приведён пример запроса, а не запись реального ответа модели.Прочитайте ответ в `choices[0].message.content`, затем проверьте `finish_reason` и `usage`. Статус HTTP 200 не гарантирует, что ответ решает вашу задачу: проверяйте результат в приложении. Текстовые запросы возвращают результат напрямую, без опроса `/v1/tasks`.```bash title="cURL"
curl --request POST \
  --url https://direct.beatapi.io/v1/chat/completions \
  --header "Authorization: Bearer $BEATAPI_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
  "model": "deepseek-v4.1-flash",
  "max_tokens": 2000,
  "messages": [
    {
      "role": "user",
      "content": "Design a resilient webhook retry strategy for a payments API."
    }
  ]
}'
``````python title="Python"
import os
from openai import OpenAI

client = OpenAI(api_key=os.environ["BEATAPI_API_KEY"], base_url="https://direct.beatapi.io/v1")
completion = client.chat.completions.create(
    model="deepseek-v4.1-flash",
    max_tokens=2000,
    messages=[
      {
        "role": "user",
        "content": "Design a resilient webhook retry strategy for a payments API."
      }
    ],
)
print(completion.choices[0].message.content)
``````javascript title="JavaScript"
import OpenAI from "openai";

const client = new OpenAI({ apiKey: process.env.BEATAPI_API_KEY, baseURL: "https://direct.beatapi.io/v1" });
const completion = await client.chat.completions.create({
  "model": "deepseek-v4.1-flash",
  "max_tokens": 2000,
  "messages": [
    {
      "role": "user",
      "content": "Design a resilient webhook retry strategy for a payments API."
    }
  ]
});
console.log(completion.choices[0].message.content);
```## Бесплатные версииУ этих моделей есть бесплатные версии. Они вызываются через тот же эндпоинт с отдельным ID, без платы за токены и с отдельными минутными лимитами. До первого пополнения баланса каждому аккаунту доступен один успешный запрос в минуту, после — до десяти. Стабильность не гарантируется: доступ может быть ограничен или прекращён в любой момент. См. [бесплатные модели](/free-models).| ID модели                  | Платная версия        | Цена      |
| -------------------------- | --------------------- | --------- |
| `deepseek-v4.1-flash-free` | `deepseek-v4.1-flash` | Бесплатно |### `deepseek-v4.1-flash-free````bash title="cURL"
curl --request POST \
  --url https://direct.beatapi.io/v1/chat/completions \
  --header "Authorization: Bearer $BEATAPI_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
  "model": "deepseek-v4.1-flash-free",
  "messages": [
    {
      "role": "user",
      "content": "Say hello in one sentence."
    }
  ]
}'
``````python title="Python"
import os
from openai import OpenAI

client = OpenAI(api_key=os.environ["BEATAPI_API_KEY"], base_url="https://direct.beatapi.io/v1")
completion = client.chat.completions.create(
    model="deepseek-v4.1-flash-free",
    messages=[
      {
        "role": "user",
        "content": "Say hello in one sentence."
      }
    ],
)
print(completion.choices[0].message.content)
``````javascript title="JavaScript"
import OpenAI from "openai";

const client = new OpenAI({ apiKey: process.env.BEATAPI_API_KEY, baseURL: "https://direct.beatapi.io/v1" });
const completion = await client.chat.completions.create({
  "model": "deepseek-v4.1-flash-free",
  "messages": [
    {
      "role": "user",
      "content": "Say hello in one sentence."
    }
  ]
});
console.log(completion.choices[0].message.content);
```## Эндпоинт и аутентификация`POST https://direct.beatapi.io/v1/chat/completions`Authorization
string
Обязательно`Bearer <BEATAPI_API_KEY>`. Ключ работает как с префиксом `sk-`, так и без него.## Параметры запросаПринимаются стандартные поля OpenAI Chat Completions. Совместимость формата запроса не означает, что каждая модель поддерживает все параметры. Проверяйте параметры, от которых зависит ваше приложение.model
string
ОбязательноТочный идентификатор модели.**Допустимые значения**: `deepseek-v4.1-flash`, `deepseek-v4-pro-0813`, `deepseek-v4.1-flash-hc`, `deepseek-v4-pro-0813-hc`- Каждый ID обозначает отдельную модель, а не псевдоним другой.
- Вызовите `GET /v1/models` со своим ключом, чтобы узнать, какие модели ему доступны.
- Предыдущий ID `deepseek-v4-flash-0731` остаётся доступен. См. [старые модели](/text-api/legacy-models).messages
object[]
ОбязательноИстория диалога от самого раннего сообщения к последнему. Каждое сообщение содержит `role` (`system`, `user`, `assistant` или `tool`) и `content`.max_tokens
integer
НеобязательноМаксимальное число генерируемых токенов, включая рассуждения.- Шлюз не сверяет это значение с максимальным объёмом вывода модели в таблице выше. Не превышайте указанный предел.
- `max_tokens` также используется для оценки необходимого баланса. Слишком высокое значение может привести к `402 insufficient_credits`, даже если фактический ответ короткий. Указывайте значение по потребности.Модели рассуждений сначала генерируют рассуждения. При слишком низком `max_tokens` весь лимит может уйти на них: `content` останется пустым, а `finish_reason` будет равен `length`. Оставляйте запас и для рассуждений, и для ответа; при `length` увеличьте лимит.stream
boolean
НеобязательноПо умолчанию: falseВозвращает ответ в виде серверных событий SSE. См. раздел о потоковой передаче.**По умолчанию**: `false`temperature
number
НеобязательноТемпература семплирования. Меняйте либо этот параметр, либо `top_p`, но не оба сразу.top_p
number
НеобязательноПорог суммарной вероятности для выборки (nucleus sampling).stop
string | string[]
НеобязательноОдна или несколько последовательностей, останавливающих генерацию.tools
object[]
НеобязательноОпределения функций, которые модель может вызвать. Модель запрашивает вызовы через `tool_calls`. Передайте каждый результат в следующем сообщении `tool` с соответствующим `tool_call_id`.tool_choice
string | object
НеобязательноРазрешает, требует или запрещает вызовы инструментов. Проверьте нужные значения с выбранной моделью.## Модели с усиленным кэшированием (HC)`deepseek-v4-pro-0813-hc` и `deepseek-v4.1-flash-hc` предоставляют те же две модели на маршруте с усиленным кэшированием. Если запросы используют общий префикс — длинный системный промпт, список инструментов или растущий диалог, — повторяющийся префикс может оплачиваться по тарифу кэшированного ввода. У стандартного маршрута ниже цена за токен, но попадания в кэш не гарантируются.Выбирайте HC, если повторяющийся префикс составляет большую часть каждого промпта. При небольшом объёме повторов стандартная модель дешевле. Формат запроса не меняется, достаточно заменить ID модели. Проверяйте фактическое число кэшированных входных токенов в `usage`, а не предполагайте попадание в кэш.## Тарифы по времени сутокСтандартные модели `deepseek-v4.1-flash` и `deepseek-v4-pro-0813` используют одинаковые тарифы в течение всего дня.У обеих HC-моделей есть часы пик: **по будням с 09:00 до 12:00 и с 14:00 до 18:00 по пекинскому времени (GMT+8) все тарифы удваиваются.** Это относится к вводу, кэшированному вводу и выводу. В остальное время, а также по субботам и воскресеньям действуют базовые тарифы, показанные в таблице выше и на [странице цен](https://beatapi.io/pricing).## ОтветБез потоковой передачи вызов возвращает один JSON-объект. Ниже приведён сокращённый пример.```json
{
  "id": "chatcmpl-example",
  "object": "chat.completion",
  "created": 1791993600,
  "model": "deepseek-v4.1-flash",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Retry with exponential backoff and jitter, and make every handler idempotent."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 19,
    "completion_tokens": 16,
    "total_tokens": 35
  }
}
```### Поля ответа| Поле                                               | Тип        | Описание                                                                                                                 |
| -------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------ |
| `id`                                               | `string`   | Идентификатор сгенерированного ответа. Сохраняйте его вместе с ID запроса для обращения в поддержку и сверки начислений. |
| `model`                                            | `string`   | Модель, сформировавшая ответ.                                                                                            |
| `choices[].message.content`                        | `string`   | Текст ответа.                                                                                                            |
| `choices[].message.reasoning_content`              | `string`   | Текст рассуждений у моделей рассуждений. Оплачивается как вывод.                                                         |
| `choices[].message.tool_calls`                     | `object[]` | Вызовы функций, которые модель просит выполнить. Появляются при `finish_reason`, равном `tool_calls`.                    |
| `choices[].finish_reason`                          | `string`   | `stop` означает завершённый ответ, `tool_calls` — запрос вызова инструментов, `length` — достижение `max_tokens`.        |
| `usage`                                            | `object`   | Количество токенов. Оплата рассчитывается по фактическому использованию.                                                 |
| `usage.completion_tokens_details.reasoning_tokens` | `integer`  | Токены рассуждений. Уже включены в `completion_tokens` и оплачиваются как вывод.                                         |## Потоковая передачаУстановите `"stream": true`. Ответ поступает событиями `chat.completion.chunk` и завершается строкой `data: [DONE]`.- Тип содержимого — `text/event-stream`, без потоковой передачи — `application/json`.
- Текст поступает в `choices[0].delta.content`. Модели рассуждений сначала передают рассуждения в `delta.reasoning_content`.
- Ошибки до вызова модели возвращаются как обычные JSON-ошибки с HTTP-статусом, а не как события потока.
- Задайте явный тайм-аут и предусмотрите безопасное повторное подключение к потоку.```text
data: {"id":"chatcmpl-example","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant","content":"Retry"},"finish_reason":null}]}

data: {"id":"chatcmpl-example","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":" with backoff"},"finish_reason":null}]}

data: {"id":"chatcmpl-example","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}

data: [DONE]
```## Устранение ошибок| Ошибка или симптом                                 | Причина                                                                                                      | Решение                                                                           |
| -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- |
| Пустой `content`, а `finish_reason` равен `length` | Модель потратила весь лимит `max_tokens` на рассуждения.                                                     | Увеличьте `max_tokens`, не превышая максимальный вывод модели.                    |
| `402 insufficient_credits`                         | Баланс меньше оценочной стоимости запроса, часто из-за слишком высокого `max_tokens`.                        | Пополните баланс или уменьшите `max_tokens`.                                      |
| `403 forbidden`                                    | Аккаунт использует бесплатные кредиты для модели вне бесплатного списка либо модель недоступна группе ключа. | Пополните баланс, выберите бесплатную модель или ключ с доступом к нужной модели. |
| `404 not_found`                                    | ID модели неизвестен или модель не подключена для этого ключа.                                               | Проверьте доступные модели через `GET /v1/models`.                                |
| `429 rate_limit_exceeded`                          | Достигнут лимит частоты запросов аккаунта или бесплатной модели.                                             | Подождите время, указанное в `Retry-After`, и повторите запрос.                   |### Обзор HTTP-ошибокОшибки аутентификации, маршрутизации, ограничения частоты и неизвестной модели возвращаются до вызова модели в формате BeatAPI с полями `error.code`, `error.message`, `retryable` и `request_id`. Остальные ошибки сохраняют формат OpenAI SDK `{"error": {"message", "type", "code"}}`. Код находится в `error.code`, ID запроса — в конце `message`. См. [ошибки](/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).## Примечания- Модели DeepSeek также отвечают через [OpenAI Responses](/text-api/deepseek/responses) и [Anthropic Messages](/text-api/deepseek/messages).
- Эти модели рассуждают перед ответом. Токены рассуждений входят в выходные токены и оплачиваются по тарифу вывода. Учитывайте в `max_tokens` и рассуждения, и ответ.
- Поддерживается только текстовый ввод. В этой интеграции модели не принимают изображения.
- Храните ключ только на доверенном сервере и записывайте ID запроса из ответа. Повторяйте запросы только при ошибках `429`, `500` и `503`.

Reference: https://docs.beatapi.io/api-reference/text-api/deepseek-chat-completions

## 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

### Body (application/json)

This endpoint expects an object.

- `model` (enum, required) — Точный идентификатор модели. Каждый ID обозначает отдельную модель, а не псевдоним другой. Вызовите `GET /v1/models` со своим ключом, чтобы узнать, какие модели ему доступны. Предыдущий ID `deepseek-v4-flash-0731` остаётся доступен. См. [старые модели](/text-api/legacy-models). `deepseek-v4.1-flash`, `deepseek-v4-pro-0813`, `deepseek-v4.1-flash-hc`, `deepseek-v4-pro-0813-hc`
  - Allowed values: `deepseek-v4.1-flash`, `deepseek-v4-pro-0813`, `deepseek-v4.1-flash-hc`, `deepseek-v4-pro-0813-hc`, `deepseek-v4.1-flash-free`
- `messages` (list of V1ChatCompletionsPostRequestBodyContentApplicationJsonSchemaMessagesItems, required) — История диалога от самого раннего сообщения к последнему. Каждое сообщение содержит `role` (`system`, `user`, `assistant` или `tool`) и `content`.
- `max_tokens` (integer, optional) — Максимальное число генерируемых токенов, включая рассуждения. Шлюз не сверяет это значение с максимальным объёмом вывода модели в таблице выше. Не превышайте указанный предел. `max_tokens` также используется для оценки необходимого баланса. Слишком высокое значение может привести к `402 insufficient_credits`, даже если фактический ответ короткий. Указывайте значение по потребности. Модели рассуждений сначала генерируют рассуждения. При слишком низком `max_tokens` весь лимит может уйти на них: `content` останется пустым, а `finish_reason` будет равен `length`. Оставляйте запас и для рассуждений, и для ответа; при `length` увеличьте лимит.
- `stream` (boolean, optional, default: false) — Возвращает ответ в виде серверных событий SSE. См. раздел о потоковой передаче.
- `temperature` (double, optional) — Температура семплирования. Меняйте либо этот параметр, либо `top_p`, но не оба сразу.
- `top_p` (double, optional) — Порог суммарной вероятности для выборки (nucleus sampling).
- `stop` (V1ChatCompletionsPostRequestBodyContentApplicationJsonSchemaStop, optional) — Одна или несколько последовательностей, останавливающих генерацию.
- `tools` (list of V1ChatCompletionsPostRequestBodyContentApplicationJsonSchemaToolsItems, optional) — Определения функций, которые модель может вызвать. Модель запрашивает вызовы через `tool_calls`. Передайте каждый результат в следующем сообщении `tool` с соответствующим `tool_call_id`.
- `tool_choice` (V1ChatCompletionsPostRequestBodyContentApplicationJsonSchemaToolChoice, optional) — Разрешает, требует или запрещает вызовы инструментов. Проверьте нужные значения с выбранной моделью.

## Response

### 200

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

- `id` (string, optional) — Идентификатор сгенерированного ответа. Сохраняйте его вместе с ID запроса для обращения в поддержку и сверки начислений.
- `model` (string, optional) — Модель, сформировавшая ответ.
- `choices` (list of V1ChatCompletionsPostResponsesContentApplicationJsonSchemaChoicesItems, optional)
- `usage` (V1ChatCompletionsPostResponsesContentApplicationJsonSchemaUsage, optional) — Количество токенов. Оплата рассчитывается по фактическому использованию.

## Errors

### 400 Bad Request Error

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

- `map from string to any`

### 401 Unauthorized Error

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

- `map from string to any`

### 402 Payment Required Error

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

- `map from string to any`

### 403 Forbidden Error

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

- `map from string to any`

### 404 Not Found Error

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

- `map from string to any`

### 429 Too Many Requests Error

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

- `map from string to any`

### 500 Internal Server Error

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

- `map from string to any`

### 503 Service Unavailable Error

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

- `map from string to any`

## Types

### V1ChatCompletionsPostRequestBodyContentApplicationJsonSchemaMessagesItems

- `role` (string, required)
- `content` (V1ChatCompletionsPostRequestBodyContentApplicationJsonSchemaMessagesItemsContent, optional, nullable)
- `name` (string, optional)
- `tool_call_id` (string, optional)
- `tool_calls` (list of V1ChatCompletionsPostRequestBodyContentApplicationJsonSchemaMessagesItemsToolCallsItems, optional)

### V1ChatCompletionsPostRequestBodyContentApplicationJsonSchemaStop

Одна или несколько последовательностей, останавливающих генерацию.

- string
- list of string

### V1ChatCompletionsPostRequestBodyContentApplicationJsonSchemaToolsItems

### V1ChatCompletionsPostRequestBodyContentApplicationJsonSchemaToolChoice

Разрешает, требует или запрещает вызовы инструментов. Проверьте нужные значения с выбранной моделью.

- string
- map from string to any

### V1ChatCompletionsPostResponsesContentApplicationJsonSchemaChoicesItems

- `message` (V1ChatCompletionsPostResponsesContentApplicationJsonSchemaChoicesItemsMessage, optional)
- `finish_reason` (string, optional) — `stop` означает завершённый ответ, `tool_calls` — запрос вызова инструментов, `length` — достижение `max_tokens`.

### V1ChatCompletionsPostResponsesContentApplicationJsonSchemaUsage

Количество токенов. Оплата рассчитывается по фактическому использованию.

- `completion_tokens_details` (V1ChatCompletionsPostResponsesContentApplicationJsonSchemaUsageCompletionTokensDetails, optional)

### V1ChatCompletionsPostRequestBodyContentApplicationJsonSchemaMessagesItemsContent

- string
- list of V1ChatCompletionsPostRequestBodyContentApplicationJsonSchemaMessagesItemsContentOneOf1Items

### V1ChatCompletionsPostRequestBodyContentApplicationJsonSchemaMessagesItemsToolCallsItems

### V1ChatCompletionsPostResponsesContentApplicationJsonSchemaChoicesItemsMessage

- `content` (string, optional) — Текст ответа.
- `reasoning_content` (string, optional) — Текст рассуждений у моделей рассуждений. Оплачивается как вывод.
- `tool_calls` (list of V1ChatCompletionsPostResponsesContentApplicationJsonSchemaChoicesItemsMessageToolCallsItems, optional) — Вызовы функций, которые модель просит выполнить. Появляются при `finish_reason`, равном `tool_calls`.

### V1ChatCompletionsPostResponsesContentApplicationJsonSchemaUsageCompletionTokensDetails

- `reasoning_tokens` (integer, optional) — Токены рассуждений. Уже включены в `completion_tokens` и оплачиваются как вывод.

### V1ChatCompletionsPostRequestBodyContentApplicationJsonSchemaMessagesItemsContentOneOf1Items

- `type` (string, optional)
- `text` (string, optional)
- `image_url` (V1ChatCompletionsPostRequestBodyContentApplicationJsonSchemaMessagesItemsContentOneOf1ItemsImageUrl, optional)
- `source` (V1ChatCompletionsPostRequestBodyContentApplicationJsonSchemaMessagesItemsContentOneOf1ItemsSource, optional)

### V1ChatCompletionsPostResponsesContentApplicationJsonSchemaChoicesItemsMessageToolCallsItems

### V1ChatCompletionsPostRequestBodyContentApplicationJsonSchemaMessagesItemsContentOneOf1ItemsImageUrl

- string
- V1ChatCompletionsPostRequestBodyContentApplicationJsonSchemaMessagesItemsContentOneOf1ItemsImageUrl1

### V1ChatCompletionsPostRequestBodyContentApplicationJsonSchemaMessagesItemsContentOneOf1ItemsSource

- `type` (string, optional)
- `media_type` (string, optional)
- `data` (string, optional)
- `url` (string, optional)

### V1ChatCompletionsPostRequestBodyContentApplicationJsonSchemaMessagesItemsContentOneOf1ItemsImageUrl1

- `url` (string, optional)
- `detail` (string, optional)

## Examples

**Request**

```json
{
  "model": "deepseek-v4.1-flash",
  "messages": [
    {
      "role": "user",
      "content": "Design a resilient webhook retry strategy for a payments API."
    }
  ],
  "max_tokens": 2000
}
```

**Response**

```json
{
  "id": "chatcmpl-example",
  "model": "deepseek-v4.1-flash",
  "choices": [
    {
      "message": {
        "content": "Retry with exponential backoff and jitter, and make every handler idempotent.",
        "role": "assistant"
      },
      "finish_reason": "stop",
      "index": 0
    }
  ],
  "usage": {
    "completion_tokens": 16,
    "prompt_tokens": 19,
    "total_tokens": 35
  },
  "created": 1791993600,
  "object": "chat.completion"
}
```

**SDK Code**

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

url = "https://direct.beatapi.io/v1/chat/completions"

payload = {
    "model": "deepseek-v4.1-flash",
    "messages": [
        {
            "role": "user",
            "content": "Design a resilient webhook retry strategy for a payments API."
        }
    ],
    "max_tokens": 2000
}
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/v1/chat/completions';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"model":"deepseek-v4.1-flash","messages":[{"role":"user","content":"Design a resilient webhook retry strategy for a payments API."}],"max_tokens":2000}'
};

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/v1/chat/completions"

	payload := strings.NewReader("{\n  \"model\": \"deepseek-v4.1-flash\",\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": \"Design a resilient webhook retry strategy for a payments API.\"\n    }\n  ],\n  \"max_tokens\": 2000\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/v1/chat/completions")

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  \"model\": \"deepseek-v4.1-flash\",\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": \"Design a resilient webhook retry strategy for a payments API.\"\n    }\n  ],\n  \"max_tokens\": 2000\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/v1/chat/completions")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"model\": \"deepseek-v4.1-flash\",\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": \"Design a resilient webhook retry strategy for a payments API.\"\n    }\n  ],\n  \"max_tokens\": 2000\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://direct.beatapi.io/v1/chat/completions', [
  'body' => '{
  "model": "deepseek-v4.1-flash",
  "messages": [
    {
      "role": "user",
      "content": "Design a resilient webhook retry strategy for a payments API."
    }
  ],
  "max_tokens": 2000
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

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

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

var client = new RestClient("https://direct.beatapi.io/v1/chat/completions");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"model\": \"deepseek-v4.1-flash\",\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": \"Design a resilient webhook retry strategy for a payments API.\"\n    }\n  ],\n  \"max_tokens\": 2000\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

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

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "model": "deepseek-v4.1-flash",
  "messages": [
    [
      "role": "user",
      "content": "Design a resilient webhook retry strategy for a payments API."
    ]
  ],
  "max_tokens": 2000
] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://direct.beatapi.io/v1/chat/completions")! 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()
```