Skip to content

Retrieve an item

conversations.items.retrieve(item_id, **kwargs) -> ConversationItem
GET/conversations/{conversation_id}/items/{item_id}

Get a single item from a conversation with the given IDs.

ParametersExpand Collapse
conversation_id: String
item_id: String
include: Array[ResponseIncludable]

Additional fields to include in the response. See the include parameter for listing Conversation items above for more information.

Accepts one of the following:
:"file_search_call.results"
:"web_search_call.results"
:"web_search_call.action.sources"
:"message.input_image.image_url"
:"computer_call_output.output.image_url"
:"code_interpreter_call.outputs"
:"reasoning.encrypted_content"
:"message.output_text.logprobs"
ReturnsExpand Collapse
ConversationItem = Message { id, content, role, 2 more } | ResponseFunctionToolCallItem { id } | ResponseFunctionToolCallOutputItem { id, call_id, output, 2 more } | 19 more

A single item within a conversation. The set of possible types are the same as the output type of a Response object.

Accepts one of the following:
class Message { id, content, role, 2 more }

A message to or from the model.

id: String

The unique ID of the message.

content: Array[ResponseInputText { text, type } | ResponseOutputText { annotations, text, type, logprobs } | TextContent { text, type } | 6 more]

The content of the message

Accepts one of the following:
class ResponseInputText { text, type }

A text input to the model.

text: String

The text input to the model.

type: :input_text

The type of the input item. Always input_text.

class ResponseOutputText { annotations, text, type, logprobs }

A text output from the model.

annotations: Array[{ file_id, filename, index, type} | { end_index, start_index, title, 2 more} | { container_id, end_index, file_id, 3 more} | { file_id, index, type}]

The annotations of the text output.

Accepts one of the following:
class FileCitation { file_id, filename, index, type }

A citation to a file.

file_id: String

The ID of the file.

filename: String

The filename of the file cited.

index: Integer

The index of the file in the list of files.

type: :file_citation

The type of the file citation. Always file_citation.

class URLCitation { end_index, start_index, title, 2 more }

A citation for a web resource used to generate a model response.

end_index: Integer

The index of the last character of the URL citation in the message.

start_index: Integer

The index of the first character of the URL citation in the message.

title: String

The title of the web resource.

type: :url_citation

The type of the URL citation. Always url_citation.

url: String

The URL of the web resource.

class ContainerFileCitation { container_id, end_index, file_id, 3 more }

A citation for a container file used to generate a model response.

container_id: String

The ID of the container file.

end_index: Integer

The index of the last character of the container file citation in the message.

file_id: String

The ID of the file.

filename: String

The filename of the container file cited.

start_index: Integer

The index of the first character of the container file citation in the message.

type: :container_file_citation

The type of the container file citation. Always container_file_citation.

class FilePath { file_id, index, type }

A path to a file.

file_id: String

The ID of the file.

index: Integer

The index of the file in the list of files.

type: :file_path

The type of the file path. Always file_path.

text: String

The text output from the model.

type: :output_text

The type of the output text. Always output_text.

logprobs: Array[{ token, bytes, logprob, top_logprobs}]
token: String
bytes: Array[Integer]
logprob: Float
top_logprobs: Array[{ token, bytes, logprob}]
token: String
bytes: Array[Integer]
logprob: Float
class TextContent { text, type }

A text content.

text: String
type: :text
class SummaryTextContent { text, type }

A summary text from the model.

text: String

A summary of the reasoning output from the model so far.

type: :summary_text

The type of the object. Always summary_text.

class ReasoningText { text, type }

Reasoning text from the model.

text: String

The reasoning text from the model.

type: :reasoning_text

The type of the reasoning text. Always reasoning_text.

class ResponseOutputRefusal { refusal, type }

A refusal from the model.

refusal: String

The refusal explanation from the model.

type: :refusal

The type of the refusal. Always refusal.

class ResponseInputImage { detail, type, file_id, image_url }

An image input to the model. Learn about image inputs.

detail: :low | :high | :auto

The detail level of the image to be sent to the model. One of high, low, or auto. Defaults to auto.

Accepts one of the following:
:low
:high
:auto
type: :input_image

The type of the input item. Always input_image.

file_id: String

