GET https://nanorouter-wcg9d.ondigitalocean.app/v1/models

The catalogue, priced. No API key required — this is the price list, and a router that hides its prices is useless.

Response

Fields

string
The model name to send as model.
object
Non-standard, and the reason to call this endpoint.input_per_million_tokens and output_per_million_tokens are in atomic USDC — 6 decimal places. "1000000" is $1.00 per million tokens.
integer
The router’s ceiling on your max_tokens, not a limit of the model.It exists because the quote is priced at max_tokens — an unbounded ceiling means an unbounded hold against your balance for one request.
array
Non-standard, and a sibling of data rather than part of it, so a client that only reads the OpenAI-shaped list is unaffected.Tokens are not the whole bill. A request the model decides to search on also pays for that search, and the charge lands after the quote — so a price list showing only per-token rates cannot explain a settled figure.typical_price_per_call is what one search usually comes to. It is typical rather than exact because a search is billed at settlement from what it actually cost, not quoted up front.
boolean
false means the tool is not configured on this router and will not be injected — passing "web_search": true will not enable it.

The catalogue is narrower than it looks

A model appears here only if both the supplier registry prices it and the upstream pool will actually serve it. Where the two disagree, the model is hidden rather than advertised — listing it would hand you a name that prices cleanly and then fails on first use. So: if a model is in this response, it is buyable. If it is not, it is a 404.
Fetch this at startup rather than hardcoding model names. Availability drifts, and prices are a business decision that can change without your deploy.