Регистрация

Первый запрос

От пустого терминала до ответа модели — три шага и одна изменённая строка в коде.

01 Создайте ключ

Откройте консоль, пополните баланс и перейдите в раздел «Ключи». Кнопка «Создать ключ» просит имя — назовите ключ по сервису, который будет им пользоваться: backend-prod, bot-staging. Так ключ можно отозвать, не задев остальные интеграции.

  • Секрет показывается один раз. Скопируйте его сразу — в списке остаются только префикс и дата создания.
  • Ключ нельзя восстановить. Потеряли — отзовите старый и выпустите новый, это занимает секунды.
  • Ключей может быть сколько угодно. Баланс и лимиты общие на аккаунт, расход виден по каждому ключу отдельно.

Ключ — это доступ к вашему балансу. Не храните его в репозитории и не подставляйте в код, который выполняется в браузере: любой запрос из фронтенда отдаёт ключ пользователю. Обращайтесь к API со своего бэкенда.

02 Сохраните ключ в переменную окружения

Дальше во всех примерах ключ читается из переменной TOKENDOCK_API_KEY. Это избавляет от случайного коммита секрета и позволяет менять ключ, не трогая код.

bash · zsh
# macOS и Linux — переменная в текущей сессии
export TOKENDOCK_API_KEY="sk-td-4f9c1a2e8b7d3056a1c9e4f2b8d70a63"

# чтобы ключ пережил перезапуск терминала
echo 'export TOKENDOCK_API_KEY="sk-td-4f9c1a2e8b7d3056a1c9e4f2b8d70a63"' >> ~/.zshrc
powershell
# Windows PowerShell — переменная в текущей сессии
$env:TOKENDOCK_API_KEY = "sk-td-4f9c1a2e8b7d3056a1c9e4f2b8d70a63"

# постоянная переменная пользователя
setx TOKENDOCK_API_KEY "sk-td-4f9c1a2e8b7d3056a1c9e4f2b8d70a63"

В проекте держите ключ в .env, а сам файл — в .gitignore. В CI и на сервере используйте штатное хранилище секретов, а не переменные в конфиге сборки.

03 Отправьте первый запрос

Начнём с openai/gpt-4.1-mini — недорогая модель с контекстом 1M токенов, её хватает для проверки связки. Полный список id — в каталоге.

bash · curl
curl https://api.tokendock.cloud/v1/chat/completions \
  -H "Authorization: Bearer $TOKENDOCK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4.1-mini",
    "messages": [
      { "role": "user", "content": "Привет. Ответь одним предложением." }
    ]
  }'

Тот же запрос через официальные SDK. Ставим библиотеку — код ниже работает и с Python, и с Node.js без единой строчки, специфичной для TokenDock.

bash · установка
pip install openai       # Python
npm install openai       # Node.js
python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.tokendock.cloud/v1",
    api_key=os.environ["TOKENDOCK_API_KEY"],
)

response = client.chat.completions.create(
    model="openai/gpt-4.1-mini",
    messages=[
        {"role": "user", "content": "Привет. Ответь одним предложением."},
    ],
)

print(response.choices[0].message.content)
print(response.usage)
javascript · node.js
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.tokendock.cloud/v1",
  apiKey: process.env.TOKENDOCK_API_KEY,
});

const response = await client.chat.completions.create({
  model: "openai/gpt-4.1-mini",
  messages: [
    { role: "user", content: "Привет. Ответь одним предложением." },
  ],
});

console.log(response.choices[0].message.content);
console.log(response.usage);

Единственное отличие от кода, который ходит напрямую к OpenAI — параметр base_url (в Node.js — baseURL). Всё остальное совпадает: те же методы, те же поля, те же ошибки.

Что вернётся

Ответ приходит в формате OpenAI. Текст лежит в choices[0].message.content, причина остановки — в finish_reason, потраченные токены — в usage.

json · ответ
{
  "id": "chatcmpl-td-9f2c41ba7e0d",
  "object": "chat.completion",
  "created": 1787046060,
  "model": "openai/gpt-4.1-mini",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Привет — на связи, спрашивайте."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 21,
    "completion_tokens": 9,
    "total_tokens": 30
  }
}
  • finish_reason: "stop" — модель закончила сама. "length" означает, что упёрлись в max_tokens.
  • prompt_tokens — всё, что ушло в модель, включая system-сообщение и описания tools.
  • completion_tokens — то, что модель сгенерировала. По этим двум числам считается стоимость запроса.
Все параметры и поля ответа

Проверить баланс и расход

Баланс виден в шапке консоли и обновляется после каждого запроса. Раздел «Расходы» показывает историю: дата, модель, ключ, число токенов и стоимость строки. Фильтр по ключу отвечает на вопрос «какой сервис съел деньги», фильтр по модели — «на чём именно».

  • Списание происходит по факту ответа — по usage, а не по оценке заранее.
  • Цены в каталоге указаны за 1M токенов, отдельно вход и выход.
  • Когда баланс уходит в ноль, API отвечает 402, а не начинает копить долг.
Как считается стоимость

Если что-то не работает

Четыре ответа, на которые приходится большая часть первых запросов.

Код Что видно Что делать
401 authentication_error — ключ не принят Переменная окружения пуста в новой сессии терминала или ключ отозван. Проверьте значение и выпустите новый ключ в консоли.
402 insufficient_quota — нет средств Баланс ушёл в ноль. Пополните счёт в консоли — запросы возобновятся сразу после зачисления.
404 model_not_found — модель не найдена Нужен полный id из каталога, вместе с вендором: openai/gpt-4.1-mini, а не gpt-4.1-mini.
429 rate_limit_error — слишком часто Превышен лимит RPM или TPM. Повторите запрос с экспоненциальной задержкой, при постоянной нагрузке запросите расширение лимитов.

Если ответ вообще не приходит — проверьте, что из сети открыт исходящий HTTPS на api.tokendock.cloud, и что корпоративный прокси не подменяет сертификат. Разбор сетевых ограничений — в разделе интеграции и SDK.

Полный список кодов ошибок