The ID of the file to be sent to the model.

image_url: String

The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image in a data URL.

class ComputerScreenshotContent { file_id, image_url, type }

A screenshot of a computer.

file_id: String

The identifier of an uploaded file that contains the screenshot.

image_url: String

The URL of the screenshot image.

type: :computer_screenshot

Specifies the event type. For a computer screenshot, this property is always set to computer_screenshot.

class ResponseInputFile { type, file_data, file_id, 2 more }

A file input to the model.

type: :input_file

The type of the input item. Always input_file.

file_data: String

The content of the file to be sent to the model.

file_id: String

The ID of the file to be sent to the model.

file_url: String

The URL of the file to be sent to the model.

filename: String

The name of the file to be sent to the model.

role: :unknown | :user | :assistant | 5 more

The role of the message. One of unknown, user, assistant, system, critic, discriminator, developer, or tool.

Accepts one of the following:
:unknown
:user
:assistant
:system
:critic
:discriminator
:developer
:tool
status: :in_progress | :completed | :incomplete

The status of item. One of in_progress, completed, or incomplete. Populated when items are returned via API.

Accepts one of the following:
:in_progress
:completed
:incomplete
type: :message

The type of the message. Always set to message.

class ResponseFunctionToolCallItem { id }

A tool call to run a function. See the function calling guide for more information.

id: String

The unique ID of the function tool call.

class ResponseFunctionToolCallOutputItem { id, call_id, output, 2 more }
id: String

The unique ID of the function call tool output.

call_id: String

The unique ID of the function tool call generated by the model.

output: String | Array[ResponseInputText { text, type } | ResponseInputImage { detail, type, file_id, image_url } | ResponseInputFile { type, file_data, file_id, 2 more } ]

The output from the function call generated by your code. Can be a string or an list of output content.

Accepts one of the following:
String

A string of the output of the function call.

Array[ResponseInputText { text, type } | ResponseInputImage { detail, type, file_id, image_url } | ResponseInputFile { type, file_data, file_id, 2 more } ]

Text, image, or file output of the function call.

Accepts one of the following:
class ResponseInputText { text, type }

A text input to the model.

text: String

The text input to the model.

type: :input_text

The type of the input item. Always input_text.

class ResponseInputImage { detail, type, file_id, image_url }

An image input to the model. Learn about image inputs.

detail: :low | :high | :auto

The detail level of the image to be sent to the model. One of high, low, or auto. Defaults to auto.

Accepts one of the following:
:low
:high
:auto
type: :input_image

The type of the input item. Always input_image.

file_id: String

The ID of the file to be sent to the model.

image_url: String

The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image in a data URL.

class ResponseInputFile { type, file_data, file_id, 2 more }

A file input to the model.

type: :input_file

The type of the input item. Always input_file.

file_data: String

The content of the file to be sent to the model.

file_id: String

The ID of the file to be sent to the model.

file_url: String

The URL of the file to be sent to the model.

filename: String

The name of the file to be sent to the model.

type: :function_call_output

The type of the function tool call output. Always function_call_output.

status: :in_progress | :completed | :incomplete

The status of the item. One of in_progress, completed, or incomplete. Populated when items are returned via API.

Accepts one of the following:
:in_progress
:completed
:incomplete
class ResponseFileSearchToolCall { id, queries, status, 2 more }

The results of a file search tool call. See the file search guide for more information.

id: String

The unique ID of the file search tool call.

queries: Array[String]

The queries used to search for files.

status: :in_progress | :searching | :completed | 2 more

The status of the file search tool call. One of in_progress, searching, incomplete or failed,

Accepts one of the following:
:in_progress
:searching
:completed
:incomplete
:failed
type: :file_search_call

The type of the file search tool call. Always file_search_call.

results: Array[{ attributes, file_id, filename, 2 more}]

The results of the file search tool call.

attributes: Hash[Symbol, String | Float | bool]

Set of 16 key-value pairs that can be attached to an object. This can be useful for storing additional information about the object in a structured format, and querying for objects via API or the dashboard. Keys are strings with a maximum length of 64 characters. Values are strings with a maximum length of 512 characters, booleans, or numbers.

Accepts one of the following:
String
Float
bool
file_id: String

