Upstage Provider Guide
Upstage 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/upstage.json) rather than hand-written code. That
file is the source of truth for everything on this page.
Key Facts
- Provider id:
upstage(aliases:solar) - Protocol: OpenAI-compatible (
/chat/completions) - Base URL:
https://api.upstage.ai/v1 - Default model:
solar-pro4 - Models in catalog: 10
- Streaming: supported
- Tool calling: supported (native)
- Structured output: supported
- Embeddings: not supported
- Billing: free-tier
- Key format:
^up_[A-Za-z0-9]+$
Quick Start
1. Get an API key
- Visit: https://console.upstage.ai (Google OAuth works)
- New accounts get a $10 sign-up credit — no payment method required
- Create an API key under API Keys
- Set
UPSTAGE_API_KEYin your .env file
2. Configure
export UPSTAGE_API_KEY=your-api-key
export UPSTAGE_MODEL=solar-pro4 # optional — overrides the default model
export UPSTAGE_BASE_URL=https://api.upstage.ai/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: "upstage",
model: "solar-pro4",
});
console.log(result.content);
# CLI
npx @juspay/neurolink generate "Hello" --provider upstage
Per-request credentials work as they do for every provider:
await neurolink.generate({
input: { text: "Hello" },
provider: "upstage",
credentials: { upstage: { apiKey: process.env.UPSTAGE_API_KEY } },
});
Models
| Model | Context | Vision | $/M in · out | Notes |
|---|---|---|---|---|
solar-pro4 ⭐ | 512K | no | $0.3 / $1.2 | Solar Pro 4; 512K context, up to 128K output tokens; agentic flagship for tool calling, terminal tasks and long-document reasoning |
solar-pro4-260806 | 512K | no | $0.3 / $1.2 | Pinned dated snapshot of Solar Pro 4 (2026-08-06 build) — the id the solar-pro4 alias currently resolves to |
solar-pro3 | 512K | no | $0.15 / $0.6 | Solar Pro 3; drop-in replacement for Solar Pro 2 with the same API interface, throughput and latency |
solar-pro3-260323 | 512K | no | $0.15 / $0.6 | Pinned dated snapshot of Solar Pro 3 (2026-03-23 build) |
solar-pro2 | 512K | no | $0.15 / $0.6 | Solar Pro 2; 31B-parameter model with an optional Reasoning Mode |
solar-pro2-251215 | 512K | no | $0.15 / $0.6 | Pinned dated snapshot of Solar Pro 2 (2025-12-15 build) |
solar-mini | 512K | no | $0.15 / $0.15 | Solar Mini; small, fast model for lightweight reasoning and cost-efficient tasks |
solar-mini-250422 | 512K | no | $0.15 / $0.15 | Pinned dated snapshot of Solar Mini (2025-04-22 build) |
syn-pro | 512K | no | — | Syn Pro; Upstage's Japan-focused LLM |
syn-pro-251021 | 512K | no | — | Pinned dated snapshot of Syn Pro (2025-10-21 build) |
Fallback order when the default is unavailable: solar-pro3 → solar-mini.
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 Upstage:
| Probe | Result |
|---|---|
| Roster | authenticated GET /v1/models, HTTP 200, 2026-09-03 |
| Auth rejection | HTTP 401 invalid_api_key, 2026-09-03 |
| Live capability sweep | not run |
⚠️ No live capability sweep is recorded for Upstage. The roster and auth behaviour were verified against the real API on the date above, but the capability flags come from the catalog declaration rather than from a measured end-to-end run. Treat them as the provider's stated behaviour.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
Invalid Upstage API key | UPSTAGE_API_KEY unset or wrong | Check the key at https://console.upstage.ai/api-keys |
| Model not found | The roster changed since 2026-09-03 | Pick a current id; catalog providers retire models without notice |
See also
- Provider setup overview
- All providers
- Tier-2 onboarding — how this provider's JSON becomes a working integration
- Provider feature compatibility