API-документация
Полное описание REST API NeuroHub: авторизация, каталог, чат, биллинг.
Обзор
Control-plane API (аккаунт, каталог, кошелёк)
https://novastep.tech/api/v1OpenAI-совместимый API (инференс по ключу nh_*)
https://novastep.tech/v1Все эндпоинты обслуживаются единым API-шлюзом https://novastep.tech. Данные — JSON. Ответы с ошибками всегда содержат поле error.code, по которому клиент подставляет локализованное сообщение.
NeuroHub API — REST, JSON. Все запросы (кроме публичных и авторизации) требуют заголовок Authorization: Bearer с токеном.
Access-токен живёт 15 минут, refresh — 30 дней в httpOnly cookie, привязанном к /api.
При 401 клиент автоматически вызывает refresh и повторяет исходный запрос. SSR-страницы не передают токен — refresh scoped на /api.
curl https://novastep.tech/v1/chat/completions \
-H "Authorization: Bearer nh_xxx" \
-H "Content-Type: application/json" \
-d '{"model":"tiny-llama-1b","messages":[{"role":"user","content":"hi"}],"stream":true}'SDK и коллекции
Официальные клиенты для Python и JavaScript (без зависимостей, работают поверх fetch/httpx), а также машиночитаемая спецификация OpenAPI 3.1 и готовая коллекция Postman.
from neurohub import NeuroHub
client = NeuroHub(api_key="nh_xxx")
out = client.chat.completions.create(
model="tiny-llama-1b",
messages=[{"role": "user", "content": "hi"}],
)
print(out["choices"][0]["message"]["content"])import { NeuroHub } from "neurohub";
const client = new NeuroHub({ apiKey: "nh_xxx" });
const out = await client.chat.completions.create({
model: "tiny-llama-1b",
messages: [{ role: "user", content: "hi" }],
});
console.log(out.choices[0].message.content);Авторизация
Access-токен живёт 15 минут, refresh — 30 дней в httpOnly cookie. При 401 клиент сам обновляет токен и повторяет запрос.
- POST
/api/v1/auth/registerРегистрация пользователя
- POST
/api/v1/auth/confirm-emailПодтверждение email
- POST
/api/v1/auth/loginВход, выдаёт access+refresh
- POST
/api/v1/auth/refreshОбновление access-токена
- GET
/api/v1/auth/meТекущий пользователь
- PATCH
/api/v1/users/meОбновить профиль
curl -X POST https://novastep.tech/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com","password":"your-password"}'Модели
- GET
/api/v1/models?q=&sort=popular&type=llmСписок моделей с фильтрами и пагинацией
- GET
/api/v1/models/{slug}Детальная карточка модели
- GET
/api/v1/models/{slug}/versionsВерсии модели
- GET
/api/v1/models/{slug}/cost-estimateОценка стоимости запроса
curl https://novastep.tech/api/v1/models/tiny-llama-1b \
-H "Authorization: Bearer nh_xxx"Чат
Потоковый ответ через Server-Sent Events. Каждый фрейм — JSON-объект с полем type: message.start → message.delta → usage → message.end.
- GET
/api/v1/chat/sessionsСписок сессий чата
- POST
/api/v1/chat/sessionsСоздать сессию
- POST
/api/v1/chat/sessions/{id}/messagesОтправить сообщение (SSE-поток)
- POST
/api/v1/chat/stopПрервать генерацию
- GET
/api/v1/chat/sessions/{id}/exportЭкспорт истории сессии
data: {"type":"message.start","request_id":"req_1a2b","model_id":"..."}
data: {"type":"message.delta","request_id":"req_1a2b","delta":"Hello"}
data: {"type":"usage","request_id":"req_1a2b","usage":{"prompt_tokens":18,"completion_tokens":42},"cost_credits":0.42,"balance_credits":3011.58}
data: {"type":"message.end","request_id":"req_1a2b","message_id":"..."}OpenAI API
Тот же инференс через привычный контракт OpenAI. Авторизация — ключ nh_* в заголовке Authorization. Работает с официальными SDK OpenAI, LangChain и LlamaIndex.
- GET
/v1/modelsСписок доступных моделей (формат OpenAI)
- POST
/v1/chat/completionsЧат-комплишены, stream=true — SSE
from openai import OpenAI
client = OpenAI(base_url="https://novastep.tech/v1", api_key="nh_xxx")
for chunk in client.chat.completions.create(
model="tiny-llama-1b",
messages=[{"role": "user", "content": "hi"}],
stream=True,
):
print(chunk.choices[0].delta.content or "", end="")MCP
Подключайте инструменты Model Context Protocol (файлы, базы данных, GitHub, HTTP, мессенджеры) к агентам и используйте модели NeuroHub как инструмент. Готовые конфиги — в разделе API.
Биллинг
- GET
/api/v1/walletБаланс кошелька
- GET
/api/v1/transactionsLedger операций
- POST
/api/v1/topupsСоздание счёта на пополнение
- POST
/api/v1/me/payoutsЗапрос выплаты автора
- GET
/api/v1/me/earningsДоход автора по моделям
- GET
/api/v1/me/usageИспользование по дням
API-ключи
Ключи nh_* с ограничением scope, лимитом трат и RPS.
- POST
/api/v1/me/api-keysКлючи nh_* с ограничением scope, лимитом трат и RPS.
- GET
/api/v1/me/api-keysКлючи nh_* с ограничением scope, лимитом трат и RPS.
- PATCH
/api/v1/me/api-keys/{key_id}Ключи nh_* с ограничением scope, лимитом трат и RPS.
- DELETE
/api/v1/me/api-keys/{key_id}Ключи nh_* с ограничением scope, лимитом трат и RPS.
Публикация
Создание черновика, правка, версии и публикация. Владелец управляет видимостью и ценами.
- GET
/api/v1/models/mineСписок своих моделей
- POST
/api/v1/modelsСоздать черновик модели
- PATCH
/api/v1/models/{id}Обновить черновик
- POST
/api/v1/models/{id}/versionsСоздать версию
- POST
/api/v1/models/{id}/versions/{vid}/publishОпубликовать версию
- POST
/api/v1/models/{id}/hideСкрыть / показать модель
Загрузка файлов
Мультипарт-загрузка: SHA-256 по частям, PUT на presigned URL, возобновление с подтверждённых частей, проверка расширений и запрещённых артефактов.
- POST
/api/v1/uploadsМультипарт-загрузка: SHA-256 по частям, PUT на presigned URL, возобновление с подтверждённых частей, проверка расширений и запрещённых артефактов.
- POST
/api/v1/uploads/{upload_id}/parts/{part_number}Мультипарт-загрузка: SHA-256 по частям, PUT на presigned URL, возобновление с подтверждённых частей, проверка расширений и запрещённых артефактов.
- POST
/api/v1/uploads/{upload_id}/parts/{part_number}/confirmМультипарт-загрузка: SHA-256 по частям, PUT на presigned URL, возобновление с подтверждённых частей, проверка расширений и запрещённых артефактов.
- POST
/api/v1/uploads/{upload_id}/completeМультипарт-загрузка: SHA-256 по частям, PUT на presigned URL, возобновление с подтверждённых частей, проверка расширений и запрещённых артефактов.
- GET
/api/v1/uploads/{upload_id}/statusМультипарт-загрузка: SHA-256 по частям, PUT на presigned URL, возобновление с подтверждённых частей, проверка расширений и запрещённых артефактов.
Ошибки
Формат ошибки: объект error с полями code, message и опционально param. HTTP-статусы: 4xx — клиент, 5xx — сервер.
{
"error": {
"code": "validation_failed",
"message": "Invalid input",
"param": "input_chars"
}
}