Skip to main content
Set stream: true to receive the response as server-sent events (SSE, Content-Type: text/event-stream) following the standard OpenAI Responses event sequence. The stock OpenAI SDK’s streaming interface works unchanged.

Event sequence

Each web search the model runs, and each page it reads, is announced as it starts with its own response.output_item.added, response.web_search_call.in_progress, and response.web_search_call.searching events. These steps run concurrently and report only their start, so the web_search_call items close together once research finishes: their response.web_search_call.completed and response.output_item.done events follow the answer’s text delta and precede its citation annotations. output_index counts items in opening order, so the message item takes the index after the last search opened before it. See Web Search Tool for the item shape. MCP tools and connectors selected with data_sources are reported once research finishes, after the web_search_call items close: first an mcp_list_tools item for each mcp tool (and for each data_sources connector, only when it failed), marked response.mcp_list_tools.completed or response.mcp_list_tools.failed, then each mcp_call item, marked response.mcp_call.completed or response.mcp_call.failed. Each item is opened, marked, and closed in turn, and takes an output_index after the message item. The response.mcp_list_tools.in_progress, response.mcp_call.in_progress, and response.mcp_call_arguments.* events are not sent. Today the full answer text arrives as a single response.output_text.delta once research completes — there is no token-by-token streaming yet. The early response.created and response.in_progress events still arrive up front, so streaming works well as a connection acknowledgment during longer requests. Consume deltas in a loop rather than assuming one chunk; granularity may become finer in the future.

Usage

The response.completed event carries the complete final Response object — the same shape a non-streaming request returns, including usage. Source citations arrive as response.output_text.annotation.added events after the text delta — see Citations.