Skip to content
Get started

Omni AI

ModelsExpand Collapse
action_button: object { buttonId, label, prompt, structuredAction }

Button metadata shared by chart and suggested-actions payloads.

buttonId: string

Stable button identifier within the content part.

label: string

User-visible label.

prompt: optional object { prompt }

Follow-up prompt to submit as the next user message.

prompt: string

Prompt text to submit as the next user turn.

structuredAction: optional object { actionId }

Structured action in the same message to execute on click.

actionId: optional string

UUID of a structured_action content part in the same message.

chart_payload: object { chartId, actionButtons, dataChart, symbolChart }

Typed chart payload rendered inline in assistant content.

chartId: string

Stable chart identifier scoped to the content part.

actionButtons: optional array of ActionButton { buttonId, label, prompt, structuredAction }

Buttons associated with this chart.

buttonId: string

Stable button identifier within the content part.

label: string

User-visible label.

prompt: optional object { prompt }

Follow-up prompt to submit as the next user message.

prompt: string

Prompt text to submit as the next user turn.

structuredAction: optional object { actionId }

Structured action in the same message to execute on click.

actionId: optional string

UUID of a structured_action content part in the same message.

dataChart: optional object { series }

Explicit series-driven chart definition.

series: optional array of ChartSeries { name, points }
name: string
points: optional array of ChartPoint { x, y }
x: string
y: number
symbolChart: optional object { symbol, timeframe }

Symbol-driven chart definition.

symbol: string
timeframe: optional string
chart_point: object { x, y }

Single chart coordinate.

x: string
y: number
chart_series: object { name, points }

Named data series within a chart.

name: string
points: optional array of ChartPoint { x, y }
x: string
y: number
content_part_chart_payload: object { payload }

Chart payload content part.

payload: object { chartId, actionButtons, dataChart, symbolChart }

Typed chart payload rendered inline in assistant content.

chartId: string

Stable chart identifier scoped to the content part.

actionButtons: optional array of ActionButton { buttonId, label, prompt, structuredAction }

Buttons associated with this chart.

buttonId: string

Stable button identifier within the content part.

label: string

User-visible label.

prompt: optional object { prompt }

Follow-up prompt to submit as the next user message.

prompt: string

Prompt text to submit as the next user turn.

structuredAction: optional object { actionId }

Structured action in the same message to execute on click.

actionId: optional string

UUID of a structured_action content part in the same message.

dataChart: optional object { series }

Explicit series-driven chart definition.

series: optional array of ChartSeries { name, points }
name: string
points: optional array of ChartPoint { x, y }
x: string
y: number
symbolChart: optional object { symbol, timeframe }

Symbol-driven chart definition.

symbol: string
timeframe: optional string
content_part_custom_payload: object { payload }

Escape-hatch custom payload content part.

payload: unknown
content_part_structured_action_payload: object { action, action_id }

Structured action content part.

action: object { prefill_order } or object { open_chart } or object { open_screener } or object { open_entitlement_consent }

Structured actions that Omni AI can return to clients.

These actions provide machine-readable instructions for the client to execute, such as prefilling an order ticket, opening a chart, or navigating to a route.

PrefillOrder: object { prefill_order }

Prefill an order ticket for user confirmation

prefill_order: PrefillNewOrderAction { orders } or PrefillCancelOrderAction { orders }

Prefill an order ticket for user confirmation

PrefillNewOrderAction: PrefillNewOrderAction { orders }

Create one or more new orders.

action_type: "NEW"
"NEW"
PrefillCancelOrderAction: PrefillCancelOrderAction { orders }

Cancel one or more existing orders.

action_type: "CANCEL"
"CANCEL"
OpenChart: object { open_chart }

Open a chart for a symbol

open_chart: object { symbol, extras, timeframe }

Open a chart for a symbol

symbol: string

Trading symbol to chart

extras: optional unknown

Additional chart configuration (indicators, overlays, etc.)

timeframe: optional string

Chart timeframe (e.g., “1D”, “1W”, “1M”, “3M”, “1Y”, “5Y”)

OpenScreener: object { open_screener }

Open a stock screener with filters

open_screener: object { filters, field_filter, page_size, 2 more }

Open a stock screener with filters

filters: array of ScreenerFilter { field, operator, value }

Filter criteria for the screener

field: string

Field to filter on (e.g., “market_cap”, “sector”, “price”)

operator: string

Comparison operator (e.g., “eq”, “gte”, “lte”, “in”)

value: unknown