The unique ID of the file.

filename: String

The name of the file.

score: Float

The relevance score of the file - a value between 0 and 1.

formatfloat
text: String

The text that was retrieved from the file.

Accepts one of the following:
Accepts one of the following:
class ImageGenerationCall { id, result, status, type }

An image generation request made by the model.

id: String

The unique ID of the image generation call.

result: String

The generated image encoded in base64.

status: :in_progress | :completed | :generating | :failed

The status of the image generation call.

Accepts one of the following:
:in_progress
:completed
:generating
:failed
type: :image_generation_call

The type of the image generation call. Always image_generation_call.

class ResponseComputerToolCall { id, action, call_id, 3 more }

A tool call to a computer use tool. See the computer use guide for more information.

id: String

The unique ID of the computer call.

action: { button, type, x, y_} | { type, x, y_} | { path, type} | 6 more

A click action.

Accepts one of the following:
class Click { button, type, x, y_ }

A click action.

button: :left | :right | :wheel | 2 more

Indicates which mouse button was pressed during the click. One of left, right, wheel, back, or forward.

Accepts one of the following:
:left
:right
:wheel
:back
:forward
type: :click

Specifies the event type. For a click action, this property is always click.

x: Integer

The x-coordinate where the click occurred.

y_: Integer

The y-coordinate where the click occurred.

class DoubleClick { type, x, y_ }

A double click action.

type: :double_click

Specifies the event type. For a double click action, this property is always set to double_click.

x: Integer

The x-coordinate where the double click occurred.

y_: Integer

The y-coordinate where the double click occurred.

class Drag { path, type }

A drag action.

path: Array[{ x, y_}]

An array of coordinates representing the path of the drag action. Coordinates will appear as an array of objects, eg

[
  { x: 100, y: 200 },
  { x: 200, y: 300 }
]
x: Integer

The x-coordinate.

y_: Integer

The y-coordinate.

type: :drag

Specifies the event type. For a drag action, this property is always set to drag.

class Keypress { keys, type }

A collection of keypresses the model would like to perform.

keys: Array[String]

The combination of keys the model is requesting to be pressed. This is an array of strings, each representing a key.

type: :keypress

Specifies the event type. For a keypress action, this property is always set to keypress.

class Move { type, x, y_ }

A mouse move action.

type: :move

Specifies the event type. For a move action, this property is always set to move.

x: Integer

The x-coordinate to move to.

y_: Integer

The y-coordinate to move to.

class Screenshot { type }

A screenshot action.

type: :screenshot

Specifies the event type. For a screenshot action, this property is always set to screenshot.

class Scroll { scroll_x, scroll_y, type, 2 more }

A scroll action.

scroll_x: Integer

The horizontal scroll distance.

scroll_y: Integer

The vertical scroll distance.

type: :scroll

Specifies the event type. For a scroll action, this property is always set to scroll.

x: Integer

The x-coordinate where the scroll occurred.

y_: Integer

The y-coordinate where the scroll occurred.

class Type { text, type }

An action to type in text.

text: String

The text to type.

type: :type

Specifies the event type. For a type action, this property is always set to type.

class Wait { type }

A wait action.

type: :wait

Specifies the event type. For a wait action, this property is always set to wait.

call_id: String

An identifier used when responding to the tool call with output.

pending_safety_checks: Array[{ id, code, message}]

The pending safety checks for the computer call.

id: String

The ID of the pending safety check.

code: String

The type of the pending safety check.

message: String

Details about the pending safety check.

status: :in_progress | :completed | :incomplete

The status of the item. One of in_progress, completed, or incomplete. Populated when items are returned via API.

Accepts one of the following:
:in_progress
:completed
:incomplete
type: :computer_call

The type of the computer call. Always computer_call.

class ResponseComputerToolCallOutputItem { id, call_id, output, 3 more }
id: String

The unique ID of the computer call tool output.

call_id: String

The ID of the computer tool call that produced the output.

output: ResponseComputerToolCallOutputScreenshot { type, file_id, image_url }

A computer screenshot image used with the computer use tool.

type: :computer_screenshot

Specifies the event type. For a computer screenshot, this property is always set to computer_screenshot.

file_id: String

The identifier of an uploaded file that contains the screenshot.

