nbhooks

Fast, cheap AI. Ready to use.

One API for all the best AI models — deepseek, GLM, Kimi, and more. OpenAI-compatible, streaming, and transparent quotas.

main.py
1 from openai import OpenAI
2 
3 client = OpenAI(
4   base_url="https://api.nbhooks.my.id/v1",
5   api_key="sk-...",
6 )
7 
8 resp = client.chat.completions.create(
9   model="deepseek-v4-flash",
10   messages=[{"role":"user","content":"Hello"}],
11 )
12 print(resp.choices[0].message.content)

Everything you need

OpenAI-compatible

Just change your base_url. All OpenAI clients (Python, JS, curl) work as-is, no code changes.

Streaming

Full SSE stream support. Responses flow in real time instead of waiting for the whole thing.

Rate limits & quotas

Strict per-key and per-IP rate limiting, plus clear monthly token quotas. No runaway spikes.

Available models

Price per 1M tokens scales with the multiplier. Vision models accept image input.

Loading models…

How it works

From zero to your first request in minutes.

1

Get an API key

Open our Telegram bot @NbStoreuBot, pick a package, and receive your key instantly.

2

Set your base_url

Point your OpenAI client at https://api.nbhooks.my.id/v1

3

Go

Requests just work. Streaming, quota, and billing are handled automatically.

curl
1 curl -N https://api.nbhooks.my.id/v1/chat/completions \
2   -H "Authorization: Bearer sk-..." \
3   -H "Content-Type: application/json" \
4   -d '{"model":"deepseek-v4-flash","stream":true,
5       "messages":[{"role":"user","content":"Hello"}]}'

Frequently asked questions

Everything about pricing, limits, and how billing works — fully transparent, nothing hidden.

How does pricing work? What is a "multiplier"?

Every model has a multiplier (e.g. x1, x3, x3.5) shown in the model list. Your billed tokens = (input tokens + output tokens) × multiplier. A model with x3 costs 3× more quota per token than a x1 model. The multiplier for every model is always visible in the dashboard and in GET /v1/models — nothing is hidden.

What happens if my input is very large (long conversation / big context)?

Your request is sent in full — we never cut your context. If your input is estimated above 150k tokens, the model's multiplier is automatically increased for that request (e.g. x3 → x3.8). You keep full performance and full context; heavy usage simply bills at the next tier. Requests below the threshold are billed at the normal multiplier.

What happens if the output hits max_tokens or my quota runs out mid-request?

If the model stops because it reached your max_tokens, the response arrives normally with finish_reason: "length" — you are billed only for the tokens actually generated. Raise max_tokens if you want longer answers (each model's own output limit still applies).

If your monthly token quota runs out, new requests return an insufficient_quota error instead of a partial answer — you are never billed for a request that was refused. Top up via a redeem code or extend your key, and you continue exactly where you left off.

What are the rate limits?

Each key has its own requests-per-minute limit (RPM) — the default is 30 RPM. If you exceed it, you get a 429 with a retry-after header; wait that many seconds and retry. Need more for agents or automation? Ask support to raise your key's RPM.

How long does my key stay active?

Keys are active for 30 days from purchase. Redeem codes extend the active period (e.g. +15 or +30 days) and can also add bonus tokens — stacking on top of your current expiry, so nothing is lost.

Which request errors are billed, and which are free?

Never billed: requests rejected before reaching the model (invalid model name, quota/rate-limit exceeded, auth errors).

Billed normally: successful responses — you pay for the tokens the model actually processed (input + output).

Edge case: if a provider returns a response without a usage report, we bill a conservative input estimate so your bill stays fair; the dashboard log marks those requests explicitly.

Is streaming supported? What about tool calls and vision?

Yes — full SSE streaming on /v1/chat/completions (set "stream": true). Tool/function calls work, including in streaming. Vision models (marked in the model list) accept images via the standard image_url content format. There is also an Anthropic-compatible /v1/messages endpoint.

Why did I get "model not available"?

Model names include a provider prefix, e.g. Greg/kimi-k3. If the prefix or model name is wrong — or a model was retired upstream — you get a 400. The live list is always in GET /v1/models with your key; it updates automatically as models come and go.

How do I check my remaining quota?

The dashboard shows live quota, usage per model, and your key's active period. Programmatically: GET /v1/me (key info + quota) and GET /v1/usage (usage per model this month).

Ready to build?

Get an API key, point your OpenAI client at us, and go. No long-term commitment.

Open the dashboard