> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bettertoken.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# OpenAI и Anthropic SDK: подключение к BetterToken

> Подключите OpenAI и Anthropic SDK к BetterToken: Base URL, авторизация и примеры на Python, JavaScript и curl для Chat Completions, Responses и Messages.

Используйте OpenAI SDK с Base URL `https://bettertoken.ai/v1` или Anthropic SDK с `https://bettertoken.ai`. Примеры ниже отправляют короткий текстовый запрос через Chat Completions, Responses или Messages с вашим BetterToken API Key.

## Выберите SDK и Base URL

| API | SDK | Base URL | Заголовок авторизации в HTTP-запросе | Справочник |
| - | - | - | - | - |
| Chat Completions | OpenAI | `https://bettertoken.ai/v1` | `Authorization: Bearer YOUR_API_KEY` | [Chat Completions](/api-reference/chat-completions.md) |
| Responses | OpenAI | `https://bettertoken.ai/v1` | `Authorization: Bearer YOUR_API_KEY` | [Responses](/api-reference/responses.md) |
| Messages | Anthropic | `https://bettertoken.ai`, без `/v1` | `x-api-key: YOUR_API_KEY` | [Messages](/api-reference/messages.md) |

SDK добавляет путь конечной точки и заголовки авторизации. Anthropic SDK также передаёт заголовок версии API. Если вы адаптируете существующий код, сверьтесь со [сравнением протоколов](/faq/concepts/openai-compatible-vs-anthropic-compatible.md).

## Подготовка