Filter value

field_filter: optional array of string

Optional field/column selection for screener results.

page_size: optional number

Optional page size.

sort_by: optional string

Optional sort field for screener rows.

sort_direction: optional string

Optional sort direction (ASC or DESC).

OpenEntitlementConsent: object { open_entitlement_consent }

Open entitlement consent flow

Open entitlement consent flow

Stable entitlement agreement family key.

"omni_account_data_access"
"omni.account_data"
action_id: string
content_part_suggested_actions_payload: object { payload }

Suggested actions payload content part.

payload: object { actionButtons }

Suggested follow-up buttons rendered at the end of an assistant message.

actionButtons: optional array of ActionButton { buttonId, label, prompt, structuredAction }

Ordered message-level buttons.

buttonId: string

Stable button identifier within the content part.

label: string

User-visible label.

prompt: optional object { prompt }

Follow-up prompt to submit as the next user message.

prompt: string

Prompt text to submit as the next user turn.

structuredAction: optional object { actionId }

Structured action in the same message to execute on click.

actionId: optional string

UUID of a structured_action content part in the same message.

content_part_text_payload: object { text }

Text content part.

text: string
content_part_thinking_payload: object { thoughts }

Thinking content part shown on dynamic response polling.

thoughts: array of string
data_chart: object { series }

Chart represented by explicit data series.

series: optional array of ChartSeries { name, points }
name: string
points: optional array of ChartPoint { x, y }
x: string
y: number
open_chart_action: object { symbol, extras, timeframe }

Action to open a chart for a symbol.

symbol: string

Trading symbol to chart

extras: optional unknown

Additional chart configuration (indicators, overlays, etc.)

timeframe: optional string

Chart timeframe (e.g., “1D”, “1W”, “1M”, “3M”, “1Y”, “5Y”)

Action to open entitlement consent flow for one or more accounts.

Stable entitlement agreement family key.

"omni_account_data_access"
"omni.account_data"
open_screener_action: object { filters, field_filter, page_size, 2 more }

Action to open a stock screener with filters.

filters: array of ScreenerFilter { field, operator, value }

Filter criteria for the screener

field: string

Field to filter on (e.g., “market_cap”, “sector”, “price”)

operator: string

Comparison operator (e.g., “eq”, “gte”, “lte”, “in”)

value: unknown

Filter value

field_filter: optional array of string

Optional field/column selection for screener results.

page_size: optional number

Optional page size.

sort_by: optional string

Optional sort field for screener rows.

sort_direction: optional string

Optional sort direction (ASC or DESC).

prefill_cancel_order_action: object { orders }

Cancel-order prefill action.

orders: array of CancelOrderRequest { account_id, order_id }

Orders to cancel using the same identifiers required by the cancel-order API.

account_id: number

Account ID (from path parameter)

order_id: string

Order ID to cancel (from path parameter)

prefill_new_order_action: object { orders }

New-order prefill action.

orders: array of NewOrderRequest { instrument_type, order_type, quantity, 13 more }

Orders to prefill using the same shape accepted by the orders API.

instrument_type: "COMMON_STOCK" or "PREFERRED_STOCK" or "OPTION" or 2 more

Type of security

"COMMON_STOCK"
"PREFERRED_STOCK"
"OPTION"
"CASH"
"OTHER"
order_type: "MARKET" or "LIMIT" or "STOP" or 3 more

Type of order

"MARKET"
"LIMIT"
"STOP"
"STOP_LIMIT"
"TRAILING_STOP"
"TRAILING_STOP_LIMIT"
quantity: string

Quantity to trade. For COMMON_STOCK: shares (may be fractional if supported). For OPTION (single-leg): contracts (must be an integer)

side: "BUY" or "SELL" or "SELL_SHORT" or "OTHER"

Side of the order

"BUY"
"SELL"
"SELL_SHORT"
"OTHER"
time_in_force: "DAY" or "GOOD_TILL_CANCEL" or "IMMEDIATE_OR_CANCEL" or 7 more

Time in force

"DAY"
"GOOD_TILL_CANCEL"
"IMMEDIATE_OR_CANCEL"
"FILL_OR_KILL"
"GOOD_TILL_DATE"
"AT_THE_OPENING"
"AT_THE_CLOSE"
"GOOD_TILL_CROSSING"
"GOOD_THROUGH_CROSSING"
"AT_CROSSING"
id: optional string

Optional client-provided unique ID (idempotency). Required to be unique per account.

expires_at: optional string

