Skip to content
NeuroHub

API-документация

Полное описание REST API NeuroHub: авторизация, каталог, чат, биллинг.

Обзор

Control-plane API (аккаунт, каталог, кошелёк)

https://novastep.tech/api/v1

OpenAI-совместимый 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
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 и коллекции

v1.0

Официальные клиенты для Python и JavaScript (без зависимостей, работают поверх fetch/httpx), а также машиночитаемая спецификация OpenAPI 3.1 и готовая коллекция Postman.

pip install neurohub
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"])
npm install neurohub
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

    Обновить профиль

POST /api/v1/auth/login
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

    Оценка стоимости запроса

GET /api/v1/models/{slug}
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

    Экспорт истории сессии

text/event-stream — one JSON object per frame
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

Python (openai SDK)
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/transactions

    Ledger операций

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

chat
embeddings
images
audio

Публикация

Создание черновика, правка, версии и публикация. Владелец управляет видимостью и ценами.

  • 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 — сервер.

422 Validation error
{
  "error": {
    "code": "validation_failed",
    "message": "Invalid input",
    "param": "input_chars"
  }
}
401 unauthorized
403 forbidden
404 not_found
409 conflict
429 rate_limited

Ключи и коннекторы — в разделе API →