Neuralwatt Provider Guide
Neuralwatt 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/neuralwatt.json) rather than hand-written code.
That file is the source of truth for everything on this page.
Verification status: this entry is docs- and roster-verified, not yet live-verified. It was onboarded credential-free — no API key was created, no signup was completed, and no authenticated or
POSTrequest was sent to Neuralwatt. Everything below comes from Neuralwatt's public documentation (docs.neuralwatt.com) and an unauthenticatedGET /v1/modelscall. See Live verification for what a follow-up pass with a real key still needs to confirm.
Key Facts
- Provider id:
neuralwatt - Protocol: OpenAI-compatible (
/chat/completions) - Base URL:
https://api.neuralwatt.com/v1 - Default model:
glm-5.3— the model used in every code sample on Neuralwatt's own quickstart page (curl, Python and Node.js) - Models in catalog: 8 (of 21 on the live roster; see Models)
- Streaming: supported (
stream: true, SSE, terminaldata: [DONE]) - Tool calling: model-dependent. Neuralwatt's own tool-calling guide
states plainly that "not all models support tool calling" and directs
callers to check each model's capabilities before relying on it — every
model in this catalog currently reports
tools: trueon the live roster, but that can change per model, so NeuroLink declares this"model-dependent"rather than a blankettrue. - Structured output: not documented. The
/v1/modelsroster exposes ajson_mode: truecapability flag on every model, but the chat-completions API reference does not document aresponse_formatparameter anywhere — neitherjson_objectnorjson_schemamode is described. Because the request-side contract isn't documented,capabilities.structuredOutputis leftfalsehere rather than trusted from the flag alone. - Tools + streaming together / tools + structured output together: not
documented and not probed (credential-free onboarding), so both are
false. - Embeddings: not supported (no embeddings endpoint in the docs)
- Thinking / reasoning: supported —
reasoning_effort(none/minimal/low/medium/high/xhigh/max) andthinking_token_budgetare documented request parameters, and each model's roster entry declares its own reasoning defaults. - Billing: free-with-card — new accounts start at a $0 balance; adding a payment method grants a $1.00 trial credit valid 30 days, then usage is pay-per-token
- Key format: starts with
sk-; full character set not specified in the docs, soapiKeyFormatis leftnullrather than guessed - Notable extras: per-request energy and cost reporting via SSE comment
lines (
: energy {...},: cost {...}) andX-Request-Cost-USDheaders — not modeled by NeuroLink's catalog schema and not required for the integration to work
Quick Start
1. Get an API key
- Visit: https://portal.neuralwatt.com and sign up
- Add a payment method in Dashboard > Billing — new accounts start with a $0 balance, and adding a card grants $1.00 in free trial credit (no charge is made; the credit is valid for 30 days)
- Navigate to Dashboard > API Keys and create a new key — copy it
immediately, it is shown in full only once and starts with
sk- - Set
NEURALWATT_API_KEYin your.envfile
2. Configure
export NEURALWATT_API_KEY=your-api-key
export NEURALWATT_MODEL=glm-5.3 # optional — overrides the default model
export NEURALWATT_BASE_URL=https://api.neuralwatt.com/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: "neuralwatt",
model: "glm-5.3",
});
console.log(result.content);
# CLI
npx @juspay/neurolink generate "Hello" --provider neuralwatt
Per-request credentials work as they do for every provider:
await neurolink.generate({
input: { text: "Hello" },
provider: "neuralwatt",
credentials: { neuralwatt: { apiKey: process.env.NEURALWATT_API_KEY } },
});
Models
| Model | Context | Max output | Vision | $/M in · out · cached | Notes |
|---|---|---|---|---|---|
glm-5.3 ⭐ | 1M | — | no | $1.45 / $4.50 / $0.145 | ZhipuAI GLM 5.3 — used in every quickstart code sample; reasoning is mandatory on this model (default effort max). Max output tokens undocumented for this model on the roster. |
glm-5.3-flash | 1M | — | yes | $0.15 / $0.50 / $0.03 | Lighter/cheaper GLM 5.3 sibling; roster-listed only; fallback. |
qwen-3.8-27b | 262K | 131,072 | yes | $0.45 / $3.20 / $0.25 | Dense 27B VL model; first entry on the live roster; used as models.visionModel (documented image limits: 20 images/request, 200 total). |
qwen3.6-35b | 262K | — | yes | $0.29 / $1.15 / $0.029 | Roster-listed only; fallback. |
kimi-k2.7-code | 262K | — | yes | $0.95 / $4.00 / $0.095 | MoonshotAI's code-oriented Kimi model; roster-listed only; fallback. |
kimi-k3 | 1M | — | yes | $3.00 / $15.00 / $0.30 | MoonshotAI's general-purpose Kimi model; roster-listed only; fallback. |
deepseek-v4.1-flash | 1M | 393,216 | yes | $0.15 / $0.60 / $0.015 | Roster-listed only; fallback. |
gemma-4-31b | 262K | 16,384 | yes | $0.144 / $0.42 / $0.0144 | NVIDIA-owned Gemma 4 31B build; roster-listed only; fallback. |
Context window shown is each model's own max_context_length from the live
roster; the catalog's provider-wide defaultContextWindow (1,048,560) and
defaultMaxOutputTokens (4,096) apply to any model that doesn't declare its
own value — 4,096 is a generic placeholder, not a Neuralwatt-documented
ceiling, since glm-5.3 (the default model) has no max_output_tokens in
its own roster entry.
The live roster carries 21 models in total (Qwen, MoonshotAI Kimi,
ZhipuAI GLM, DeepSeek and an NVIDIA Gemma build); this catalog curates 8 —
one representative per non--flex/non--fast pricing tier per model
family. The -flex (discounted async) and -fast (lower-latency) pricing
variants seen on the roster (e.g. glm-5.3-flex, qwen3.6-35b-fast) are not
included as separate catalog entries.
Fallback order when the default is unavailable: glm-5.3-flash →
qwen-3.8-27b → qwen3.6-35b → kimi-k2.7-code → kimi-k3 →
deepseek-v4.1-flash → gemma-4-31b.
Live verification (still needed)
This entry was onboarded without credentials, from Neuralwatt's public
documentation and an unauthenticated GET /v1/models call only. It is
docs- and roster-verified, not live-verified. Before treating it as
fully proven, a follow-up pass with a real API key should run the Tier-2
live-verification steps
(Tier-2 onboarding: live verification):
- Auth rejection — confirm the documented
401{"error":{"message":"Invalid API key","type":"authentication_error","code":"invalid_api_key"}}shape actually comes back for a bad key. - Capability probe — confirm
toolsactually works forglm-5.3(and check whether it varies across the roster, per Neuralwatt's own "not all models support tool calling" caveat) before ever promotingcapabilities.toolsoff"model-dependent". - Structured output — Neuralwatt does not document a
response_formatparameter at all, despite the roster exposing ajson_modecapability flag. A live probe should establish whetherresponse_formatis silently accepted, ignored, or rejected beforecapabilities.structuredOutputis ever set totrue. - Tools + streaming, tools + structured output — both undocumented and
unprobed; a combined live request is required before setting either to
true. evidence.liveMatrix— currentlynullin the catalog JSON; fill it in once the above is run, perpnpm run verify:provider-onboarding.
Verification status
This is what the catalog currently records for Neuralwatt:
| Probe | Result |
|---|---|
| Roster | unauthenticated GET https://api.neuralwatt.com/v1/models, HTTP 200, 21 models, 2026-09-28 — credential-free, no key used |
| Auth rejection | not attempted — this onboarding sent no authenticated or POST request to Neuralwatt |
| Live capability sweep | not run (evidence.liveMatrix: null) — see Live verification |
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
Invalid Neuralwatt API key | NEURALWATT_API_KEY unset or wrong | Check the key in the portal's Dashboard > API Keys at https://portal.neuralwatt.com |
| Model not found | The roster changed since 2026-09-28 | Pick a current id from the unauthenticated GET /v1/models roster |
| Tool calls silently not made | The model doesn't support tool calling (varies per model per Neuralwatt's own docs) | Check the model's capabilities.tools on GET /v1/models before relying on tool calling on it |
| Structured output not honored | response_format is undocumented on Neuralwatt's chat-completions endpoint | Don't rely on response_format; NeuroLink's coerceJsonToSchema repair layer is the fallback for generate({ schema }) |
| Missing energy/cost data in a stream | Comes through as SSE comment lines (: energy {...}, : cost {...}), which standard SSE/OpenAI-SDK clients drop | Parse the raw stream if you need it; not required for normal generation |
See also
- Provider setup overview
- All providers
- Tier-2 onboarding — how this provider's JSON becomes a working integration
- Provider feature compatibility