What shipped
Router changes, model additions and the occasional honest bug fix. Newest first.
v2.4.0featureRouter-level model fallback
X-Axon-Fallback accepts an ordered list of model ids. If the primary model has no healthy upstream, the next id is tried before an error is returned. The model that actually served is reported in the response.
v2.3.1fixCached token accounting on streamed calls
cached_tokens was omitted from the final SSE frame when stream_options.include_usage was set, which under-reported cache savings in dashboards. Billing was always correct; only the reported figure was wrong.
v2.3.0modelDeepSeek OCR 2 in preview
Document-to-markdown with reading order and table structure preserved. Preview pricing, no SLA yet — expect the id to stay stable when it goes GA.
v2.2.0featurePer-key spend ceilings
Each key can carry a hard monthly cap. Requests past the cap return 402 with a machine-readable reason instead of quietly draining shared credit.
v2.1.2perfEdge PoP in Singapore
p50 first token from Jakarta and Kuala Lumpur dropped from 310ms to 132ms. No change required on your side; DNS routes you automatically.
v2.1.0featureStrict JSON schema mode
response_format now accepts a full json_schema with strict: true. Schemas are validated before dispatch, so a malformed schema fails with 400 instead of producing junk output.
Swap the base URL. Keep the rest of your stack.
Create an account, add a key, point your client at one base URL. Nothing is charged — this instance records cost, it does not bill it.