image_url: String

The URL of the screenshot image.

type: :computer_call_output

The type of the computer tool call output. Always computer_call_output.

acknowledged_safety_checks: Array[{ id, code, message}]

The safety checks reported by the API that have been acknowledged by the developer.

id: String

The ID of the pending safety check.

code: String

The type of the pending safety check.

message: String

Details about the pending safety check.

status: :in_progress | :completed | :incomplete

The status of the message input. One of in_progress, completed, or incomplete. Populated when input items are returned via API.

Accepts one of the following:
:in_progress
:completed
:incomplete
class ResponseReasoningItem { id, summary, type, 3 more }

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.

id: String

The unique identifier of the reasoning content.

summary: Array[{ text, type}]

Reasoning summary content.

text: String

A summary of the reasoning output from the model so far.

type: :summary_text

The type of the object. Always summary_text.

type: :reasoning

The type of the object. Always reasoning.

content: Array[{ text, type}]

Reasoning text content.

text: String

The reasoning text from the model.

type: :reasoning_text

The type of the reasoning text. Always reasoning_text.

encrypted_content: String

The encrypted content of the reasoning item - populated when a response is generated with reasoning.encrypted_content in the include parameter.

status: :in_progress | :completed | :incomplete

The status of the item. One of in_progress, completed, or incomplete. Populated when items are returned via API.

Accepts one of the following:
:in_progress
:completed
:incomplete
class ResponseCodeInterpreterToolCall { id, code, container_id, 3 more }

A tool call to run code.

id: String

The unique ID of the code interpreter tool call.

code: String

The code to run, or null if not available.

container_id: String

The ID of the container used to run the code.

outputs: Array[{ logs, type} | { type, url}]

The outputs generated by the code interpreter, such as logs or images. Can be null if no outputs are available.

Accepts one of the following:
class Logs { logs, type }

The logs output from the code interpreter.

logs: String

The logs output from the code interpreter.

type: :logs

The type of the output. Always logs.

class Image { type, url }

The image output from the code interpreter.

type: :image

The type of the output. Always image.

url: String

The URL of the image output from the code interpreter.

status: :in_progress | :completed | :incomplete | 2 more

The status of the code interpreter tool call. Valid values are in_progress, completed, incomplete, interpreting, and failed.

Accepts one of the following:
:in_progress
:completed
:incomplete
:interpreting
:failed
type: :code_interpreter_call

The type of the code interpreter tool call. Always code_interpreter_call.

class LocalShellCall { id, action, call_id, 2 more }

A tool call to run a command on the local shell.

id: String

The unique ID of the local shell call.

action: { command, env, type, 3 more}

Execute a shell command on the server.

command: Array[String]

The command to run.

env: Hash[Symbol, String]

Environment variables to set for the command.

type: :exec

The type of the local shell action. Always exec.

timeout_ms: Integer

Optional timeout in milliseconds for the command.

user: String

Optional user to run the command as.

working_directory: String

Optional working directory to run the command in.

call_id: String

The unique ID of the local shell tool call generated by the model.

status: :in_progress | :completed | :incomplete

The status of the local shell call.

Accepts one of the following:
:in_progress
:completed
:incomplete
type: :local_shell_call

The type of the local shell call. Always local_shell_call.

class LocalShellCallOutput { id, output, type, status }

The output of a local shell tool call.

id: String

The unique ID of the local shell tool call generated by the model.

output: String

A JSON string of the output of the local shell tool call.

type: :local_shell_call_output

The type of the local shell tool call output. Always local_shell_call_output.

status: :in_progress | :completed | :incomplete

The status of the item. One of in_progress, completed, or incomplete.

Accepts one of the following:
:in_progress
:completed
:incomplete
class ResponseFunctionShellToolCall { id, action, call_id, 3 more }

A tool call that executes one or more shell commands in a managed environment.

id: String

The unique ID of the shell tool call. Populated when this item is returned via API.

action: { commands, max_output_length, timeout_ms}

The shell commands and limits that describe how to run the tool call.

commands: Array[String]
max_output_length: Integer

Optional maximum number of characters to return from each command.

timeout_ms: Integer

Optional timeout in milliseconds for the commands.

call_id: String

