Docs
Quickstart
Three steps: get a key, send a request, read the reply.
- Open the Novion Console, sign in, and create an API key under API keys. Copy it — it's shown once.
- Save it as an environment variable:
export NOVION_API_KEY=nv-sk-… - Send your first request:
curl https://api.novion.currentflo.com/v1/chat/completions \
-H "Authorization: Bearer $NOVION_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"novion-core","messages":[{"role":"user","content":"Hello, Novion"}]}'
Base URL: https://api.novion.currentflo.com/v1
Authentication
Send your key on every request, either way:
Authorization: Bearer nv-sk-…
# or
x-api-key: nv-sk-…
Keep keys secret. Novion stores only a hash, so a lost key can't be shown again — revoke it in the Console and make a new one.
Models
| ID | Name | Good for |
|---|---|---|
novion-core | Novion Core | Fast everyday chat, tools and simple tasks (default) |
gypsy-x | Gypsy X | Reasoning, research, comparisons |
novamind | NovaMind | People, psychology, communication |
nql-lite | NQL Lite | Code |
moonshot | Moonshot | Scenarios and forecasts |
Details on the Models page.
Chat completions
POST /v1/chat/completions — OpenAI format. system messages are supported inside messages.
{
"model": "gypsy-x",
"messages": [
{"role": "system", "content": "Answer in 3 bullets."},
{"role": "user", "content": "Compare solar leasing vs buying"}
],
"max_tokens": 600,
"temperature": 0.6
}
Response:
{
"id": "chatcmpl-…", "object": "chat.completion", "model": "gypsy-x",
"choices": [{"index": 0, "message": {"role": "assistant", "content": "…"}, "finish_reason": "stop"}],
"usage": {"prompt_tokens": 42, "completion_tokens": 180, "total_tokens": 222},
"novion": {"engine": "…", "latency_ms": 1840}
}
Messages
POST /v1/messages — Anthropic format, with a top-level system.
{
"model": "nql-lite",
"max_tokens": 1024,
"system": "You write Cloudflare Workers.",
"messages": [{"role": "user", "content": "Write a hello-world Worker"}]
}
Returns {"type": "message", "content": [{"type": "text", "text": "…"}], "usage": {…}}.
List models
curl https://api.novion.currentflo.com/v1/models -H "Authorization: Bearer $NOVION_API_KEY"
Errors & limits
| Status | Meaning | What to do |
|---|---|---|
| 400 | Bad request (unknown model, empty messages, too long, stream: true) | Fix the request body. |
| 401 | Missing, wrong or revoked key | Check the key in the Console. |
| 429 | Daily limit reached for this key | Wait for midnight UTC or use another key. |
| 502 | The model is busy or over its limit | Retry in a moment. |
- Each key gets 300 requests a day, reset at midnight UTC.
max_tokensis capped at 4,096; conversations at 60,000 characters.- Streaming isn't available yet.
- If a model is busy, Novion may answer with a smaller engine —
novion.enginetells you which.
SDKs
Python · OpenAI SDK
from openai import OpenAI
client = OpenAI(base_url="https://api.novion.currentflo.com/v1", api_key=NOVION_API_KEY)
r = client.chat.completions.create(model="novion-core", messages=[{"role": "user", "content": "Hi"}])
print(r.choices[0].message.content)
Python · Anthropic SDK
import anthropic
client = anthropic.Anthropic(base_url="https://api.novion.currentflo.com", api_key=NOVION_API_KEY)
r = client.messages.create(model="moonshot", max_tokens=800, messages=[{"role": "user", "content": "3 scenarios for my week"}])
print(r.content[0].text)
JavaScript · fetch
const r = await fetch("https://api.novion.currentflo.com/v1/chat/completions", {
method: "POST",
headers: { "Authorization": "Bearer " + process.env.NOVION_API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ model: "novion-core", messages: [{ role: "user", content: "Hi" }] })
});
console.log((await r.json()).choices[0].message.content);