HTTP 400
Проверьте JSON, max_tokens и поддерживаемые параметры модели.
Рабочий пример Python без сторонних пакетов: ключ, Chat Completions, таймаут, Idempotency-Key, разбор ответа и ошибок.
Базовый адрес — https://tokenmost.ru/v1. Создайте ключ в личном кабинете, выберите модель в каталоге и отправьте первый запрос. Методы, которые ещё не доступны, отмечены отдельно.
Серверное приложение Python может вызвать POST https://tokenmost.ru/v1/chat/completions стандартной библиотекой. Ключ передавайте только из окружения, а полный ID модели берите из каталога. Пример отправляет реальный тарифицируемый запрос.
import json
import os
import uuid
from urllib.error import HTTPError, URLError
from urllib.request import Request, urlopen
key = os.environ["TOKENMOST_API_KEY"]
model = os.environ["TOKENMOST_MODEL"]
body = json.dumps({
"model": model,
"messages": [{"role": "user", "content": "Ответь одним словом: работает"}],
"max_tokens": 32,
}).encode("utf-8")
operation_id = str(uuid.uuid4()) # сохраните для безопасного сетевого повтора
request = Request(
"https://tokenmost.ru/v1/chat/completions",
data=body,
headers={
"Authorization": f"Bearer {key}",
"Content-Type": "application/json",
"Idempotency-Key": operation_id,
},
method="POST",
)
try:
with urlopen(request, timeout=20) as response:
result = json.load(response)
print(result["choices"][0]["message"]["content"])
print("usage:", result.get("usage"))
except HTTPError as error:
print("HTTP:", error.code, error.read(2048).decode("utf-8", "replace"))
except URLError as error:
print("Неопределённый сетевой исход; проверьте историю операции:", operation_id)Укажите TOKENMOST_BASE_URL=https://tokenmost.ru/v1, ключ проекта и точный ID модели из каталога. Пример отправляет запрос в публичный API и может списать средства с баланса по тарифу модели.
import json, os, uuid
from urllib.request import Request, urlopen
body = {
"model": os.environ["TOKENMOST_MODEL"],
"messages": [{"role": "user", "content": "Что такое API?"}],
"max_tokens": 128,
}
request = Request(
os.environ["TOKENMOST_BASE_URL"].rstrip("/") + "/chat/completions",
data=json.dumps(body).encode("utf-8"),
headers={
"Authorization": "Bearer " + os.environ["TOKENMOST_API_KEY"],
"Content-Type": "application/json",
"Idempotency-Key": str(uuid.uuid4()),
},
)
# HTTPError при неуспешном статусе нужно обработать в приложении.
with urlopen(request, timeout=60) as response:
result = json.load(response)
print(result["choices"][0]["message"]["content"])Пример использует стандартную библиотеку Python и синхронный HTTP-запрос. Для массовой нагрузки добавьте контроль одновременных операций и безопасное журналирование без ключа или полного текста.
HTTP 200, текст в choices[0].message.content, usage и запись об операции в кабинете. Не считайте пустой ответ успешным бизнес-результатом.
Один запуск примера создаёт новую платную операцию. Для сетевого повтора используйте прежние тело и Idempotency-Key; повтор с новым ключом может списать средства снова. Лимит max_tokens ограничивает вывод, но входная история тоже тарифицируется.
Не встраивайте ключ в репозиторий, клиентский код или журналы. Для веб-приложения вызов должен идти с вашего сервера.
Проверьте JSON, max_tokens и поддерживаемые параметры модели.
Проверьте переменную TOKENMOST_API_KEY и формат Bearer.
Проверьте баланс и бюджет ключа.
Проверьте полный ID модели и путь /v1/chat/completions.
Уменьшите параллельность и учитывайте Retry-After.
Сохраните Idempotency-Key, проверьте историю операции, затем повторяйте то же тело с тем же ключом.