Novita AI Provider Guide
Novita AI is a Tier-2 catalog provider: OpenAI-wire-compatible with no
behavioural quirks, so its entire integration is one JSON file
(src/lib/providers/catalog/novita.json) rather than hand-written code. That
file is the source of truth for everything on this page.
Key Facts
- Provider id:
novita - Protocol: OpenAI-compatible (
/chat/completions) - Base URL:
https://api.novita.ai/openai/v1 - Default model:
zai-org/glm-5.3-flash - Models in catalog: 5
- Streaming: supported
- Tool calling: supported (native)
- Structured output: supported, including together with tool calling in
the same request — Novita is verified to accept
toolsandresponse_formatat once, unlike several sibling catalog providers. - Embeddings: not supported
- Billing: free-tier
- Key format: keys match
^sk_[A-Za-z0-9_-]+$
Quick Start
1. Get an API key
- Visit: https://novita.ai/settings/key-management and sign in
- Generate an API key (it will start with
sk_) - Set
NOVITA_API_KEYin your .env file
2. Configure
export NOVITA_API_KEY=sk_your-api-key
export NOVITA_MODEL=zai-org/glm-5.3-flash # optional — overrides the default model
export NOVITA_BASE_URL=https://api.novita.ai/openai/v1 # optional — self-hosted or proxy
3. Use it
import { NeuroLink } from "@juspay/neurolink";
const neurolink = new NeuroLink();
const result = await neurolink.generate({
input: { text: "Explain context windows in one paragraph." },
provider: "novita",
model: "zai-org/glm-5.3-flash",
});
console.log(result.content);
# CLI
npx @juspay/neurolink generate "Hello" --provider novita
Per-request credentials work as they do for every provider:
await neurolink.generate({
input: { text: "Hello" },
provider: "novita",
credentials: { novita: { apiKey: process.env.NOVITA_API_KEY } },
});
Models
| Model | Context | Vision | $/M in · out | Notes |
|---|---|---|---|---|
zai-org/glm-5.3-flash ⭐ | 128K | no | $0.075 / $0.25 (cached $0.015) | Recommended default and test model; reasoning model — check finish_reason before trusting a short response. |
meta-llama/llama-3.3-70b-instruct | 128K | no | — | Plain instruct chat model; fallback. |
deepseek/deepseek-v3-0324 | 128K | no | — | Non-reasoning DeepSeek chat model; fallback. |
qwen/qwen-2.5-72b-instruct | 128K | no | — | Plain instruct chat model; fallback. |
google/gemma-3-27b-it | 128K | no | — | Non-reasoning instruct model; fallback. |
Context window shown is the catalog default of 128,000 tokens; the default
max output is 4,096 tokens — noticeably smaller than most catalog providers,
so raise maxTokens explicitly for longer completions or reasoning-heavy
prompts on the default model.
Fallback order when the default is unavailable: meta-llama/llama-3.3-70b-instruct →
deepseek/deepseek-v3-0324 → qwen/qwen-2.5-72b-instruct →
google/gemma-3-27b-it.
Verification status
Tier-2 onboarding requires evidence before a provider is accepted, and
pnpm run verify:provider-onboarding gates it in CI. This is what the
catalog records for Novita AI:
| Probe | Result |
|---|---|
| Roster | authenticated GET /openai/v1/models, HTTP 200, 2026-09-05 |
| Auth rejection | HTTP 401 (FAILED_TO_AUTH), 2026-09-05 |
| Live capability sweep | 2026-09-05, probed against the default model. Chat, streaming, and a real structured tool call all passed. response_format: json_object succeeded both alone and combined with tools in the same request — confirmed at the SDK level, which is why structuredOutputWithTools is true for this provider, unlike Friendli or Morph. |
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
FAILED_TO_AUTH | NOVITA_API_KEY unset, wrong, or not sk_-prefixed | Rotate the key at https://novita.ai/settings/key-management |
MODEL_NOT_FOUND | The roster changed since 2026-09-05 | Pick a current id from https://novita.ai/models or the authenticated /openai/v1/models roster |
| Truncated or empty content on the default model | zai-org/glm-5.3-flash is a reasoning model and the catalog default max output is only 4,096 tokens | Raise maxTokens for longer or reasoning-heavy completions |