Changelog

Last updated:

On this page

Notable API changes, newest first. Minor bug fixes and internal improvements are not listed.

2026-10

Tool arguments follow input_schema

A forced tool in POST /v1/messages (tool_choice tool or any) now constrains the arguments to the tool's input_schema, like response_format with json_schema in chat completions. Before, a required string field could come back as null. "strict": true on a tool also constrains when the model picks the tool on its own, on qwen3.6:35b-a3b and qwen3.5:9b. The response header x-staik-tool-schema-enforced shows whether the whole schema was constrained. See Messages.

PDFs and forced tool choice in Messages

POST /v1/messages now reads document blocks. A base64 PDF becomes each page's text layer plus an image of the page, page by page, the way Claude reads PDFs. Up to 20 pages per PDF. tool_choice (auto, any, tool, none) and disable_parallel_tool_use now reach the model, so forcing a tool gives structured data. Before, both the document and the tool choice were ignored without an error. Image and document URLs now return 400 instead of being dropped, and errors use Anthropic's format. See Messages.

Streaming in requests with tools

Requests with tools and stream: true now stream text and reasoning token by token, on /v1/chat/completions, /v1/messages and /v1/responses. Previously the whole response arrived only once the model was done. A tool call is delivered as one complete delta once the model has finished it. Agents such as Claude Code, OpenCode and Codex therefore show the model's text right away. See Streaming.

Responses API and Codex CLI

New endpoint POST /v1/responses, compatible with OpenAI's Responses API. It makes Codex CLI work against staik, since Codex has only spoken the Responses API since February 2026. The endpoint is stateless: previous_response_id returns 400.

429 responses now state the reason. The response has an error object whose code is insufficient_quota when your plan's token limit is reached and capacity_exceeded when it's the capacity ceiling, and the X-Staik-Limit-Reason header is quota or capacity. See Errors.

2026-09

Thinking budget and vLLM 0.30

The thinking aliases (qwen3.6:35b-a3b-thinking, qwen3.5:9b-thinking) now get an automatic thinking budget, so the model always gets to answer within max_tokens instead of reasoning until the budget runs out. Send thinking_token_budget to set your own budget. All models now run on vLLM 0.30.

Correction: the reasoning is delivered in the reasoning field (not reasoning_content as the documentation previously stated). See Thinking and reasoning.

2026-08

Async transcription job API

New endpoints for long audio files: POST /v1/audio/transcriptions/jobs accepts up to 100 MB, responds immediately with a job_id, and transcribes in the background. Poll GET /v1/audio/transcriptions/jobs/{id} until status is completed. The gateway chunks the audio, transcribes, and stitches the result — speakers stay consistent across the whole file.

bash
curl https://api.staik.se/v1/audio/transcriptions/jobs \
  -H "Authorization: Bearer sk-st-your-key" \
  -F file=@long-meeting.m4a \
  -F model=kb-whisper-large \
  -F language=sv \
  -F diarize=true

Public registration opened

Pay-as-you-go registration via /register is now the public way in — 100,000 welcome tokens valid for 30 days. The Early Adopter program is closed to new signups.

2026-06

Server-side web search in chat completions via web_search: true, plus a standalone POST /v1/tools/web-search. Self-hosted SearXNG — searches never leave the infrastructure.

2026-05

Prompt caching on /v1/messages

The Anthropic endpoint supports cache_control breakpoints: reused context is billed as discounted cache_read instead of full price every turn. TTL 5 minutes, or 1 hour with ttl: "1h".

2026-04

qwen3.6:35b-a3b

The default model was upgraded to qwen3.6:35b-a3b (262K context window).

No code changes needed

The old name qwen3.5:35b-a3b works as a backwards-compatible alias — existing code keeps working unchanged.