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

# Muse Chat Completions

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

Вызывайте Muse Wonder через единый метод OpenAI Chat Completions с ключом BeatAPI.- Muse Wonder доступна через `POST /v1/chat/completions`.
- Текст и изображения на входе, потоковая передача, вызовы функций и контекстное окно на 1M токенов.
- Совместимо с OpenAI SDK: измените базовый URL и используйте ключ BeatAPI.
- Эти же модели также доступны через [OpenAI Responses](/text-api/muse/responses) и [Anthropic Messages](/text-api/muse/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 за миллион токенов | Примечания                                                                                                                |
| ------------- | ----------------- | --------------------------- | ------------------------------------------------------------------------------------------------------ | ---------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `muse-wonder` | 1 048 576         | 131 072                     | Meta Muse Wonder: передовая модель с рассуждениями для сложных личных и профессиональных задач агентов | \$4.00                       | \$20.00                       | Передовая модель Meta с рассуждениями для сложных личных и профессиональных задач агентов. Требуется пополненный аккаунт. |- Указаны базовые цены со скидкой. Не включены тарифы для длинного контекста, кэшированного ввода и записи в кэш. См. [страницу цен](https://beatapi.io/pricing).
- `—` означает, что каталог не публикует это значение.## Быстрый стартУстановите пакет `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": "muse-wonder",
  "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="muse-wonder",
    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": "muse-wonder",
  "max_tokens": 2000,
  "messages": [
    {
      "role": "user",
      "content": "Design a resilient webhook retry strategy for a payments API."
    }
  ]
});
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
ОбязательноТочный идентификатор модели.**Допустимые значения**: `muse-wonder`- Каждый ID обозначает отдельную модель, а не псевдоним другой.
- Вызовите `GET /v1/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
НеобязательноРазрешает, требует или запрещает вызовы инструментов. Проверьте нужные значения с выбранной моделью.## ОтветБез потоковой передачи вызов возвращает один JSON-объект. Ниже приведён сокращённый пример.```json
{
  "id": "chatcmpl-example",
  "object": "chat.completion",
  "created": 1791993600,
  "model": "muse-wonder",
  "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`   | Количество токенов. Оплата рассчитывается по фактическому использованию.                                                 |## Потоковая передачаУстановите `"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).## Примечания- Muse также доступна через [OpenAI Responses](/text-api/muse/responses) и [Anthropic Messages](/text-api/muse/messages).
- Для `muse-wonder` требуется пополненный аккаунт. Аккаунт только с регистрационным бонусом не может вызывать эту модель.
- Muse Wonder рассуждает перед ответом. Токены рассуждений входят в выходные токены и оплачиваются как вывод.
- Передавайте изображения частями `image_url` в `messages[].content`.
- Храните ключ только на доверенном сервере и записывайте ID запроса из ответа. Повторяйте запросы только при ошибках `429`, `500` и `503`.

Reference: https://docs.beatapi.io/api-reference/text-api/muse-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` со своим ключом, чтобы узнать, какие модели ему доступны. `muse-wonder`
  - Allowed values: `muse-wonder`
- `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

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

### V1ChatCompletionsPostRequestBodyContentApplicationJsonSchemaMessagesItemsContent

- string
- list of V1ChatCompletionsPostRequestBodyContentApplicationJsonSchemaMessagesItemsContentOneOf1Items

### V1ChatCompletionsPostRequestBodyContentApplicationJsonSchemaMessagesItemsToolCallsItems

### V1ChatCompletionsPostResponsesContentApplicationJsonSchemaChoicesItemsMessage

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

### 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": "muse-wonder",
  "messages": [
    {
      "role": "user",
      "content": "Design a resilient webhook retry strategy for a payments API."
    }
  ],
  "max_tokens": 2000
}
```

**Response**

```json
{
  "id": "chatcmpl-example",
  "model": "muse-wonder",
  "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": "muse-wonder",
    "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":"muse-wonder","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\": \"muse-wonder\",\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\": \"muse-wonder\",\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\": \"muse-wonder\",\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": "muse-wonder",
  "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\": \"muse-wonder\",\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": "muse-wonder",
  "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()
```