Skip to content

FAQ

How CentRouter works: Balance, prices, payments, API Keys, limits and your data.

Getting started

CentRouter is a prepaid AI gateway. You buy a Balance in USD, create an API Key, and call every model in the Catalog through one API that speaks the OpenAI and Anthropic formats.

Each Request deducts Tokens × Sell Price from your Balance. There is no subscription and no monthly minimum.

See all prices
  1. Create an account. Once your email is verified, your first API Key is created and waits for you on the Overview.
  2. Add Balance on the Balance page.
  3. Run npx centrouter login, then npx centrouter setup claude (or codex, opencode). Or copy a ready config from the Setup page.
Read the quick start

Claude Code, Codex CLI, Cursor, Cline, Roo Code, OpenCode, Aider, the OpenAI SDK and the Anthropic SDK. The Setup page has a copy-ready config for each one. We run Claude Code and OpenCode against the gateway ourselves; the other configs follow each tool’s own documentation.

Any other client that speaks the OpenAI Chat Completions or Responses format, or the Anthropic Messages format, can be pointed at the gateway if it lets you set a base URL and an API key.

Open Setup

Only the models in the Catalog. The Pricing page lists each one with its ID, its Sell Prices, its context length and what it supports: vision, tools, reasoning.

Use the ID exactly as shown. GET /v1/models returns the same models with the prices your key is charged and what each supports; npx centrouter models prints the IDs and prices.

See all prices

Pricing and Balance

By the Tokens the model reports: input, cache read, cache write and output, each multiplied by its Sell Price per 1M Tokens. The result is exact: nothing is rounded and nothing else is added.

If a model does not report its usage, the Tokens are estimated and the Request is marked “estimated” in Activity.

If your account has a group discount, your Requests are charged the discounted Sell Prices.

The OpenRouter Price is the same model’s public price per 1M Tokens on OpenRouter, shown next to every Sell Price. For models linked to OpenRouter’s public model list it is refreshed daily; for the rest we enter it by hand.

Saved is what the same Tokens would cost at the OpenRouter Price, minus what you were charged. Each Request records it.

When a model has no OpenRouter Price, or its Sell Price is not lower, no saving is counted.

No. A Balance has no expiry date.

A Voucher code can carry a date by which it must be redeemed. Once redeemed, its amount is Balance like any other.

Requests are rejected with insufficient_balance until you add Balance. A Balance never goes below zero, so you can never owe anything.

The Overview shows your Runway: how many days your Balance lasts at the pace of your last 7 days. You also get an email when your Balance is low, at most once a day.

While a Request runs, the gateway holds its largest possible cost: the input plus the most output the Request may produce. When the Request ends you are charged for the Tokens actually used, and the rest is released.

So your available Balance dips during a Request and comes back when it finishes. A lower max_tokens makes the hold smaller.

How a hold is sized

No. A Request that is rejected, or that no model source could answer, costs nothing.

A response that stops partway, because you cancelled it or the stream broke, is charged for the Tokens already delivered.

A new price applies to new Requests only. Each Request stores the prices it was charged at, so past charges and past Saved amounts never change.

Balances and prices are kept in USD. The Rupiah amounts beside them are estimates at the current Exchange Rate: today $1 ≈ Rp 18.200.

An Order paid in Rupiah stores the Exchange Rate it used, so the amount on that Order is exact.

  • Overview: Balance, Spent, Saved and Runway.
  • Activity: every Request with its Tokens by kind, its cost and what it saved. You can export it as CSV.
  • Balance: the Ledger, a permanent record of every change to your Balance.

Use the cost calculator on the Pricing page. Pick a model and enter input, cached input and output Tokens. It shows the cost at our Sell Price, the cost at the OpenRouter Price, the amount saved and a Rupiah estimate.

Open the cost calculator

Payments

Online payments are not switched on yet. Until they are, there are two ways to add Balance:

  • Redeem a Voucher code on the Balance page.
  • Ask for a manual top-up: write to support@centrouter.com with the amount you want to add.
Open Balance

A code that adds a fixed USD amount to your Balance. Redeem it on the Balance page. Each code works once.

No. A Balance is not refundable.

Two payment errors are corrected: a top-up that was charged twice, and a payment that never reached your Balance.

To report one, write to support@centrouter.com with the Order ID from the Balance page.

Read the Terms of Service

No. A Balance cannot be withdrawn as money or moved to another account. It can only be spent on Requests.

It has no expiry date, so it stays until you use it or close your account.

