post /threads/{thread_id}/messages
Create a message.
thread_id: string
-
content: string or array of ImageFileContentBlock or ImageURLContentBlock or TextContentBlockParamThe text contents of the message.
-
TextContent = stringThe text contents of the message.
-
ArrayOfContentParts = array of ImageFileContentBlock or ImageURLContentBlock or TextContentBlockParamAn array of content parts with a defined type, each can be of type
textor images can be passed withimage_urlorimage_file. Image types are only supported on Vision-compatible models.-
ImageFileContentBlock object { image_file, type }References an image File in the content of a message.
-
image_file: ImageFile-
file_id: stringThe File ID of the image in the message content. Set
purpose="vision"when uploading the File if you need to later display the file content. -
detail: optional "auto" or "low" or "high"Specifies the detail level of the image if specified by the user.
lowuses fewer tokens, you can opt in to high resolution usinghigh.-
"auto" -
"low" -
"high"
-
-
-
type: "image_file"Always
image_file."image_file"
-
-
ImageURLContentBlock object { image_url, type }References an image URL in the content of a message.
-
image_url: ImageURL-
url: stringThe external URL of the image, must be a supported image types: jpeg, jpg, png, gif, webp.
-
detail: optional "auto" or "low" or "high"Specifies the detail level of the image.
lowuses fewer tokens, you can opt in to high resolution usinghigh. Default value isauto-
"auto" -
"low" -
"high"
-
-
-
type: "image_url"The type of the content part.
"image_url"
-
-
TextContentBlockParam object { text, type }The text content that is part of a message.
-
text: stringText content to be sent to the model
-
type: "text"Always
text."text"
-
-
-
-
role: "user" or "assistant"The role of the entity that is creating the message. Allowed values include:
-
user: Indicates the message is sent by an actual user and should be used in most cases to represent user-generated messages. -
assistant: Indicates the message is generated by the assistant. Use this value to insert messages from the assistant into the conversation. -
"user" -
"assistant"
-
-
attachments: optional array of object { file_id, tools }A list of files attached to the message, and the tools they should be added to.
-
file_id: optional stringThe ID of the file to attach to the message.
-
tools: optional array of CodeInterpreterTool or object { type }The tools to add this file to.
-
CodeInterpreterTool object { type }-
type: "code_interpreter"The type of tool being defined:
code_interpreter"code_interpreter"
-
-
FileSearchTool object { type }-
type: "file_search"The type of tool being defined:
file_search"file_search"
-
-
-
-
metadata: optional MetadataSet 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.
-
Message object { id, assistant_id, attachments, 11 more }Represents a message within a thread.
-
id: stringThe identifier, which can be referenced in API endpoints.
-
assistant_id: stringIf applicable, the ID of the assistant that authored this message.
-
attachments: array of object { file_id, tools }A list of files attached to the message, and the tools they were added to.
-
file_id: optional stringThe ID of the file to attach to the message.
-
tools: optional array of CodeInterpreterTool or object { type }The tools to add this file to.
-
CodeInterpreterTool object { type }-
type: "code_interpreter"The type of tool being defined:
code_interpreter"code_interpreter"
-
-
FileSearchTool object { type }-
type: "file_search"The type of tool being defined:
file_search"file_search"
-
-
-
-
completed_at: numberThe Unix timestamp (in seconds) for when the message was completed.
-
content: array of ImageFileContentBlock or ImageURLContentBlock or TextContentBlock or RefusalContentBlockThe content of the message in array of text and/or images.
-
ImageFileContentBlock object { image_file, type }References an image File in the content of a message.
-
image_file: ImageFile-
file_id: stringThe File ID of the image in the message content. Set
purpose="vision"when uploading the File if you need to later display the file content. -
detail: optional "auto" or "low" or "high"Specifies the detail level of the image if specified by the user.
lowuses fewer tokens, you can opt in to high resolution usinghigh.-
"auto" -
"low" -
"high"
-
-
-
type: "image_file"Always
image_file."image_file"
-
-
ImageURLContentBlock object { image_url, type }References an image URL in the content of a message.
-
image_url: ImageURL-
url: stringThe external URL of the image, must be a supported image types: jpeg, jpg, png, gif, webp.
-
detail: optional "auto" or "low" or "high"Specifies the detail level of the image.
lowuses fewer tokens, you can opt in to high resolution usinghigh. Default value isauto-
"auto" -
"low" -
"high"
-
-
-
type: "image_url"The type of the content part.
"image_url"
-
-
TextContentBlock object { text, type }The text content that is part of a message.
-
text: Text-
annotations: array of FileCitationAnnotation or FilePathAnnotation-
FileCitationAnnotation object { end_index, file_citation, start_index, 2 more }A citation within the message that points to a specific quote from a specific File associated with the assistant or the message. Generated when the assistant uses the "file_search" tool to search files.
-
end_index: number -
file_citation: object { file_id }-
file_id: stringThe ID of the specific File the citation is from.
-
-
start_index: number -
text: stringThe text in the message content that needs to be replaced.
-
type: "file_citation"Always
file_citation."file_citation"
-
-
FilePathAnnotation object { end_index, file_path, start_index, 2 more }A URL for the file that's generated when the assistant used the
code_interpretertool to generate a file.-
end_index: number -
file_path: object { file_id }-
file_id: stringThe ID of the file that was generated.
-
-
start_index: number -
text: stringThe text in the message content that needs to be replaced.
-
type: "file_path"Always
file_path."file_path"
-
-
-
value: stringThe data that makes up the text.
-
-
type: "text"Always
text."text"
-
-
RefusalContentBlock object { refusal, type }The refusal content generated by the assistant.
-
refusal: string -
type: "refusal"Always
refusal."refusal"
-
-
-
created_at: numberThe Unix timestamp (in seconds) for when the message was created.
-
incomplete_at: numberThe Unix timestamp (in seconds) for when the message was marked as incomplete.
-
incomplete_details: object { reason }On an incomplete message, details about why the message is incomplete.
-
reason: "content_filter" or "max_tokens" or "run_cancelled" or 2 moreThe reason the message is incomplete.
-
"content_filter" -
"max_tokens" -
"run_cancelled" -
"run_expired" -
"run_failed"
-
-
-
metadata: MetadataSet 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.
-
object: "thread.message"The object type, which is always
thread.message."thread.message"
-
role: "user" or "assistant"The entity that produced the message. One of
userorassistant.-
"user" -
"assistant"
-
-
run_id: stringThe ID of the run associated with the creation of this message. Value is
nullwhen messages are created manually using the create message or create thread endpoints. -
status: "in_progress" or "incomplete" or "completed"The status of the message, which can be either
in_progress,incomplete, orcompleted.-
"in_progress" -
"incomplete" -
"completed"
-
-
thread_id: stringThe thread ID that this message belongs to.
-
curl https://api.openai.com/v1/threads/$THREAD_ID/messages \
-H 'Content-Type: application/json' \
-H 'OpenAI-Beta: assistants=v2' \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"content": "string",
"role": "user"
}'{
"id": "id",
"assistant_id": "assistant_id",
"attachments": [
{
"file_id": "file_id",
"tools": [
{
"type": "code_interpreter"
}
]
}
],
"completed_at": 0,
"content": [
{
"image_file": {
"file_id": "file_id",
"detail": "auto"
},
"type": "image_file"
}
],
"created_at": 0,
"incomplete_at": 0,
"incomplete_details": {
"reason": "content_filter"
},
"metadata": {
"foo": "string"
},
"object": "thread.message",
"role": "user",
"run_id": "run_id",
"status": "in_progress",
"thread_id": "thread_id"
}curl https://api.openai.com/v1/threads/thread_abc123/messages \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "OpenAI-Beta: assistants=v2" \
-d '{
"role": "user",
"content": "How does AI work? Explain it in simple terms."
}'{
"id": "msg_abc123",
"object": "thread.message",
"created_at": 1713226573,
"assistant_id": null,
"thread_id": "thread_abc123",
"run_id": null,
"role": "user",
"content": [
{
"type": "text",
"text": {
"value": "How does AI work? Explain it in simple terms.",
"annotations": []
}
}
],
"attachments": [],
"metadata": {}
}