The unique ID of the shell tool call generated by the model.

status: :in_progress | :completed | :incomplete

The status of the shell call. One of in_progress, completed, or incomplete.

Accepts one of the following:
:in_progress
:completed
:incomplete
type: :shell_call

The type of the item. Always shell_call.

created_by: String

The ID of the entity that created this tool call.

class ResponseFunctionShellToolCallOutput { id, call_id, max_output_length, 4 more }

The output of a shell tool call that was emitted.

id: String

The unique ID of the shell call output. Populated when this item is returned via API.

call_id: String

The unique ID of the shell tool call generated by the model.

max_output_length: Integer

The maximum length of the shell command output. This is generated by the model and should be passed back with the raw output.

output: Array[{ outcome, stderr, stdout, created_by}]

An array of shell call output contents

outcome: { type} | { exit_code, type}

Represents either an exit outcome (with an exit code) or a timeout outcome for a shell call output chunk.

Accepts one of the following:
class Timeout { type }

Indicates that the shell call exceeded its configured time limit.

type: :timeout

The outcome type. Always timeout.

class Exit { exit_code, type }

Indicates that the shell commands finished and returned an exit code.

exit_code: Integer

Exit code from the shell process.

type: :exit

The outcome type. Always exit.

stderr: String

The standard error output that was captured.

stdout: String

The standard output that was captured.

created_by: String

The identifier of the actor that created the item.

status: :in_progress | :completed | :incomplete

The status of the shell call output. One of in_progress, completed, or incomplete.

Accepts one of the following:
:in_progress
:completed
:incomplete
type: :shell_call_output

The type of the shell call output. Always shell_call_output.

created_by: String

The identifier of the actor that created the item.

class ResponseApplyPatchToolCall { id, call_id, operation, 3 more }

A tool call that applies file diffs by creating, deleting, or updating files.

id: String

The unique ID of the apply patch tool call. Populated when this item is returned via API.

call_id: String

The unique ID of the apply patch tool call generated by the model.

operation: { diff, path, type} | { path, type} | { diff, path, type}

One of the create_file, delete_file, or update_file operations applied via apply_patch.

Accepts one of the following:
class CreateFile { diff, path, type }

Instruction describing how to create a file via the apply_patch tool.

diff: String

Diff to apply.

path: String

Path of the file to create.

type: :create_file

Create a new file with the provided diff.

class DeleteFile { path, type }

Instruction describing how to delete a file via the apply_patch tool.

path: String

Path of the file to delete.

type: :delete_file

Delete the specified file.

class UpdateFile { diff, path, type }

Instruction describing how to update a file via the apply_patch tool.

diff: String

Diff to apply.

path: String

Path of the file to update.

type: :update_file

Update an existing file with the provided diff.

status: :in_progress | :completed

The status of the apply patch tool call. One of in_progress or completed.

Accepts one of the following:
:in_progress
:completed
type: :apply_patch_call

The type of the item. Always apply_patch_call.

created_by: String

The ID of the entity that created this tool call.

class ResponseApplyPatchToolCallOutput { id, call_id, status, 3 more }

The output emitted by an apply patch tool call.

id: String

The unique ID of the apply patch tool call output. Populated when this item is returned via API.

call_id: String

The unique ID of the apply patch tool call generated by the model.

status: :completed | :failed

The status of the apply patch tool call output. One of completed or failed.

Accepts one of the following:
:completed
:failed
type: :apply_patch_call_output

The type of the item. Always apply_patch_call_output.

created_by: String

The ID of the entity that created this tool call output.

output: String

Optional textual output returned by the apply patch tool.

class McpListTools { id, server_label, tools, 2 more }

A list of tools available on an MCP server.

id: String

The unique ID of the list.

server_label: String

The label of the MCP server.

tools: Array[{ input_schema, name, annotations, description}]

The tools available on the server.

input_schema: untyped

The JSON schema describing the tool's input.

name: String

The name of the tool.

annotations: untyped

Additional annotations about the tool.

description: String

The description of the tool.

type: :mcp_list_tools

The type of the item. Always mcp_list_tools.

error: String

Error message if the server could not list tools.

class McpApprovalRequest { id, arguments, name, 2 more }

A request for human approval of a tool invocation.

id: String