API and tools

  • OpenAI-format clients: https://api.centrouter.com/v1
  • Anthropic-format clients such as Claude Code: https://api.centrouter.com, without /v1, because they add /v1/messages themselves.

Send your API Key as Authorization: Bearer or x-api-key.

See the endpoints
  • npx centrouter login opens an approval page in your browser and saves a new API Key on your machine. The code it shows is valid for 10 minutes.
  • npx centrouter setup claude (or codex, opencode) writes that tool’s config. It merges with the config you have and keeps a .bak copy.
  • npx centrouter balance and npx centrouter models show your Balance and the models you can call.
See the CLI commands

Streaming works on /v1/chat/completions, /v1/messages and /v1/responses.

Tool calling, vision and reasoning depend on the model. The Pricing page tags each model with what it supports.

Up to 10 active keys. Revoke one to free a slot.

Limits and errors

Yes, per API Key: 60 Requests per minute and 5 running at once by default. We can set a different limit for an account.

Past the limit a Request gets rate_limit_exceeded (HTTP 429) with a Retry-After header that says how many seconds to wait.

A cap on what one API Key may charge per day, per month or in total. Days and months are UTC. The lower of the Spend Limit and your Balance wins.

You can also restrict a key to a list of models. Both are set on the API Keys page.

Open API Keys

Up to 10 minutes. A stream that sends nothing for 2 minutes is ended, and you are charged only for the Tokens already delivered.

Every error has a code and a message that says what to change. Troubleshooting in the docs lists each code with its cause and fix, and covers common problems in Claude Code, Codex and OpenCode.

Once a Request is accepted, its response carries an x-request-id header. That ID finds the Request in Activity; quote it when you ask for help.

Open Troubleshooting

The Status page shows each model’s success rate and average latency over the last 60 days.

If one model source fails before anything was sent to you, the gateway tries the next one. Failed attempts are not charged.

View Status

Privacy and security

No. The gateway does not store or log the content of a Request or of its response.

For each Request it records the time, the API Key and model used, the endpoint, whether it streamed, the outcome (status, HTTP status, error code), the Token counts, the prices, the charge, the amount saved and the latency.

To be answered, your Request is forwarded to a source that runs the model you chose.

  • Your name, email, language and a hash of your password, not the password itself.
  • Each log-in session with its IP address and browser. You can see them and sign them out under Settings.
  • Your Requests (Token counts and charges, never their content), your Orders, and the Ledger of every change to your Balance.

When you close your account, your name, email, sign-in data and sessions are deleted. Requests, Orders and Ledger entries are kept for accounting, with no name or email on them.

A key you create is shown in full once. After that only its SHA-256 hash and a short prefix are stored, so it cannot be shown again.

The first key made at sign-up is the one exception: it is kept encrypted until you confirm on the Overview that you saved it, for 7 days at most.

If you lose a key, revoke it on the API Keys page and create a new one.

  • Revoke it on the API Keys page. The gateway stops accepting it within 15 seconds.
  • Filter Activity by that key to see what it spent.
  • Create a new key and give it a Spend Limit, which caps what a leaked key can spend.
Open API Keys

Yes, under Settings. It asks for a code from an authenticator app at every log-in and gives you one-time backup codes.

It is available for accounts that have a password.

Open Settings

Account

You must verify your email before you can log in. Check your spam folder, then try to log in: the log-in page offers “Resend the verification email”.

Choose “Forgot password?” on the log-in page. The reset link is valid for 1 hour, and resetting signs you out everywhere.

Yes, under Settings, if your account has a password. Enter the new address and your password. We send a link to the new address, and your email changes when you open it. The link works for 1 hour.

Open Settings

Open Settings and choose “Close account”. The confirmation shows the Balance you will lose and asks you to type your email.

  • Closing is immediate and cannot be undone.
  • Your API Keys stop working within 15 seconds, and your name, email, sign-in data and sessions are deleted.
  • The remaining Balance is removed. It is not paid out and cannot be moved to another account.
  • Your Requests, Orders and Ledger entries are kept for accounting, with no name or email on them.

You can sign up again with the same email. That is a new, empty account.

Open Settings

English and Bahasa Indonesia. Switch with the language button at the top of the page. When you are signed in, the emails we send you follow the same choice.

Write to support@centrouter.com. For a problem with a Request, include its ID from the x-request-id response header or from Activity.

Something not working?

Troubleshooting lists every error code with its cause and fix. Status shows whether a model is answering.