The timestamp when the order should expire (UTC). Required when time_in_force is GOOD_TILL_DATE.

extended_hours: optional boolean

Allow trading outside regular trading hours. Some brokers disallow options outside RTH.

instrument_id: optional string

OEMS instrument UUID

limit_offset: optional string

Limit offset for trailing stop-limit orders (signed)

limit_price: optional string

Limit price (required for LIMIT and STOP_LIMIT orders)

position_effect: optional "OPEN" or "CLOSE"

Required when instrument_type is OPTION. Specifies whether the order opens or closes a position.

"OPEN"
"CLOSE"
stop_price: optional string

Stop price (required for STOP and STOP_LIMIT orders)

symbol: optional string

Trading symbol. For equities, use the ticker symbol (e.g., “AAPL”). For options, use the OSI symbol (e.g., “AAPL 250117C00190000”). Either symbol or instrument_id must be provided.

trailing_offset: optional string

Trailing offset amount (required for trailing orders)

trailing_offset_type: optional "PRICE" or "BPS"

Trailing offset type (PRICE or PERCENT_BPS)

"PRICE"
"BPS"
prefill_order_action: PrefillNewOrderAction { orders } or PrefillCancelOrderAction { orders }

Action to prefill order details for user confirmation.

The user must review and authorize the order before submission to the trading API. This action provides parsed order data that can be used to prefill an order ticket UI or submitted directly via the orders API after user confirmation.

PrefillNewOrderAction: PrefillNewOrderAction { orders }

Create one or more new orders.

action_type: "NEW"
"NEW"
PrefillCancelOrderAction: PrefillCancelOrderAction { orders }

Cancel one or more existing orders.

action_type: "CANCEL"
"CANCEL"
prompt_button_action: object { prompt }

Prompt-style button behavior.

prompt: string

Prompt text to submit as the next user turn.

screener_filter: object { field, operator, value }

A single filter criterion for the screener.

field: string

Field to filter on (e.g., “market_cap”, “sector”, “price”)

operator: string

Comparison operator (e.g., “eq”, “gte”, “lte”, “in”)

value: unknown

Filter value

structured_action: object { prefill_order } or object { open_chart } or object { open_screener } or object { open_entitlement_consent }

Structured actions that Omni AI can return to clients.

These actions provide machine-readable instructions for the client to execute, such as prefilling an order ticket, opening a chart, or navigating to a route.

PrefillOrder: object { prefill_order }

Prefill an order ticket for user confirmation

prefill_order: PrefillNewOrderAction { orders } or PrefillCancelOrderAction { orders }

Prefill an order ticket for user confirmation

PrefillNewOrderAction: PrefillNewOrderAction { orders }

Create one or more new orders.

action_type: "NEW"
"NEW"
PrefillCancelOrderAction: PrefillCancelOrderAction { orders }

Cancel one or more existing orders.

action_type: "CANCEL"
"CANCEL"
OpenChart: object { open_chart }

Open a chart for a symbol

open_chart: object { symbol, extras, timeframe }

Open a chart for a symbol

symbol: string

Trading symbol to chart

extras: optional unknown

Additional chart configuration (indicators, overlays, etc.)

timeframe: optional string

Chart timeframe (e.g., “1D”, “1W”, “1M”, “3M”, “1Y”, “5Y”)

OpenScreener: object { open_screener }

Open a stock screener with filters

open_screener: object { filters, field_filter, page_size, 2 more }

Open a stock screener with filters

filters: array of ScreenerFilter { field, operator, value }

Filter criteria for the screener

field: string

Field to filter on (e.g., “market_cap”, “sector”, “price”)

operator: string

Comparison operator (e.g., “eq”, “gte”, “lte”, “in”)

value: unknown

Filter value

field_filter: optional array of string

Optional field/column selection for screener results.

page_size: optional number

Optional page size.

sort_by: optional string

Optional sort field for screener rows.

sort_direction: optional string

Optional sort direction (ASC or DESC).

OpenEntitlementConsent: object { open_entitlement_consent }

Open entitlement consent flow

Open entitlement consent flow

Stable entitlement agreement family key.

"omni_account_data_access"
"omni.account_data"
structured_action_button_action: object { actionId }

Structured-action button behavior.

actionId: optional string

UUID of a structured_action content part in the same message.

suggested_actions_payload: object { actionButtons }

Suggested follow-up buttons rendered at the end of an assistant message.

actionButtons: optional array of ActionButton { buttonId, label, prompt, structuredAction }

