Introduction
Base URL: https://www.novabrain.online/api/v1
POST /chat/completions— chat (+ stream)GET /models— models allowed for your keyGET /usage— usage summary
Quick Start
- Sign in and open My Studio → Nova API.
- Click Create Key and copy
nv_live_…immediately (shown once). - Send a completion request:
curl https://www.novabrain.online/api/v1/chat/completions \
-H "Authorization: Bearer nv_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "nova-auto",
"messages": [
{"role": "user", "content": "Hello"}
]
}'Playground
Run a real request without writing code. The playground uses a session-authenticated server proxy — it never puts your Nova API key in the URL and never exposes provider secrets.
Live
Try Nova API
Real requests via a secure session proxy — your Nova key never goes in the URL, and provider secrets never reach the browser.
Sign in to run a real playground request against your API wallet.
Authentication
Every gateway request requires a Bearer Nova API key (not a provider secret):
Authorization: Bearer nv_live_YOUR_KEYKeys are stored hashed. Provider API keys never appear in responses or client-facing pages.
Models Try it
nova-auto is a router alias. You may also pass explicit model IDs allowed for your key. Enabled catalog (live registry):
Live from the pricing registry · Nova markup 20% included in Nova prices · updates without redeploy
| Model | Provider | Input / 1M | Output / 1M | Status |
|---|---|---|---|---|
gemini-1.5-flash | gemini | $0.090 | $0.360 | Enabled |
gemini-2.0-flash | gemini | $0.120 | $0.480 | Enabled |
gemini/gemini-2.0-flash | gemini | $0.120 | $0.480 | Enabled |
groq/llama-3.3-70b-versatile | groq | $0.708 | $0.948 | Enabled |
llama-3.1-8b-instant | groq | $0.060 | $0.096 | Enabled |
llama-3.3-70b-versatile | groq | $0.708 | $0.948 | Enabled |
moonshot-v1-8k | kimi | $0.240 | $0.240 | Enabled |
moonshot-v1-auto | kimi | $0.240 | $0.240 | Enabled |
nova-auto | nova | $0.300 | $0.960 | Enabled |
gpt-4o | openai | $3.00 | $12.00 | Enabled |
gpt-4o-mini | openai | $0.180 | $0.720 | Enabled |
openai/gpt-4o | openai | $3.00 | $12.00 | Enabled |
openai/gpt-4o-mini | openai | $0.180 | $0.720 | Enabled |
anthropic/claude-3.5-sonnet | openrouter | $3.60 | $18.00 | Enabled |
google/gemini-2.0-flash-001 | openrouter | $0.120 | $0.480 | Enabled |
openai/gpt-4o-mini | openrouter | $0.180 | $0.720 | Enabled |
openrouter/auto | openrouter | $0.240 | $0.960 | Enabled |
kimi-k3 | starimg | $0.240 | $0.240 | Enabled |
List models for your key: GET https://www.novabrain.online/api/v1/models
Chat Completions Try it
POST https://www.novabrain.online/api/v1/chat/completions
{
"model": "nova-auto",
"messages": [
{"role": "user", "content": "Hello"}
],
"temperature": 0.7,
"max_tokens": 256
}Successful responses are OpenAI-compatible JSON, for example:
{
"id": "chatcmpl_…",
"object": "chat.completion",
"created": 1710000000,
"model": "nova-auto",
"choices": [
{
"index": 0,
"message": { "role": "assistant", "content": "Hello!" },
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 12,
"completion_tokens": 4,
"total_tokens": 16
}
}Response headers may include x-nova-request-id, x-nova-provider, and x-nova-charged-usd.
Streaming Try it
Set "stream": true for Server-Sent Events. Chunks are data: {...} lines ending with data: [DONE]. Usage is settled once after the stream completes.
curl https://www.novabrain.online/api/v1/chat/completions \
-H "Authorization: Bearer nv_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-N \
-d '{
"model": "nova-auto",
"messages": [{"role": "user", "content": "Say hi"}],
"stream": true
}'Usage
GET https://www.novabrain.online/api/v1/usage returns token totals and remaining quota for the authenticated key. The dashboard at /my-studio?ucc=api shows balance, spent, requests, and recent usage.
Errors
Errors follow OpenAI-style JSON:
{
"error": {
"message": "…",
"type": "…",
"param": null,
"code": "…"
}
}- 401 invalid_api_key — missing/invalid Bearer key
{ "error": { "message": "Invalid API key.", "type": "invalid_request_error", "param": null, "code": "invalid_api_key" } } - 402 insufficient_credits — wallet cannot cover the estimated cost (provider is not called)
{ "error": { "message": "Insufficient Nova API credits", "type": "insufficient_credits", "param": null, "code": "insufficient_credits" } } - 429 rate_limit — per-key RPM or quota exhausted (
rate_limit_exceeded/insufficient_quota) - Provider errors — mapped to safe codes such as
provider_unavailable,provider_rate_limit,provider_auth_error(no upstream secrets leaked) - Invalid model — model not allowed for the key (
model_not_allowed, HTTP 403) - Validation errors — e.g. missing
messagesarray (invalid_request/invalid_json)
Rate Limits
Each key has an RPM limit (default applied at creation). Exceeding it returns 429 with Retry-After. Optional monthly token quotas apply per user/project.
API Keys
Create and revoke keys only from the dashboard (session auth). The public product pages never display provider secrets or internal configuration.
Credits
API usage debits a dedicated API credits wallet (separate from social/other wallets). New wallets may receive $1 free credit when enabled. Top up with Add API Credits — same NowPayments flow, plan api_credits.
OpenAI SDK
Point the official SDK at Nova:
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.NOVA_API_KEY,
baseURL: "https://www.novabrain.online/api/v1"
});JavaScript
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.NOVA_API_KEY,
baseURL: "https://www.novabrain.online/api/v1",
});
const completion = await client.chat.completions.create({
model: "nova-auto",
messages: [{ role: "user", content: "Hello from Nova API" }],
});
console.log(completion.choices[0]?.message?.content);
// Streaming
const stream = await client.chat.completions.create({
model: "nova-auto",
messages: [{ role: "user", content: "Stream a short hello" }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content || "");
}Python
from openai import OpenAI
import os
client = OpenAI(
api_key=os.environ["NOVA_API_KEY"],
base_url="https://www.novabrain.online/api/v1",
)
completion = client.chat.completions.create(
model="nova-auto",
messages=[{"role": "user", "content": "Hello from Nova API"}],
)
print(completion.choices[0].message.content)
# Streaming
stream = client.chat.completions.create(
model="nova-auto",
messages=[{"role": "user", "content": "Stream a short hello"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content or ""
print(delta, end="")cURL
curl https://www.novabrain.online/api/v1/chat/completions \
-H "Authorization: Bearer nv_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "nova-auto",
"messages": [
{"role": "user", "content": "Hello"}
]
}'