Skip to content
Start Trading

Omni AI

ModelsExpand Collapse
ActionButton object { buttonId, label, itemId, 2 more }

Button metadata shared by chart and suggested-actions payloads.

buttonId: string

Stable button identifier within the content part.

label: string

User-visible label.

itemId: optional string

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
prompt: optional PromptButtonAction { prompt }

Follow-up prompt to submit as the next user message. When a null/undefined value is observed, it indicates it does not apply.

prompt: string

Prompt text to submit as the next user turn.

structuredAction: optional StructuredActionButtonAction { actionId }

Structured action in the same message to execute on click. When a null/undefined value is observed, it indicates it does not apply.

actionId: optional string

UUID of a structured_action content part in the same message. When a null/undefined value is observed, it indicates it does not apply.

formatuuid
ChartPayload object { chartId, clicked, actionButtons, 2 more }

Typed chart payload rendered inline in assistant content.

chartId: string

Stable chart identifier scoped to the content part.

clicked: boolean

Whether the current user clicked this chart.

actionButtons: optional array of ActionButton { buttonId, label, itemId, 2 more }

Buttons associated with this chart.

buttonId: string

Stable button identifier within the content part.

label: string

User-visible label.

itemId: optional string

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
prompt: optional PromptButtonAction { prompt }

Follow-up prompt to submit as the next user message. When a null/undefined value is observed, it indicates it does not apply.

prompt: string

Prompt text to submit as the next user turn.

structuredAction: optional StructuredActionButtonAction { actionId }

Structured action in the same message to execute on click. When a null/undefined value is observed, it indicates it does not apply.

actionId: optional string

UUID of a structured_action content part in the same message. When a null/undefined value is observed, it indicates it does not apply.

formatuuid
dataChart: optional DataChart { series }

Explicit series-driven chart definition. When a null/undefined value is observed, it indicates it does not apply.

series: optional array of ChartSeries { name, points }
name: string
points: optional array of ChartPoint { x, y }
x: string
y: number
itemId: optional string

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
ChartPoint object { x, y }

Single chart coordinate.

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

Named data series within a chart.

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

Chart payload content part.

payload: ChartPayload { chartId, clicked, actionButtons, 2 more }

Typed chart payload rendered inline in assistant content.

chartId: string

Stable chart identifier scoped to the content part.

clicked: boolean

Whether the current user clicked this chart.

actionButtons: optional array of ActionButton { buttonId, label, itemId, 2 more }

Buttons associated with this chart.

buttonId: string

Stable button identifier within the content part.

label: string

User-visible label.

itemId: optional string

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
prompt: optional PromptButtonAction { prompt }

Follow-up prompt to submit as the next user message. When a null/undefined value is observed, it indicates it does not apply.

prompt: string

Prompt text to submit as the next user turn.

structuredAction: optional StructuredActionButtonAction { actionId }

Structured action in the same message to execute on click. When a null/undefined value is observed, it indicates it does not apply.

actionId: optional string

UUID of a structured_action content part in the same message. When a null/undefined value is observed, it indicates it does not apply.

formatuuid
dataChart: optional DataChart { series }

Explicit series-driven chart definition. When a null/undefined value is observed, it indicates it does not apply.

series: optional array of ChartSeries { name, points }
name: string
points: optional array of ChartPoint { x, y }
x: string
y: number
itemId: optional string

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
ContentPartCustomPayload object { payload }

Escape-hatch custom payload content part.

payload: unknown
ContentPartStructuredActionPayload object { action, action_id, clicked, 2 more }

Structured action content part.

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.

One of the following:
PrefillOrder object { prefill_order }

Prefill an order ticket for user confirmation

prefill_order: PrefillOrderAction

Prefill an order ticket for user confirmation

One of the following:
PrefillNewOrderAction = PrefillNewOrderAction { orders }

Create one or more new orders.

action_type: "NEW"
PrefillCancelOrderAction = PrefillCancelOrderAction { orders }

Cancel one or more existing orders.

action_type: "CANCEL"
PrefillModifyOrderAction = PrefillModifyOrderAction { orders }

Modify one or more existing orders.

action_type: "MODIFY"
OpenChart object { open_chart }

Open a chart for a symbol

open_chart: OpenChartAction { symbol, extras, item_id, timeframe }

Open a chart for a symbol

symbol: string

Trading symbol to chart

extras: optional unknown

Additional chart configuration (indicators, overlays, etc.) When a null/undefined value is observed, it indicates it does not apply.

item_id: optional string

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
timeframe: optional string

Chart timeframe (e.g., “1D”, “1W”, “1M”, “3M”, “1Y”, “5Y”) When a null/undefined value is observed, it indicates it does not apply.

OpenScreener object { open_screener }

Open a stock screener with filters