Ordered message-level buttons.

buttonId: string

Stable button identifier within the content part.

label: string

User-visible label.

prompt: optional object { prompt }

Follow-up prompt to submit as the next user message.

prompt: string

Prompt text to submit as the next user turn.

structuredAction: optional object { actionId }

Structured action in the same message to execute on click.

actionId: optional string

UUID of a structured_action content part in the same message.

symbol_chart: object { symbol, timeframe }

Chart for a single symbol and timeframe.

symbol: string
timeframe: optional string

Omni AIEntitlements

Thread-centric AI assistant for conversational trading. Create threads to start conversations, poll response objects for in-progress output, and read finalized messages from thread history. Thread/message/response endpoints require an explicit account_id. Entitlement endpoints are caller-scoped and use trading_account_ids.

Get Entitlements
$ clear-street v1:omni-ai:entitlements get-entitlements
GET/v1/omni-ai/entitlements
Create Entitlements
$ clear-street v1:omni-ai:entitlements create-entitlements
POST/v1/omni-ai/entitlements
Delete Entitlement
$ clear-street v1:omni-ai:entitlements delete-entitlement
DELETE/v1/omni-ai/entitlements/{entitlement_id}
Get Entitlement Agreements
$ clear-street v1:omni-ai:entitlements get-entitlement-agreements
GET/v1/omni-ai/entitlement-agreements
ModelsExpand Collapse
delete_entitlement_response: object { entitlement_id, revoked }
entitlement_id: string
revoked: boolean
entitlement_agreement_key: "omni_account_data_access"

Stable entitlement agreement family key.

"omni_account_data_access"
entitlement_agreement_resource: object { agreement_id, agreement_key, document_content, 4 more }
agreement_id: string
agreement_key: "omni_account_data_access"

Stable entitlement agreement family key.

"omni_account_data_access"
document_content: string
document_sha256: string
entitlement_codes: array of EntitlementCode
"omni.account_data"
title: string
version: number
entitlement_agreement_resource_list: array of EntitlementAgreementResource { agreement_id, agreement_key, document_content, 4 more }
agreement_id: string
agreement_key: "omni_account_data_access"

Stable entitlement agreement family key.

"omni_account_data_access"
document_content: string
document_sha256: string
entitlement_codes: array of EntitlementCode
"omni.account_data"
title: string
version: number
entitlement_code: "omni.account_data"

Stable entitlement code granted by an agreement.

"omni.account_data"
entitlement_resource: object { agreement_id, entitlement_code, entitlement_id, 2 more }
agreement_id: string
entitlement_code: "omni.account_data"

Stable entitlement code granted by an agreement.

"omni.account_data"
entitlement_id: string
granted_at: string
trading_account_id: number
entitlement_resource_list: array of EntitlementResource { agreement_id, entitlement_code, entitlement_id, 2 more }
agreement_id: string
entitlement_code: "omni.account_data"

Stable entitlement code granted by an agreement.

"omni.account_data"
entitlement_id: string
granted_at: string
trading_account_id: number

Omni AIMessages

Thread-centric AI assistant for conversational trading. Create threads to start conversations, poll response objects for in-progress output, and read finalized messages from thread history. Thread/message/response endpoints require an explicit account_id. Entitlement endpoints are caller-scoped and use trading_account_ids.

Get Message By ID
$ clear-street v1:omni-ai:messages get-message-by-id
GET/v1/omni-ai/messages/{message_id}
Submit Feedback
$ clear-street v1:omni-ai:messages submit-feedback
POST/v1/omni-ai/messages/{message_id}/feedback
ModelsExpand Collapse
create_feedback_response: object { created_at, feedback_id }
created_at: string
feedback_id: optional string

Omni AIResponses

Thread-centric AI assistant for conversational trading. Create threads to start conversations, poll response objects for in-progress output, and read finalized messages from thread history. Thread/message/response endpoints require an explicit account_id. Entitlement endpoints are caller-scoped and use trading_account_ids.

Get Response By ID
$ clear-street v1:omni-ai:responses get-response-by-id
GET/v1/omni-ai/responses/{response_id}
Cancel Response
$ clear-street v1:omni-ai:responses cancel-response
DELETE/v1/omni-ai/responses/{response_id}
ModelsExpand Collapse
cancel_response_payload: object { canceled }
canceled: boolean
error_status: object { code, message, details }

Shared sanitized error payload.

code: string
message: string
details: optional unknown
response: object { id, status, thread_id, 4 more }

Dynamic pollable response.

