The Open Tier
A $0 charge with no deposit and no money hold, subject to availability and account-wide quotas.
Send onerouter/auto:free and the request is served at a $0 customer charge, with no deposit and no money hold. It exists so a client can be proved correct before any money is involved.
Not when your balance is healthy, not when free capacity is exhausted. If no free route can serve the request you get 503 no_free_route and nothing is charged. Bare onerouter/auto is the paid router and always was.
Get started#
- Check availability at
/models/auto/free. - Create a key. Save the key and its recovery link.
- Set
ONEROUTER_KEYlocally and send the request below.
curl https://onerouter.network/v1/chat/completions \
-H "Authorization: Bearer $ONEROUTER_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"onerouter/auto:free",
"messages":[{"role":"user","content":"Explain an API gateway in one sentence."}],
"max_tokens":256}'The response names the answering model in x-onerouter-model and reports zero in x-onerouter-cost-usd and usage.cost. No balance header is sent, because no balance was consulted.
Supported requests#
Chat Completions (/v1/chat/completions) and Messages (/v1/messages) both accept JSON and SSE. Start with text. Responses (/v1/responses) is not implemented and answers 400 unsupported_endpoint.
- Use
max_tokenson either shape. - Add
stream: truefor SSE. - Do not send routing overrides —
models,provider,routeorfallbacks. A free request that also asks to be routed somewhere specific is refused with400 invalid_requestrather than silently ignored.
Features the free route cannot validate are refused rather than approximated.
Account limits#
Quotas are per account, not per key. Creating a second key does not create a second allowance, and adding credit does not raise one.
| Limit | Allowance |
|---|---|
| Concurrent requests | 1 |
| Requests per minute | 5 |
| Requests per UTC day | 50 |
| Input + output tokens per UTC day | 100,000 |
| Estimated input per request | 16,000 tokens |
| Output per request | 2,048 max, 1,024 by default |
The router reserves the input/output token bound before dispatch and reconciles against verified usage afterwards, so concurrent requests cannot slip past a cap a serial request would have hit. A dispatched failure still consumes request quota.
Daily allowances reset at 00:00 UTC. GET /v1/me/open-tier returns eligibility, remaining requests and tokens, resets_at, and the current per-request caps.
Refusals#
| Code | Meaning |
|---|---|
429 free_quota_exceeded | Allowance spent. Wait for Retry-After. Adding credit does not help. |
503 no_free_route | No verified free capacity right now. Retry later; it will not switch to paid. |
400 invalid_request | An unsupported feature or a routing override. Simplify the request. |
Open Tier, chat trial, and paid auto#
Three different things share the word "free". They are not interchangeable:
onerouter/auto:free in the API and the signed-in playground. Daily quotas, permanent $0 charge./chat. Covers browser chat only, never integration API requests.onerouter/auto and the :fast / :cheap / :code / :long intents. Uses your balance and takes a normal hold.A model priced at zero in the catalog is still a paid route: it takes a hold, it counts against your key's limits, and it is not admitted without a balance. Only onerouter/auto:free and the model it currently resolves to use the free path.