Пройдите [быстрый старт](/quickstart.md): создайте BetterToken API Key и пополните баланс. В [каталоге моделей](https://bettertoken.ai/pricing) скопируйте Model ID модели, доступной через нужную конечную точку. Перед запросом замените оба заполнителя ниже.

Задайте переменные в терминале, из которого будете запускать примеры. Команды оболочки на этой странице используют синтаксис macOS / Linux:

```bash theme={null}
export BETTERTOKEN_API_KEY="YOUR_API_KEY"
export BETTERTOKEN_MODEL_ID="YOUR_MODEL_ID"
```

Для Python установите SDK в виртуальное окружение проекта:

```bash theme={null}
python3 -m venv .venv
source .venv/bin/activate
python -m pip install openai anthropic
```

Для JavaScript установите пакеты в проект, сохраните каждый пример в отдельный файл `.mjs` и запустите его через `node`:

```bash theme={null}
npm install openai @anthropic-ai/sdk
```

Все примеры читают ключ из `BETTERTOKEN_API_KEY`. Автоматические повторы SDK отключены, чтобы один тест не превращался незаметно в несколько попыток. Правила повторов для приложения описаны в разделе [ошибок и ограничений](/api-reference/errors.md#повторяйте-временные-сбои).

## Запрос к Chat Completions

Передайте диалог в `messages`. Текст успешного ответа находится в `choices[0].message.content`.

**Python**

```python theme={null}
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["BETTERTOKEN_API_KEY"],
    base_url="https://bettertoken.ai/v1",
    timeout=120.0,
    max_retries=0,
)
response = client.chat.completions.create(
    model=os.environ["BETTERTOKEN_MODEL_ID"],
    messages=[{"role": "user", "content": "Reply with one word: OK"}],
)
print(response.choices[0].message.content)
```

**JavaScript**

```javascript theme={null}
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.BETTERTOKEN_API_KEY,
  baseURL: "https://bettertoken.ai/v1",
  timeout: 120000,
  maxRetries: 0,
});
const response = await client.chat.completions.create({
  model: process.env.BETTERTOKEN_MODEL_ID,
  messages: [{ role: "user", content: "Reply with one word: OK" }],
});
console.log(response.choices[0].message.content);
```

**curl**

```bash theme={null}
curl --fail-with-body --max-time 120 "https://bettertoken.ai/v1/chat/completions" \
  -H "Authorization: Bearer $BETTERTOKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"model\":\"$BETTERTOKEN_MODEL_ID\",\"messages\":[{\"role\":\"user\",\"content\":\"Reply with one word: OK\"}]}"
```

## Запрос к Responses

Передайте запрос в `input`. OpenAI SDK предоставляет свойство `output_text` для удобного чтения текста; HTTP-ответ в формате JSON содержит массив `output`. Проверяйте элементы сообщений и их текстовые блоки: не каждый элемент `output` содержит текст.

**Python**

```python theme={null}
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["BETTERTOKEN_API_KEY"],
    base_url="https://bettertoken.ai/v1",
    timeout=120.0,
    max_retries=0,
)
response = client.responses.create(
    model=os.environ["BETTERTOKEN_MODEL_ID"],
    input="Reply with one word: OK",
)
print(response.output_text)
```

**JavaScript**

```javascript theme={null}
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.BETTERTOKEN_API_KEY,
  baseURL: "https://bettertoken.ai/v1",
  timeout: 120000,
  maxRetries: 0,
});
const response = await client.responses.create({
  model: process.env.BETTERTOKEN_MODEL_ID,
  input: "Reply with one word: OK",
});
console.log(response.output_text);
```

**curl**

```bash theme={null}
curl --fail-with-body --max-time 120 "https://bettertoken.ai/v1/responses" \
  -H "Authorization: Bearer $BETTERTOKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"model\":\"$BETTERTOKEN_MODEL_ID\",\"input\":\"Reply with one word: OK\"}"
```

## Запрос к Messages

Передайте `messages` и обязательный `max_tokens`. В этом коротком примере текстовый ответ содержит блок вида `content[0].text`. В общем случае перебирайте `content` и читайте только блоки с `type: "text"`.

**Python**

```python theme={null}
import os
from anthropic import Anthropic

client = Anthropic(
    api_key=os.environ["BETTERTOKEN_API_KEY"],
    base_url="https://bettertoken.ai",
    timeout=120.0,
    max_retries=0,
)
response = client.messages.create(
    model=os.environ["BETTERTOKEN_MODEL_ID"],
    max_tokens=256,
    messages=[{"role": "user", "content": "Reply with one word: OK"}],
)
for block in response.content:
    if block.type == "text":
        print(block.text)
```

**JavaScript**

```javascript theme={null}
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  apiKey: process.env.BETTERTOKEN_API_KEY,
  baseURL: "https://bettertoken.ai",
  timeout: 120000,
  maxRetries: 0,
});
const response = await client.messages.create({
  model: process.env.BETTERTOKEN_MODEL_ID,
  max_tokens: 256,
  messages: [{ role: "user", content: "Reply with one word: OK" }],
});
for (const block of response.content) {
  if (block.type === "text") console.log(block.text);
}
```

**curl**

```bash theme={null}
curl --fail-with-body --max-time 120 "https://bettertoken.ai/v1/messages" \
  -H "x-api-key: $BETTERTOKEN_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d "{\"model\":\"$BETTERTOKEN_MODEL_ID\",\"max_tokens\":256,\"messages\":[{\"role\":\"user\",\"content\":\"Reply with one word: OK\"}]}"
```

## Частые ошибки

| Симптом | Что проверить и исправить |
| - | - |
| Неверный URL или `404` | Base URL для OpenAI SDK включает `/v1`, для Anthropic SDK — нет. Не добавляйте конечный путь запроса к Base URL SDK. |
| `401` или отсутствуют учётные данные | Примеры явно передают ключ из `BETTERTOKEN_API_KEY`. Прямые запросы OpenAI используют Bearer, прямые запросы Messages — `x-api-key`. |
| Модель не найдена | Замените `YOUR_MODEL_ID` точным Model ID доступной модели из каталога. Проверьте доступность для выбранной конечной точки. |
| Запросы уходят на старый адрес | Проверьте аргументы SDK и унаследованные переменные; см. [очистку конфликтующих переменных окружения](/best-practices.md#очистите-конфликтующие-переменные-окружения). |
| Пустой текст или неполный ответ | Изучите полный ответ и причину остановки; проверьте [лимит выходных токенов](/faq/model-calling/max-tokens.md). |

### Можно ли использовать один ключ для обоих SDK?

Да. Один BetterToken API Key работает со всеми доступными моделями. Для каждого SDK укажите соответствующий Base URL и формат запроса.

### Как добавить потоковую выдачу, инструменты или структурированный ответ?

Поддержка потоковой выдачи и вызова инструментов зависит от модели. Сначала выполните небольшой запрос с вашим Model ID, затем следуйте [руководству по потоковой выдаче и инструментам](/guides/streaming-and-tool-calling.md). О проверке JSON и зависящем от модели структурированном выводе читайте в [FAQ по JSON](/faq/model-calling/structured-json-pydantic.md).

## См. также

* [Обзор API](/api-reference/introduction.md)
* [Поддерживаемые инструменты](/ai-tools/overview.md)
* [Ошибки API и ограничения](/api-reference/errors.md)
* [Безопасность API Key и тайм-ауты](/best-practices.md)
* [Правила оплаты кэша](/faq/service-assurance/cache-billing.md)

## Официальные источники

* [OpenAI Python SDK](https://github.com/openai/openai-python)
* [OpenAI JavaScript SDK](https://github.com/openai/openai-node)
* [Anthropic Python SDK](https://github.com/anthropics/anthropic-sdk-python)
* [Anthropic JavaScript SDK](https://github.com/anthropics/anthropic-sdk-typescript)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.