open_screener: OpenScreenerAction { filters, columns, item_id, 3 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

columns: optional array of string

Optional field/column selection for screener results. When a null/undefined value is observed, it indicates it does not apply.

item_id: optional string

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
page_size: optional number

Optional page size. When a null/undefined value is observed, it indicates it does not apply.

formatint32
sort_by: optional string

Optional sort field for screener rows. When a null/undefined value is observed, it indicates it does not apply.

sort_direction: optional string

Optional sort direction (ASC or DESC). When a null/undefined value is observed, it indicates it does not apply.

OpenEntitlementConsent object { open_entitlement_consent }

Open entitlement consent flow

Open entitlement consent flow

Stable entitlement agreement family key.

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
action_id: string
clicked: boolean

Whether the current user clicked this action.

clicked_item_ids: optional array of string

IDs of nested items clicked by the current user.

item_id: optional string

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
ContentPartSuggestedActionsPayload object { payload }

Suggested actions payload content part.

payload: SuggestedActionsPayload { actionButtons, clickedItemIds }

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

actionButtons: optional array of ActionButton { buttonId, label, itemId, 2 more }

Ordered message-level buttons.

buttonId: string

Stable button identifier within the content part.

label: string

User-visible label.

itemId: optional string

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
prompt: optional PromptButtonAction { prompt }

Follow-up prompt to submit as the next user message. When a null/undefined value is observed, it indicates it does not apply.

prompt: string

Prompt text to submit as the next user turn.

structuredAction: optional StructuredActionButtonAction { actionId }

Structured action in the same message to execute on click. When a null/undefined value is observed, it indicates it does not apply.

actionId: optional string

UUID of a structured_action content part in the same message. When a null/undefined value is observed, it indicates it does not apply.

formatuuid
clickedItemIds: optional array of string

IDs of buttons clicked by the current user.

ContentPartTextPayload object { text }

Text content part.

text: string
ContentPartThinkingPayload object { thoughts }

Thinking content part shown on dynamic response polling.

thoughts: array of string
DataChart 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
EntitlementAgreementKey = "omni_account_data_access"

Stable entitlement agreement family key.

EntitlementCode = "omni.account_data"

Stable entitlement code granted by an agreement.

OpenChartAction object { symbol, extras, item_id, timeframe }

Action to open a chart for a symbol.

symbol: string

Trading symbol to chart

extras: optional unknown

Additional chart configuration (indicators, overlays, etc.) When a null/undefined value is observed, it indicates it does not apply.

item_id: optional string

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
timeframe: optional string

Chart timeframe (e.g., “1D”, “1W”, “1M”, “3M”, “1Y”, “5Y”) When a null/undefined value is observed, it indicates it does not apply.

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

Stable entitlement agreement family key.

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
OpenScreenerAction object { filters, columns, item_id, 3 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

columns: optional array of string

Optional field/column selection for screener results. When a null/undefined value is observed, it indicates it does not apply.

item_id: optional string

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
page_size: optional number

Optional page size. When a null/undefined value is observed, it indicates it does not apply.

formatint32
sort_by: optional string

Optional sort field for screener rows. When a null/undefined value is observed, it indicates it does not apply.

sort_direction: optional string

Optional sort direction (ASC or DESC). When a null/undefined value is observed, it indicates it does not apply.

PrefillCancelOrderAction object { orders }

Cancel-order prefill action.

orders: array of PrefillCancelOrderRequest { account_id, order_id, item_id }

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

account_id: number

Account ID (from path parameter)

formatint64
order_id: string

Order ID to cancel (from path parameter)

item_id: optional string

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
PrefillCancelOrderRequest object { account_id, order_id, item_id }

Request to cancel an existing order

Note: In the API, order cancellation is done via DELETE request without a body. The order_id and account_id come from the URL path parameters.

account_id: number

Account ID (from path parameter)

formatint64
order_id: string

Order ID to cancel (from path parameter)

item_id: optional string

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
PrefillModifyOrderAction object { orders }

Modify-order prefill action.

orders: array of PrefillModifyOrderRequest { account_id, item_id, limit_offset, 6 more }

Modification targets and deltas needed to construct replace-order API requests.

account_id: optional number

Account ID that owns the order.

formatint64
item_id: optional string

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
limit_offset: optional string

New limit offset for trailing stop-limit orders (signed)

limit_price: optional string

New limit price for the order

order_id: optional string

Order ID to modify.

quantity: optional string

New quantity for the order

stop_price: optional string

New stop price for the order

trailing_offset: optional string

New trailing offset for trailing orders

trailing_offset_type: optional TrailingOffsetType

New trailing offset type (PRICE or BPS)

One of the following:
"PRICE"
"BPS"
PrefillModifyOrderRequest object { account_id, item_id, limit_offset, 6 more }

Request to replace (modify) an existing order

At least one field must be provided.

account_id: optional number

Account ID that owns the order.

formatint64
item_id: optional string

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
limit_offset: optional string

New limit offset for trailing stop-limit orders (signed)

limit_price: optional string

New limit price for the order

order_id: optional string

Order ID to modify.

quantity: optional string

New quantity for the order

stop_price: optional string

New stop price for the order

trailing_offset: optional string

New trailing offset for trailing orders

trailing_offset_type: optional TrailingOffsetType

New trailing offset type (PRICE or BPS)

One of the following:
"PRICE"
"BPS"
PrefillNewOrderAction object { orders }

New-order prefill action.

orders: array of PrefillNewOrderRequest { order_type, quantity, side, 14 more }

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

order_type: RequestOrderType

Type of order

One of the following:
"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: Side

Side of the order

One of the following:
"BUY"
"SELL"
time_in_force: RequestTimeInForce

Time in force

One of the following:
"DAY"
"GOOD_TILL_CANCEL"
"IMMEDIATE_OR_CANCEL"
"FILL_OR_KILL"
"GOOD_TILL_DATE"
"AT_OPEN"
"AT_CLOSE"
id: optional string

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

maxLength64
expires_at: optional string

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

formatdate-time
extended_hours: optional boolean

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

instrument_id: optional InstrumentIDOrSymbol

Instrument ID (UUID) or symbol (equity ticker or OSI option symbol). Either symbol or instrument_id must be provided.

minLength1
item_id: optional string

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
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_intent: optional RequestPositionEffect

Optional open/close intent for this order. When omitted, the platform determines the position effect.

One of the following:
"OPEN"
"CLOSE"
stop_price: optional string

Stop price (required for STOP and STOP_LIMIT orders)

strategy: optional OrderStrategy

Optional execution strategy. One of SOR, VWAP, TWAP, or DMA. Defaults to SOR, the only strategy OTC common-stock orders support. VWAP and TWAP are supported only on MARKET and LIMIT orders, and DMA only on LIMIT orders; all three require DAY time-in-force. VWAP, TWAP, and DMA do not support extended_hours.

One of the following:
Type object { type }

Smart Order Router. Routes the order to the best available venue(s).

type: "SOR"

Execution strategy type.

object { type, end_at, start_at }

Volume-Weighted Average Price. Works the order to track the volume-weighted average price over the execution window.

type: "VWAP"

Execution strategy type.

end_at: optional string

UTC timestamp (RFC 3339) by which to finish working the order. Defaults to market close.

formatdate-time
start_at: optional string

UTC timestamp (RFC 3339) at which to begin working the order. Defaults to the time the order is received.

formatdate-time
object { type, end_at, start_at }

Time-Weighted Average Price. Spreads execution evenly across the execution window.

type: "TWAP"

Execution strategy type.

end_at: optional string

UTC timestamp (RFC 3339) by which to finish working the order. Defaults to market close.

formatdate-time
start_at: optional string

UTC timestamp (RFC 3339) at which to begin working the order. Defaults to the time the order is received.

formatdate-time
object { destination, type }

Direct Market Access. Routes the order straight to the named venue.

destination: string

Venue code the order is routed to.

type: "DMA"

Execution strategy type.

symbol: optional string

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

trailing_offset: optional string

Trailing offset amount (required for trailing orders)

trailing_offset_type: optional TrailingOffsetType

Trailing offset type (PRICE or PERCENT_BPS)

One of the following:
"PRICE"
"BPS"
PrefillNewOrderRequest object { order_type, quantity, side, 14 more }

Request to submit a new order

order_type: RequestOrderType

Type of order

One of the following:
"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: Side

Side of the order

One of the following:
"BUY"
"SELL"
time_in_force: RequestTimeInForce

Time in force

One of the following:
"DAY"
"GOOD_TILL_CANCEL"
"IMMEDIATE_OR_CANCEL"
"FILL_OR_KILL"
"GOOD_TILL_DATE"
"AT_OPEN"
"AT_CLOSE"
id: optional string

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

maxLength64
expires_at: optional string

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

formatdate-time
extended_hours: optional boolean

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

instrument_id: optional InstrumentIDOrSymbol

Instrument ID (UUID) or symbol (equity ticker or OSI option symbol). Either symbol or instrument_id must be provided.

minLength1
item_id: optional string

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
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_intent: optional RequestPositionEffect

Optional open/close intent for this order. When omitted, the platform determines the position effect.

One of the following:
"OPEN"
"CLOSE"
stop_price: optional string

Stop price (required for STOP and STOP_LIMIT orders)

strategy: optional OrderStrategy

Optional execution strategy. One of SOR, VWAP, TWAP, or DMA. Defaults to SOR, the only strategy OTC common-stock orders support. VWAP and TWAP are supported only on MARKET and LIMIT orders, and DMA only on LIMIT orders; all three require DAY time-in-force. VWAP, TWAP, and DMA do not support extended_hours.

One of the following:
Type object { type }

Smart Order Router. Routes the order to the best available venue(s).

type: "SOR"

Execution strategy type.

object { type, end_at, start_at }

Volume-Weighted Average Price. Works the order to track the volume-weighted average price over the execution window.

type: "VWAP"

Execution strategy type.

end_at: optional string

UTC timestamp (RFC 3339) by which to finish working the order. Defaults to market close.

formatdate-time
start_at: optional string

UTC timestamp (RFC 3339) at which to begin working the order. Defaults to the time the order is received.

formatdate-time
object { type, end_at, start_at }

Time-Weighted Average Price. Spreads execution evenly across the execution window.

type: "TWAP"

Execution strategy type.

end_at: optional string

UTC timestamp (RFC 3339) by which to finish working the order. Defaults to market close.

formatdate-time
start_at: optional string

UTC timestamp (RFC 3339) at which to begin working the order. Defaults to the time the order is received.

formatdate-time
object { destination, type }

Direct Market Access. Routes the order straight to the named venue.

destination: string

Venue code the order is routed to.

type: "DMA"

Execution strategy type.

symbol: optional string

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

trailing_offset: optional string

Trailing offset amount (required for trailing orders)

trailing_offset_type: optional TrailingOffsetType

Trailing offset type (PRICE or PERCENT_BPS)

One of the following:
"PRICE"
"BPS"
PrefillOrderAction = PrefillNewOrderAction { orders } or PrefillCancelOrderAction { orders } or PrefillModifyOrderAction { 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.

One of the following:
PrefillNewOrderAction = PrefillNewOrderAction { orders }

Create one or more new orders.

action_type: "NEW"
PrefillCancelOrderAction = PrefillCancelOrderAction { orders }

Cancel one or more existing orders.

action_type: "CANCEL"
PrefillModifyOrderAction = PrefillModifyOrderAction { orders }

Modify one or more existing orders.

action_type: "MODIFY"
PromptButtonAction object { prompt }

Prompt-style button behavior.

prompt: string

Prompt text to submit as the next user turn.

StructuredAction = 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.

One of the following:
PrefillOrder object { prefill_order }

Prefill an order ticket for user confirmation

prefill_order: PrefillOrderAction

Prefill an order ticket for user confirmation

One of the following:
PrefillNewOrderAction = PrefillNewOrderAction { orders }

Create one or more new orders.

action_type: "NEW"
PrefillCancelOrderAction = PrefillCancelOrderAction { orders }

Cancel one or more existing orders.

action_type: "CANCEL"
PrefillModifyOrderAction = PrefillModifyOrderAction { orders }

Modify one or more existing orders.

action_type: "MODIFY"
OpenChart object { open_chart }

Open a chart for a symbol

open_chart: OpenChartAction { symbol, extras, item_id, timeframe }

Open a chart for a symbol

symbol: string

Trading symbol to chart

extras: optional unknown

Additional chart configuration (indicators, overlays, etc.) When a null/undefined value is observed, it indicates it does not apply.

item_id: optional string

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
timeframe: optional string

Chart timeframe (e.g., “1D”, “1W”, “1M”, “3M”, “1Y”, “5Y”) When a null/undefined value is observed, it indicates it does not apply.

OpenScreener object { open_screener }

Open a stock screener with filters

open_screener: OpenScreenerAction { filters, columns, item_id, 3 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

columns: optional array of string

Optional field/column selection for screener results. When a null/undefined value is observed, it indicates it does not apply.

item_id: optional string

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
page_size: optional number

Optional page size. When a null/undefined value is observed, it indicates it does not apply.

formatint32
sort_by: optional string

Optional sort field for screener rows. When a null/undefined value is observed, it indicates it does not apply.

sort_direction: optional string

Optional sort direction (ASC or DESC). When a null/undefined value is observed, it indicates it does not apply.

OpenEntitlementConsent object { open_entitlement_consent }

Open entitlement consent flow

Open entitlement consent flow

Stable entitlement agreement family key.

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
StructuredActionButtonAction object { actionId }

Structured-action button behavior.

actionId: optional string

UUID of a structured_action content part in the same message. When a null/undefined value is observed, it indicates it does not apply.

formatuuid
SuggestedActionsPayload object { actionButtons, clickedItemIds }

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

actionButtons: optional array of ActionButton { buttonId, label, itemId, 2 more }

Ordered message-level buttons.

buttonId: string

Stable button identifier within the content part.

label: string

User-visible label.

itemId: optional string

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
prompt: optional PromptButtonAction { prompt }

Follow-up prompt to submit as the next user message. When a null/undefined value is observed, it indicates it does not apply.

prompt: string

Prompt text to submit as the next user turn.

structuredAction: optional StructuredActionButtonAction { actionId }

Structured action in the same message to execute on click. When a null/undefined value is observed, it indicates it does not apply.

actionId: optional string

UUID of a structured_action content part in the same message. When a null/undefined value is observed, it indicates it does not apply.

formatuuid
clickedItemIds: optional array of string

IDs of buttons clicked by the current user.

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 account_ids.

Get Entitlements
Deprecated
GET/v1/omni-ai/entitlements
Create Entitlements
POST/v1/omni-ai/entitlements
Delete Entitlement
Deprecated
DELETE/v1/omni-ai/entitlements/{entitlement_id}
Get Entitlement Status
GET/v1/omni-ai/entitlement-status
Opt Out Of Entitlements
POST/v1/omni-ai/entitlements/opt-out
Get Entitlement Agreements
GET/v1/omni-ai/entitlement-agreements
ModelsExpand Collapse
DeleteEntitlementResponse object { entitlement_id, revoked }
entitlement_id: string
revoked: boolean
EntitlementAgreementResource object { agreement_id, agreement_key, document_content, 4 more }
agreement_id: string

Stable entitlement agreement family key.

document_content: string
document_sha256: string
entitlement_codes: array of EntitlementCode
title: string
version: number
EntitlementAgreementResourceList = array of EntitlementAgreementResource { agreement_id, agreement_key, document_content, 4 more }
agreement_id: string

Stable entitlement agreement family key.

document_content: string
document_sha256: string
entitlement_codes: array of EntitlementCode
title: string
version: number
EntitlementResource object { account_id, agreement_id, entitlement_code, 2 more }
account_id: number
agreement_id: string
entitlement_code: EntitlementCode

Stable entitlement code granted by an agreement.

entitlement_id: string
granted_at: string
EntitlementResourceList = array of EntitlementResource { account_id, agreement_id, entitlement_code, 2 more }
account_id: number
agreement_id: string
entitlement_code: EntitlementCode

Stable entitlement code granted by an agreement.

entitlement_id: string
granted_at: string
EntitlementStatusResource object { account_id, enabled, entitlement_code }

Whether an entitlement is enabled for one account. Accounts the user never chose for are enabled by default.

account_id: number
enabled: boolean
entitlement_code: EntitlementCode

Stable entitlement code granted by an agreement.

EntitlementStatusResourceList = array of EntitlementStatusResource { account_id, enabled, entitlement_code }
account_id: number
enabled: boolean
entitlement_code: EntitlementCode

Stable entitlement code granted by an agreement.

EntitlementGetEntitlementsResponse = BaseResponse { metadata, error }
data: EntitlementResourceList { account_id, agreement_id, entitlement_code, 2 more }
account_id: number
agreement_id: string
entitlement_code: EntitlementCode

Stable entitlement code granted by an agreement.

entitlement_id: string
granted_at: string
EntitlementCreateEntitlementsResponse = BaseResponse { metadata, error }
data: EntitlementResourceList { account_id, agreement_id, entitlement_code, 2 more }
account_id: number
agreement_id: string
entitlement_code: EntitlementCode

Stable entitlement code granted by an agreement.

entitlement_id: string
granted_at: string
EntitlementDeleteEntitlementResponse = BaseResponse { metadata, error }
data: DeleteEntitlementResponse { entitlement_id, revoked }
entitlement_id: string
revoked: boolean
EntitlementGetEntitlementStatusResponse = BaseResponse { metadata, error }
data: EntitlementStatusResourceList { account_id, enabled, entitlement_code }
account_id: number
enabled: boolean
entitlement_code: EntitlementCode

Stable entitlement code granted by an agreement.

EntitlementOptOutEntitlementsResponse = BaseResponse { metadata, error }
data: EntitlementStatusResourceList { account_id, enabled, entitlement_code }
account_id: number
enabled: boolean
entitlement_code: EntitlementCode

Stable entitlement code granted by an agreement.

EntitlementGetEntitlementAgreementsResponse = BaseResponse { metadata, error }
data: EntitlementAgreementResourceList { agreement_id, agreement_key, document_content, 4 more }
agreement_id: string

Stable entitlement agreement family key.

document_content: string
document_sha256: string
entitlement_codes: array of EntitlementCode
title: string
version: 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 account_ids.

Get Message
GET/v1/omni-ai/messages/{message_id}
Submit Feedback
POST/v1/omni-ai/messages/{message_id}/feedback
ModelsExpand Collapse
CreateFeedbackResponse object { created_at, feedback_id }
created_at: string
feedback_id: optional string

When a null/undefined value is observed, it indicates that there is no available data.

formatuuid
MessageGetMessageByIDResponse = BaseResponse { metadata, error }
data: Message { id, content, created_at, 6 more }

Final immutable message.

id: string
content: MessageContent { parts }

Finalized immutable message content container. Never includes thinking parts.

parts: array of MessageContentPart
One of the following:
ContentPartText = ContentPartTextPayload { text }

Text content part.

type: "text"
ContentPartStructuredAction = ContentPartStructuredActionPayload { action, action_id, clicked, 2 more }

Structured action content part.

type: "structured_action"
ContentPartChart = ContentPartChartPayload { payload }

Chart payload content part.

type: "chart"
ContentPartSuggestedActions = ContentPartSuggestedActionsPayload { payload }

Suggested actions payload content part.

type: "suggested_actions"
ContentPartCustom = ContentPartCustomPayload { payload }

Escape-hatch custom payload content part.

type: "custom"
created_at: string

Immutable terminal outcome for a finalized assistant message.

One of the following:
"completed"
"errored"
"canceled"

Finalized message role in the public contract.

One of the following:
"USER"
"ASSISTANT"
seq: number
thread_id: string
context: optional TurnContext { items }

Immutable snapshots attached to this user message. Omitted when none were supplied. When a null/undefined value is observed, it indicates that there is no available data.

items: array of ContextItem { data, kind, label, captured_at }

One to four snapshots. Each snapshot’s data may contain at most 32 levels of nesting.

data: map[unknown]

Relevant widget data, selections, and units. Use strings for exact decimals and large IDs.

kind: string

Nonblank descriptive kind. New kinds do not require a backend release.

minLength1
label: string

Nonblank attachment label for conversation rendering.

minLength1
captured_at: optional string

Client-reported snapshot time. Omit when unknown.

formatdate-time
error: optional ErrorStatus { code, message, details }

When a null/undefined value is observed, it indicates it does not apply.

code: string
message: string
details: optional unknown

When a null/undefined value is observed, it indicates it does not apply.

MessageSubmitFeedbackResponse = BaseResponse { metadata, error }
data: CreateFeedbackResponse { created_at, feedback_id }
created_at: string
feedback_id: optional string

When a null/undefined value is observed, it indicates that there is no available data.

formatuuid

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 account_ids.

Get Response By ID
GET/v1/omni-ai/responses/{response_id}
Cancel Response
DELETE/v1/omni-ai/responses/{response_id}
ModelsExpand Collapse
CancelResponsePayload object { canceled }
canceled: boolean
ErrorStatus object { code, message, details }

Shared sanitized error payload.

code: string
message: string
details: optional unknown

When a null/undefined value is observed, it indicates it does not apply.

Response object { id, status, thread_id, 4 more }

Dynamic pollable response.

id: string

Dynamic lifecycle status for a pollable response.

One of the following:
"queued"
"running"
"succeeded"
"failed"
"canceled"
thread_id: string
user_message_id: string
content: optional ResponseContent { parts }

When a null/undefined value is observed, it indicates that there is no available data.

parts: array of ResponseContentPart
One of the following:
ContentPartText = ContentPartTextPayload { text }

Text content part.

type: "text"
ContentPartThinking = ContentPartThinkingPayload { thoughts }

Thinking content part shown on dynamic response polling.

type: "thinking"
ContentPartStructuredAction = ContentPartStructuredActionPayload { action, action_id, clicked, 2 more }

Structured action content part.

type: "structured_action"
ContentPartChart = ContentPartChartPayload { payload }

Chart payload content part.

type: "chart"
ContentPartSuggestedActions = ContentPartSuggestedActionsPayload { payload }

Suggested actions payload content part.

type: "suggested_actions"
ContentPartCustom = ContentPartCustomPayload { payload }

Escape-hatch custom payload content part.

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

When a null/undefined value is observed, it indicates it does not apply.

code: string
message: string
details: optional unknown

When a null/undefined value is observed, it indicates it does not apply.

output_message_id: optional string

When a null/undefined value is observed, it indicates it does not apply.

formatuuid
ResponseContent object { parts }

Dynamic response content container. May include thinking parts.

parts: array of ResponseContentPart
One of the following:
ContentPartText = ContentPartTextPayload { text }

Text content part.

type: "text"
ContentPartThinking = ContentPartThinkingPayload { thoughts }

Thinking content part shown on dynamic response polling.

type: "thinking"
ContentPartStructuredAction = ContentPartStructuredActionPayload { action, action_id, clicked, 2 more }

Structured action content part.

type: "structured_action"
ContentPartChart = ContentPartChartPayload { payload }

Chart payload content part.

type: "chart"
ContentPartSuggestedActions = ContentPartSuggestedActionsPayload { payload }

Suggested actions payload content part.

type: "suggested_actions"
ContentPartCustom = ContentPartCustomPayload { payload }

Escape-hatch custom payload content part.

type: "custom"
ResponseContentPart = ContentPartTextPayload { text } or ContentPartThinkingPayload { thoughts } or ContentPartStructuredActionPayload { action, action_id, clicked, 2 more } or 3 more

Dynamic content part visible on a pollable response.

One of the following:
ContentPartText = ContentPartTextPayload { text }

Text content part.

type: "text"
ContentPartThinking = ContentPartThinkingPayload { thoughts }

Thinking content part shown on dynamic response polling.

type: "thinking"
ContentPartStructuredAction = ContentPartStructuredActionPayload { action, action_id, clicked, 2 more }

Structured action content part.

type: "structured_action"
ContentPartChart = ContentPartChartPayload { payload }

Chart payload content part.

type: "chart"
ContentPartSuggestedActions = ContentPartSuggestedActionsPayload { payload }

Suggested actions payload content part.

type: "suggested_actions"
ContentPartCustom = ContentPartCustomPayload { payload }

Escape-hatch custom payload content part.

type: "custom"
ResponseStatus = "queued" or "running" or "succeeded" or 2 more

Dynamic lifecycle status for a pollable response.

One of the following:
"queued"
"running"
"succeeded"
"failed"
"canceled"
ResponseGetResponseByIDResponse = BaseResponse { metadata, error }
data: Response { id, status, thread_id, 4 more }

Dynamic pollable response.

id: string

Dynamic lifecycle status for a pollable response.

One of the following:
"queued"
"running"
"succeeded"
"failed"
"canceled"
thread_id: string
user_message_id: string
content: optional ResponseContent { parts }

When a null/undefined value is observed, it indicates that there is no available data.

parts: array of ResponseContentPart
One of the following:
ContentPartText = ContentPartTextPayload { text }

Text content part.

type: "text"
ContentPartThinking = ContentPartThinkingPayload { thoughts }

Thinking content part shown on dynamic response polling.

type: "thinking"
ContentPartStructuredAction = ContentPartStructuredActionPayload { action, action_id, clicked, 2 more }

Structured action content part.

type: "structured_action"
ContentPartChart = ContentPartChartPayload { payload }

Chart payload content part.

type: "chart"
ContentPartSuggestedActions = ContentPartSuggestedActionsPayload { payload }

Suggested actions payload content part.

type: "suggested_actions"
ContentPartCustom = ContentPartCustomPayload { payload }

Escape-hatch custom payload content part.

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

When a null/undefined value is observed, it indicates it does not apply.

code: string
message: string
details: optional unknown

When a null/undefined value is observed, it indicates it does not apply.

output_message_id: optional string

When a null/undefined value is observed, it indicates it does not apply.

formatuuid
ResponseCancelResponseResponse = BaseResponse { metadata, error }
data: CancelResponsePayload { canceled }
canceled: boolean

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 account_ids.

Get Threads
GET/v1/omni-ai/threads
Get Thread
GET/v1/omni-ai/threads/{thread_id}
Create Thread
POST/v1/omni-ai/threads
Get Thread Response
GET/v1/omni-ai/threads/{thread_id}/response
Get Messages
GET/v1/omni-ai/threads/{thread_id}/messages
Create Message
POST/v1/omni-ai/threads/{thread_id}/messages
ModelsExpand Collapse
ContextItem object { data, kind, label, captured_at }

A snapshot of the widget the user asks about.

data: map[unknown]

Relevant widget data, selections, and units. Use strings for exact decimals and large IDs.

kind: string

Nonblank descriptive kind. New kinds do not require a backend release.

minLength1
label: string

Nonblank attachment label for conversation rendering.

minLength1
captured_at: optional string

Client-reported snapshot time. Omit when unknown.

formatdate-time
CreateMessageResponse 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
CreateThreadResponse 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, 6 more }

Final immutable message.

id: string
content: MessageContent { parts }

Finalized immutable message content container. Never includes thinking parts.

parts: array of MessageContentPart
One of the following:
ContentPartText = ContentPartTextPayload { text }

Text content part.

type: "text"
ContentPartStructuredAction = ContentPartStructuredActionPayload { action, action_id, clicked, 2 more }

Structured action content part.

type: "structured_action"
ContentPartChart = ContentPartChartPayload { payload }

Chart payload content part.

type: "chart"
ContentPartSuggestedActions = ContentPartSuggestedActionsPayload { payload }

Suggested actions payload content part.

type: "suggested_actions"
ContentPartCustom = ContentPartCustomPayload { payload }

Escape-hatch custom payload content part.

type: "custom"
created_at: string

Immutable terminal outcome for a finalized assistant message.

One of the following:
"completed"
"errored"
"canceled"

Finalized message role in the public contract.

One of the following:
"USER"
"ASSISTANT"
seq: number
thread_id: string
context: optional TurnContext { items }

Immutable snapshots attached to this user message. Omitted when none were supplied. When a null/undefined value is observed, it indicates that there is no available data.

items: array of ContextItem { data, kind, label, captured_at }

One to four snapshots. Each snapshot’s data may contain at most 32 levels of nesting.

data: map[unknown]

Relevant widget data, selections, and units. Use strings for exact decimals and large IDs.

kind: string

Nonblank descriptive kind. New kinds do not require a backend release.

minLength1
label: string

Nonblank attachment label for conversation rendering.

minLength1
captured_at: optional string

Client-reported snapshot time. Omit when unknown.

formatdate-time
error: optional ErrorStatus { code, message, details }

When a null/undefined value is observed, it indicates it does not apply.

code: string
message: string
details: optional unknown

When a null/undefined value is observed, it indicates it does not apply.

MessageContent object { parts }

Finalized immutable message content container. Never includes thinking parts.

parts: array of MessageContentPart
One of the following:
ContentPartText = ContentPartTextPayload { text }

Text content part.

type: "text"
ContentPartStructuredAction = ContentPartStructuredActionPayload { action, action_id, clicked, 2 more }

Structured action content part.

type: "structured_action"
ContentPartChart = ContentPartChartPayload { payload }

Chart payload content part.

type: "chart"
ContentPartSuggestedActions = ContentPartSuggestedActionsPayload { payload }

Suggested actions payload content part.

type: "suggested_actions"
ContentPartCustom = ContentPartCustomPayload { payload }

Escape-hatch custom payload content part.

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

Final immutable content part visible on persisted messages.

One of the following:
ContentPartText = ContentPartTextPayload { text }

Text content part.

type: "text"
ContentPartStructuredAction = ContentPartStructuredActionPayload { action, action_id, clicked, 2 more }

Structured action content part.

type: "structured_action"
ContentPartChart = ContentPartChartPayload { payload }

Chart payload content part.

type: "chart"
ContentPartSuggestedActions = ContentPartSuggestedActionsPayload { payload }

Suggested actions payload content part.

type: "suggested_actions"
ContentPartCustom = ContentPartCustomPayload { payload }

Escape-hatch custom payload content part.

type: "custom"
MessageList = array of Message { id, content, created_at, 6 more }
id: string
content: MessageContent { parts }

Finalized immutable message content container. Never includes thinking parts.

parts: array of MessageContentPart
One of the following:
ContentPartText = ContentPartTextPayload { text }

Text content part.

type: "text"
ContentPartStructuredAction = ContentPartStructuredActionPayload { action, action_id, clicked, 2 more }

Structured action content part.

type: "structured_action"
ContentPartChart = ContentPartChartPayload { payload }

Chart payload content part.

type: "chart"
ContentPartSuggestedActions = ContentPartSuggestedActionsPayload { payload }

Suggested actions payload content part.

type: "suggested_actions"
ContentPartCustom = ContentPartCustomPayload { payload }

Escape-hatch custom payload content part.

type: "custom"
created_at: string

Immutable terminal outcome for a finalized assistant message.

One of the following:
"completed"
"errored"
"canceled"

Finalized message role in the public contract.

One of the following:
"USER"
"ASSISTANT"
seq: number
thread_id: string
context: optional TurnContext { items }

Immutable snapshots attached to this user message. Omitted when none were supplied. When a null/undefined value is observed, it indicates that there is no available data.

items: array of ContextItem { data, kind, label, captured_at }

One to four snapshots. Each snapshot’s data may contain at most 32 levels of nesting.

data: map[unknown]

Relevant widget data, selections, and units. Use strings for exact decimals and large IDs.

kind: string

Nonblank descriptive kind. New kinds do not require a backend release.

minLength1
label: string

Nonblank attachment label for conversation rendering.

minLength1
captured_at: optional string

Client-reported snapshot time. Omit when unknown.

formatdate-time
error: optional ErrorStatus { code, message, details }

When a null/undefined value is observed, it indicates it does not apply.

code: string
message: string
details: optional unknown

When a null/undefined value is observed, it indicates it does not apply.

MessageOutcome = "completed" or "errored" or "canceled"

Immutable terminal outcome for a finalized assistant message.

One of the following:
"completed"
"errored"
"canceled"
MessageRole = "USER" or "ASSISTANT"

Finalized message role in the public contract.

One of the following:
"USER"
"ASSISTANT"
Thread object { id, created_at, title, updated_at }

Thread metadata.

id: string
created_at: string
title: string
updated_at: string

Time of the last activity: a new message in the thread or a change to the thread.

formatdate-time
ThreadList = array of Thread { id, created_at, title, updated_at }
id: string
created_at: string
title: string
updated_at: string

Time of the last activity: a new message in the thread or a change to the thread.

formatdate-time
TurnContext object { items }

Client snapshots attached to one instant-chat user message.

Context is separate from visible message text and does not grant account access. The compact JSON representation must not exceed 64 KiB.

items: array of ContextItem { data, kind, label, captured_at }

One to four snapshots. Each snapshot’s data may contain at most 32 levels of nesting.

data: map[unknown]

Relevant widget data, selections, and units. Use strings for exact decimals and large IDs.

kind: string

Nonblank descriptive kind. New kinds do not require a backend release.

minLength1
label: string

Nonblank attachment label for conversation rendering.

minLength1
captured_at: optional string

Client-reported snapshot time. Omit when unknown.

formatdate-time
ThreadGetThreadsResponse = BaseResponse { metadata, error }
data: ThreadList { id, created_at, title, updated_at }
id: string
created_at: string
title: string
updated_at: string

Time of the last activity: a new message in the thread or a change to the thread.

formatdate-time
ThreadGetThreadByIDResponse = BaseResponse { metadata, error }
data: Thread { id, created_at, title, updated_at }

Thread metadata.

id: string
created_at: string
title: string
updated_at: string

Time of the last activity: a new message in the thread or a change to the thread.

formatdate-time
ThreadCreateThreadResponse = BaseResponse { metadata, error }
data: CreateThreadResponse { response_id, thread_id, user_message_id }

Response payload for thread creation.

response_id: string
thread_id: string
user_message_id: string
ThreadGetThreadResponseResponse = BaseResponse { metadata, error }
data: Response { id, status, thread_id, 4 more }

Dynamic pollable response.

id: string

Dynamic lifecycle status for a pollable response.

One of the following:
"queued"
"running"
"succeeded"
"failed"
"canceled"
thread_id: string
user_message_id: string
content: optional ResponseContent { parts }

When a null/undefined value is observed, it indicates that there is no available data.

parts: array of ResponseContentPart
One of the following:
ContentPartText = ContentPartTextPayload { text }

Text content part.

type: "text"
ContentPartThinking = ContentPartThinkingPayload { thoughts }

Thinking content part shown on dynamic response polling.

type: "thinking"
ContentPartStructuredAction = ContentPartStructuredActionPayload { action, action_id, clicked, 2 more }

Structured action content part.

type: "structured_action"
ContentPartChart = ContentPartChartPayload { payload }

Chart payload content part.

type: "chart"
ContentPartSuggestedActions = ContentPartSuggestedActionsPayload { payload }

Suggested actions payload content part.

type: "suggested_actions"
ContentPartCustom = ContentPartCustomPayload { payload }

Escape-hatch custom payload content part.

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

When a null/undefined value is observed, it indicates it does not apply.

code: string
message: string
details: optional unknown

When a null/undefined value is observed, it indicates it does not apply.

output_message_id: optional string

When a null/undefined value is observed, it indicates it does not apply.

formatuuid
ThreadGetMessagesResponse = BaseResponse { metadata, error }
data: MessageList { id, content, created_at, 6 more }
id: string
content: MessageContent { parts }

Finalized immutable message content container. Never includes thinking parts.

parts: array of MessageContentPart
One of the following:
ContentPartText = ContentPartTextPayload { text }

Text content part.

type: "text"
ContentPartStructuredAction = ContentPartStructuredActionPayload { action, action_id, clicked, 2 more }

Structured action content part.

type: "structured_action"
ContentPartChart = ContentPartChartPayload { payload }

Chart payload content part.

type: "chart"
ContentPartSuggestedActions = ContentPartSuggestedActionsPayload { payload }

Suggested actions payload content part.

type: "suggested_actions"
ContentPartCustom = ContentPartCustomPayload { payload }

Escape-hatch custom payload content part.

type: "custom"
created_at: string

Immutable terminal outcome for a finalized assistant message.

One of the following:
"completed"
"errored"
"canceled"

Finalized message role in the public contract.

One of the following:
"USER"
"ASSISTANT"
seq: number
thread_id: string
context: optional TurnContext { items }

Immutable snapshots attached to this user message. Omitted when none were supplied. When a null/undefined value is observed, it indicates that there is no available data.

items: array of ContextItem { data, kind, label, captured_at }

One to four snapshots. Each snapshot’s data may contain at most 32 levels of nesting.

data: map[unknown]

Relevant widget data, selections, and units. Use strings for exact decimals and large IDs.

kind: string

Nonblank descriptive kind. New kinds do not require a backend release.

minLength1
label: string

Nonblank attachment label for conversation rendering.

minLength1
captured_at: optional string

Client-reported snapshot time. Omit when unknown.

formatdate-time
error: optional ErrorStatus { code, message, details }

When a null/undefined value is observed, it indicates it does not apply.

code: string
message: string
details: optional unknown

When a null/undefined value is observed, it indicates it does not apply.

ThreadCreateMessageResponse = BaseResponse { metadata, error }
data: CreateMessageResponse { 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