Skip to content
Start Trading

Omni AI

ModelsExpand Collapse
action_button: 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.

prompt: optional object { 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 object { 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.

chart_payload: 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.

prompt: optional object { 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 object { 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.

dataChart: optional object { 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.

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

prompt: optional object { 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 object { 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.

dataChart: optional object { 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.

content_part_custom_payload: object { payload }

Escape-hatch custom payload content part.

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

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 } or PrefillModifyOrderAction { 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"
PrefillModifyOrderAction: PrefillModifyOrderAction { orders }

Modify one or more existing orders.

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

Open a chart for a symbol

open_chart: object { 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.

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: object { filters, columns, item_id, 2 more }

Open a stock screener with filters

filters: array of SearchFilter { left, op, right }

Filter criteria for the screener.

left: object { name, lookback, period, value_type }

The field to filter on.

name: string

The field name.

lookback: optional "ONE_DAY" or "ONE_WEEK" or "ONE_MONTH" or 4 more

Optional historical lookback window.

"ONE_DAY"
"ONE_WEEK"
"ONE_MONTH"
"THREE_MONTHS"
"SIX_MONTHS"
"YEAR_TO_DATE"
"ONE_YEAR"
period: optional "QUARTER" or "TRAILING_TWELVE_MONTHS" or "ANNUAL"

Optional reporting period (e.g. quarter or TTM).

"QUARTER"
"TRAILING_TWELVE_MONTHS"
"ANNUAL"
value_type: optional "DECIMAL" or "INTEGER" or "STRING" or 2 more

The data type of the field value. Present only in responses.

"DECIMAL"
"INTEGER"
"STRING"
"ANALYST_RATING"
"DATE"
op: optional object { name, args }

The operator and optional arguments. Omit together with right for an unenabled filter.

name: "LESS_THAN" or "LESS_OR_EQUAL" or "GREATER_THAN" or 11 more

The operator to apply.

"LESS_THAN"
"LESS_OR_EQUAL"
"GREATER_THAN"
"GREATER_OR_EQUAL"
"EQUAL"
"BETWEEN"
"NOT_BETWEEN"
"ONE_OF"
"REGEX"
"BEGINS_WITH"
"ENDS_WITH"
"CONTAINS"
"IS_NULL"
"IS_NOT_NULL"
args: optional array of OperatorArg

Optional arguments that modify operator behavior.

"LEFT_INCLUSIVE"
"RIGHT_INCLUSIVE"
"LEFT_EXCLUSIVE"
"RIGHT_EXCLUSIVE"
"CASE_INSENSITIVE"
right: optional array of FilterValue { value, variable }

The value(s) to compare against. Omit together with op for an unenabled filter.

value: optional number or string
union_member_0: number
union_member_1: string
variable: optional object { name, lookback, modifier, period }

A variable reference.

name: string

The variable name.

lookback: optional "ONE_DAY" or "ONE_WEEK" or "ONE_MONTH" or 4 more

Optional historical lookback window.

"ONE_DAY"
"ONE_WEEK"
"ONE_MONTH"
"THREE_MONTHS"
"SIX_MONTHS"
"YEAR_TO_DATE"
"ONE_YEAR"
modifier: optional object { args, name }

Optional arithmetic modifier.

args: array of number or string
union_member_0: number
union_member_1: string
name: "ADD" or "SUBTRACT"

The modifier operation.

"ADD"
"SUBTRACT"
period: optional "QUARTER" or "TRAILING_TWELVE_MONTHS" or "ANNUAL"

Optional reporting period.

"QUARTER"
"TRAILING_TWELVE_MONTHS"
"ANNUAL"
columns: optional array of FieldRef { name, lookback, period, value_type }

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

name: string

The field name.

lookback: optional "ONE_DAY" or "ONE_WEEK" or "ONE_MONTH" or 4 more

Optional historical lookback window.

"ONE_DAY"
"ONE_WEEK"
"ONE_MONTH"
"THREE_MONTHS"
"SIX_MONTHS"
"YEAR_TO_DATE"
"ONE_YEAR"
period: optional "QUARTER" or "TRAILING_TWELVE_MONTHS" or "ANNUAL"

Optional reporting period (e.g. quarter or TTM).

"QUARTER"
"TRAILING_TWELVE_MONTHS"
"ANNUAL"
value_type: optional "DECIMAL" or "INTEGER" or "STRING" or 2 more

The data type of the field value. Present only in responses.

"DECIMAL"
"INTEGER"
"STRING"
"ANALYST_RATING"
"DATE"
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.

page_size: optional number

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

sorts: optional array of SortSpec { field, direction }

Optional sort specification. Absent means the screener’s default order. When a null/undefined value is observed, it indicates it does not apply.

field: object { name, lookback, period, value_type }

The field to sort by.

name: string

The field name.

lookback: optional "ONE_DAY" or "ONE_WEEK" or "ONE_MONTH" or 4 more

Optional historical lookback window.

"ONE_DAY"
"ONE_WEEK"
"ONE_MONTH"
"THREE_MONTHS"
"SIX_MONTHS"
"YEAR_TO_DATE"
"ONE_YEAR"
period: optional "QUARTER" or "TRAILING_TWELVE_MONTHS" or "ANNUAL"

Optional reporting period (e.g. quarter or TTM).

"QUARTER"
"TRAILING_TWELVE_MONTHS"
"ANNUAL"
value_type: optional "DECIMAL" or "INTEGER" or "STRING" or 2 more

The data type of the field value. Present only in responses.

"DECIMAL"
"INTEGER"
"STRING"
"ANALYST_RATING"
"DATE"
direction: optional "ASC" or "DESC"

Sort direction (defaults to DESC).

"ASC"
"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"

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

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.

content_part_suggested_actions_payload: object { payload }

Suggested actions payload content part.

payload: 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.

prompt: optional object { 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 object { 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.

clickedItemIds: optional array of string

IDs of buttons clicked by the current user.

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
entitlement_agreement_key: "omni_account_data_access"

Stable entitlement agreement family key.

"omni_account_data_access"
entitlement_code: "omni.account_data"

Stable entitlement code granted by an agreement.

"omni.account_data"
open_chart_action: 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.

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.

"omni_account_data_access"
"omni.account_data"

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

open_screener_action: object { filters, columns, item_id, 2 more }

Action to open a stock screener with filters.

filters, sorts and columns use the same shapes as the POST /saved-screeners request body, so a client can save the screener the user is looking at by forwarding them unchanged.

filters: array of SearchFilter { left, op, right }

Filter criteria for the screener.

left: object { name, lookback, period, value_type }

The field to filter on.

name: string

The field name.

lookback: optional "ONE_DAY" or "ONE_WEEK" or "ONE_MONTH" or 4 more

Optional historical lookback window.

"ONE_DAY"
"ONE_WEEK"
"ONE_MONTH"
"THREE_MONTHS"
"SIX_MONTHS"
"YEAR_TO_DATE"
"ONE_YEAR"
period: optional "QUARTER" or "TRAILING_TWELVE_MONTHS" or "ANNUAL"

Optional reporting period (e.g. quarter or TTM).

"QUARTER"
"TRAILING_TWELVE_MONTHS"
"ANNUAL"
value_type: optional "DECIMAL" or "INTEGER" or "STRING" or 2 more

The data type of the field value. Present only in responses.

"DECIMAL"
"INTEGER"
"STRING"
"ANALYST_RATING"
"DATE"
op: optional object { name, args }

The operator and optional arguments. Omit together with right for an unenabled filter.

name: "LESS_THAN" or "LESS_OR_EQUAL" or "GREATER_THAN" or 11 more

The operator to apply.

"LESS_THAN"
"LESS_OR_EQUAL"
"GREATER_THAN"
"GREATER_OR_EQUAL"
"EQUAL"
"BETWEEN"
"NOT_BETWEEN"
"ONE_OF"
"REGEX"
"BEGINS_WITH"
"ENDS_WITH"
"CONTAINS"
"IS_NULL"
"IS_NOT_NULL"
args: optional array of OperatorArg

Optional arguments that modify operator behavior.

"LEFT_INCLUSIVE"
"RIGHT_INCLUSIVE"
"LEFT_EXCLUSIVE"
"RIGHT_EXCLUSIVE"
"CASE_INSENSITIVE"
right: optional array of FilterValue { value, variable }

The value(s) to compare against. Omit together with op for an unenabled filter.

value: optional number or string
union_member_0: number
union_member_1: string
variable: optional object { name, lookback, modifier, period }

A variable reference.

name: string

The variable name.

lookback: optional "ONE_DAY" or "ONE_WEEK" or "ONE_MONTH" or 4 more

Optional historical lookback window.

"ONE_DAY"
"ONE_WEEK"
"ONE_MONTH"
"THREE_MONTHS"
"SIX_MONTHS"
"YEAR_TO_DATE"
"ONE_YEAR"
modifier: optional object { args, name }

Optional arithmetic modifier.

args: array of number or string
union_member_0: number
union_member_1: string
name: "ADD" or "SUBTRACT"

The modifier operation.

"ADD"
"SUBTRACT"
period: optional "QUARTER" or "TRAILING_TWELVE_MONTHS" or "ANNUAL"

Optional reporting period.

"QUARTER"
"TRAILING_TWELVE_MONTHS"
"ANNUAL"
columns: optional array of FieldRef { name, lookback, period, value_type }

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

name: string

The field name.

lookback: optional "ONE_DAY" or "ONE_WEEK" or "ONE_MONTH" or 4 more

Optional historical lookback window.

"ONE_DAY"
"ONE_WEEK"
"ONE_MONTH"
"THREE_MONTHS"
"SIX_MONTHS"
"YEAR_TO_DATE"
"ONE_YEAR"
period: optional "QUARTER" or "TRAILING_TWELVE_MONTHS" or "ANNUAL"

Optional reporting period (e.g. quarter or TTM).

"QUARTER"
"TRAILING_TWELVE_MONTHS"
"ANNUAL"
value_type: optional "DECIMAL" or "INTEGER" or "STRING" or 2 more

The data type of the field value. Present only in responses.

"DECIMAL"
"INTEGER"
"STRING"
"ANALYST_RATING"
"DATE"
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.

page_size: optional number

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

sorts: optional array of SortSpec { field, direction }

Optional sort specification. Absent means the screener’s default order. When a null/undefined value is observed, it indicates it does not apply.

field: object { name, lookback, period, value_type }

The field to sort by.

name: string

The field name.

lookback: optional "ONE_DAY" or "ONE_WEEK" or "ONE_MONTH" or 4 more

Optional historical lookback window.

"ONE_DAY"
"ONE_WEEK"
"ONE_MONTH"
"THREE_MONTHS"
"SIX_MONTHS"
"YEAR_TO_DATE"
"ONE_YEAR"
period: optional "QUARTER" or "TRAILING_TWELVE_MONTHS" or "ANNUAL"

Optional reporting period (e.g. quarter or TTM).

"QUARTER"
"TRAILING_TWELVE_MONTHS"
"ANNUAL"
value_type: optional "DECIMAL" or "INTEGER" or "STRING" or 2 more

The data type of the field value. Present only in responses.

"DECIMAL"
"INTEGER"
"STRING"
"ANALYST_RATING"
"DATE"
direction: optional "ASC" or "DESC"

Sort direction (defaults to DESC).

"ASC"
"DESC"
prefill_cancel_order_action: 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)

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.

prefill_cancel_order_request: 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)

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.

prefill_modify_order_action: 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.

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.

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 "PRICE" or "BPS"

New trailing offset type (PRICE or BPS)

"PRICE"
"BPS"
prefill_modify_order_request: 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.

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.

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 "PRICE" or "BPS"

New trailing offset type (PRICE or BPS)

"PRICE"
"BPS"
prefill_new_order_action: 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: "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"

Side of the order

"BUY"
"SELL"
time_in_force: "DAY" or "GOOD_TILL_CANCEL" or "IMMEDIATE_OR_CANCEL" or 4 more

Time in force

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

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

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

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.

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 "OPEN" or "CLOSE"

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

"OPEN"
"CLOSE"
stop_price: optional string

Stop price (required for STOP and STOP_LIMIT orders)

strategy: optional object { type } or object { type, end_at, start_at } or object { type, end_at, start_at } or object { destination, type }

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.

type: object { type }

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

type: "SOR"

Execution strategy type.

"SOR"
union_member_1: 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.

"VWAP"
end_at: optional string

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

start_at: optional string

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

union_member_2: object { type, end_at, start_at }

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

type: "TWAP"

Execution strategy type.

"TWAP"
end_at: optional string

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

start_at: optional string

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

union_member_3: 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.

"DMA"
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 "PRICE" or "BPS"

Trailing offset type (PRICE or PERCENT_BPS)

"PRICE"
"BPS"
prefill_new_order_request: object { order_type, quantity, side, 14 more }

Request to submit a new order

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"

Side of the order

"BUY"
"SELL"
time_in_force: "DAY" or "GOOD_TILL_CANCEL" or "IMMEDIATE_OR_CANCEL" or 4 more

Time in force

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

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

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

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.

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 "OPEN" or "CLOSE"

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

"OPEN"
"CLOSE"
stop_price: optional string

Stop price (required for STOP and STOP_LIMIT orders)

strategy: optional object { type } or object { type, end_at, start_at } or object { type, end_at, start_at } or object { destination, type }

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.

type: object { type }

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

type: "SOR"

Execution strategy type.

"SOR"
union_member_1: 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.

"VWAP"
end_at: optional string

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

start_at: optional string

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

union_member_2: object { type, end_at, start_at }

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

type: "TWAP"

Execution strategy type.

"TWAP"
end_at: optional string

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

start_at: optional string

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

union_member_3: 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.

"DMA"
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 "PRICE" or "BPS"

Trailing offset type (PRICE or PERCENT_BPS)

"PRICE"
"BPS"
prefill_order_action: 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.

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"
PrefillModifyOrderAction: PrefillModifyOrderAction { orders }

Modify one or more existing orders.

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

Prompt-style button behavior.

prompt: string

Prompt text to submit as the next user turn.

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 } or PrefillModifyOrderAction { 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"
PrefillModifyOrderAction: PrefillModifyOrderAction { orders }

Modify one or more existing orders.

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

Open a chart for a symbol

open_chart: object { 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.

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: object { filters, columns, item_id, 2 more }

Open a stock screener with filters

filters: array of SearchFilter { left, op, right }

Filter criteria for the screener.

left: object { name, lookback, period, value_type }

The field to filter on.

name: string

The field name.

lookback: optional "ONE_DAY" or "ONE_WEEK" or "ONE_MONTH" or 4 more

Optional historical lookback window.

"ONE_DAY"
"ONE_WEEK"
"ONE_MONTH"
"THREE_MONTHS"
"SIX_MONTHS"
"YEAR_TO_DATE"
"ONE_YEAR"
period: optional "QUARTER" or "TRAILING_TWELVE_MONTHS" or "ANNUAL"

Optional reporting period (e.g. quarter or TTM).

"QUARTER"
"TRAILING_TWELVE_MONTHS"
"ANNUAL"
value_type: optional "DECIMAL" or "INTEGER" or "STRING" or 2 more

The data type of the field value. Present only in responses.

"DECIMAL"
"INTEGER"
"STRING"
"ANALYST_RATING"
"DATE"
op: optional object { name, args }

The operator and optional arguments. Omit together with right for an unenabled filter.

name: "LESS_THAN" or "LESS_OR_EQUAL" or "GREATER_THAN" or 11 more

The operator to apply.

"LESS_THAN"
"LESS_OR_EQUAL"
"GREATER_THAN"
"GREATER_OR_EQUAL"
"EQUAL"
"BETWEEN"
"NOT_BETWEEN"
"ONE_OF"
"REGEX"
"BEGINS_WITH"
"ENDS_WITH"
"CONTAINS"
"IS_NULL"
"IS_NOT_NULL"
args: optional array of OperatorArg

Optional arguments that modify operator behavior.

"LEFT_INCLUSIVE"
"RIGHT_INCLUSIVE"
"LEFT_EXCLUSIVE"
"RIGHT_EXCLUSIVE"
"CASE_INSENSITIVE"
right: optional array of FilterValue { value, variable }

The value(s) to compare against. Omit together with op for an unenabled filter.

value: optional number or string
union_member_0: number
union_member_1: string
variable: optional object { name, lookback, modifier, period }

A variable reference.

name: string

The variable name.

lookback: optional "ONE_DAY" or "ONE_WEEK" or "ONE_MONTH" or 4 more

Optional historical lookback window.

"ONE_DAY"
"ONE_WEEK"
"ONE_MONTH"
"THREE_MONTHS"
"SIX_MONTHS"
"YEAR_TO_DATE"
"ONE_YEAR"
modifier: optional object { args, name }

Optional arithmetic modifier.

args: array of number or string
union_member_0: number
union_member_1: string
name: "ADD" or "SUBTRACT"

The modifier operation.

"ADD"
"SUBTRACT"
period: optional "QUARTER" or "TRAILING_TWELVE_MONTHS" or "ANNUAL"

Optional reporting period.

"QUARTER"
"TRAILING_TWELVE_MONTHS"
"ANNUAL"
columns: optional array of FieldRef { name, lookback, period, value_type }

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

name: string

The field name.

lookback: optional "ONE_DAY" or "ONE_WEEK" or "ONE_MONTH" or 4 more

Optional historical lookback window.

"ONE_DAY"
"ONE_WEEK"
"ONE_MONTH"
"THREE_MONTHS"
"SIX_MONTHS"
"YEAR_TO_DATE"
"ONE_YEAR"
period: optional "QUARTER" or "TRAILING_TWELVE_MONTHS" or "ANNUAL"

Optional reporting period (e.g. quarter or TTM).

"QUARTER"
"TRAILING_TWELVE_MONTHS"
"ANNUAL"
value_type: optional "DECIMAL" or "INTEGER" or "STRING" or 2 more

The data type of the field value. Present only in responses.

"DECIMAL"
"INTEGER"
"STRING"
"ANALYST_RATING"
"DATE"
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.

page_size: optional number

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

sorts: optional array of SortSpec { field, direction }

Optional sort specification. Absent means the screener’s default order. When a null/undefined value is observed, it indicates it does not apply.

field: object { name, lookback, period, value_type }

The field to sort by.

name: string

The field name.

lookback: optional "ONE_DAY" or "ONE_WEEK" or "ONE_MONTH" or 4 more

Optional historical lookback window.

"ONE_DAY"
"ONE_WEEK"
"ONE_MONTH"
"THREE_MONTHS"
"SIX_MONTHS"
"YEAR_TO_DATE"
"ONE_YEAR"
period: optional "QUARTER" or "TRAILING_TWELVE_MONTHS" or "ANNUAL"

Optional reporting period (e.g. quarter or TTM).

"QUARTER"
"TRAILING_TWELVE_MONTHS"
"ANNUAL"
value_type: optional "DECIMAL" or "INTEGER" or "STRING" or 2 more

The data type of the field value. Present only in responses.

"DECIMAL"
"INTEGER"
"STRING"
"ANALYST_RATING"
"DATE"
direction: optional "ASC" or "DESC"

Sort direction (defaults to DESC).

"ASC"
"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"

Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available 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. When a null/undefined value is observed, it indicates it does not apply.

suggested_actions_payload: 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.

prompt: optional object { 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 object { 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.

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
$ clst v1:omni-ai:entitlements get-entitlements
GET/v1/omni-ai/entitlements
Create Entitlements
$ clst v1:omni-ai:entitlements create-entitlements
POST/v1/omni-ai/entitlements
Delete Entitlement
Deprecated
$ clst v1:omni-ai:entitlements delete-entitlement
DELETE/v1/omni-ai/entitlements/{entitlement_id}
Get Entitlement Status
$ clst v1:omni-ai:entitlements get-entitlement-status
GET/v1/omni-ai/entitlement-status
Opt Out Of Entitlements
$ clst v1:omni-ai:entitlements opt-out-entitlements
POST/v1/omni-ai/entitlements/opt-out
Get Entitlement Agreements
$ clst 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_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_resource: object { account_id, agreement_id, entitlement_code, 2 more }
account_id: number
agreement_id: string
entitlement_code: "omni.account_data"

Stable entitlement code granted by an agreement.

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

Stable entitlement code granted by an agreement.

"omni.account_data"
entitlement_id: string
granted_at: string
entitlement_status_resource: 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: "omni.account_data"

Stable entitlement code granted by an agreement.

"omni.account_data"
entitlement_status_resource_list: array of EntitlementStatusResource { account_id, enabled, entitlement_code }
account_id: number
enabled: boolean
entitlement_code: "omni.account_data"

Stable entitlement code granted by an agreement.

"omni.account_data"

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
$ clst v1:omni-ai:messages get-message-by-id
GET/v1/omni-ai/messages/{message_id}
Submit Feedback
$ clst 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

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

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
$ clst v1:omni-ai:responses get-response-by-id
GET/v1/omni-ai/responses/{response_id}
Cancel Response
$ clst 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

FAILED, or execution_interrupted when Omni lost the worker running the response; partial content is kept; send the message again.

message: string
details: optional unknown

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

response: object { id, status, thread_id, 7 more }

Dynamic pollable response.

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

Dynamic lifecycle status for a pollable response.

succeeded, failed, canceled, steered and merged are terminal. steered: the response ended as written because the user sent a newer message, and a later response in the thread continues the work. merged: the response ended without text, and a later response answers its message. Treat an unknown status as terminal.

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

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

parts: array of ResponseContentPart
ContentPartText: ContentPartTextPayload { text }

Text content part.

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

Thinking content part shown on dynamic response polling.

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

Structured action content part.

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

Chart payload content part.

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

Suggested actions payload content part.

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

Escape-hatch custom payload content part.

type: "custom"
"custom"
continued_in_response_id: optional string

The response that continues the work of this response. Present only when status is steered or merged. Follow it to keep showing the answer. To stop that work, cancel it, or cancel this response: the server follows the link. When a null/undefined value is observed, it indicates it does not apply.

error: optional object { code, message, details }

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

code: string

FAILED, or execution_interrupted when Omni lost the worker running the response; partial content is kept; send the message again.

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.

output_message_seq: optional number

The seq the output message has in the thread’s message list. Present once the output message exists. Omitted while the response is queued. Use it to place a response that is still in progress among the listed messages. When a null/undefined value is observed, it indicates it does not apply.

user_message_id: optional string

The user message this response answers. Omitted when the response presents a background result, such as a subagent’s report, and answers no user message; its output message then appears in the thread without a preceding request. When a null/undefined value is observed, it indicates it does not apply.

user_message_seq: optional number

The seq the user message has in the thread’s message list. Present exactly when user_message_id is present. Use it to place the sent prompt among the listed messages before a list refresh includes it. When a null/undefined value is observed, it indicates it does not apply.

response_content: object { parts }

Dynamic response content container. May include thinking parts.

parts: array of ResponseContentPart
ContentPartText: ContentPartTextPayload { text }

Text content part.

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

Thinking content part shown on dynamic response polling.

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

Structured action content part.

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

Chart payload content part.

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

Suggested actions payload content part.

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

Escape-hatch custom payload content part.

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

Dynamic content part visible on a pollable response.

ContentPartText: ContentPartTextPayload { text }

Text content part.

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

Thinking content part shown on dynamic response polling.

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

Structured action content part.

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

Chart payload content part.

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

Suggested actions payload content part.

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

Escape-hatch custom payload content part.

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

Dynamic lifecycle status for a pollable response.

succeeded, failed, canceled, steered and merged are terminal. steered: the response ended as written because the user sent a newer message, and a later response in the thread continues the work. merged: the response ended without text, and a later response answers its message. Treat an unknown status as terminal.

"queued"
"running"
"succeeded"
"failed"
"canceled"
"steered"
"merged"

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
$ clst v1:omni-ai:threads get-threads
GET/v1/omni-ai/threads
Get Thread
$ clst v1:omni-ai:threads get-thread-by-id
GET/v1/omni-ai/threads/{thread_id}
Create Thread
$ clst v1:omni-ai:threads create-thread
POST/v1/omni-ai/threads
Get Thread Response
$ clst v1:omni-ai:threads get-thread-response
GET/v1/omni-ai/threads/{thread_id}/response
Get Messages
$ clst v1:omni-ai:threads get-messages
GET/v1/omni-ai/threads/{thread_id}/messages
Create Message
$ clst v1:omni-ai:threads create-message
POST/v1/omni-ai/threads/{thread_id}/messages
ModelsExpand Collapse
context_item: 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.

label: string

Nonblank attachment label for conversation rendering.

captured_at: optional string

Client-reported snapshot time. Omit when unknown.

create_message_response: object { response_id, thread_id, user_message_id, user_message_seq }

Response payload for continuing a thread with a new message.

response_id: string
thread_id: string
user_message_id: string
user_message_seq: number

The seq the user message has in the thread’s message list. Always present. Use it to place the sent prompt among the listed messages before a list refresh includes it.

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

Response payload for thread creation.

response_id: string
thread_id: string
user_message_id: string
user_message_seq: number

The seq the user message has in the thread’s message list. Always present. Use it to place the sent prompt among the listed messages before a list refresh includes it.

message: object { id, content, created_at, 6 more }

Final immutable message.

id: string
content: object { parts }

Finalized immutable message content container. Never includes thinking parts.

parts: array of MessageContentPart
ContentPartText: ContentPartTextPayload { text }

Text content part.

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

Structured action content part.

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

Chart payload content part.

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

Suggested actions payload content part.

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

Escape-hatch custom payload content part.

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

Immutable terminal outcome for a finalized assistant message.

steered: the message is complete as written; the user sent a newer message before it finished. merged: the message has no content, and a later answer covers its turn. Hide merged messages.

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

Finalized message role in the public contract.

"USER"
"ASSISTANT"
seq: number
thread_id: string
context: optional object { 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.

label: string

Nonblank attachment label for conversation rendering.

captured_at: optional string

Client-reported snapshot time. Omit when unknown.

error: optional object { code, message, details }

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

code: string

FAILED, or execution_interrupted when Omni lost the worker running the response; partial content is kept; send the message again.

message: string
details: optional unknown

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

message_content: object { parts }

Finalized immutable message content container. Never includes thinking parts.

parts: array of MessageContentPart
ContentPartText: ContentPartTextPayload { text }

Text content part.

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

Structured action content part.

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

Chart payload content part.

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

Suggested actions payload content part.

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

Escape-hatch custom payload content part.

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

Final immutable content part visible on persisted messages.

ContentPartText: ContentPartTextPayload { text }

Text content part.

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

Structured action content part.

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

Chart payload content part.

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

Suggested actions payload content part.

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

Escape-hatch custom payload content part.

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

Finalized immutable message content container. Never includes thinking parts.

parts: array of MessageContentPart
ContentPartText: ContentPartTextPayload { text }

Text content part.

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

Structured action content part.

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

Chart payload content part.

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

Suggested actions payload content part.

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

Escape-hatch custom payload content part.

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

Immutable terminal outcome for a finalized assistant message.

steered: the message is complete as written; the user sent a newer message before it finished. merged: the message has no content, and a later answer covers its turn. Hide merged messages.

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

Finalized message role in the public contract.

"USER"
"ASSISTANT"
seq: number
thread_id: string
context: optional object { 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.

label: string

Nonblank attachment label for conversation rendering.

captured_at: optional string

Client-reported snapshot time. Omit when unknown.

error: optional object { code, message, details }

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

code: string

FAILED, or execution_interrupted when Omni lost the worker running the response; partial content is kept; send the message again.

message: string
details: optional unknown

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

message_outcome: "completed" or "errored" or "canceled" or 2 more

Immutable terminal outcome for a finalized assistant message.

steered: the message is complete as written; the user sent a newer message before it finished. merged: the message has no content, and a later answer covers its turn. Hide merged messages.

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

Finalized message role in the public contract.

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

thread_list: 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.

turn_context: 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.

label: string

Nonblank attachment label for conversation rendering.

captured_at: optional string

Client-reported snapshot time. Omit when unknown.