Skip to content

Conversations API request shape

Both endpoints speak the OpenAI Conversations API verbatim, exposing the items stored when you run /v1/responses with store: true. Both are GET and return JSON.

GET /v1/conversations/{conversation_id}/items

Lists items in the conversation in the order they were appended.

Terminal window
curl https://api.kindo.ai/v1/conversations/conv_abc123/items?limit=50&order=asc \
-H "Authorization: Bearer $KINDO_API_KEY"

Query parameters

NameTypeDefaultNotes
limitinteger20Messages per page. Range 1100. Each message may expand to multiple items (an assistant turn with a tool call produces a function_call plus a message), so the returned data length may exceed limit.
orderstringdescasc or desc. Sort order by message index.
afterstringCursor: return items appended after this item ID. Pass last_id from the previous response. An item ID not present in this conversation produces 400 invalid_cursor.

Response

FieldTypeNotes
objectstringAlways "list".
dataarrayOne entry per item. See Item types.
has_morebooleantrue when another page is available; pass last_id as ?after=.
first_idstring | nullID of the first item in data, or null when data is empty.
last_idstring | nullID of the last item in data, or null when data is empty.

Item types

The type field on each item determines the rest of its shape. A single assistant turn can produce multiple top-level items (function_call siblings of message) — treat data as a flat ordered stream rather than assuming one item per turn.

typeShape (key fields)Notes
messageid, role, content[], statusrole is user, assistant, or system. content[] contains typed text/image blocks.
function_callid, call_id, name, argumentsA model-emitted function-tool call.
function_call_outputcall_id, outputThe matching tool result (echoed back by the caller). Identified by call_idfunction_call_output items do not carry their own id.

message items carry a status field, currently always "completed" (Kindo stores items as they are persisted, not while streaming). Items do not carry an object field — the outer list envelope has object: "list", but individual items omit it. Dispatch on type instead.

Unrecognized item types are forwarded verbatim from the underlying store, so new OpenAI Responses item shapes appear without requiring a Kindo upgrade.

The API normalizes a developer role to system before persisting; responses always show system.

GET /v1/conversations/{conversation_id}/items/{item_id}

Fetches a single item. The response object matches one entry from the data[] array on the list endpoint.

Terminal window
curl https://api.kindo.ai/v1/conversations/conv_abc123/items/msg_xyz789 \
-H "Authorization: Bearer $KINDO_API_KEY"
{
"id": "msg_xyz789",
"type": "message",
"role": "user",
"content": [
{ "type": "input_text", "text": "What is the capital of France?" }
],
"status": "completed"
}

See also