Changelog

What shipped

Router changes, model additions and the occasional honest bug fix. Newest first.

  1. v2.4.0feature

    Router-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.

  2. v2.3.1fix

    Cached 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.

  3. v2.3.0model

    DeepSeek 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.

  4. v2.2.0feature

    Per-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.

  5. v2.1.2perf

    Edge 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.

  6. v2.1.0feature

    Strict 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.

2 models · per-token · no seats

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.