# Nanorouter > OpenAI-compatible inference API that charges per request in USDC, settled on > chain by Circle Gateway. No subscription, no minimum, no invoice. Point the > OpenAI SDK at `https://nanorouter-wcg9d.ondigitalocean.app/v1` with an `nr_…` key and it works > unchanged. Nanorouter is a resource marketplace for agents. You deposit USDC once; every request is quoted against that balance, signed on your behalf as a gasless EIP-3009 authorization, served, metered, and settled to the token. The unused part of each quote is refunded as credit and netted into the next request, so from the second call onward you pay approximately your true cost. Base URL: `https://nanorouter-wcg9d.ondigitalocean.app/v1` Auth: `Authorization: Bearer nr_…` (API key only; sessions do not work on `/v1`) Endpoints: `POST /v1/chat/completions`, `GET /v1/models` (public) Settlement: Circle Gateway on Arc, where USDC is the native gas token ## Models and prices Prices are per million tokens, in USDC. `gpt-6-astra` is half of OpenAI's list price for the same model. The live list is always `GET /v1/models`, which requires no key. - `gpt-6-astra` — $5.00 input / $25.00 output, 128,000 max output tokens - `gpt-5.6-terra` — $1.00 / $5.00, 64,000 max output tokens - `gpt-5.6-luna` — $1.00 / $5.00, 64,000 max output tokens - `gpt-5.6-sol` — $1.00 / $5.00, 64,000 max output tokens - `gpt-5.3-codex-spark` — $1.00 / $5.00, 16,000 max output tokens Web search, run by the router on the model's behalf, costs about $0.00875 per call, capped at 3 calls per request. ## Docs - [Introduction](https://docs.nanorouter.ai/index.md): What Nanorouter is, how it differs from a subscription API, and what it does not support yet. - [Quickstart](https://docs.nanorouter.ai/quickstart.md): Sign in, deposit USDC, mint an `nr_` key, and make a first paid request with the OpenAI SDK. - [Pricing](https://docs.nanorouter.ai/pricing.md): Per-model token rates, web search cost, and the difference between quoted, charged, and refunded. - [How billing works](https://docs.nanorouter.ai/concepts/billing.md): Why the quote is deliberately high, how the refund is netted into the next request, and what happens when a turn settles above its quote. - [Funding your account](https://docs.nanorouter.ai/concepts/funding.md): Depositing USDC into Circle Gateway, why the deposit address matters, and how to withdraw. - [Keys and spend controls](https://docs.nanorouter.ai/concepts/api-keys.md): Creating keys, per-key spending limits and expiry, and how the limit is enforced under concurrency. ## Guides - [Migrating from OpenAI](https://docs.nanorouter.ai/guides/migrating-from-openai.md): The two-line change, what works unchanged, what differs, and what is unsupported. - [Streaming](https://docs.nanorouter.ai/guides/streaming.md): SSE chunks, `include_usage`, `reasoning_content`, tool-activity chunks, and reading the settled cost after the stream ends. - [Web search](https://docs.nanorouter.ai/guides/web-search.md): How `web_search` and `web_fetch` work, what they really cost, and how to turn them off. ## API reference - [Create chat completion](https://docs.nanorouter.ai/api-reference/chat-completions.md): `POST /v1/chat/completions` — every parameter, the response shape, and the billing headers. - [List models](https://docs.nanorouter.ai/api-reference/models.md): `GET /v1/models` — the live catalogue with per-token prices and tool pricing. - [Errors](https://docs.nanorouter.ai/api-reference/errors.md): Every status code, what each means, and which are worth retrying. ## Key facts - Compatible with the OpenAI Chat Completions API. Change `base_url` and the key; LangChain, LlamaIndex, the Vercel AI SDK, and anything else OpenAI-compatible work unchanged. - `max_tokens` decides what you are quoted and held, not just what the model may write. The default is 8,192. An over-large value locks up balance until the request settles. - `reasoning_effort` defaults to `low`, not the model's own default, because reasoning is billed as output tokens. - Every response carries `x-nanorouter-request-id`. Non-streaming responses also carry `x-nanorouter-charged-usdc`; streamed ones cannot, because the figure is unknown until the last token. - `402` means your Gateway balance will not cover the quote — retrying will not help. `429` means too much of your money is already in flight, unsettled (cap: $1.00), and does clear on its own. - A request that fails before producing output is refunded in full. A request you cancel mid-stream bills for the tokens already generated. - Not supported: `n > 1`, non-text content parts (images, audio), `/v1/embeddings`, `/v1/completions`, `/v1/responses`. - A turn that searches the web can settle far above its quote. One measured in production quoted $0.0024 and settled at $0.0614. Pass `"web_search": false` to bound cost to the quote. ## Optional - [Dashboard](https://app.nanorouter.ai/): Balance, usage charts, and the request log. - [API keys](https://app.nanorouter.ai/keys): Create keys, set spending limits and expiry. - [Source](https://github.com/sendaifun/nanorouter): The router is open source.