The unique ID of the approval request.

arguments: String

A JSON string of arguments for the tool.

name: String

The name of the tool to run.

server_label: String

The label of the MCP server making the request.

type: :mcp_approval_request

The type of the item. Always mcp_approval_request.

class McpApprovalResponse { id, approval_request_id, approve, 2 more }

A response to an MCP approval request.

id: String

The unique ID of the approval response

approval_request_id: String

The ID of the approval request being answered.

approve: bool

Whether the request was approved.

type: :mcp_approval_response

The type of the item. Always mcp_approval_response.

reason: String

Optional reason for the decision.

class McpCall { id, arguments, name, 6 more }

An invocation of a tool on an MCP server.

id: String

The unique ID of the tool call.

arguments: String

A JSON string of the arguments passed to the tool.

name: String

The name of the tool that was run.

server_label: String

The label of the MCP server running the tool.

type: :mcp_call

The type of the item. Always mcp_call.

approval_request_id: String

Unique identifier for the MCP tool call approval request. Include this value in a subsequent mcp_approval_response input to approve or reject the corresponding tool call.

error: String

The error from the tool call, if any.

output: String

The output from the tool call.

status: :in_progress | :completed | :incomplete | 2 more

The status of the tool call. One of in_progress, completed, incomplete, calling, or failed.

Accepts one of the following:
:in_progress
:completed
:incomplete
:calling
:failed
class ResponseCustomToolCall { call_id, input, name, 2 more }

A call to a custom tool created by the model.

call_id: String

An identifier used to map this custom tool call to a tool call output.

input: String

The input for the custom tool call generated by the model.

name: String

The name of the custom tool being called.

type: :custom_tool_call

The type of the custom tool call. Always custom_tool_call.

id: String

The unique ID of the custom tool call in the OpenAI platform.

class ResponseCustomToolCallOutput { call_id, output, type, id }

The output of a custom tool call from your code, being sent back to the model.

call_id: String

The call ID, used to map this custom tool call output to a custom tool call.

output: String | Array[ResponseInputText { text, type } | ResponseInputImage { detail, type, file_id, image_url } | ResponseInputFile { type, file_data, file_id, 2 more } ]

The output from the custom tool call generated by your code. Can be a string or an list of output content.

Accepts one of the following:
String

A string of the output of the custom tool call.

Array[ResponseInputText { text, type } | ResponseInputImage { detail, type, file_id, image_url } | ResponseInputFile { type, file_data, file_id, 2 more } ]

Text, image, or file output of the custom tool call.

Accepts one of the following:
class ResponseInputText { text, type }

A text input to the model.

text: String

The text input to the model.

type: :input_text

The type of the input item. Always input_text.

class ResponseInputImage { detail, type, file_id, image_url }

An image input to the model. Learn about image inputs.

detail: :low | :high | :auto

The detail level of the image to be sent to the model. One of high, low, or auto. Defaults to auto.

Accepts one of the following:
:low
:high
:auto
type: :input_image

The type of the input item. Always input_image.

file_id: String

The ID of the file to be sent to the model.

image_url: String

The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image in a data URL.

class ResponseInputFile { type, file_data, file_id, 2 more }

A file input to the model.

type: :input_file

The type of the input item. Always input_file.

file_data: String

The content of the file to be sent to the model.

file_id: String

The ID of the file to be sent to the model.

file_url: String

The URL of the file to be sent to the model.

filename: String

The name of the file to be sent to the model.

type: :custom_tool_call_output

The type of the custom tool call output. Always custom_tool_call_output.

id: String

The unique ID of the custom tool call output in the OpenAI platform.

Retrieve an item

require "openai"

openai = OpenAI::Client.new(api_key: "My API Key")

conversation_item = openai.conversations.items.retrieve("msg_abc", conversation_id: "conv_123")

puts(conversation_item)
{
  "id": "id",
  "content": [
    {
      "text": "text",
      "type": "input_text"
    }
  ],
  "role": "unknown",
  "status": "in_progress",
  "type": "message"
}
Returns Examples
{
  "id": "id",
  "content": [
    {
      "text": "text",
      "type": "input_text"
    }
  ],
  "role": "unknown",
  "status": "in_progress",
  "type": "message"
}