Summary
When using the Responses API with store: false and the computer tool, multi-turn conversations fail on the second turn. The API returns output items (reasoning, message, computer_call) with server-generated id fields. When those items are sent back as conversation history in the next request, the API tries to resolve those IDs against server-side storage — which doesn’t exist because store: false was set.
Two failure modes
1. 404 — reasoning item present
If the response’s output array is passed back verbatim (including the reasoning item with its rs_ prefixed ID), the API returns 404 Not Found.
2. 500 — reasoning item omitted, other IDs remain
The 404 error message suggests removing the unresolvable item. If you strip the reasoning item (which has an empty summary and no useful content anyway), the request gets past the 404 — but then the API returns 500 Internal Server Error.
Expected behavior
The API should accept verbatim playback of the output items it returned, or the docs should describe what transformations are needed for store: false multi-turn.
Reproduction
This attached script exercises both cases with a single minimal request body.
set -euo pipefail
set -a; source .env; set +a
: "${OPENAI_API_KEY:?Set OPENAI_API_KEY}"
# 1x1 red PNG as a minimal valid screenshot
TINY_PNG="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg=="
COMMON=(-s -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json")
REASONING_ITEM='{
"id": "rs_083ff13b99ce487d0169ab5455d3c4819a9e2efe7f45534b3c",
"type": "reasoning",
"summary": []
},'
send_request() {
local reasoning_item="$1"
curl "${COMMON[@]}" https://api.openai.com/v1/responses -d @- <<EOF
{
"instructions": "You are controlling a browser-based kanban app through the built-in computer tool.",
"input": [
{
"content": [
{ "text": "what's on the desktop", "type": "input_text" }
],
"role": "user"
},
${reasoning_item}
{
"id": "msg_083ff13b99ce487d0169ab545999d0819aa3edf6123fdab1f9",
"type": "message",
"status": "completed",
"content": [
{ "type": "output_text", "text": "" }
],
"role": "assistant"
},
{
"id": "cu_083ff13b99ce487d0169ab5459c7e4819a9f0c36ae97db6e86",
"type": "computer_call",
"status": "completed",
"actions": [{ "type": "screenshot" }],
"call_id": "call_2dugsE4CytbpbsqMriR5KV5C"
},
{
"type": "computer_call_output",
"call_id": "call_2dugsE4CytbpbsqMriR5KV5C",
"output": {
"type": "computer_screenshot",
"image_url": "${TINY_PNG}"
}
}
],
"model": "gpt-5.4",
"reasoning": { "effort": "low" },
"store": false,
"tools": [{ "type": "computer" }]
}
EOF
echo ""
}
echo "--- Test 1: with reasoning item → expect 404 ---"
send_request "$REASONING_ITEM"
echo "--- Test 2: reasoning removed → expect 500 ---"
send_request ""
Prerequisites
OPENAI_API_KEYset in the environment (or in a.envfile in the working directory)curlandbash
Running
The script runs two requests and prints the API error response for each.
Environment
- Model:
gpt-5.4 - Endpoint:
POST /v1/responses - Tool:
computer store: false