id: string
status: "queued" or "running" or "succeeded" or 2 more

Dynamic lifecycle status for a pollable response.

"queued"
"running"
"succeeded"
"failed"
"canceled"
thread_id: string
user_message_id: string
content: optional object { parts }

Dynamic response content container. May include thinking parts.

parts: array of ResponseContentPart
union_member_0: ContentPartTextPayload { text }

Text content part.

type: "text"
"text"
union_member_1: ContentPartThinkingPayload { thoughts }

Thinking content part shown on dynamic response polling.

type: "thinking"
"thinking"
union_member_2: ContentPartStructuredActionPayload { action, action_id }

Structured action content part.

type: "structured_action"
"structured_action"
union_member_3: ContentPartChartPayload { payload }

Chart payload content part.

type: "chart"
"chart"
union_member_4: ContentPartSuggestedActionsPayload { payload }

Suggested actions payload content part.

type: "suggested_actions"
"suggested_actions"
union_member_5: ContentPartCustomPayload { payload }

Escape-hatch custom payload content part.

type: "custom"
"custom"
error: optional object { code, message, details }

Shared sanitized error payload.

code: string
message: string
details: optional unknown
output_message_id: optional string
response_content: object { parts }

Dynamic response content container. May include thinking parts.

parts: array of ResponseContentPart
union_member_0: ContentPartTextPayload { text }

Text content part.

type: "text"
"text"
union_member_1: ContentPartThinkingPayload { thoughts }

Thinking content part shown on dynamic response polling.

type: "thinking"
"thinking"
union_member_2: ContentPartStructuredActionPayload { action, action_id }

Structured action content part.

type: "structured_action"
"structured_action"
union_member_3: ContentPartChartPayload { payload }

Chart payload content part.

type: "chart"
"chart"
union_member_4: ContentPartSuggestedActionsPayload { payload }

Suggested actions payload content part.

type: "suggested_actions"
"suggested_actions"
union_member_5: ContentPartCustomPayload { payload }

Escape-hatch custom payload content part.

type: "custom"
"custom"
response_content_part: ContentPartTextPayload { text } or ContentPartThinkingPayload { thoughts } or ContentPartStructuredActionPayload { action, action_id } or 3 more

Dynamic content part visible on a pollable response.

union_member_0: ContentPartTextPayload { text }

Text content part.

type: "text"
"text"
union_member_1: ContentPartThinkingPayload { thoughts }

Thinking content part shown on dynamic response polling.

type: "thinking"
"thinking"
union_member_2: ContentPartStructuredActionPayload { action, action_id }

Structured action content part.

type: "structured_action"
"structured_action"
union_member_3: ContentPartChartPayload { payload }

Chart payload content part.

type: "chart"
"chart"
union_member_4: ContentPartSuggestedActionsPayload { payload }

Suggested actions payload content part.

type: "suggested_actions"
"suggested_actions"
union_member_5: ContentPartCustomPayload { payload }

Escape-hatch custom payload content part.

type: "custom"
"custom"
response_status: "queued" or "running" or "succeeded" or 2 more

Dynamic lifecycle status for a pollable response.

"queued"
"running"
"succeeded"
"failed"
"canceled"

Omni AIThreads

Thread-centric AI assistant for conversational trading. Create threads to start conversations, poll response objects for in-progress output, and read finalized messages from thread history. Thread/message/response endpoints require an explicit account_id. Entitlement endpoints are caller-scoped and use trading_account_ids.

Get Threads
$ clear-street v1:omni-ai:threads get-threads
GET/v1/omni-ai/threads
Get Thread By ID
$ clear-street v1:omni-ai:threads get-thread-by-id
GET/v1/omni-ai/threads/{thread_id}
Create Thread
$ clear-street v1:omni-ai:threads create-thread
POST/v1/omni-ai/threads
Get Thread Response
$ clear-street v1:omni-ai:threads get-thread-response
GET/v1/omni-ai/threads/{thread_id}/response
Get Messages
$ clear-street v1:omni-ai:threads get-messages
GET/v1/omni-ai/threads/{thread_id}/messages
Create Message
$ clear-street v1:omni-ai:threads create-message
POST/v1/omni-ai/threads/{thread_id}/messages
ModelsExpand Collapse
create_message_response: object { response_id, thread_id, user_message_id }

Response payload for continuing a thread with a new message.

response_id: string
thread_id: string
user_message_id: string
create_thread_response: object { response_id, thread_id, user_message_id }

