Thanks for an interesting observation.
In your error, I wonder what “following item” is supposed to be referring to, as an “rs_” ID is for an entire reasoning container, which can have multiple array items inside. “Following” is language that would indicate something that comes after that “type”:“reasoning” object externally, such as “type”:“message”…
Referencing a response.done for “output”, a single ID for all:
"output": [
{
"id": "rs_045fb12aa0dfc2ea0069170733badc8197969fd65da2ca2501",
"type": "reasoning",
"encrypted_content": "gAAAAABpF...zbM_w==",
"summary": [
{
"type": "summary_text",
"text": "**Formulating a short introduction**\n\nI need to introduce myself in under 8 words. First, I tried \"ChatAPI: Helpful AI offering concise answers,\" which totals 6 words. Then I revised it to \"ChatAPI: Your helpful, concise AI assistant,\" which is also 6 words. Finally, I thought of \"I'm ChatAPI: concise, insightful, helpful AI,\" which is 7 words. I could also go with \"I'm ChatAPI: your helpful, insightful AI\" for a total of 7 words."
},
{
"type": "summary_text",
"text": "**Finalizing my introduction**\n\nI'm working on a concise introduction that\u2019s under 8 words. I counted: \"I'm ChatAPI: your helpful, insightful AI,\" which totals 7 words, and it's acceptable. I also thought, \"I'm ChatAPI: concise, helpful AI insights provider,\" but that sums up to 7 as well. Ultimately, I prefer saying, \"I'm ChatAPI: concise, helpful AI friend,\" which is 6 words. That feels friendly and direct, so I\u2019ll go with that as my final answer."
}
]
},
The validation of “reasoning” input items is sort of documented in OpenAPI specification. It is a collector for all reasoning: an array of multiple summary items, and nullable encrypted_content
In “input”,
type- string, enum “reasoning” (Alwaysreasoning) - Requiredid- string - Requiredencrypted_content- anyOf: string | ‘null’summary- array - - Required- items objects
type- string, requiredtext- string, required
- items objects
content- array (clear text of GPT-OSS)- items objects
type- string, requiredtext- string, required
- items objects
status- string, enum [“in_progress”, “completed”, “incomplete”]
Source specification, 'input'
- x-resolved-from: '#/components/schemas/ReasoningItem'
type: object
description: |
A description of the chain of thought used by a reasoning model while generating
a response. Be sure to include these items in your `input` to the Responses API
for subsequent turns of a conversation if you are manually
[managing context](https://platform.openai.com/docs/guides/conversation-state).
title: Reasoning
properties:
type:
type: string
description: |
The type of the object. Always `reasoning`.
enum:
- reasoning
x-stainless-const: true
id:
type: string
description: |
The unique identifier of the reasoning content.
encrypted_content:
anyOf:
- type: string
description: |
The encrypted content of the reasoning item - populated when a response is
generated with `reasoning.encrypted_content` in the `include` parameter.
- type: 'null'
summary:
type: array
description: |
Reasoning summary content.
items:
x-resolved-from: '#/components/schemas/Summary'
properties:
type:
type: string
enum:
- summary_text
description: The type of the object. Always `summary_text`.
default: summary_text
x-stainless-const: true
text:
type: string
description: A summary of the reasoning output from the
model so far.
type: object
required:
- type
- text
title: Summary text
description: A summary text from the model.
content:
type: array
description: |
Reasoning text content.
items:
x-resolved-from: '#/components/schemas/ReasoningTextContent'
properties:
type:
type: string
enum:
- reasoning_text
description: The type of the reasoning text. Always `reasoning_text`.
default: reasoning_text
x-stainless-const: true
text:
type: string
description: The reasoning text from the model.
type: object
required:
- type
- text
title: ReasoningTextContent
description: Reasoning text from the model.
status:
type: string
description: |
The status of the item. One of `in_progress`, `completed`, or
`incomplete`. Populated when items are returned via API.
enum:
- in_progress
- completed
- incomplete
required:
- id
- summary
- type
Thus, the summary array must be present, but can be 0-length.
"include" = ["reasoning.encrypted_content"] is optional in your request, so of course optional in your return.
A stateless API can’t know what was sent, so you should be able to pass about anything you want with zero knowledge of the expectation by the API. Even a made-up ID should be tolerated, along with made-up summary texts (seemingly pointless to transmit, so just empty the summary list). Even in encrypted reasoning, the summaries are external to that.
The only cruel joke would be if the ID is a validated hash of some summary content or even message, or similar in the encryption.
I’d be interested to know if you have issues emptying the summary array (or writing whatever you want as unused text).
Now: is encrypted reasoning salted or a certificate per organization; can I share my response content and another org can replay it?
reasoning and message shape, 2 summary_text
- for you to even try as input
"model": "o3-mini-2025-01-31",
"output": [
{
"id": "rs_045fb12aa0dfc2ea0069170733badc8197969fd65da2ca2501",
"type": "reasoning",
"encrypted_content": "gAAAAABpFwc8gea3wdYML_Vmb6fRPBc5jJ708Y0ReNfxqLUQ2zFNWmbyBstUDp_0nFTsLZRmp15oScu1_BdyeqKz-h-o-xlAHPM_U4AcjVwigbUzkErTzPfXjV3i3hiC3FtoEWYr4N7RSRY9B7Z-j4PjAb1bSQP6uRIwOhSCFZ2OWt0nw0lRoT5NA-qe8yti0HmpKh4rJJHvkFOVeyhlNGMApO_1VOOUO-igBDKhmraCdDhZXc_LppOXcFhtD9Er-DIi3wslv9UAm61t6dR2yUXMQywQsqAo0Xg-8GJgtF6pVO9YUC-UgfW2uV_ofx_hzyVzrYLYQxNVYHtWMraFSKhjdQdUpcWdPirziQ1i5z2yLgzFoR5_4mllrTNQ21qnAOmZjfptBWf4heF_vmyU_aw_xjvKCzbM_w==",
"summary": [
{
"type": "summary_text",
"text": "**Formulating a short introduction**\n\nI need to introduce myself in under 8 words. First, I tried \"ChatAPI: Helpful AI offering concise answers,\" which totals 6 words. Then I revised it to \"ChatAPI: Your helpful, concise AI assistant,\" which is also 6 words. Finally, I thought of \"I'm ChatAPI: concise, insightful, helpful AI,\" which is 7 words. I could also go with \"I'm ChatAPI: your helpful, insightful AI\" for a total of 7 words."
},
{
"type": "summary_text",
"text": "**Finalizing my introduction**\n\nI'm working on a concise introduction that\u2019s under 8 words. I counted: \"I'm ChatAPI: your helpful, insightful AI,\" which totals 7 words, and it's acceptable. I also thought, \"I'm ChatAPI: concise, helpful AI insights provider,\" but that sums up to 7 as well. Ultimately, I prefer saying, \"I'm ChatAPI: concise, helpful AI friend,\" which is 6 words. That feels friendly and direct, so I\u2019ll go with that as my final answer."
}
]
},
{
"id": "msg_045fb12aa0dfc2ea006917073cb7c88197acf5736b9c7a9aa3",
"type": "message",
"status": "completed",
"content": [
{
"type": "output_text",
"annotations": [],
"logprobs": [],
"text": "I'm ChatAPI: your concise, helpful AI."
}
],
"role": "assistant"
}
],