Pricing and limits
Prices
Prices are in US dollars per million tokens. You are billed on the usage object returned with every response: prompt_tokens at the input price, of which prompt_tokens_details.cached_tokens at the cached input price, and completion_tokens at the output price. Reasoning tokens count as output tokens.
| Model | Input | Output | Cached input |
|---|---|---|---|
orion-pro | $0.144 | $1.50 | $0.036 |
qwen3.8-27b | $0.144 | $1.50 | $0.036 |
orion-plus | $0.101 | $0.60 | $0.025 |
qwen3.6-35b-a3b | $0.101 | $0.60 | $0.025 |
Prices are the same whichever access route you use, except that OpenRouter applies its own platform fee on top and an enterprise contract may set committed-use rates.
Cached input
When the beginning of a prompt repeats across requests (a long system prompt, a shared document, the earlier turns of a conversation), the matching prefix can be served from the prompt cache and is billed at the cached input price. The number of cached tokens is reported in usage.prompt_tokens_details.cached_tokens. To benefit, keep the stable part of the prompt at the start and the variable part at the end.
Context and output limits
| Limit | Value |
|---|---|
| Context window (input + output) | 131,072 tokens |
Maximum output (max_tokens) | 32,768 tokens |
A request whose messages exceed the context window is rejected with HTTP 400. A response that reaches max_tokens or the end of the context window returns finish_reason: "length".
Rate limits
Every API key has a request-per-minute and a token-per-minute allowance. When you exceed it the API returns HTTP 429 with a Retry-After header stating how many seconds to wait, and an error object of type rate_limit_error.
Handle 429 with exponential backoff and honour Retry-After. The OpenAI SDKs retry 429 automatically; see Errors and rate limits for details and for how to request a higher limit.
Capacity
Serenity Edge runs on Substrate AI's own GPUs in Spain, not on a hyperscaler. Capacity is added in steps as new hardware comes online. During peaks the API may respond with HTTP 503 and a Retry-After header rather than degrade latency for everyone; treat it like a 429. If you need guaranteed throughput, an enterprise contract reserves capacity for you.