OpenAI Conversations API
Status: DOCUMENTED + LIVE_VERIFIED (full lifecycle 2026-09-18). Machine-readable: generated/fragments/parameters/openai-conversations.json, endpoint records in generated/fragments/endpoints/openai-core.json, objects in generated/fragments/objects/openai-responses-objects.json.
Sources
- https://developers.openai.com/api/reference/resources/conversations/methods/create (+ retrieve, update, delete; subresources/items/methods/create, list, retrieve, delete)
- https://developers.openai.com/api/docs/guides/conversation-state#using-the-conversations-api
- OpenAPI
CreateConversationBody,UpdateConversationBody,ConversationResource,ConversationItemList,DeletedConversationResource
Last verified: 2026-09-18
Concept
A conversation is a durable, id-addressable container (conv_…) of items (the same Item union as Responses input: messages, tool calls/outputs, reasoning, compaction, item references…). Bind a response to it with conversation: "conv_…" on POST /v1/responses: the server prepends the conversation's items to the request and appends the response's input and output items afterwards. Items in a conversation are not subject to the 30-day response TTL. conversation and previous_response_id are mutually exclusive.
Endpoints
| Method | Path | Body / query | Returns | Live |
|---|---|---|---|---|
| POST | /v1/conversations |
{metadata?: map(≤16), items?: Item[] (≤20)} |
{id, object:"conversation", created_at, metadata} |
200 |
| GET | /v1/conversations/{id} |
— | conversation | 200; after delete → 404 |
| POST | /v1/conversations/{id} |
{metadata} (required) |
conversation | 200 |
| DELETE | /v1/conversations/{id} |
— | {id, object:"conversation.deleted", deleted:true} |
200 |
| POST | /v1/conversations/{id}/items |
{items: Item[] (≤20)}, ?include[] |
ConversationItemList of created items (ids assigned, status:"completed") |
200 |
| GET | /v1/conversations/{id}/items |
limit 1–100 (20), order asc|desc (default desc), after, include[] |
{object:"list", data[], first_id, last_id, has_more} |
200 |
| GET | /v1/conversations/{id}/items/{item_id} |
?include[] |
item | 200 |
| DELETE | /v1/conversations/{id}/items/{item_id} |
— | the parent conversation object (not a *.deleted object) |
200 |
include[] values are the Responses ones (message.input_image.image_url, reasoning.encrypted_content, message.output_text.logprobs, code_interpreter_call.outputs, file_search_call.results, web_search_call.results, web_search_call.action.sources, computer_call_output.output.image_url).
Live walk-through (k1–k11)
POST /v1/conversations {"metadata":{"atlas":"openai-core"}} -> conv_6aade90d…
POST …/items {"items":[{type:message, role:user, content:[input_text "Reply with OK."]}]}
-> list, 1 item msg_6aade90e… status completed
GET …/items?limit=10&order=asc -> 1 item, has_more false
GET …/items/msg_… -> {"id","type":"message","status":"completed","content":[input_text],"role":"user"}
POST /v1/responses {"model":"gpt-5.4-nano","conversation":conv_…,"input":"Reply with OK once more.","max_output_tokens":32}
-> status completed, "conversation":{"id":"conv_…"}, input_tokens 20 (both user msgs counted)
GET …/items?order=asc -> [message(user "Reply with OK."), message(user "Reply with OK once more."), message(assistant "OK")]
POST /v1/conversations/conv_… {"metadata":{…,"updated":"yes"}} -> metadata echoed
DELETE …/items/msg_… -> {"id":"conv_…","object":"conversation","created_at":…,"metadata":{…}}
DELETE /v1/conversations/conv_… -> {"object":"conversation.deleted","deleted":true}
GET /v1/conversations/conv_… -> 404 "Conversation with id '…' not found."Notes
- The response object shows
conversation: {"id": …}andprevious_response_id: null. - Assistant items stored in the conversation have
output_textcontent; user itemsinput_text. The assistant message stored via conversation did not carryphasein the list output (the same message in the Response object does). - SDKs: Python
client.conversations.{create,retrieve,update,delete},client.conversations.items.{create,list,retrieve,delete}(item_id, conversation_id=…); Nodeclient.conversations.items.create(convId, {items}),.list(convId, {order}),.retrieve(itemId, {conversation_id}). - No list-conversations endpoint exists (keep your own index).