Response payload for thread creation.

response_id: string
thread_id: string
user_message_id: string
message: object { id, content, created_at, 5 more }

Final immutable message.

id: string
content: object { parts }

Finalized immutable message content container. Never includes thinking parts.

parts: array of MessageContentPart
union_member_0: ContentPartTextPayload { text }

Text content part.

type: "text"
"text"
union_member_1: ContentPartStructuredActionPayload { action, action_id }

Structured action content part.

type: "structured_action"
"structured_action"
union_member_2: ContentPartChartPayload { payload }

Chart payload content part.

type: "chart"
"chart"
union_member_3: ContentPartSuggestedActionsPayload { payload }

Suggested actions payload content part.

type: "suggested_actions"
"suggested_actions"
union_member_4: ContentPartCustomPayload { payload }

Escape-hatch custom payload content part.

type: "custom"
"custom"
created_at: string
outcome: "completed" or "errored" or "canceled"

Immutable terminal outcome for a finalized assistant message.

"completed"
"errored"
"canceled"
role: "USER" or "ASSISTANT"

Finalized message role in the public contract.

"USER"
"ASSISTANT"
seq: number
thread_id: string
error: optional object { code, message, details }

Shared sanitized error payload.

code: string
message: string
details: optional unknown
message_content: object { parts }

Finalized immutable message content container. Never includes thinking parts.

parts: array of MessageContentPart
union_member_0: ContentPartTextPayload { text }

Text content part.

type: "text"
"text"
union_member_1: ContentPartStructuredActionPayload { action, action_id }

Structured action content part.

type: "structured_action"
"structured_action"
union_member_2: ContentPartChartPayload { payload }

Chart payload content part.

type: "chart"
"chart"
union_member_3: ContentPartSuggestedActionsPayload { payload }

Suggested actions payload content part.

type: "suggested_actions"
"suggested_actions"
union_member_4: ContentPartCustomPayload { payload }

Escape-hatch custom payload content part.

type: "custom"
"custom"
message_content_part: ContentPartTextPayload { text } or ContentPartStructuredActionPayload { action, action_id } or ContentPartChartPayload { payload } or 2 more

Final immutable content part visible on persisted messages.

union_member_0: ContentPartTextPayload { text }

Text content part.

type: "text"
"text"
union_member_1: ContentPartStructuredActionPayload { action, action_id }

Structured action content part.

type: "structured_action"
"structured_action"
union_member_2: ContentPartChartPayload { payload }

Chart payload content part.

type: "chart"
"chart"
union_member_3: ContentPartSuggestedActionsPayload { payload }

Suggested actions payload content part.

type: "suggested_actions"
"suggested_actions"
union_member_4: ContentPartCustomPayload { payload }

Escape-hatch custom payload content part.

type: "custom"
"custom"
message_list: array of Message { id, content, created_at, 5 more }
id: string
content: object { parts }

Finalized immutable message content container. Never includes thinking parts.

parts: array of MessageContentPart
union_member_0: ContentPartTextPayload { text }

Text content part.

type: "text"
"text"
union_member_1: ContentPartStructuredActionPayload { action, action_id }

Structured action content part.

type: "structured_action"
"structured_action"
union_member_2: ContentPartChartPayload { payload }

Chart payload content part.

type: "chart"
"chart"
union_member_3: ContentPartSuggestedActionsPayload { payload }

Suggested actions payload content part.

type: "suggested_actions"
"suggested_actions"
union_member_4: ContentPartCustomPayload { payload }

Escape-hatch custom payload content part.

type: "custom"
"custom"
created_at: string
outcome: "completed" or "errored" or "canceled"

Immutable terminal outcome for a finalized assistant message.

"completed"
"errored"
"canceled"
role: "USER" or "ASSISTANT"

Finalized message role in the public contract.

"USER"
"ASSISTANT"
seq: number
thread_id: string
error: optional object { code, message, details }

Shared sanitized error payload.

code: string
message: string
details: optional unknown
message_outcome: "completed" or "errored" or "canceled"

Immutable terminal outcome for a finalized assistant message.

"completed"
"errored"
"canceled"
message_role: "USER" or "ASSISTANT"

Finalized message role in the public contract.

"USER"
"ASSISTANT"
thread: object { id, created_at, title, updated_at }

Thread metadata returned by list/get thread endpoints.

id: string
created_at: string
title: string
updated_at: string
thread_list: array of Thread { id, created_at, title, updated_at }
id: string
created_at: string
title: string
updated_at: string