{
  "@context": "https://schema.org",
  "@id": "https://aggr.aymericbeaumet.com/items/huggingface-co/2026-01-15-open-responses-what-you-need-to-know/#webpage",
  "@type": [
    "WebPage",
    "ArchiveComponent"
  ],
  "articleBody": "Open Responses is a new and open inference standard. Initiated by OpenAI, built by the open source AI community, and backed by the Hugging Face ecosystem, Open Responses is based on the Responses API and is designed for the future of Agents. In this blog post, we’ll look at how Open Responses works and why the open source community should use Open Responses.\n\nThe era of the chatbot is long gone, and agents dominate inference workloads. Developers are shifting toward autonomous systems that reason, plan, and act over long-time horizons. Despite this shift, much of the ecosystem still uses the **Chat Completion** format, which was designed for turn-based conversations and falls short for agentic use cases. The **Responses format** was designed to address these limitations, but it is closed and not as widely adopted. The **Chat Completion** format is still the de facto standard despite the alternatives.\n\nThis mismatch between the agentic workflow requirements and entrenched interfaces motivates the need for an open inference standard. Over the coming months, we will collaborate with the community and inference providers to implement and adapt Open Responses to a shared format, practically capable of replacing chat completions.\n\nOpen Responses builds on the direction OpenAI has set with their [*Responses API*](https://platform.openai.com/docs/api-reference/responses) launched in March 2025, which superseded the existing Completion and Assistants APIs with a consistent way to:\n\n- Generate Text, Images, and JSON structured outputs\n- Create Video content through a separate task-based endpoint\n- Run agentic loops on the provider side, executing tool calls autonomously and returning the final result.\n\n## What is Open Responses?\n\nOpen Responses extends and open-sources the Responses API, making it more accessible for builders and routing providers to interoperate and collaborate on shared interests.\n\nSome of the key points are:\n\n- Stateless by default, supporting encrypted reasoning for providers that require it.\n- Standardized model configuration parameters.\n- Streaming is modeled as a series of semantic events, not raw text or object deltas.\n- Extensible via configurable parameters specific to certain model providers.\n\n## What do we need to know to build with Open Responses?\n\nWe’ll briefly explore the core changes that impact most community members. If you want to deep dive into the specification, check out the [Open Responses documentation](https://www.openresponses.org/).\n\n### Client Requests to Open Responses\n\nClient requests to Open Responses are similar to the existing Responses API. Below we demonstrate a request to the Open Responses API using curl. We're calling a proxy endpoint that routes to Inference Providers using the Open Responses API schema.\n\n```diff\n curl https://evalstate-openresponses.hf.space/v1/responses \\\n   -H \"Content-Type: application/json\" \\\n   -H \"Authorization: Bearer $HF_TOKEN\" \\\n+  -H \"OpenResponses-Version: latest\" \\\n   -N \\\n   -d '{\n         \"model\": \"moonshotai/Kimi-K2-Thinking:nebius\",\n         \"input\": \"explain the theory of life\"\n       }'\n```\n\n### Changes for Inference Clients and Providers\n\nClients that already support the Responses API can migrate to Open Responses with relatively little effort. The main changes involve how reasoning content is exposed:\n\n- Expanded reasoning visibility: Open Responses formalizes three optional fields for reasoning items: `content` (raw reasoning traces), `encrypted_content` (provider-specific protected content), and `summary` (sanitized from raw traces).\n\nOpenAI models used to only expose `summary` and `encrypted_content`. With Open Responses, providers may expose their raw reasoning via the API. Clients migrating from providers that previously returned only summaries and encrypted content will now have the opportunity to receive and handle raw reasoning streams when supported by their chosen provider.\n\n- Implementing richer state changes and payloads, including more detailed observability—for example, a hosted Code Interpreter can send a specific `interpreting` state to improve agent and user visibility during long-running operations.\n\nFor Model Providers, implementing the changes for Open Responses should be straightforward if they already adhere to the Responses API specification. For Routers, there is now the opportunity to standardize on a consistent endpoint and support configuration options for customization where needed.\n\nOver time, as Providers continue to innovate, certain features will become standardized in the base specification.\n\nIn summary, migrating to Open Responses will make the inference experience more consistent and improve quality as undocumented extensions, interpretations, and workarounds of the legacy Completions API are normalized in Open Responses.\n\nYou can see how to stream reasoning chunks below.\n\n```json\n {\n  \"model\": \"moonshotai/Kimi-K2-Thinking:together\",\n  \"input\": [\n    {\n      \"type\": \"message\",\n      \"role\": \"user\",\n      \"content\": \"explain photosynthesis.\"\n    }\n  ],\n  \"stream\": true\n}\n```\n\nHere’s the difference between getting an Open Response and using OpenAI Responses for reasoning deltas:\n\n```json\n// Open weight models stream raw reasoning\nevent: response.reasoning.delta\ndata: { \"delta\": \"User asked: 'Where should I eat...' Step 1: Parse location...\", ... }\n\n// Models with encrypted reasoning send summaries, or sent as a convenience by Open Weight models\nevent: response.reasoning_summary_text.delta\ndata: { \"delta\": \"Determined user wants restaurant recommendations\", ... }\n```\n\n### Open Responses for Routing\n\nOpen Responses distinguishes between “Model Providers” — those who provide inference — and “Routers” — intermediaries who orchestrate between multiple providers.\n\nClients can now specify a Provider along with provider-specific API options when making requests, allowing intermediary Routers to orchestrate requests between upstream providers.\n\n### Tools\n\nOpen Responses natively supports two categories of tools: internal and external. Externally hosted tools are implemented outside the model provider’s system. For example, client side functions to be executed, or MCP servers. Internally hosted tools are within the model provider’s system. For example, OpenAI’s file search or Google Drive integration. The model calls, executes, and retrieves results entirely within the provider's infrastructure, requiring no developer intervention.\n\n### Sub Agent Loops\n\nOpen Responses formalizes the agentic loop which is usually made up of a repeating cycle of reasoning, tool invocation, and response generation that enables models to autonomously complete multi-step tasks.\n\n[![process diagram](https://huggingface.co/huggingface/documentation-images/resolve/main/openresponses/image1.png)](https://huggingface.co/huggingface/documentation-images/resolve/main/openresponses/image1.png)\n\n[image source: openresponses.org](https://www.openresponses.org/specification#the-agentic-loop)\n\nThe loop operates as follows:\n\n1. The API receives a user request and samples from the model\n2. If the model emits a tool call, the API executes it (internally or externally)\n3. Tool results are fed back to the model for continued reasoning\n4. The loop repeats until the model signals completion\n\nFor internally-hosted tools, the provider manages the entire loop; executing tools, returning results to the model, and streaming output. This means that multi-step workflows like \"search documents, summarize findings, then draft an email\" use a single request.\n\nClients control loop behavior via `max_tool_calls` to cap iterations and `tool_choice` to constrain which tools are invocable:\n\n```json\n{\n  \"model\": \"zai-org/GLM-4.7\",\n  \"input\": \"Find Q3 sales data and email a summary to the team\",\n  \"tools\": [...],\n  \"max_tool_calls\": 5,\n  \"tool_choice\": \"auto\"\n}\n```\n\nThe response contains all intermediate items: tool calls, results, reasoning.\n\n## Next Steps\n\nOpen Responses extends and improves the Responses API, providing richer and more detailed content definitions, compatibility, and deployment options. It also provides a standard way to execute sub-agent loops during primary inference calls, opening up powerful capabilities for AI Applications. We are looking forward to working with the Open Responses team **and the community at large** on future development of the specification.\n\n[![acceptance test](https://huggingface.co/huggingface/documentation-images/resolve/main/openresponses/image2.png)](https://huggingface.co/huggingface/documentation-images/resolve/main/openresponses/image2.png)\n\nYou can try Open Responses with [Hugging Face Inference Providers](https://huggingface.co/docs/inference-providers/index) today. We have an early access version available for use on [Hugging Face Spaces](https://huggingface.co/spaces/evalstate/openresponses) - try it with your Client and Open Responses Compliance Tool today!\n",
  "authors": [],
  "captured_at": "2026-10-04T12:50:30.804479567+00:00",
  "category": "ai",
  "content_html": "<p>Open Responses is a new and open inference standard. Initiated by OpenAI, built by the open source AI community, and backed by the Hugging Face ecosystem, Open Responses is based on the Responses API and is designed for the future of Agents. In this blog post, we’ll look at how Open Responses works and why the open source community should use Open Responses.</p>\n<p>The era of the chatbot is long gone, and agents dominate inference workloads. Developers are shifting toward autonomous systems that reason, plan, and act over long-time horizons. Despite this shift, much of the ecosystem still uses the <strong>Chat Completion</strong> format, which was designed for turn-based conversations and falls short for agentic use cases. The <strong>Responses format</strong> was designed to address these limitations, but it is closed and not as widely adopted. The <strong>Chat Completion</strong> format is still the de facto standard despite the alternatives.</p>\n<p>This mismatch between the agentic workflow requirements and entrenched interfaces motivates the need for an open inference standard. Over the coming months, we will collaborate with the community and inference providers to implement and adapt Open Responses to a shared format, practically capable of replacing chat completions.</p>\n<p>Open Responses builds on the direction OpenAI has set with their <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://platform.openai.com/docs/api-reference/responses\"><em>Responses API</em></a> launched in March 2025, which superseded the existing Completion and Assistants APIs with a consistent way to:</p>\n<ul>\n<li>Generate Text, Images, and JSON structured outputs</li>\n<li>Create Video content through a separate task-based endpoint</li>\n<li>Run agentic loops on the provider side, executing tool calls autonomously and returning the final result.</li>\n</ul>\n<h2>What is Open Responses?</h2>\n<p>Open Responses extends and open-sources the Responses API, making it more accessible for builders and routing providers to interoperate and collaborate on shared interests.</p>\n<p>Some of the key points are:</p>\n<ul>\n<li>Stateless by default, supporting encrypted reasoning for providers that require it.</li>\n<li>Standardized model configuration parameters.</li>\n<li>Streaming is modeled as a series of semantic events, not raw text or object deltas.</li>\n<li>Extensible via configurable parameters specific to certain model providers.</li>\n</ul>\n<h2>What do we need to know to build with Open Responses?</h2>\n<p>We’ll briefly explore the core changes that impact most community members. If you want to deep dive into the specification, check out the <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://www.openresponses.org/\">Open Responses documentation</a>.</p>\n<h3>Client Requests to Open Responses</h3>\n<p>Client requests to Open Responses are similar to the existing Responses API. Below we demonstrate a request to the Open Responses API using curl. We're calling a proxy endpoint that routes to Inference Providers using the Open Responses API schema.</p>\n<pre><code class=\"language-diff\"><span class=\"code-snippet\" data-language=\"Diff\"><span class=\"syntax-source syntax-diff\"> curl https://evalstate-openresponses.hf.space/v1/responses \\\n   -H &quot;Content-Type: application/json&quot; \\\n   -H &quot;Authorization: Bearer $HF_TOKEN&quot; \\\n<span class=\"syntax-markup syntax-inserted syntax-diff\"><span class=\"syntax-punctuation syntax-definition syntax-inserted syntax-diff\">+</span>  -H &quot;OpenResponses-Version: latest&quot; \\\n</span>   -N \\\n   -d &#39;{\n         &quot;model&quot;: &quot;moonshotai/Kimi-K2-Thinking:nebius&quot;,\n         &quot;input&quot;: &quot;explain the theory of life&quot;\n       }&#39;\n</span></span></code></pre>\n<h3>Changes for Inference Clients and Providers</h3>\n<p>Clients that already support the Responses API can migrate to Open Responses with relatively little effort. The main changes involve how reasoning content is exposed:</p>\n<ul>\n<li>Expanded reasoning visibility: Open Responses formalizes three optional fields for reasoning items: <code>content</code> (raw reasoning traces), <code>encrypted_content</code> (provider-specific protected content), and <code>summary</code> (sanitized from raw traces).</li>\n</ul>\n<p>OpenAI models used to only expose <code>summary</code> and <code>encrypted_content</code>. With Open Responses, providers may expose their raw reasoning via the API. Clients migrating from providers that previously returned only summaries and encrypted content will now have the opportunity to receive and handle raw reasoning streams when supported by their chosen provider.</p>\n<ul>\n<li>Implementing richer state changes and payloads, including more detailed observability—for example, a hosted Code Interpreter can send a specific <code>interpreting</code> state to improve agent and user visibility during long-running operations.</li>\n</ul>\n<p>For Model Providers, implementing the changes for Open Responses should be straightforward if they already adhere to the Responses API specification. For Routers, there is now the opportunity to standardize on a consistent endpoint and support configuration options for customization where needed.</p>\n<p>Over time, as Providers continue to innovate, certain features will become standardized in the base specification.</p>\n<p>In summary, migrating to Open Responses will make the inference experience more consistent and improve quality as undocumented extensions, interpretations, and workarounds of the legacy Completions API are normalized in Open Responses.</p>\n<p>You can see how to stream reasoning chunks below.</p>\n<pre><code class=\"language-json\"><span class=\"code-snippet\" data-language=\"JSON\"><span class=\"syntax-source syntax-json\"> <span class=\"syntax-meta syntax-structure syntax-dictionary syntax-json\"><span class=\"syntax-punctuation syntax-section syntax-dictionary syntax-begin syntax-json\">{</span>\n  <span class=\"syntax-meta syntax-structure syntax-dictionary syntax-key syntax-json\"><span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>model<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span></span><span class=\"syntax-meta syntax-structure syntax-dictionary syntax-value syntax-json\"><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-key-value syntax-json\">:</span> <span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>moonshotai/Kimi-K2-Thinking:together<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-pair syntax-json\">,</span></span>\n  <span class=\"syntax-meta syntax-structure syntax-dictionary syntax-key syntax-json\"><span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>input<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span></span><span class=\"syntax-meta syntax-structure syntax-dictionary syntax-value syntax-json\"><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-key-value syntax-json\">:</span> <span class=\"syntax-meta syntax-structure syntax-array syntax-json\"><span class=\"syntax-punctuation syntax-section syntax-array syntax-begin syntax-json\">[</span>\n    <span class=\"syntax-meta syntax-structure syntax-dictionary syntax-json\"><span class=\"syntax-punctuation syntax-section syntax-dictionary syntax-begin syntax-json\">{</span>\n      <span class=\"syntax-meta syntax-structure syntax-dictionary syntax-key syntax-json\"><span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>type<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span></span><span class=\"syntax-meta syntax-structure syntax-dictionary syntax-value syntax-json\"><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-key-value syntax-json\">:</span> <span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>message<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-pair syntax-json\">,</span></span>\n      <span class=\"syntax-meta syntax-structure syntax-dictionary syntax-key syntax-json\"><span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>role<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span></span><span class=\"syntax-meta syntax-structure syntax-dictionary syntax-value syntax-json\"><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-key-value syntax-json\">:</span> <span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>user<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-pair syntax-json\">,</span></span>\n      <span class=\"syntax-meta syntax-structure syntax-dictionary syntax-key syntax-json\"><span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>content<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span></span><span class=\"syntax-meta syntax-structure syntax-dictionary syntax-value syntax-json\"><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-key-value syntax-json\">:</span> <span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>explain photosynthesis.<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span>\n    </span><span class=\"syntax-punctuation syntax-section syntax-dictionary syntax-end syntax-json\">}</span></span>\n  <span class=\"syntax-punctuation syntax-section syntax-array syntax-end syntax-json\">]</span></span><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-pair syntax-json\">,</span></span>\n  <span class=\"syntax-meta syntax-structure syntax-dictionary syntax-key syntax-json\"><span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>stream<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span></span><span class=\"syntax-meta syntax-structure syntax-dictionary syntax-value syntax-json\"><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-key-value syntax-json\">:</span> <span class=\"syntax-constant syntax-language syntax-json\">true</span>\n</span><span class=\"syntax-punctuation syntax-section syntax-dictionary syntax-end syntax-json\">}</span></span>\n</span></span></code></pre>\n<p>Here’s the difference between getting an Open Response and using OpenAI Responses for reasoning deltas:</p>\n<pre><code class=\"language-json\"><span class=\"code-snippet\" data-language=\"JSON\"><span class=\"syntax-source syntax-json\"><span class=\"syntax-comment syntax-line syntax-double-slash syntax-js\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-json\">//</span> Open weight models stream raw reasoning\n</span>event: response.reasoning.delta\ndata: <span class=\"syntax-meta syntax-structure syntax-dictionary syntax-json\"><span class=\"syntax-punctuation syntax-section syntax-dictionary syntax-begin syntax-json\">{</span> <span class=\"syntax-meta syntax-structure syntax-dictionary syntax-key syntax-json\"><span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>delta<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span></span><span class=\"syntax-meta syntax-structure syntax-dictionary syntax-value syntax-json\"><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-key-value syntax-json\">:</span> <span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>User asked: &#39;Where should I eat...&#39; Step 1: Parse location...<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-pair syntax-json\">,</span></span> <span class=\"syntax-invalid syntax-illegal syntax-expected-dictionary-separator syntax-json\">.</span><span class=\"syntax-invalid syntax-illegal syntax-expected-dictionary-separator syntax-json\">.</span><span class=\"syntax-invalid syntax-illegal syntax-expected-dictionary-separator syntax-json\">.</span> <span class=\"syntax-punctuation syntax-section syntax-dictionary syntax-end syntax-json\">}</span></span>\n\n<span class=\"syntax-comment syntax-line syntax-double-slash syntax-js\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-json\">//</span> Models with encrypted reasoning send summaries, or sent as a convenience by Open Weight models\n</span>event: response.reasoning_summary_text.delta\ndata: <span class=\"syntax-meta syntax-structure syntax-dictionary syntax-json\"><span class=\"syntax-punctuation syntax-section syntax-dictionary syntax-begin syntax-json\">{</span> <span class=\"syntax-meta syntax-structure syntax-dictionary syntax-key syntax-json\"><span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>delta<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span></span><span class=\"syntax-meta syntax-structure syntax-dictionary syntax-value syntax-json\"><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-key-value syntax-json\">:</span> <span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>Determined user wants restaurant recommendations<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-pair syntax-json\">,</span></span> <span class=\"syntax-invalid syntax-illegal syntax-expected-dictionary-separator syntax-json\">.</span><span class=\"syntax-invalid syntax-illegal syntax-expected-dictionary-separator syntax-json\">.</span><span class=\"syntax-invalid syntax-illegal syntax-expected-dictionary-separator syntax-json\">.</span> <span class=\"syntax-punctuation syntax-section syntax-dictionary syntax-end syntax-json\">}</span></span>\n</span></span></code></pre>\n<h3>Open Responses for Routing</h3>\n<p>Open Responses distinguishes between “Model Providers” — those who provide inference — and “Routers” — intermediaries who orchestrate between multiple providers.</p>\n<p>Clients can now specify a Provider along with provider-specific API options when making requests, allowing intermediary Routers to orchestrate requests between upstream providers.</p>\n<h3>Tools</h3>\n<p>Open Responses natively supports two categories of tools: internal and external. Externally hosted tools are implemented outside the model provider’s system. For example, client side functions to be executed, or MCP servers. Internally hosted tools are within the model provider’s system. For example, OpenAI’s file search or Google Drive integration. The model calls, executes, and retrieves results entirely within the provider's infrastructure, requiring no developer intervention.</p>\n<h3>Sub Agent Loops</h3>\n<p>Open Responses formalizes the agentic loop which is usually made up of a repeating cycle of reasoning, tool invocation, and response generation that enables models to autonomously complete multi-step tasks.</p>\n<p><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/huggingface/documentation-images/resolve/main/openresponses/image1.png\"><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://huggingface.co/huggingface/documentation-images/resolve/main/openresponses/image1.png\" alt=\"process diagram\" loading=\"eager\" decoding=\"async\" fetchpriority=\"high\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture></a></p>\n<p><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://www.openresponses.org/specification#the-agentic-loop\">image source: openresponses.org</a></p>\n<p>The loop operates as follows:</p>\n<ol>\n<li>The API receives a user request and samples from the model</li>\n<li>If the model emits a tool call, the API executes it (internally or externally)</li>\n<li>Tool results are fed back to the model for continued reasoning</li>\n<li>The loop repeats until the model signals completion</li>\n</ol>\n<p>For internally-hosted tools, the provider manages the entire loop; executing tools, returning results to the model, and streaming output. This means that multi-step workflows like &quot;search documents, summarize findings, then draft an email&quot; use a single request.</p>\n<p>Clients control loop behavior via <code>max_tool_calls</code> to cap iterations and <code>tool_choice</code> to constrain which tools are invocable:</p>\n<pre><code class=\"language-json\"><span class=\"code-snippet\" data-language=\"JSON\"><span class=\"syntax-source syntax-json\"><span class=\"syntax-meta syntax-structure syntax-dictionary syntax-json\"><span class=\"syntax-punctuation syntax-section syntax-dictionary syntax-begin syntax-json\">{</span>\n  <span class=\"syntax-meta syntax-structure syntax-dictionary syntax-key syntax-json\"><span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>model<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span></span><span class=\"syntax-meta syntax-structure syntax-dictionary syntax-value syntax-json\"><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-key-value syntax-json\">:</span> <span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>zai-org/GLM-4.7<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-pair syntax-json\">,</span></span>\n  <span class=\"syntax-meta syntax-structure syntax-dictionary syntax-key syntax-json\"><span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>input<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span></span><span class=\"syntax-meta syntax-structure syntax-dictionary syntax-value syntax-json\"><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-key-value syntax-json\">:</span> <span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>Find Q3 sales data and email a summary to the team<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-pair syntax-json\">,</span></span>\n  <span class=\"syntax-meta syntax-structure syntax-dictionary syntax-key syntax-json\"><span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>tools<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span></span><span class=\"syntax-meta syntax-structure syntax-dictionary syntax-value syntax-json\"><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-key-value syntax-json\">:</span> <span class=\"syntax-meta syntax-structure syntax-array syntax-json\"><span class=\"syntax-punctuation syntax-section syntax-array syntax-begin syntax-json\">[</span><span class=\"syntax-invalid syntax-illegal syntax-expected-array-separator syntax-json\">.</span><span class=\"syntax-invalid syntax-illegal syntax-expected-array-separator syntax-json\">.</span><span class=\"syntax-invalid syntax-illegal syntax-expected-array-separator syntax-json\">.</span><span class=\"syntax-punctuation syntax-section syntax-array syntax-end syntax-json\">]</span></span><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-pair syntax-json\">,</span></span>\n  <span class=\"syntax-meta syntax-structure syntax-dictionary syntax-key syntax-json\"><span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>max_tool_calls<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span></span><span class=\"syntax-meta syntax-structure syntax-dictionary syntax-value syntax-json\"><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-key-value syntax-json\">:</span> <span class=\"syntax-constant syntax-numeric syntax-json\">5</span><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-pair syntax-json\">,</span></span>\n  <span class=\"syntax-meta syntax-structure syntax-dictionary syntax-key syntax-json\"><span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>tool_choice<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span></span><span class=\"syntax-meta syntax-structure syntax-dictionary syntax-value syntax-json\"><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-key-value syntax-json\">:</span> <span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>auto<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span>\n</span><span class=\"syntax-punctuation syntax-section syntax-dictionary syntax-end syntax-json\">}</span></span>\n</span></span></code></pre>\n<p>The response contains all intermediate items: tool calls, results, reasoning.</p>\n<h2>Next Steps</h2>\n<p>Open Responses extends and improves the Responses API, providing richer and more detailed content definitions, compatibility, and deployment options. It also provides a standard way to execute sub-agent loops during primary inference calls, opening up powerful capabilities for AI Applications. We are looking forward to working with the Open Responses team <strong>and the community at large</strong> on future development of the specification.</p>\n<p><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/huggingface/documentation-images/resolve/main/openresponses/image2.png\"><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://huggingface.co/huggingface/documentation-images/resolve/main/openresponses/image2.png\" alt=\"acceptance test\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"low\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture></a></p>\n<p>You can try Open Responses with <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/docs/inference-providers/index\">Hugging Face Inference Providers</a> today. We have an early access version available for use on <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/spaces/evalstate/openresponses\">Hugging Face Spaces</a> - try it with your Client and Open Responses Compliance Tool today!</p>\n",
  "content_markdown": "Open Responses is a new and open inference standard. Initiated by OpenAI, built by the open source AI community, and backed by the Hugging Face ecosystem, Open Responses is based on the Responses API and is designed for the future of Agents. In this blog post, we’ll look at how Open Responses works and why the open source community should use Open Responses.\n\nThe era of the chatbot is long gone, and agents dominate inference workloads. Developers are shifting toward autonomous systems that reason, plan, and act over long-time horizons. Despite this shift, much of the ecosystem still uses the **Chat Completion** format, which was designed for turn-based conversations and falls short for agentic use cases. The **Responses format** was designed to address these limitations, but it is closed and not as widely adopted. The **Chat Completion** format is still the de facto standard despite the alternatives.\n\nThis mismatch between the agentic workflow requirements and entrenched interfaces motivates the need for an open inference standard. Over the coming months, we will collaborate with the community and inference providers to implement and adapt Open Responses to a shared format, practically capable of replacing chat completions.\n\nOpen Responses builds on the direction OpenAI has set with their [*Responses API*](https://platform.openai.com/docs/api-reference/responses) launched in March 2025, which superseded the existing Completion and Assistants APIs with a consistent way to:\n\n- Generate Text, Images, and JSON structured outputs\n- Create Video content through a separate task-based endpoint\n- Run agentic loops on the provider side, executing tool calls autonomously and returning the final result.\n\n## What is Open Responses?\n\nOpen Responses extends and open-sources the Responses API, making it more accessible for builders and routing providers to interoperate and collaborate on shared interests.\n\nSome of the key points are:\n\n- Stateless by default, supporting encrypted reasoning for providers that require it.\n- Standardized model configuration parameters.\n- Streaming is modeled as a series of semantic events, not raw text or object deltas.\n- Extensible via configurable parameters specific to certain model providers.\n\n## What do we need to know to build with Open Responses?\n\nWe’ll briefly explore the core changes that impact most community members. If you want to deep dive into the specification, check out the [Open Responses documentation](https://www.openresponses.org/).\n\n### Client Requests to Open Responses\n\nClient requests to Open Responses are similar to the existing Responses API. Below we demonstrate a request to the Open Responses API using curl. We're calling a proxy endpoint that routes to Inference Providers using the Open Responses API schema.\n\n```diff\n curl https://evalstate-openresponses.hf.space/v1/responses \\\n   -H \"Content-Type: application/json\" \\\n   -H \"Authorization: Bearer $HF_TOKEN\" \\\n+  -H \"OpenResponses-Version: latest\" \\\n   -N \\\n   -d '{\n         \"model\": \"moonshotai/Kimi-K2-Thinking:nebius\",\n         \"input\": \"explain the theory of life\"\n       }'\n```\n\n### Changes for Inference Clients and Providers\n\nClients that already support the Responses API can migrate to Open Responses with relatively little effort. The main changes involve how reasoning content is exposed:\n\n- Expanded reasoning visibility: Open Responses formalizes three optional fields for reasoning items: `content` (raw reasoning traces), `encrypted_content` (provider-specific protected content), and `summary` (sanitized from raw traces).\n\nOpenAI models used to only expose `summary` and `encrypted_content`. With Open Responses, providers may expose their raw reasoning via the API. Clients migrating from providers that previously returned only summaries and encrypted content will now have the opportunity to receive and handle raw reasoning streams when supported by their chosen provider.\n\n- Implementing richer state changes and payloads, including more detailed observability—for example, a hosted Code Interpreter can send a specific `interpreting` state to improve agent and user visibility during long-running operations.\n\nFor Model Providers, implementing the changes for Open Responses should be straightforward if they already adhere to the Responses API specification. For Routers, there is now the opportunity to standardize on a consistent endpoint and support configuration options for customization where needed.\n\nOver time, as Providers continue to innovate, certain features will become standardized in the base specification.\n\nIn summary, migrating to Open Responses will make the inference experience more consistent and improve quality as undocumented extensions, interpretations, and workarounds of the legacy Completions API are normalized in Open Responses.\n\nYou can see how to stream reasoning chunks below.\n\n```json\n {\n  \"model\": \"moonshotai/Kimi-K2-Thinking:together\",\n  \"input\": [\n    {\n      \"type\": \"message\",\n      \"role\": \"user\",\n      \"content\": \"explain photosynthesis.\"\n    }\n  ],\n  \"stream\": true\n}\n```\n\nHere’s the difference between getting an Open Response and using OpenAI Responses for reasoning deltas:\n\n```json\n// Open weight models stream raw reasoning\nevent: response.reasoning.delta\ndata: { \"delta\": \"User asked: 'Where should I eat...' Step 1: Parse location...\", ... }\n\n// Models with encrypted reasoning send summaries, or sent as a convenience by Open Weight models\nevent: response.reasoning_summary_text.delta\ndata: { \"delta\": \"Determined user wants restaurant recommendations\", ... }\n```\n\n### Open Responses for Routing\n\nOpen Responses distinguishes between “Model Providers” — those who provide inference — and “Routers” — intermediaries who orchestrate between multiple providers.\n\nClients can now specify a Provider along with provider-specific API options when making requests, allowing intermediary Routers to orchestrate requests between upstream providers.\n\n### Tools\n\nOpen Responses natively supports two categories of tools: internal and external. Externally hosted tools are implemented outside the model provider’s system. For example, client side functions to be executed, or MCP servers. Internally hosted tools are within the model provider’s system. For example, OpenAI’s file search or Google Drive integration. The model calls, executes, and retrieves results entirely within the provider's infrastructure, requiring no developer intervention.\n\n### Sub Agent Loops\n\nOpen Responses formalizes the agentic loop which is usually made up of a repeating cycle of reasoning, tool invocation, and response generation that enables models to autonomously complete multi-step tasks.\n\n[![process diagram](https://huggingface.co/huggingface/documentation-images/resolve/main/openresponses/image1.png)](https://huggingface.co/huggingface/documentation-images/resolve/main/openresponses/image1.png)\n\n[image source: openresponses.org](https://www.openresponses.org/specification#the-agentic-loop)\n\nThe loop operates as follows:\n\n1. The API receives a user request and samples from the model\n2. If the model emits a tool call, the API executes it (internally or externally)\n3. Tool results are fed back to the model for continued reasoning\n4. The loop repeats until the model signals completion\n\nFor internally-hosted tools, the provider manages the entire loop; executing tools, returning results to the model, and streaming output. This means that multi-step workflows like \"search documents, summarize findings, then draft an email\" use a single request.\n\nClients control loop behavior via `max_tool_calls` to cap iterations and `tool_choice` to constrain which tools are invocable:\n\n```json\n{\n  \"model\": \"zai-org/GLM-4.7\",\n  \"input\": \"Find Q3 sales data and email a summary to the team\",\n  \"tools\": [...],\n  \"max_tool_calls\": 5,\n  \"tool_choice\": \"auto\"\n}\n```\n\nThe response contains all intermediate items: tool calls, results, reasoning.\n\n## Next Steps\n\nOpen Responses extends and improves the Responses API, providing richer and more detailed content definitions, compatibility, and deployment options. It also provides a standard way to execute sub-agent loops during primary inference calls, opening up powerful capabilities for AI Applications. We are looking forward to working with the Open Responses team **and the community at large** on future development of the specification.\n\n[![acceptance test](https://huggingface.co/huggingface/documentation-images/resolve/main/openresponses/image2.png)](https://huggingface.co/huggingface/documentation-images/resolve/main/openresponses/image2.png)\n\nYou can try Open Responses with [Hugging Face Inference Providers](https://huggingface.co/docs/inference-providers/index) today. We have an early access version available for use on [Hugging Face Spaces](https://huggingface.co/spaces/evalstate/openresponses) - try it with your Client and Open Responses Compliance Tool today!\n",
  "dateCreated": "2026-10-04T12:50:30.804479567+00:00",
  "date_created": "2026-01-15T00:00:00+00:00",
  "date_modified": "2026-01-15T00:00:00+00:00",
  "date_published": "2026-01-15T00:00:00+00:00",
  "description": "Open Responses is a new and open inference standard. Initiated by OpenAI, built by the open source AI community, and backed by the Hugging Face ecosystem, Open Responses is based on the Responses API and is designed for the future of…",
  "external_url": "https://huggingface.co/blog/open-responses",
  "git": {
    "commit": "ebb0941c5c06a2ab2377342d607535262a3e969e",
    "path": "items/huggingface-co/2026/01/2026-01-15-open-responses-what-you-need-to-know.md",
    "permalink": "https://github.com/aymericbeaumet/aggr-instance/blob/ebb0941c5c06a2ab2377342d607535262a3e969e/items/huggingface-co/2026/01/2026-01-15-open-responses-what-you-need-to-know.md"
  },
  "id": "urn:aggr:item:128555efc07c1a5e4855f55e630011d261c36de4",
  "isBasedOn": {
    "@id": "https://huggingface.co/blog/open-responses"
  },
  "mainEntity": {
    "@id": "https://huggingface.co/blog/open-responses",
    "@type": "CreativeWork",
    "archivedAt": {
      "@id": "https://aggr.aymericbeaumet.com/items/huggingface-co/2026-01-15-open-responses-what-you-need-to-know/#webpage"
    },
    "dateModified": "2026-01-15T00:00:00+00:00",
    "datePublished": "2026-01-15T00:00:00+00:00",
    "headline": "Open Responses: What you need to know",
    "timeRequired": "PT6M",
    "url": "https://huggingface.co/blog/open-responses",
    "wordCount": 1147
  },
  "name": "Archived snapshot: Open Responses: What you need to know",
  "preview": null,
  "reading_minutes": 6,
  "replicated_at": null,
  "source": "huggingface-co",
  "source_name": "Hugging Face - Blog",
  "summary": null,
  "tags": [],
  "temporalCoverage": "2026-10-04T12:50:30.804479567+00:00",
  "title": "Open Responses: What you need to know",
  "url": "https://aggr.aymericbeaumet.com/items/huggingface-co/2026-01-15-open-responses-what-you-need-to-know/",
  "word_count": 1147
}