With the GPT-6 Astra release on September 3, 2026, OpenAI shipped asynchronous tool calling in its Responses API: set async: true on a function or custom tool and the model can keep working after it issues the call, before your application returns the output. That is the first standard, non-realtime frontier API to let a model proceed while a client-side tool is still running; Google already documents the behaviour, but only in its realtime Live API. This page records what each of three vendors documents for the same situation, and what each one leaves out.
It is a different question from the one in our post on synchronous versus asynchronous agent workflows. That post is about working modes: whether a whole agent run happens in the foreground or in the background. This one is about a single tool call inside a turn, and whether the API lets the model do anything else while it waits.
- 01OpenAI is the only vendor whose standard API lets the model continue.With async: true the model issues the call and carries on. The result comes back in a later request, matched by the original call_id. The application still runs the tool; OpenAI does not.
- 02Anthropic's rule is the opposite: the result comes next, or nothing does.Every tool result has to sit directly after its tool call in the history, and nothing may come between them. The turn ends when the model calls the tool, so the application holds the clock, not the API.
- 03Google documents non-blocking functions in the Live API only.Functions marked NON_BLOCKING let the conversation continue, with a scheduling flag for when the result lands. The docs list Gemini 2.5 Flash Live as supporting it and Gemini 3.1 Flash Live as synchronous only.
- 04The only documented timeout is Anthropic's, and it is four minutes.Inside programmatic tool calling, a pending call raises a TimeoutError after about four minutes and idle containers are reclaimed after about five. Neither OpenAI nor Google states a limit for an outstanding client call.
01 — The datasetThe census.
Each row is one API surface. A client tool is a function your application runs; the vendor’s hosted tools, which run on the vendor’s side, are excluded because you never wait on them. The three columns answer the question three ways: can the model keep generating while your tool runs, how does a late result get back into the conversation, and what does the documentation say about time limits.
| Surface | Model continues while the call is outstanding | How a late result reattaches | Documented limit |
|---|---|---|---|
| OpenAI Responses, async tools | Yes. With async: true the model keeps working after issuing the call. GPT-6 Astra and later. Function and custom tools only | A function_call_output or custom_tool_call_output item in a later request, carrying the original call_id, with previous_response_id set to the latest response | None stated for the outstanding call. Not for hosted tools, not with programmatic tool calling, not with parallel calls in multi-agent mode |
| OpenAI Responses, Background mode | Different thing: the whole response is generated asynchronously and the application polls. Tool calls inside it are unchanged | Poll the response until it leaves queued or in_progress; a stream can be resumed by sequence number if started with stream: true | Response data is stored for roughly 10 minutes to support polling; deleted after that unless store is true |
| Anthropic Messages, client tools | No. The response ends with stop_reason tool_use; the model produces nothing further until the results arrive | A tool_result for every tool_use, all in the next user message, before any text, directly after the tool-use message with nothing between them. A call you choose not to run gets an is_error result | None stated. The turn has ended, so the application decides how long to wait before sending the next message |
| Anthropic programmatic tool calling | Partly. Claude’s own code in the execution container calls your tools as async functions and can run them in parallel; the model itself is paused while the code waits | A tool_result on the paused request, with the container ID and the same tools array; the code resumes | About 4 minutes: a pending call then raises a TimeoutError inside the code. Idle containers reclaimed after about 5 minutes |
| Google Gemini API, function calling | Not documented. The page describes parallel calls in one turn and compositional calls in sequence; nothing about proceeding before a result | A function_result step in the next request; in stateless mode the full history including thought and function_call steps must be resent as received | Not documented |
| Google Gemini Live API | Yes, for functions declared with behavior NON_BLOCKING; the conversation continues. Listed for Gemini 2.5 Flash Live; Gemini 3.1 Flash Live is listed as synchronous only | The FunctionResponse carries a scheduling value: INTERRUPT, WHEN_IDLE or SILENT, which tells the model when to act on it | Not documented beyond the session |
The headline is the first column. In the standard, non-realtime API, one vendor lets the model proceed while your tool runs, one forbids it by message-ordering rule, and one does not say. The second column matters just as much for anyone writing the loop: all three reattach by an identifier, but only OpenAI’s identifier is allowed to arrive several turns later.
02 — OpenAIThe model keeps going.
OpenAI’s async tool calling guide is short and specific. A normal function call pauses the model’s turn until the tool responds. Mark the tool async and the model can issue the call and carry on. The guide’s three use cases are kicking off a slow lookup before it is needed, answering whatever part of the request does not depend on it, and feeding the result in once the application has it. The response can contain both the async call and an answer.
The sentence that stops the feature being misread is OpenAI’s own: “Async tools don’t move execution to OpenAI or manage your background jobs.” Your application still runs the tool, still holds the job, and still has to send the output back in a later request under the original call ID. If other turns happen first, you continue from the latest response ID and keep the original call ID.
OpenAI’s guide adds a pattern for the case where the model eventually needs the result: give each async tool a task handle argument, keep a registry binding handles to call IDs and running jobs, and define an ordinary synchronous wait tool the model can call when its next step depends on pending results. The guide states that this wait tool is not a built-in Responses tool. Its schema and behaviour belong to your application.
The compatibility notes are the fences. Async applies to function and custom tools the application runs, not to hosted built-in tools. It is not to be configured for programmatic tool calling, and in multi-agent mode it is not to be combined with parallel tool calls. It requires GPT-6 Astra or a later model, which we covered in our Astra launch guide.
03 — AnthropicThe next-message rule.
Anthropic’s Messages API has no equivalent flag, and its handle-tool-calls documentation makes the ordering explicit: “Tool result blocks must immediately follow their corresponding tool use blocks in the message history.” Nothing may sit between the two messages, and within the user message the results come first and any text after. A response that calls tools ends with a tool_use stop reason. The model is not running while you wait.
That design has a consequence people miss. Because the turn has ended, there is no API clock on your tool. You can take ten minutes or ten days before sending the next message, as long as that message begins with a result for every call. The parallel tool use page says execution order is your choice, that all results return together in one user message, and that a call you decline to run should get an error result rather than be omitted. An agent that wants to do other work meanwhile does it outside the model, then resumes.
The application holds the clock
Every tool_use gets a tool_result in the next user message, results before text, nothing in between. No documented timeout, because the model is idle until you return.
Claude's code waits, not Claude
Tools are exposed to Claude's Python as async functions it can gather in parallel. A pending call raises a TimeoutError after about four minutes; the request must carry the container ID.
Anthropic runs it
Execution happens on Anthropic's side and the result arrives in a later response. If a client call and an unfinished server call share a turn, your reply may contain only tool_result blocks.
A different kind of deferral
Defers loading a tool's definition into context, not its result. Often confused with async execution; it affects tokens, not time.
04 — GoogleNon-blocking, in one API.
Google’s function calling page for the standard Gemini API documents parallel calls within a turn and compositional calls across turns, and in stateless mode requires the full history, including thought and function_call steps, to be resent exactly as received. It says nothing about the model proceeding before a function result arrives. That cell is marked not documented, which is the only honest reading.
The Live API tools page is a different story. It says that by default a Live session stops and waits for each function’s result before continuing, then offers an escape: declare a function with a NON_BLOCKING behaviour and the conversation continues while it runs. The function response then carries a scheduling value. INTERRUPT makes the model report the result at once, WHEN_IDLE waits until it has finished what it is doing, and SILENT stores the result for later use without comment.
That is the richest deferral contract of the three, because it lets the application say not just that a result is late but how the model should treat it when it lands. The catch is the support table on the same page. As read on September 4, 2026, it lists Gemini 2.5 Flash Live Preview as supporting synchronous and asynchronous function calling, and Gemini 3.1 Flash Live Preview as synchronous only. The newer model, on that page, has less of the feature.
05 — The confusionsThree things this is not.
Three adjacent features get called asynchronous and answer a different question. Background mode, in OpenAI’s Responses API, generates the whole response asynchronously so a client can poll or resume a stream; the guide says it was built for tasks that take several minutes, and it stores response data for roughly ten minutes to support polling. The tool calls inside a background response behave exactly as they would in the foreground.
Deferred tool loading, which both OpenAI and Anthropic offer under names like tool search and defer_loading, delays putting a tool’s schema into the context until the model needs it. It saves input tokens. It has no effect on how long a call may take. And programmatic tool calling, on both platforms, moves the loop into code the model writes, which changes how many round trips you pay for but, on Anthropic’s documentation, adds a four-minute limit rather than removing one.
Our function calling guide across the three vendors covers the ordinary round trip. This page is only about the case where that round trip cannot close in time.
06 — The decisionWhat to do with a slow tool.
The routes below follow from the documentation and nothing else. None of them depends on a provider managing your job, because on every one of these APIs the job is yours.
The pattern that survives all three vendors is the ticket: a fast result that says the work has started, plus a tool to check on it. It is less elegant than OpenAI’s async flag and it works on Gemini’s standard endpoint, where nothing else is documented. Our AI transformation practice builds agent loops that way first and adopts a vendor’s deferral feature only where the documentation supports it.
This census is built from vendor developer documentation only. It records what each page says as of the collection date and does not test the APIs.
- Sources
- OpenAI: async tool calling guide and Background mode guide. Anthropic: tool use overview, handle tool calls, parallel tool use and programmatic tool calling pages. Google: Gemini API function calling page and Live API tools page. All undated documentation pages.
- As-of date
- All pages were read on September 4, 2026. The page is dated September 3 for the OpenAI feature it responds to; the collection date is stated here and not restated elsewhere.
- Scope
- Client tools the application runs. Vendor-hosted tools are excluded. Agent frameworks and runtimes that sit above these APIs are not in this edition; a future refresh may add them.
- Reading rule
- A cell reads “not documented” when the vendor’s page is silent. It never reads “not supported”, because silence in documentation is not evidence of absence in the API.
- Change log
- September 4, 2026: first publication, three vendors and six surfaces.
07 — ConclusionThe job is always yours.
One vendor lets the model keep working, one makes you wait, and all three leave the running job in your hands.
OpenAI’s async tools are a real change: for the first time in a standard API, the model can issue a call and carry on with independent work, then take the result whenever it arrives. Google has a richer contract in its Live API and, by its own table, not in the newest Live model. Anthropic’s rule is strict and simple: the result comes next, and the application decides how long next takes.
None of that moves the job. OpenAI says so in one sentence, Anthropic’s programmatic mode says so with a four-minute timer, and Gemini’s standard page says nothing because there is nothing to say. The loop that owns the slow tool is the one you wrote.
This page will change when a vendor documents a new deferral mechanism or removes one. The Gemini 3.1 Flash Live row is the one we expect to move first.