One base URL, one key, every model. If your SDK speaks OpenAI, point it at NieoToken and you are done — no wrapper, no vendor SDK, no subscription.
From signup to your first 200 response, about a minute.
Sign up at nieotoken.com — email or GitHub. Free credit is added to new accounts.
Open the Tokens page and generate a key starting with sk-.
Set base URL to https://nieotoken.com/v1, pick a model, send a request.
All traffic is HTTPS with standard Bearer authentication — identical to what your OpenAI client already does.
| Purpose | Endpoint |
|---|---|
| List available models | GET /v1/models |
| Chat completions | POST /v1/chat/completions |
| Responses API | POST /v1/responses |
| Auth header | Authorization: Bearer sk-your-key |
Replace sk-**** with a real key from your console and each snippet runs as-is.
# chat completion (streaming) curl https://nieotoken.com/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk-****" \ -d '{ "model": "deepseek-v4-flash", "messages": [{"role": "user", "content": "Hello"}], "stream": true }' # list models curl https://nieotoken.com/v1/models \ -H "Authorization: Bearer sk-****"
from openai import OpenAI client = OpenAI( api_key="sk-****", # your key base_url="https://nieotoken.com/v1", # NieoToken ) resp = client.chat.completions.create( model="deepseek-v4-flash", messages=[{"role": "user", "content": "Hello"}], ) print(resp.choices[0].message.content)
import OpenAI from "openai"; const client = new OpenAI({ apiKey: "sk-****", baseURL: "https://nieotoken.com/v1", }); const res = await client.chat.completions.create({ model: "deepseek-v4-flash", messages: [{ role: "user", content: "Hello" }], }); console.log(res.choices[0].message.content);
import OpenAI from "openai"; const stream = await client.chat.completions.create({ model: "deepseek-v4-flash", messages: messages, stream: true, // SSE stream }); for await (const chunk of stream) { process.stdout.write( chunk.choices[0]?.delta?.content ?? "" ); }
const res = await client.chat.completions.create({ model: "deepseek-v4-flash-vision-exp", messages: [{ role: "user", content: [ { type: "text", text: "What is in this screenshot?" }, { type: "image_url", image_url: { url: "data:image/png;base64,..." } } ] }] });
# NieoToken spreads requests across multiple # upstream accounts and retries once on failure, # so a sustained batch does not need you to # rotate keys or run your own pooling layer. # Keep concurrency sane and let the gateway # handle upstream hiccups: for prompt in prompts: try: out.append(call(prompt)) except RateLimitError: backoff(); retry(prompt)
Pick OpenAI as the provider type in each app, then fill in the three fields below. No plugin needed.
| App | Provider type | Base URL | Model |
|---|---|---|---|
| Chatbox | OpenAI | https://nieotoken.com/v1 | deepseek-v4-flash |
| Cherry Studio | |||
| NextChat | |||
| LobeChat | |||
| Cline / Continue (editor agents) | |||
| OpenCat, Immersive Translate, etc. |
sk- key you created on the Tokens page. For everyday chat use deepseek-v4-flash; for harder math and multi-step reasoning try deepseek-v4-pro; for screenshots and image input use a model tagged vision.The list below is generated from the live routing table and refreshed automatically every day. Per-model rates, quotas and availability in your console are the authoritative source.
data:image/...;base64,xxx URL in the image_url content part and pick a model tagged vision — text-only models ignore image input. Click any model card to copy its ID.Still stuck? The fastest route is a comment on our Hacker News or Reddit thread, or email the operator.
401 Unauthorized.The key is invalid or expired. Check its status on the Tokens page, copy the full key including the sk- prefix, and verify the header reads Authorization: Bearer sk-xxx.
Prepaid and per token — no subscription, no seat fee. Your remaining balance is at the top of the console overview. Every request's token count and cost appear in the Logs page, so you can reconcile charges exactly.
Yes. Send "stream": true and you get an SSE stream with the same event shape as OpenAI, which is what you want for typewriter-style output.
Yes — a key is not bound to a device. If you want separate budgets per project, create separate keys and set a quota cap on each instead.
429 Too Many Requests.Either you exceeded a rate limit or the balance ran out. Lower your concurrency, or check quota and top up in the console, then retry.
Top-ups start at a small amount and the unused balance stays on your account. The payment methods available to you are listed on the top-up page inside the console once you are signed in — check there before you plan a purchase, since the available channels differ by region.
No. NieoToken is an independent API gateway. Models are served through upstream providers, and we do not claim official partnership or reseller status with any of them. If you need a signed SLA or a contract with a vendor, buy from that vendor directly.
Prompts are forwarded to the upstream provider you selected in order to generate a reply, so that provider's own policy applies to them. We do not sell your data. See the privacy policy for details.
One OpenAI-compatible endpoint for DeepSeek V4, Qwen and GLM · free credit on signup · pay per token
Create free account →