Skip to main content

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 POST request was sent to Neuralwatt. Everything below comes from Neuralwatt's public documentation (docs.neuralwatt.com) and an unauthenticated GET /v1/models call. 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, terminal data: [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: true on the live roster, but that can change per model, so NeuroLink declares this "model-dependent" rather than a blanket true.
  • Structured output: not documented. The /v1/models roster exposes a json_mode: true capability flag on every model, but the chat-completions API reference does not document a response_format parameter anywhere — neither json_object nor json_schema mode is described. Because the request-side contract isn't documented, capabilities.structuredOutput is left false here 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) and thinking_token_budget are 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, so apiKeyFormat is left null rather than guessed
  • Notable extras: per-request energy and cost reporting via SSE comment lines (: energy {...}, : cost {...}) and X-Request-Cost-USD headers — not modeled by NeuroLink's catalog schema and not required for the integration to work

Quick Start​

1. Get an API key​

  1. Visit: https://portal.neuralwatt.com and sign up
  2. 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)
  3. Navigate to Dashboard > API Keys and create a new key — copy it immediately, it is shown in full only once and starts with sk-
  4. Set NEURALWATT_API_KEY in your .env file

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​

ModelContextMax outputVision$/M in · out · cachedNotes
glm-5.3 ⭐1M—no$1.45 / $4.50 / $0.145ZhipuAI 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-flash1M—yes$0.15 / $0.50 / $0.03Lighter/cheaper GLM 5.3 sibling; roster-listed only; fallback.
qwen-3.8-27b262K131,072yes$0.45 / $3.20 / $0.25Dense 27B VL model; first entry on the live roster; used as models.visionModel (documented image limits: 20 images/request, 200 total).
qwen3.6-35b262K—yes$0.29 / $1.15 / $0.029Roster-listed only; fallback.
kimi-k2.7-code262K—yes$0.95 / $4.00 / $0.095MoonshotAI's code-oriented Kimi model; roster-listed only; fallback.
kimi-k31M—yes$3.00 / $15.00 / $0.30MoonshotAI's general-purpose Kimi model; roster-listed only; fallback.
deepseek-v4.1-flash1M393,216yes$0.15 / $0.60 / $0.015Roster-listed only; fallback.
gemma-4-31b262K16,384yes$0.144 / $0.42 / $0.0144NVIDIA-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 tools actually works for glm-5.3 (and check whether it varies across the roster, per Neuralwatt's own "not all models support tool calling" caveat) before ever promoting capabilities.tools off "model-dependent".
  • Structured output — Neuralwatt does not document a response_format parameter at all, despite the roster exposing a json_mode capability flag. A live probe should establish whether response_format is silently accepted, ignored, or rejected before capabilities.structuredOutput is ever set to true.
  • Tools + streaming, tools + structured output — both undocumented and unprobed; a combined live request is required before setting either to true.
  • evidence.liveMatrix — currently null in the catalog JSON; fill it in once the above is run, per pnpm run verify:provider-onboarding.

Verification status​

This is what the catalog currently records for Neuralwatt:

ProbeResult
Rosterunauthenticated GET https://api.neuralwatt.com/v1/models, HTTP 200, 21 models, 2026-09-28 — credential-free, no key used
Auth rejectionnot attempted — this onboarding sent no authenticated or POST request to Neuralwatt
Live capability sweepnot run (evidence.liveMatrix: null) — see Live verification

Troubleshooting​

SymptomCauseFix
Invalid Neuralwatt API keyNEURALWATT_API_KEY unset or wrongCheck the key in the portal's Dashboard > API Keys at https://portal.neuralwatt.com
Model not foundThe roster changed since 2026-09-28Pick a current id from the unauthenticated GET /v1/models roster
Tool calls silently not madeThe 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 honoredresponse_format is undocumented on Neuralwatt's chat-completions endpointDon't rely on response_format; NeuroLink's coerceJsonToSchema repair layer is the fallback for generate({ schema })
Missing energy/cost data in a streamComes through as SSE comment lines (: energy {...}, : cost {...}), which standard SSE/OpenAI-SDK clients dropParse the raw stream if you need it; not required for normal generation

See also​