What breaks when you switch AI APIs
What breaks when you move an app from one AI API to another, at 10 providers: strict JSON schemas, parallel tool calls, streamed tool arguments, reasoning with tools, and caching of tool definitions. Each answer is yes, partly, no or not stated, with the provider’s own words and the date we read them, or with our own test call and its date.
Before you switch
- Strict JSON schemas: partly at DeepSeek, Alibaba Cloud (Qwen), Z.ai (GLM). Code that parses answers without checks starts failing where a provider promises only valid JSON, not your schema.
- Parallel tool calls: partly at Groq; not stated at DeepSeek, Z.ai (GLM). An agent built around several calls per turn gets one call per turn: more round trips, more input tokens, slower runs.
- Streamed tool arguments: no at xAI, Groq, Mistral; partly at Z.ai (GLM). An interface that shows arguments as they are written sees nothing until the whole call is ready.
- Reasoning with tools: partly at Cerebras; not stated at Mistral. Switching reasoning on can rule out some tool settings or output formats, or the other way round.
- Cache covers tool definitions: not stated at Google Gemini, DeepSeek, Alibaba Cloud (Qwen), xAI, Mistral, Z.ai (GLM). Where the cache does not cover tool definitions, a long tool list is paid as fresh input on every request.
At a glance
| Provider | Strict JSON schemas | Parallel tool calls | Streamed tool arguments | Reasoning with tools | Cache covers tool definitions |
|---|---|---|---|---|---|
| Anthropic | Yes PublishedObserved | Yes Published | Yes Published | Yes Published | Yes Published |
| OpenAI | Yes PublishedObserved | Yes Published | Yes Published | Yes Published | Yes Published |
| Google Gemini | Yes PublishedObserved | Yes Published | Yes Published | Yes Published | Not stated Published |
| DeepSeek | Partly PublishedObserved | Not stated Unknown | Yes Observed | Yes Published | Not stated Published |
| Alibaba Cloud (Qwen) | Partly PublishedObserved | Yes Published | Yes Observed | Yes Published | Not stated Published |
| xAI | Yes Published | Yes Published | No Published | Yes Published | Not stated Unknown |
| Groq | Yes Published | Partly Published | No Observed | Yes Published | Yes Published |
| Cerebras | Yes Published | Yes Published | Yes Observed | Partly Published | Yes Published |
| Mistral | Yes Published | Yes Published | No Observed | Not stated Published | Not stated Published |
| Z.ai (GLM) | Partly PublishedObserved | Not stated Published | Partly Published | Yes Published | Not stated Published |
Published Published: quoted from the provider’s documentation, with a link and the date we read it. Observed Observed: our own test call, with its date. Unknown Unknown: not stated in the documentation we read.
Strict JSON schemas
The answer, or a tool call’s arguments, is guaranteed to match the JSON Schema you send. What breaks: Code that parses answers without checks starts failing where a provider promises only valid JSON, not your schema.
| Provider | Support | In the provider’s words, or in our test call |
|---|---|---|
| Anthropic | Yes |
|
| OpenAI | Yes |
|
| Google Gemini | Yes |
|
| DeepSeek | Partly |
|
| Alibaba Cloud (Qwen) | Partly |
|
| xAI | Yes |
|
| Groq | Yes |
|
| Cerebras | Yes |
|
| Mistral | Yes |
|
| Z.ai (GLM) | Partly |
|
Parallel tool calls
The model can ask for several tool calls in one turn. What breaks: An agent built around several calls per turn gets one call per turn: more round trips, more input tokens, slower runs.
| Provider | Support | In the provider’s words, or in our test call |
|---|---|---|
| Anthropic | Yes |
|
| OpenAI | Yes |
|
| Google Gemini | Yes |
|
| DeepSeek | Not stated |
|
| Alibaba Cloud (Qwen) | Yes |
|
| xAI | Yes |
|
| Groq | Partly |
|
| Cerebras | Yes |
|
| Mistral | Yes |
|
| Z.ai (GLM) | Not stated |
|
Streamed tool arguments
Tool-call arguments arrive in pieces while the model writes them. What breaks: An interface that shows arguments as they are written sees nothing until the whole call is ready.
| Provider | Support | In the provider’s words, or in our test call |
|---|---|---|
| Anthropic | Yes |
|
| OpenAI | Yes |
|
| Google Gemini | Yes |
|
| DeepSeek | Yes |
|
| Alibaba Cloud (Qwen) | Yes |
|
| xAI | No |
|
| Groq | No |
|
| Cerebras | Yes |
|
| Mistral | No |
|
| Z.ai (GLM) | Partly |
|
Reasoning with tools
Thinking or reasoning works in the same request as tool calls. What breaks: Switching reasoning on can rule out some tool settings or output formats, or the other way round.
| Provider | Support | In the provider’s words, or in our test call |
|---|---|---|
| Anthropic | Yes |
|
| OpenAI | Yes |
|
| Google Gemini | Yes |
|
| DeepSeek | Yes |
|
| Alibaba Cloud (Qwen) | Yes |
|
| xAI | Yes |
|
| Groq | Yes |
|
| Cerebras | Partly |
|
| Mistral | Not stated |
|
| Z.ai (GLM) | Yes |
|
Cache covers tool definitions
The prompt cache includes the tool definitions, which matters with a long list of tools. What breaks: Where the cache does not cover tool definitions, a long tool list is paid as fresh input on every request.
| Provider | Support | In the provider’s words, or in our test call |
|---|---|---|
| Anthropic | Yes |
|
| OpenAI | Yes |
|
| Google Gemini | Not stated |
|
| DeepSeek | Not stated |
|
| Alibaba Cloud (Qwen) | Not stated |
|
| xAI | Not stated |
|
| Groq | Yes |
|
| Cerebras | Yes |
|
| Mistral | Not stated |
|
| Z.ai (GLM) | Not stated |
|
69 statements: 56 quoted from provider documentation read , 11 from our own single test calls, 2 not stated anywhere we looked. A provider can change a feature without notice; a test call shows one day, not a promise. Prices for the same models: API pricing.
All API prices · Cheapest per task · Long-context cliff · Caching and batch · Rate limits by tier · Rate limit planner · Task cost calculator · All models on OpenRouter · How we check prices