# yamllint disable rule:line-length --- openapi: 3.1.0 info: title: Clear Street Trading API description: |- A unified, secure, and high-performance RESTful API for all client interactions with the Active trading platform. This specification provides a single source of truth for the API surface, covering order management, trade execution, market data, and account services. ### Authentication All endpoints require authentication via a JWT Bearer token provided in the `Authorization` header. ### Response Structure All responses, both for success and error, adhere to a standard envelope structure: - `data`: Contains the response payload on success, or `null` on error. - `error`: Contains a structured error object on failure, or `null` on success. - `metadata`: Contains the `request_id` and pagination information. ### WebSockets Real-time market data is available via WebSocket connections, which are not formally described in this OpenAPI specification. The following operations are available: - `market-data-l1-subscribe`: To start receiving L1 market data updates for a set of symbols. - `market-data-l1-unsubscribe`: To stop receiving L1 market data updates. contact: name: Clear Street API Support url: https://clearstreet.io/contact email: api-support@clearstreet.io license: name: Proprietary url: https://clearstreet.io/terms version: 2025-10-31 servers: - url: https://api.clearstreet.com description: Clear Street API - url: https://api-dev.clearstreet.com description: Clear Street Development API - url: http://localhost:5001 description: Clear Street Local API paths: /v1/accounts: get: tags: - Accounts summary: Get Accounts description: |- List accounts the authenticated user has permission to access. Results can be narrowed with the optional `account_id` and `account_name` filters. `account_id` is a lexicographic prefix match on the decimal account id (e.g. `100` matches `100345` and `100567`); `account_name` is a case-insensitive substring match on the account's full name. When both are supplied an account must match both. When neither is supplied every accessible account is returned. operationId: get_accounts parameters: - name: page_size in: query description: The number of items to return per page. Only used when page_token is not provided. required: false schema: type: integer format: int64 default: 1000 maximum: 1000 minimum: 1 - name: page_token in: query description: Token for retrieving the next or previous page of results. Contains encoded pagination state; when provided, page_size is ignored. required: false schema: type: string format: byte description: Base64URL-encoded pagination token example: eyJvZmZzZXQiOjEwMCwibGltaXQiOjEwMH0= - name: account_id in: query description: Filter to accounts whose id starts with this value (lexicographic prefix match on the decimal id, e.g. `100` matches `100345`). required: false schema: type: string - name: account_name in: query description: Filter to accounts whose full name contains this value (case-insensitive substring match). required: false schema: type: string responses: "200": description: List of accounts content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/AccountList" type: object examples: ActiveAndInactiveAccounts: summary: A mix of active and closed accounts value: data: - account_holder_entity_id: 987654321 close_date: null full_name: Test Trading Account id: 19816 open_date: 2023-01-15 options_level: 1 short_name: TST-ACCOUNT-01 status: ACTIVE subtype: MARGIN type: CUSTOMER - account_holder_entity_id: 987654322 close_date: 2024-08-01 full_name: Old Test Account id: 19817 open_date: 2021-05-20 options_level: 0 short_name: TST-ACCOUNT-02-CLOSED status: CLOSED subtype: CASH type: CUSTOMER error: null metadata: next_page_token: cGFnZT0yJmxhc3RfaWQ9MTk4MTc= page_number: 1 request_id: a1b2c3d4-e5f6-7890-1234-567890abcdef total_items: 25 total_pages: 3 "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: Forbidden: summary: Caller does not have permission value: error: code: 403 message: The caller does not have permission to execute the specified operation metadata: request_id: 5518f0c6-58ff-4b4a-81a5-701556d41206 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/accounts/{account_id}: get: tags: - Accounts summary: Get Account By ID description: Fetch account details by ID operationId: get_account_by_id parameters: - name: account_id in: path description: Account identifier required: true schema: $ref: "#/components/schemas/i64" responses: "200": description: Account details content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/Account" type: object examples: ActiveAccount: summary: An active margin account value: data: account_holder_entity_id: 987654321 close_date: null full_name: Test Trading Account id: 19816 open_date: 2023-01-15 options_level: 1 short_name: TST-ACCOUNT-01 status: ACTIVE subtype: MARGIN type: CUSTOMER error: null metadata: request_id: b7e2d3f4-a1b2-4c3d-8e4f-5a6b7c8d9e0f ClosedAccount: summary: A closed cash account value: data: account_holder_entity_id: 987654322 close_date: 2024-08-01 full_name: Old Test Account id: 19817 open_date: 2021-05-20 options_level: 0 short_name: TST-ACCOUNT-02-CLOSED status: CLOSED subtype: CASH type: CUSTOMER error: null metadata: request_id: c8f3e4a5-b2c3-5d4e-9f0a-6b7c8d9e0f1a "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: Forbidden: summary: Caller does not have permission value: error: code: 403 message: The caller does not have permission to execute the specified operation metadata: request_id: 5518f0c6-58ff-4b4a-81a5-701556d41206 "404": description: Account not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: AccountNotFound: summary: Requested account does not exist value: error: code: 404 message: Some requested entity was not found metadata: request_id: 67e95eb4-93b9-4010-8c9b-7ada7c2be93f "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" patch: tags: - Accounts summary: Patch Account By ID description: Update account risk settings operationId: patch_account_by_id parameters: - name: account_id in: path description: Account identifier required: true schema: $ref: "#/components/schemas/i64" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateAccountSettingsRequest" required: true responses: "200": description: Account updated successfully content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/AccountSettings" type: object examples: UpdatedAccountSettings: summary: Account with updated settings applied value: data: risk: max_notional: "5000000.00" error: null metadata: request_id: c8f3e4a5-b2c3-5d4e-9f0a-6b7c8d9e0f1a "400": description: Invalid request content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: MalformedJsonSyntax: summary: Malformed JSON in request body value: error: code: 400 message: "Failed to parse the request body as JSON: EOF while parsing an object at line 5 column 3" metadata: request_id: 5805829b-238e-4669-846b-d768bc5d279c "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: Forbidden: summary: Caller does not have permission value: error: code: 403 message: The caller does not have permission to execute the specified operation metadata: request_id: 5518f0c6-58ff-4b4a-81a5-701556d41206 "404": description: Account not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: AccountNotFound: summary: Requested account does not exist value: error: code: 404 message: Some requested entity was not found metadata: request_id: 67e95eb4-93b9-4010-8c9b-7ada7c2be93f "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/accounts/{account_id}/balances: get: tags: - Accounts summary: Get Account Balances description: Fetch account balance information operationId: get_account_balances parameters: - name: account_id in: path description: Account identifier required: true schema: $ref: "#/components/schemas/i64" - name: top_margin_contributors_limit in: query description: Limit the number of top margin contributors returned. required: false schema: type: integer format: int32 minimum: 1 example: 10 responses: "200": description: Account balance information content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/AccountBalances" type: object examples: CashAccountBalances: summary: Balances for a cash account value: data: account_id: 19816 buying_power: "45000.00" currency: USD daily_change: "0.00" daily_pnl: "1250.00" daily_realized_pnl: "700.00" daily_total_pnl: "1250.00" daily_unrealized_pnl: "550.00" equity: "100000.00" long_market_value: "30000.00" margin_type: NONE open_order_adjustment: "-5000.00" settled_cash: "60000.00" sod: asof: 2023-09-27 buying_power: "45000.00" equity: "100000.00" long_market_value: "30000.00" short_market_value: "0.00" trade_cash: "60000.00" unrealized_pnl: "1500.00" unsettled_credits: "20000.00" unsettled_debits: "10000.00" withdrawable_cash: "55000.00" error: null metadata: request_id: b7e2d3f4-a1b2-4c3d-8e4f-5a6b7c8d9e0f MarginAccountBalances: summary: Balances for a Reg T margin account value: data: account_id: 19816 buying_power: "90000.00" currency: USD daily_change: "0.00" daily_pnl: "1250.00" daily_realized_pnl: "700.00" daily_total_pnl: "1250.00" daily_unrealized_pnl: "550.00" equity: "100000.00" long_market_value: "40000.00" margin_details: day_trade_buying_power_usage: "0.00" day_trade_count: 2 initial_margin_excess: "50000.00" initial_margin_requirement: "50000.00" intraday_details: buying_power: "90000.00" multiplier: "2" maintenance_margin_excess: "75000.00" maintenance_margin_requirement: "25000.00" overnight_details: buying_power: "90000.00" multiplier: "2" pattern_day_trader: false top_contributors: - initial_margin_requirement: "25000.00" maintenance_margin_requirement: "15000.00" market_value: "50000.00" underlying_instrument_id: a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8 usage: total: "100000.00" used: "5000.00" margin_type: REG_T multiplier: "2" open_order_adjustment: "-10000.00" settled_cash: "99775.05" short_market_value: "10000.00" sod: asof: 2023-09-27 buying_power: "90000.00" day_trade_buying_power: "200000.00" equity: "100000.00" long_market_value: "40000.00" maintenance_margin_excess: "50000.00" maintenance_margin_requirement: "50000.00" short_market_value: "10000.00" trade_cash: "70000.00" trade_cash: "70000.00" unrealized_pnl: "1500.00" unsettled_credits: "20000.00" unsettled_debits: "10000.00" withdrawable_cash: "75000.00" error: null metadata: request_id: b7e2d3f4-a1b2-4c3d-8e4f-5a6b7c8d9e0f "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: Forbidden: summary: Caller does not have permission value: error: code: 403 message: The caller does not have permission to execute the specified operation metadata: request_id: 5518f0c6-58ff-4b4a-81a5-701556d41206 "404": description: Account not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: AccountNotFound: summary: Requested account does not exist value: error: code: 404 message: Some requested entity was not found metadata: request_id: 67e95eb4-93b9-4010-8c9b-7ada7c2be93f "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/accounts/{account_id}/executions: get: tags: - Orders summary: Get Executions description: |- Retrieves filled and partially-filled execution reports for the specified trading account, ordered by transaction time (nanosecond precision) descending. operationId: get_executions parameters: - name: account_id in: path description: Account identifier required: true schema: $ref: "#/components/schemas/i64" - name: instrument_id in: query description: Optional instrument to filter by. Accepts either a symbol (e.g. `AAPL`) or an instrument identifier. required: false schema: $ref: "#/components/schemas/InstrumentIdOrSymbol" - name: page_size in: query description: The number of items to return per page. Only used when page_token is not provided. required: false schema: type: integer format: int64 default: 1000 maximum: 1000 minimum: 1 - name: page_token in: query description: Token for retrieving the next or previous page of results. Contains encoded pagination state; when provided, page_size is ignored. required: false schema: type: string format: byte description: Base64URL-encoded pagination token example: eyJvZmZzZXQiOjEwMCwibGltaXQiOjEwMH0= - name: from in: query description: The start date and time for the query range, inclusive (ISO 8601 format) required: false schema: type: string format: date-time example: 2025-04-24T14:30:00.000000000Z - name: to in: query description: The end date and time for the query range, inclusive (ISO 8601 format) required: false schema: type: string format: date-time example: 2025-04-24T18:30:00.000000000Z responses: "200": description: List of executions content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/ExecutionList" type: object "400": description: Invalid request parameters content: application/json: schema: $ref: "#/components/schemas/ApiError" "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/accounts/{account_id}/orders: get: tags: - Orders summary: Get Orders description: List orders for an account with optional filtering operationId: get_orders parameters: - name: account_id in: path description: Account identifier required: true schema: $ref: "#/components/schemas/i64" - name: page_size in: query description: The number of items to return per page. Only used when page_token is not provided. required: false schema: type: integer format: int64 default: 1000 maximum: 1000 minimum: 1 - name: page_token in: query description: Token for retrieving the next or previous page of results. Contains encoded pagination state; when provided, page_size is ignored. required: false schema: type: string format: byte description: Base64URL-encoded pagination token example: eyJvZmZzZXQiOjEwMCwibGltaXQiOjEwMH0= - name: order_ids in: query description: Comma-separated order IDs to filter by. When provided, only orders whose order ID is in this set are returned. required: false schema: type: array items: type: string style: form explode: false - name: status in: query description: Comma-separated order statuses to filter by required: false schema: type: array items: type: string description: Order status enum: - PENDING_NEW - NEW - PARTIALLY_FILLED - FILLED - CANCELED - REJECTED - EXPIRED - PENDING_CANCEL - PENDING_REPLACE - REPLACED - DONE_FOR_DAY - STOPPED - SUSPENDED - CALCULATED - OTHER style: form explode: false - name: symbol in: query description: Filter by symbol required: false schema: type: string - name: instrument_ids in: query description: Comma-separated instrument identifiers required: false schema: type: array items: type: string format: uuid style: form explode: false - name: instrument_type in: query description: Instrument type filter (e.g., COMMON_STOCK, OPTION) required: false schema: type: string description: Security type enum: - COMMON_STOCK - OPTION - CASH - name: underlying_instrument_ids in: query description: Comma-separated instrument identifiers. Matches options orders whose resolved underlier is any of the given IDs. required: false schema: type: array items: type: string format: uuid style: form explode: false - name: from in: query description: The start date and time for the query range, inclusive (ISO 8601 format) required: false schema: type: string format: date-time example: 2025-04-24T14:30:00.000000000Z - name: to in: query description: The end date and time for the query range, inclusive (ISO 8601 format) required: false schema: type: string format: date-time example: 2025-04-24T18:30:00.000000000Z responses: "200": description: List of orders content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/OrderList" type: object examples: ListOfOrders: summary: A list of orders with various statuses value: data: - account_id: 19816 average_fill_price: "47.95" client_order_id: my-ref-id-20251001-001 created_at: 2025-10-31T13:30:00.000000000Z filled_quantity: "5" id: 0195f6c7-4f64-7e3c-8b0a-1d8e4f5e6a7b instrument_id: d4d5d6d7-e4e5-f4f5-a4a5-a6a7a8a9aaab instrument_type: COMMON_STOCK leaves_quantity: "5" limit_price: "48.00" order_type: LIMIT quantity: "10" side: BUY status: PARTIALLY_FILLED stop_price: null symbol: TSLA time_in_force: DAY updated_at: 2025-10-31T13:35:10.000000000Z venue: XNAS - account_id: 19816 average_fill_price: "50.03" client_order_id: my-ref-id-20251001-002 created_at: 2025-10-31T14:00:00.000000000Z filled_quantity: "10" id: 0195f6c8-1a2b-7c3d-8e4f-5a6b7c8d9e0f instrument_id: d4d5d6d7-e4e5-f4f5-a4a5-a6a7a8a9aaab instrument_type: COMMON_STOCK leaves_quantity: "0" limit_price: null order_type: MARKET quantity: "10" side: SELL status: FILLED stop_price: null symbol: TSLA time_in_force: DAY updated_at: 2025-10-31T14:00:05.000000000Z venue: XNAS error: null metadata: next_page_token: cGFnZT0yJmxhc3RfaWQ9b3JkXzRjRDVlNkY3ZzhIOWkwSjE= page_number: 1 request_id: d9a4f5b6-c3d4-6e5f-0a1b-7c8d9e0f1a2b total_items: 25 total_pages: 3 "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: Forbidden: summary: Caller does not have permission value: error: code: 403 message: The caller does not have permission to execute the specified operation metadata: request_id: 5518f0c6-58ff-4b4a-81a5-701556d41206 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" post: tags: - Orders summary: Submit Orders description: Submit new orders operationId: submit_orders parameters: - name: account_id in: path description: Account identifier required: true schema: $ref: "#/components/schemas/i64" requestBody: content: application/json: schema: type: array items: $ref: "#/components/schemas/OrderSubmissionRequest" examples: LimitBuy: summary: Limit buy order value: - limit_price: "48.00" order_type: LIMIT quantity: "1" side: BUY symbol: TSLA time_in_force: DAY MarketBuy: summary: Market buy order value: - order_type: MARKET quantity: "1" side: BUY symbol: TSLA time_in_force: DAY StopBuy: summary: Stop (market) buy order value: - order_type: STOP quantity: "1" side: BUY stop_price: "52.00" symbol: TSLA time_in_force: DAY StopLimitBuy: summary: Stop-limit buy order value: - limit_price: "52.50" order_type: STOP_LIMIT quantity: "1" side: BUY stop_price: "52.00" symbol: TSLA time_in_force: DAY TrailingStopBps: summary: Trailing stop order with basis-point offset value: - order_type: TRAILING_STOP quantity: "1" side: BUY symbol: TSLA time_in_force: DAY trailing_offset: "115" trailing_offset_type: BPS TrailingStopLimitWithLimitOffset: summary: Trailing stop-limit order with a limit offset value: - limit_offset: "0.50" order_type: TRAILING_STOP_LIMIT quantity: "1" side: BUY symbol: TSLA time_in_force: DAY trailing_offset: "2.00" trailing_offset_type: PRICE TrailingStopLimitWithLimitPrice: summary: Trailing stop-limit order with an explicit limit price value: - limit_price: "49.50" order_type: TRAILING_STOP_LIMIT quantity: "1" side: BUY symbol: TSLA time_in_force: DAY trailing_offset: "2.00" trailing_offset_type: PRICE TrailingStopPrice: summary: Trailing stop order with absolute price offset value: - order_type: TRAILING_STOP quantity: "1" side: BUY symbol: TSLA time_in_force: DAY trailing_offset: "2.00" trailing_offset_type: PRICE required: true responses: "200": description: Orders submitted successfully content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/OrderList" type: object examples: FullSuccess: summary: Order accepted and pending value: data: - account_id: 19816 client_order_id: my-ref-id-20251003-001 created_at: 2025-10-03T14:01:15.000000000Z filled_quantity: "0" id: 0195f6d0-a1b2-7c3d-8e4f-5a6b7c8d9e01 instrument_id: d4d5d6d7-e4e5-f4f5-a4a5-a6a7a8a9aaab instrument_type: COMMON_STOCK leaves_quantity: "1" order_type: MARKET quantity: "1" side: BUY status: PENDING_NEW symbol: TSLA time_in_force: DAY updated_at: 2025-10-03T14:01:15.000000000Z venue: XNAS error: null metadata: request_id: ea0b1c2d-3e4f-5a6b-7c8d-9e0f1a2b3c4d "400": description: Invalid order request content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: MalformedJsonSyntax: summary: Malformed JSON in request body value: error: code: 400 message: "Failed to parse the request body as JSON: [0].?: expected `,` or `}` at line 11 column 3" metadata: request_id: 8cb2657f-828e-4af5-b7d0-5cc6b7354bc2 NoBuyingPower: summary: Order rejected due to insufficient buying power value: error: code: 400 details: - description: "Buying Power: required > available" subject: order:019dba52-6611-7b53-9bc9-18c410e5ebb8 type: BUYING_POWER - domain: com.clearstreet.oems.risk metadata: account_id: "100001" account_type: margin_reg_t available: "11004.5000" multiplier: "2" order_id: 019dba52-6611-7b53-9bc9-18c410e5ebb8 required_equity: "30000" required_options: "0" required_total: "30000" side: Buy symbol: AAPL reason: BUYING_POWER message: Risk check failed metadata: request_id: 00bf689a-f53d-47b7-8b73-f0e69d2e89b6 RiskCheckSelfMatch: summary: Order rejected due to self-match risk check value: error: code: 400 details: - description: "Self-Match: would cross own orders" subject: order:019dba51-a906-7133-aacc-ea4fc05058d8 type: SELF_MATCH - domain: com.clearstreet.oems.risk metadata: account_id: "100001" order_id: 019dba51-a906-7133-aacc-ea4fc05058d8 price: $200 side: Sell symbol: AAPL reason: SELF_MATCH message: Risk check failed metadata: request_id: 21b77c52-2386-40a4-8955-8fa1127ff424 "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: Forbidden: summary: Caller does not have permission value: error: code: 403 message: The caller does not have permission to execute the specified operation metadata: request_id: 5518f0c6-58ff-4b4a-81a5-701556d41206 "422": description: Malformed order request payload content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: PayloadMissingRequiredField: summary: Malformed multileg order payload missing order_type value: error: code: 422 message: "Failed to deserialize the JSON body into the target type: [0]: missing field `order_type` at line 26 column 1" metadata: request_id: 1b2c02c3-92a1-4432-8638-e71038c105c3 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" delete: tags: - Orders summary: Cancel All Open Orders description: Cancel all orders for an account operationId: cancel_all_open_orders parameters: - name: account_id in: path description: Account identifier required: true schema: $ref: "#/components/schemas/i64" - name: side in: query description: Filter by order side (BUY or SELL) required: false schema: type: string description: Side of an order enum: - BUY - SELL - SELL_SHORT - OTHER - name: type in: query description: Filter by order type (e.g., MARKET, LIMIT) required: false schema: type: string description: Order type enum: - MARKET - LIMIT - STOP - STOP_LIMIT - TRAILING_STOP - TRAILING_STOP_LIMIT - OTHER - name: instrument_type in: query description: Filter by instrument type (e.g., COMMON_STOCK, OPTION) required: false schema: type: string description: Security type enum: - COMMON_STOCK - OPTION - CASH - name: instrument_ids in: query description: Comma-separated instrument identifiers required: false schema: type: array items: type: string format: uuid style: form explode: false responses: "200": description: Orders cancelled content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/OrderList" type: object examples: BulkCancelAccepted: summary: Cancellation requests accepted for multiple orders value: data: - account_id: 19816 average_fill_price: "47.95" client_order_id: my-ref-id-20251031-001 created_at: 2025-10-31T13:30:00.000000000Z filled_quantity: "5" id: 019c0b48-b8fb-700d-8c5e-931d54555f54 instrument_id: d4d5d6d7-e4e5-f4f5-a4a5-a6a7a8a9aaab instrument_type: COMMON_STOCK leaves_quantity: "5" limit_price: "48.00" order_type: LIMIT quantity: "10" side: BUY status: PENDING_CANCEL stop_price: null symbol: TSLA time_in_force: DAY updated_at: 2025-10-31T14:15:00.000000000Z venue: XNAS - account_id: 19816 client_order_id: my-ref-id-20251031-002 created_at: 2025-10-31T14:00:00.000000000Z filled_quantity: "0" id: 019c0b49-03af-70d1-8eeb-d69836c9840b instrument_id: d4d5d6d7-e4e5-f4f5-a4a5-a6a7a8a9aaab instrument_type: COMMON_STOCK leaves_quantity: "5" order_type: STOP quantity: "5" side: SELL status: PENDING_CANCEL stop_price: "47.00" symbol: TSLA time_in_force: DAY updated_at: 2025-10-31T14:15:00.000000000Z venue: XNAS error: null metadata: request_id: fb1c2d3e-4f5a-6b7c-8d9e-0f1a2b3c4d5e "400": description: Invalid filter parameters content: application/json: schema: $ref: "#/components/schemas/ApiError" "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: Forbidden: summary: Caller does not have permission value: error: code: 403 message: The caller does not have permission to execute the specified operation metadata: request_id: 5518f0c6-58ff-4b4a-81a5-701556d41206 "404": description: No orders match the specified filters content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: NoOrdersMatchFilters: summary: No open orders matched the provided filters value: error: code: 404 message: No orders match the specified filters metadata: request_id: 2f035fbb-68ba-42e9-8743-d3b21110b4c7 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/accounts/{account_id}/orders/{order_id}: get: tags: - Orders summary: Get Order By ID operationId: get_order_by_id parameters: - name: account_id in: path description: Account identifier required: true schema: $ref: "#/components/schemas/i64" - name: order_id in: path description: Order identifier required: true schema: type: string responses: "200": description: Order details content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/Order" type: object examples: PartiallyFilledLimitOrder: summary: A partially filled limit order value: data: account_id: 19816 average_fill_price: "47.95" client_order_id: my-ref-id-20251001-001 created_at: 2025-10-31T13:30:00.000000000Z filled_quantity: "5" id: 0195f6c7-4f64-7e3c-8b0a-1d8e4f5e6a7b instrument_id: d4d5d6d7-e4e5-f4f5-a4a5-a6a7a8a9aaab instrument_type: COMMON_STOCK leaves_quantity: "5" limit_price: "48.00" order_type: LIMIT quantity: "10" side: BUY status: PARTIALLY_FILLED stop_price: null symbol: TSLA time_in_force: DAY updated_at: 2025-10-31T13:35:10.000000000Z venue: XNAS error: null metadata: request_id: 0c1d2e3f-4a5b-6c7d-8e9f-0a1b2c3d4e5f "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: Forbidden: summary: Caller does not have permission value: error: code: 403 message: The caller does not have permission to execute the specified operation metadata: request_id: 5518f0c6-58ff-4b4a-81a5-701556d41206 "404": description: Order not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: OrderNotFoundById: summary: Requested order was not found for the account value: error: code: 404 message: Order 97dfdcfe503f425c8367ca10928e2499 not found for account 100001 metadata: request_id: efbd46f4-4bfc-455b-bae0-ee13f84360ba "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" delete: tags: - Orders summary: Cancel Open Order description: Cancel a specific order operationId: cancel_open_order parameters: - name: account_id in: path description: Account identifier required: true schema: $ref: "#/components/schemas/i64" - name: order_id in: path description: Order identifier required: true schema: type: string responses: "200": description: Order cancelled successfully content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/Order" type: object examples: CancelPending: summary: Cancellation request acknowledged and pending value: data: account_id: 19816 average_fill_price: "47.95" client_order_id: my-ref-id-20251001-001 created_at: 2025-10-31T13:30:00.000000000Z filled_quantity: "5" id: d40a92e6-381f-4803-b292-56d350d9d54a instrument_id: d4d5d6d7-e4e5-f4f5-a4a5-a6a7a8a9aaab instrument_type: COMMON_STOCK leaves_quantity: "5" limit_price: "48.00" order_type: LIMIT quantity: "10" side: BUY status: PENDING_CANCEL stop_price: null symbol: TSLA time_in_force: DAY updated_at: 2025-10-31T14:15:00.000000000Z venue: XNAS error: null metadata: request_id: 2e3f4a5b-6c7d-8e9f-0a1b-2c3d4e5f6a7b "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: Forbidden: summary: Caller does not have permission value: error: code: 403 message: The caller does not have permission to execute the specified operation metadata: request_id: 5518f0c6-58ff-4b4a-81a5-701556d41206 "404": description: Order not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: OrderNotFoundForCancel: summary: Cancel target order was not found for the account value: error: code: 404 message: Order d40a92e6-381f-4803-b292-56d350d9d54a not found for account 100001 metadata: request_id: 70151ee4-5209-4c75-9372-dffc0a6ebade "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" patch: tags: - Orders summary: Replace Order description: Replace an order with new parameters operationId: replace_order parameters: - name: account_id in: path description: Account identifier required: true schema: $ref: "#/components/schemas/i64" - name: order_id in: path description: Order identifier required: true schema: type: string requestBody: content: application/json: schema: $ref: "#/components/schemas/ReplaceOrderRequest" required: true responses: "200": description: Order replaced successfully content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/Order" type: object examples: ReplacePending: summary: Replacement order acknowledged and pending value: data: account_id: 19816 client_order_id: my-ref-id-20251001-001 created_at: 2025-10-31T13:30:00.000000000Z filled_quantity: "0" id: 0195f6c7-4f64-7e3c-8b0a-1d8e4f5e6a7b instrument_id: d4d5d6d7-e4e5-f4f5-a4a5-a6a7a8a9aaab instrument_type: COMMON_STOCK leaves_quantity: "10" limit_price: "49.00" order_type: LIMIT quantity: "10" side: BUY status: PENDING_REPLACE stop_price: null symbol: TSLA time_in_force: DAY updated_at: 2025-10-31T14:10:00.000000000Z venue: XNAS error: null metadata: request_id: 1d2e3f4a-5b6c-7d8e-9f0a-1b2c3d4e5f6a "400": description: Invalid replacement request content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: MalformedJsonSyntax: summary: Malformed JSON in request body value: error: code: 400 message: "Failed to parse the request body as JSON: expected `:` at line 2 column 14" metadata: request_id: 633c15ef-d2e7-4f27-b905-2819455248bb "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: Forbidden: summary: Caller does not have permission value: error: code: 403 message: The caller does not have permission to execute the specified operation metadata: request_id: 5518f0c6-58ff-4b4a-81a5-701556d41206 "404": description: Order not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: OrderNotFoundForReplacement: summary: Replacement target order was not found for the account value: error: code: 404 message: Order 019c7b89-feea-7600-9e56-f15ef0557835 not found for account 100001 metadata: request_id: 9e290ec2-378f-4d08-a729-0a9ab155acbf "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/accounts/{account_id}/portfolio-history: get: tags: - Accounts summary: Get Portfolio History description: Retrieves daily portfolio history for the specified account. operationId: get_portfolio_history parameters: - name: account_id in: path description: Account identifier required: true schema: type: integer format: int64 - name: start_date in: query description: Start date for the portfolio history range, in YYYY-MM-DD format. required: true schema: type: string format: date - name: end_date in: query description: Defaults to today in America/New_York when omitted. required: false schema: type: string format: date responses: "200": description: Portfolio history content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/PortfolioHistoryResponse" type: object examples: PortfolioHistoryWithItems: summary: Portfolio history with segments value: data: segments: - bought_notional: "39800.00" date: 2026-04-15 day_pnl: "850.25" eod_equity: "100850.25" net_pnl: "850.25" position_pnl: "-350.25" realized_pnl: "1200.50" sod_equity: "100000.00" sold_notional: "42500.00" unrealized_pnl: "-350.25" error: null metadata: request_id: f076d6f6-10c9-42a0-98c5-18cebc427e80 "207": description: "Partial success: some data is available but the full request could not be completed" content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/PortfolioHistoryResponse" type: object examples: HistoryFailedIntradayOk: summary: Historical fetch failed but intraday segment is available value: data: segments: - bought_notional: null date: 2026-05-12 day_pnl: null eod_equity: "100009.00" net_pnl: null position_pnl: null realized_pnl: "12.00" sod_equity: "100000.00" sold_notional: null unrealized_pnl: "-3.00" error: code: 500 message: historical data temporarily unavailable metadata: request_id: 2f3d7b0a-1111-4a4b-9e1f-8c4e5d3a9f12 "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: Forbidden: summary: Caller does not have permission value: error: code: 403 message: The caller does not have permission to execute the specified operation metadata: request_id: 5518f0c6-58ff-4b4a-81a5-701556d41206 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/accounts/{account_id}/positions: get: tags: - Positions summary: Get Positions description: Retrieves all positions for the specified trading account. operationId: get_positions parameters: - name: account_id in: path description: Account identifier required: true schema: $ref: "#/components/schemas/i64" - name: page_size in: query description: The number of items to return per page. Only used when page_token is not provided. required: false schema: type: integer format: int64 default: 1000 maximum: 1000 minimum: 1 - name: page_token in: query description: Token for retrieving the next or previous page of results. Contains encoded pagination state; when provided, page_size is ignored. required: false schema: type: string format: byte description: Base64URL-encoded pagination token example: eyJvZmZzZXQiOjEwMCwibGltaXQiOjEwMH0= - name: instrument_ids in: query description: Comma-separated instrument identifiers required: false schema: type: array items: type: string format: uuid style: form explode: false - name: sort_by in: query description: Field to sort by required: false schema: type: string enum: - SYMBOL - INSTRUMENT_TYPE - QUANTITY - MARKET_VALUE - POSITION_TYPE - UNREALIZED_PNL - DAILY_UNREALIZED_PNL - DAILY_REALIZED_PNL - name: sort_direction in: query description: Sort direction required: false schema: type: string description: Sort direction sorted results enum: - ASC - DESC responses: "200": description: List of positions content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/PositionList" type: object examples: LongAndShortPositions: summary: A list containing long equity, short equity, and long call option positions with all fields populated value: data: - account_id: 19816 available_quantity: "100" avg_price: "145.00" closing_price: "150.50" closing_price_date: 2025-10-31 cost_basis: "14500.00" daily_realized_pnl: "700.00" instrument_id: a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8 instrument_price: "151.00" instrument_type: COMMON_STOCK market_value: "15050.00" position_type: LONG quantity: "100" symbol: AAPL unrealized_pnl: "550.00" - account_id: 19816 available_quantity: "100" avg_price: "180.00" closing_price: "180.00" closing_price_date: 2025-10-30 cost_basis: "-9000.00" daily_realized_pnl: "25.00" instrument_id: d4d5d6d7-e4e5-f4f5-a4a5-a6a7a8a9aaab instrument_price: "178.50" instrument_type: COMMON_STOCK market_value: "-9000.00" position_type: SHORT quantity: "-50" symbol: TSLA unrealized_pnl: "75.00" - account_id: 19816 available_quantity: "100" avg_price: "2.50" closing_price: "2.70" closing_price_date: 2025-10-30 cost_basis: "2500.00" daily_realized_pnl: "10.00" instrument_id: e5e6e7e8-f5f6-a5a6-b5b6-b7b8b9babcbe instrument_price: "2.72" instrument_type: OPTION market_value: "2700.00" position_type: LONG_CALL quantity: "10" symbol: AAPL250117C00190000 underlying_instrument_id: a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8 unrealized_pnl: "200.00" error: null metadata: next_page_token: cGFnZT0yJmxhc3Rfc3ltYm9sPVRTM0E= page_number: 1 request_id: 3f4a5b6c-7d8e-9f0a-1b2c-3d4e5f6a7b8c total_items: 25 total_pages: 3 "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: Forbidden: summary: Caller does not have permission value: error: code: 403 message: The caller does not have permission to execute the specified operation metadata: request_id: 5518f0c6-58ff-4b4a-81a5-701556d41206 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" delete: tags: - Positions summary: Close Positions description: |- Delete all positions within an account. Closes all positions for the specified trading account. operationId: close_positions parameters: - name: account_id in: path description: Account identifier required: true schema: $ref: "#/components/schemas/i64" requestBody: content: application/json: schema: oneOf: - type: "null" - $ref: "#/components/schemas/ClosePositionRequest" responses: "200": description: List of orders generated to close all positions. content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/OrderList" type: object examples: FlattenAccount: summary: A list containing orders statuses for the orders used to close all positions in the account. value: data: - account_id: 19816 average_fill_price: null client_order_id: close-positions-20251003-001 created_at: 2025-10-03T14:01:15.000000000Z filled_quantity: "0" id: 019c0b57-0850-7b0b-8a2c-5ee3fb5a5876 instrument_id: c3c4c5c6-d3d4-e3e4-f3f4-f5f6f7f8f9fa instrument_type: COMMON_STOCK leaves_quantity: "25" limit_price: null order_type: MARKET quantity: "25" side: SELL status: PENDING_NEW stop_price: null symbol: GOOG time_in_force: DAY updated_at: 2025-10-03T14:01:15.000000000Z venue: XNMS error: null metadata: request_id: 3f4a5b6c-7d8e-9f0a-1b2c-3d4e5f6a7b8c "400": description: Invalid request content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: MalformedPayload: summary: Malformed JSON in request body value: error: code: 400 message: "Failed to parse the request body as JSON: expected `:` at line 2 column 19" metadata: request_id: 93a7c482-b246-4e15-9618-bcbe0906b815 "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: Forbidden: summary: Caller does not have permission value: error: code: 403 message: The caller does not have permission to execute the specified operation metadata: request_id: 5518f0c6-58ff-4b4a-81a5-701556d41206 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/accounts/{account_id}/positions/instructions: get: tags: - Positions summary: Get Position Instructions description: |- Returns the current lifecycle state of the account's position instructions. Optionally filter by a specific contract. Note: instructions that fail pre-acceptance validation on `POST` — duplicates, `DO_NOT_EXERCISE` / `CONTRARY_EXERCISE` on a non-expiry day, insufficient position, or an unresolvable instrument — are rejected (with `status = REJECTED` and a `rejection_reason`) without being persisted, so they surface only in the `POST` response and never appear in this list. operationId: get_position_instructions parameters: - name: account_id in: path description: Account identifier required: true schema: $ref: "#/components/schemas/i64" - name: instrument_id in: query description: Limit results to a single contract. Instrument ID (UUID) or symbol (equity ticker or OSI option symbol). required: false schema: $ref: "#/components/schemas/InstrumentIdOrSymbol" responses: "200": description: Position instructions content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/PositionInstructionList" type: object "400": description: Invalid query parameters content: application/json: schema: $ref: "#/components/schemas/ApiError" "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" "404": description: Account or instrument not found content: application/json: schema: $ref: "#/components/schemas/ApiError" "503": description: Service temporarily unavailable content: application/json: schema: $ref: "#/components/schemas/ApiError" post: tags: - Positions summary: Submit Position Instructions description: |- Submit one or more position instructions (Exercise, Do-Not-Exercise, Contrary Exercise Advice) against the account. Batch semantics: - **All rows accepted** → `200 OK`. Every row is in `data` with `status = SENT`. - **Partial success** → `207 Multi-Status`. `data` contains every row; rejected rows carry `status = REJECTED` and `rejection_reason`. The top-level `error` summarizes the batch failure. - **All rows rejected** → `4xx`/`5xx`. The HTTP status reflects the aggregate cause: `409` when every row was a duplicate, `400` for validation failures like DNE/CEA on a non-expiry day, `503` if the clearing service is unavailable. `data` still contains every row carrying `status = REJECTED` and `rejection_reason` so callers can attribute failures by `instruction_id`; the top-level `error` summarizes the batch. operationId: submit_position_instructions parameters: - name: account_id in: path description: Account identifier required: true schema: $ref: "#/components/schemas/i64" requestBody: content: application/json: schema: type: array items: $ref: "#/components/schemas/PositionInstructionSubmissionRequest" required: true responses: "200": description: All instructions accepted content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/PositionInstructionList" type: object examples: AllAccepted: summary: Every row accepted — each carries status=SENT value: data: - account_id: 122503 id: 0195f6d0-a1b2-7c3d-8e4f-5a6b7c8d9e02 instruction_id: ui-20260424-001 instruction_type: EXERCISE instrument_id: 0195f6d0-a1b2-7c3d-8e4f-5a6b7c8d9e01 quantity: "1" status: SENT symbol: AAPL 280121C00195000 metadata: request_id: 0a5c9ebf-a9a7-4f2d-9c7e-f2b5f0b1bd01 "207": description: Partial success — some rows accepted, others rejected content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/PositionInstructionList" type: object examples: PartialDuplicate: summary: One row accepted, one rejected as duplicate value: data: - account_id: 122503 id: 0195f6d0-a1b2-7c3d-8e4f-5a6b7c8d9e02 instruction_id: ui-20260424-001 instruction_type: EXERCISE instrument_id: 0195f6d0-a1b2-7c3d-8e4f-5a6b7c8d9e01 quantity: "1" status: SENT symbol: AAPL 280121C00195000 - account_id: 122503 id: 00000000-0000-0000-0000-000000000000 instruction_id: ui-20260424-001 instruction_type: EXERCISE instrument_id: 0195f6d0-a1b2-7c3d-8e4f-5a6b7c8d9e01 quantity: "1" rejection_reason: Duplicate exercise instruction status: REJECTED symbol: AAPL 280121C00195000 error: code: 409 message: Duplicate exercise instruction metadata: request_id: 0a5c9ebf-a9a7-4f2d-9c7e-f2b5f0b1bd02 "400": description: Invalid request or all rows rejected by validation content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/PositionInstructionList" type: object examples: DneOutsideExpiry: summary: All rows rejected — DNE submitted outside the expiration date value: data: - account_id: 122503 id: 00000000-0000-0000-0000-000000000000 instruction_id: ui-20260424-001 instruction_type: DO_NOT_EXERCISE instrument_id: 0195f6d0-a1b2-7c3d-8e4f-5a6b7c8d9e01 quantity: "1" rejection_reason: DO_NOT_EXERCISE must be submitted on the contract's expiration date status: REJECTED symbol: AAPL 280121C00195000 error: code: 400 message: DO_NOT_EXERCISE must be submitted on the contract's expiration date metadata: request_id: 0a5c9ebf-a9a7-4f2d-9c7e-f2b5f0b1bd03 "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" "404": description: Account or instrument not found content: application/json: schema: $ref: "#/components/schemas/ApiError" "409": description: All rows rejected as duplicates content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/PositionInstructionList" type: object examples: AllDuplicates: summary: Every submitted instruction_id was already accepted earlier value: data: - account_id: 122503 id: 00000000-0000-0000-0000-000000000000 instruction_id: ui-20260424-001 instruction_type: EXERCISE instrument_id: 0195f6d0-a1b2-7c3d-8e4f-5a6b7c8d9e01 quantity: "1" rejection_reason: Duplicate exercise instruction; existing_id=019e7415-de03-70c3-8ca1-9fdb72dfdbbc status: REJECTED symbol: AAPL 280121C00195000 error: code: 409 message: Duplicate exercise instruction metadata: request_id: 0a5c9ebf-a9a7-4f2d-9c7e-f2b5f0b1bd04 "500": description: All rows rejected by an internal server fault content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/PositionInstructionList" type: object examples: AllInternalFault: summary: Every row failed because of an internal server fault value: data: - account_id: 122503 id: 00000000-0000-0000-0000-000000000000 instruction_id: ui-20260424-001 instruction_type: EXERCISE instrument_id: 0195f6d0-a1b2-7c3d-8e4f-5a6b7c8d9e01 quantity: "1" rejection_reason: Could not process the instruction status: REJECTED symbol: AAPL 280121C00195000 error: code: 500 message: Could not process the instruction metadata: request_id: 0a5c9ebf-a9a7-4f2d-9c7e-f2b5f0b1bd05 "503": description: All rows rejected because the clearing service was unavailable content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/PositionInstructionList" type: object examples: AllUnavailable: summary: Every row failed because the clearing service was unavailable value: data: - account_id: 122503 id: 00000000-0000-0000-0000-000000000000 instruction_id: ui-20260424-001 instruction_type: EXERCISE instrument_id: 0195f6d0-a1b2-7c3d-8e4f-5a6b7c8d9e01 quantity: "1" rejection_reason: Clearing service unavailable status: REJECTED symbol: AAPL 280121C00195000 error: code: 503 message: Clearing service unavailable metadata: request_id: 0a5c9ebf-a9a7-4f2d-9c7e-f2b5f0b1bd06 /v1/accounts/{account_id}/positions/instructions/{instruction_id}: delete: tags: - Positions summary: Cancel Position Instruction description: |- Cancel an outstanding position instruction by its server-assigned `id`. Returns the updated instruction with status `CANCEL_REQUESTED`. The terminal `CANCELLED` or `CANCEL_FAILED` state arrives asynchronously and is observable via subsequent GETs. operationId: cancel_position_instruction parameters: - name: account_id in: path description: Account identifier required: true schema: $ref: "#/components/schemas/i64" - name: instruction_id in: path description: Server-assigned instruction id required: true schema: type: string format: uuid responses: "200": description: Cancel accepted content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/PositionInstruction" type: object "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" "404": description: Instruction not found content: application/json: schema: $ref: "#/components/schemas/ApiError" "409": description: Instruction is in a terminal state content: application/json: schema: $ref: "#/components/schemas/ApiError" "503": description: Service temporarily unavailable content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/accounts/{account_id}/positions/{instrument_id}: delete: tags: - Positions summary: Close Position description: |- Delete a position within an account for an instrument. Retrieves orders generated to close the position. operationId: close_position parameters: - name: account_id in: path description: Account identifier required: true schema: $ref: "#/components/schemas/i64" - name: instrument_id in: path description: Instrument ID (UUID) or symbol (equity ticker or OSI option symbol). required: true schema: $ref: "#/components/schemas/InstrumentIdOrSymbol" requestBody: content: application/json: schema: oneOf: - type: "null" - $ref: "#/components/schemas/ClosePositionRequest" responses: "200": description: List of orders generated to close the position. content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/OrderList" type: object examples: LongAndShortPositions: summary: A list containing orders statuses for the orders used to close the position of the specified instrument. value: data: - account_id: 19816 average_fill_price: null client_order_id: close-position-20251003-001 created_at: 2025-10-03T14:01:15.000000000Z filled_quantity: "0" id: 019c0b56-2119-7482-a80f-5a2a316524d9 instrument_id: c3c4c5c6-d3d4-e3e4-f3f4-f5f6f7f8f9fa instrument_type: COMMON_STOCK leaves_quantity: "25" limit_price: null order_type: MARKET quantity: "25" side: SELL status: PENDING_NEW stop_price: null symbol: GOOG time_in_force: DAY updated_at: 2025-10-03T14:01:15.000000000Z venue: XNMS error: null metadata: request_id: 3f4a5b6c-7d8e-9f0a-1b2c-3d4e5f6a7b8c "400": description: Invalid request content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: MalformedPayload: summary: Malformed JSON in request body value: error: code: 400 message: "Failed to parse the request body as JSON: expected `:` at line 2 column 19" metadata: request_id: 93a7c482-b246-4e15-9618-bcbe0906b815 "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: Forbidden: summary: Caller does not have permission value: error: code: 403 message: The caller does not have permission to execute the specified operation metadata: request_id: 5518f0c6-58ff-4b4a-81a5-701556d41206 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/calendars/market-hours: get: tags: - Calendar summary: Get Market Hours Calendar. description: |- Retrieves comprehensive trading hours including pre-market, regular, and after-hours sessions. Returns market status, session times, and next session schedules. operationId: get_market_hours_calendar parameters: - name: date in: query description: The date to query market hours for (YYYY-MM-DD). Defaults to today. required: true schema: type: string example: 2025-10-15 - name: market in: query description: Market type to query (us_equities, us_options). If omitted, returns all markets. required: false schema: $ref: "#/components/schemas/MarketType" example: us_equities responses: "200": description: Market hours calendar content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/MarketHoursDetailList" type: object examples: EarlyClose: summary: Market hours for an early close day (day after Thanksgiving) value: data: - current_time: 2025-11-28T11:00:00-05:00 date: 2025-11-28 market: us_equities market_name: US Equities next_sessions: after_hours: close: 2025-12-01T20:00:00-05:00 open: 2025-12-01T16:00:00-05:00 pre_market: close: 2025-12-01T09:30:00-05:00 open: 2025-12-01T04:00:00-05:00 regular: close: 2025-12-01T16:00:00-05:00 open: 2025-12-01T09:30:00-05:00 status: current_session: regular day_type: EARLY_CLOSE is_open: true timezone: America/New_York today_sessions: pre_market: close: 2025-11-28T09:30:00-05:00 open: 2025-11-28T04:00:00-05:00 regular: close: 2025-11-28T13:00:00-05:00 open: 2025-11-28T09:30:00-05:00 time_until_close: PT2H error: null metadata: request_id: 3d4e5f6a-7b8c-9d0e-1f2a-3b4c5d6e7f8a Holiday: summary: Market hours for a holiday (Christmas) value: data: - current_time: 2025-12-25T10:00:00-05:00 date: 2025-12-25 market: us_equities market_name: US Equities next_sessions: after_hours: close: 2025-12-26T20:00:00-05:00 open: 2025-12-26T16:00:00-05:00 pre_market: close: 2025-12-26T09:30:00-05:00 open: 2025-12-26T04:00:00-05:00 regular: close: 2025-12-26T16:00:00-05:00 open: 2025-12-26T09:30:00-05:00 status: day_type: HOLIDAY is_open: false timezone: America/New_York today_sessions: {} error: null metadata: request_id: 2c3d4e5f-6a7b-8c9d-0e1f-2a3b4c5d6e7f RegularTradingDay: summary: Market hours for a regular trading day value: data: - current_time: 2025-10-15T14:30:45-04:00 date: 2025-10-15 market: us_equities market_name: US Equities next_sessions: after_hours: close: 2025-10-16T20:00:00-04:00 open: 2025-10-16T16:00:00-04:00 pre_market: close: 2025-10-16T09:30:00-04:00 open: 2025-10-16T04:00:00-04:00 regular: close: 2025-10-16T16:00:00-04:00 open: 2025-10-16T09:30:00-04:00 status: current_session: regular day_type: TRADING_DAY is_open: true timezone: America/New_York today_sessions: after_hours: close: 2025-10-15T20:00:00-04:00 open: 2025-10-15T16:00:00-04:00 time_until_open: PT1H29M15S pre_market: close: 2025-10-15T09:30:00-04:00 open: 2025-10-15T04:00:00-04:00 regular: close: 2025-10-15T16:00:00-04:00 open: 2025-10-15T09:30:00-04:00 time_until_close: PT1H29M15S error: null metadata: request_id: 1b2c3d4e-5f6a-7b8c-9d0e-1f2a3b4c5d6e Weekend: summary: Market hours for a weekend day value: data: - current_time: 2025-10-18T12:00:00-04:00 date: 2025-10-18 market: us_equities market_name: US Equities next_sessions: after_hours: close: 2025-10-20T20:00:00-04:00 open: 2025-10-20T16:00:00-04:00 pre_market: close: 2025-10-20T09:30:00-04:00 open: 2025-10-20T04:00:00-04:00 regular: close: 2025-10-20T16:00:00-04:00 open: 2025-10-20T09:30:00-04:00 status: day_type: WEEKEND is_open: false timezone: America/New_York today_sessions: {} error: null metadata: request_id: 4e5f6a7b-8c9d-0e1f-2a3b-4c5d6e7f8a9b /v1/clock: get: tags: - Calendar summary: Get Clock description: Returns the current server time in UTC. operationId: get_clock responses: "200": description: Current server time content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/ClockDetail" type: object examples: Current time: summary: Current server time value: data: clock: 2025-03-01T03:35:00.000000000Z error: null metadata: request_id: 1b2c3d4e-5f6a-7b8c-9d0e-1f2a3b4c5d6e /v1/instruments: get: tags: - Instruments summary: Get Instruments description: |+ Retrieves a list of tradeable instruments. operationId: get_instruments parameters: - name: instrument_type in: query description: Filter by instrument type (e.g. COMMON_STOCK, OPTION) required: false schema: type: string description: Security type enum: - COMMON_STOCK - OPTION - CASH - name: instrument_ids in: query description: "Comma-separated instrument identifiers: unique identifiers or symbols (symbol for equities, OSI for options)" required: false schema: type: array items: oneOf: - type: string format: uuid description: Instrument identifier - type: string description: Symbol (symbol for equities, OSI for options) description: "Instrument identifier: either an instrument identifier or a symbol (symbol for equities, OSI for options). Non-UUID inputs are resolved server-side." style: form explode: false - name: is_marginable in: query description: Filter by marginable status required: false schema: type: boolean - name: easy_to_borrow in: query description: Filter by easy to borrow status required: false schema: type: boolean - name: is_short_prohibited in: query description: Filter by short prohibited status required: false schema: type: boolean - name: is_threshold_security in: query description: Filter by threshold security status required: false schema: type: boolean - name: is_liquidation_only in: query description: Filter by liquidation only status required: false schema: type: boolean - name: is_ptp in: query description: Filter by publicly traded partnership (PTP) status required: false schema: type: boolean - name: page_size in: query description: The number of items to return per page. Only used when page_token is not provided. required: false schema: type: integer format: int64 default: 1000 maximum: 1000 minimum: 1 - name: page_token in: query description: Token for retrieving the next or previous page of results. Contains encoded pagination state; when provided, page_size is ignored. required: false schema: type: string format: byte description: Base64URL-encoded pagination token example: eyJvZmZzZXQiOjEwMCwibGltaXQiOjEwMH0= responses: "200": description: List of instruments content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/InstrumentCoreList" type: object examples: ListOfInstruments: summary: A list of instruments with different characteristics value: data: - country_of_issue: US currency: USD easy_to_borrow: true id: 0f5a1a4e-5b3e-4d8f-9b7a-2b1d0e3f4a5b instrument_type: COMMON_STOCK is_fractionable: false is_liquidation_only: false is_marginable: true is_ptp: false is_short_prohibited: false is_threshold_security: false is_tradable: true name: Apple Inc. symbol: AAPL venue: XNMS error: null metadata: next_page_token: cGFnZT0yJmxhc3Rfc3ltYm9sPUdNRQ== page_number: 1 request_id: 4a5b6c7d-8e9f-0a1b-2c3d-4e5f6a7b8c9d total_items: 10 total_pages: 5 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/instruments/events: get: tags: - Instrument Data summary: Get All Instrument Events description: |- List instrument events across all securities. Retrieves all instrument events grouped by date. operationId: get_all_instrument_events parameters: - name: event_types in: query description: "Filter by event type(s). Comma-delimited list. Example: `event_types=EARNINGS,IPO`." required: false schema: type: array items: $ref: "#/components/schemas/AllEventsEventType" style: form explode: false - name: instrument_ids in: query description: "Filter by instrument ID(s). Comma-delimited list of UUIDs. Example: `instrument_ids=550e8400-e29b-41d4-a716-446655440000`." required: false schema: type: array items: type: string format: uuid style: form explode: false - name: from_date in: query description: The start date for the query range, inclusive (YYYY-MM-DD). required: false schema: type: string example: 2025-04-24 - name: to_date in: query description: The end date for the query range, inclusive (YYYY-MM-DD). required: false schema: type: string example: 2025-07-24 responses: "200": description: Instrument events grouped by date content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/InstrumentAllEventsData" type: object examples: InstrumentEventsByDate: summary: Dividend events grouped by date value: data: event_dates: - date: 2026-04-23 events: - dividend_event_data: adjusted_dividend_amount: "0.5236" declaration_date: 2026-04-22 dividend_amount: "0.5236" dividend_yield: "43.82881469863321" ex_date: 2026-04-23 frequency: Weekly payment_date: 2026-04-24 record_date: 2026-04-23 instrument_id: 2281b543-7136-4008-aa0a-a402bf9d9f90 name: YieldMax ABNB Option Income Strategy ETF reporting_currency: USD symbol: ABNY type: DIVIDEND - dividend_event_data: adjusted_dividend_amount: "0.1432" declaration_date: 2026-04-22 dividend_amount: "0.1432" dividend_yield: "181.7918287937743" ex_date: 2026-04-23 frequency: Weekly payment_date: 2026-04-24 record_date: 2026-04-23 instrument_id: 4b33fa52-8ab6-43f5-a8df-042e0c63d20e name: YieldMax AI Option Income Strategy ETF reporting_currency: USD symbol: AIYY type: DIVIDEND metadata: request_id: 5efbf08a-9067-4491-9f29-cf0b233507ef "400": description: Invalid query parameters content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: MalformedQueryString: summary: Invalid query string payload value: error: code: 400 message: "Failed to deserialize query string. Error: premature end of input" metadata: request_id: e0a9bd3a-8510-41a7-8144-c51a27787b9c "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/instruments/options/contracts: get: tags: - Instruments summary: Get Option Contracts description: |- List options contracts. Returns options contracts for a given underlier with options-specific metadata. Exactly one underlier identifier must be provided. operationId: get_option_contracts parameters: - name: underlier in: query description: Underlier symbol (e.g., AAPL, SPX) required: false schema: type: string - name: underlying_instrument_id in: query description: Instrument identifier or symbol of the underlying equity/index required: false schema: $ref: "#/components/schemas/InstrumentIdOrSymbol" - name: expiry in: query description: Filter to contracts expiring on this date (YYYY-MM-DD) required: false schema: type: string format: date - name: contract_type in: query description: "Filter by contract type: CALL or PUT" required: false schema: $ref: "#/components/schemas/ContractType" - name: page_size in: query description: The number of items to return per page. Only used when page_token is not provided. required: false schema: type: integer format: int64 default: 1000 maximum: 1000 minimum: 1 - name: page_token in: query description: Token for retrieving the next or previous page of results. Contains encoded pagination state; when provided, page_size is ignored. required: false schema: type: string format: byte description: Base64URL-encoded pagination token example: eyJvZmZzZXQiOjEwMCwibGltaXQiOjEwMH0= responses: "200": description: List of options contracts content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/OptionsContractList" type: object examples: OptionsContracts: summary: AAPL calls and puts for a given expiry value: data: - contract_type: CALL currency: USD exchange: BATO exercise_style: AMERICAN expiry: 2026-03-20 id: b6f4b5e2-94a8-4fe4-9a85-2b4a81d30cc5 is_fractionable: false is_liquidation_only: false is_marginable: true is_ptp: false is_tradable: true listing_type: STANDARD multiplier: "100" strike_price: "180" symbol: AAPL 260320C00180000 underlying_instrument_id: a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8 - contract_type: PUT currency: USD exchange: BATO exercise_style: AMERICAN expiry: 2026-03-20 id: c7e5c6f3-a5b9-5gf5-0b96-3c5b92e41dd6 is_fractionable: false is_liquidation_only: false is_marginable: true is_ptp: false is_tradable: true listing_type: STANDARD multiplier: "100" strike_price: "180" symbol: AAPL 260320P00180000 underlying_instrument_id: a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8 metadata: page_number: 1 request_id: c2d0429d-c629-4ee1-b719-df007157f3bb total_items: 2 total_pages: 1 "400": description: Invalid parameters content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: MissingUnderlierIdentifier: summary: No valid underlier identifier combination provided value: error: code: 400 message: "Exactly one underlier identifier must be provided: underlier or underlying_instrument_id" metadata: request_id: 4bb6025f-0415-4689-9c2f-307e9a1a47c8 "404": description: Underlier not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: UnderlierInstrumentNotFound: summary: Provided underlier instrument identifier does not exist value: error: code: 404 message: "Instrument not found: 528ec5c3-cdbf-447c-b995-ec6c83cfbc03" metadata: request_id: 58a3f5e9-74b0-48b7-a17d-16b44e123174 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/instruments/search: get: tags: - Instruments summary: Search Instruments description: |- Search instruments by symbol, alternate identifier, or company name. The `q` parameter is case-insensitive and supports ticker symbols, alternate identifiers such as CUSIP, ISIN, and OPRA root, and company names for non-option instruments. Results are ranked by match quality plus instrument quality signals and relevance. Defaults to the `EQUITY` asset class (common stocks, preferred shares, ADRs, ETFs, and exchange-traded mutual funds). Pass `asset_class=OPTION` to search option contracts: by full OSI symbol, by an OSI prefix (root + `YYMMDD` expiry, e.g. `AAPL 261217`), or by a root-scoped phrase such as `AAPL Dec 250 call`. operationId: search_instruments parameters: - name: q in: query description: Search term applied case-insensitively to ticker symbols, alternate identifiers (CUSIP, ISIN, OPRA root), and company names for non-option instruments. Option searches match symbols and alternate identifiers. required: true schema: type: string - name: asset_class in: query description: Comma-separated asset classes (EQUITY|OPTION|WARRANT|BOND|FX|OTHER). Defaults to EQUITY. required: false schema: type: string - name: include_inactive in: query description: Include inactive instruments. Default false. required: false schema: type: boolean - name: include_ptp in: query description: Include publicly traded partnership (PTP) instruments. Default true (penalized in ranking). required: false schema: type: boolean - name: currency in: query description: Optional ISO currency filter (e.g., USD). required: false schema: type: string - name: country in: query description: Optional listing-country filter (e.g., US). required: false schema: type: string - name: page_size in: query description: The number of items to return per page. Only used when page_token is not provided. required: false schema: type: integer format: int64 default: 100 maximum: 100 minimum: 1 - name: page_token in: query description: Token for retrieving the next or previous page of results. Contains encoded pagination state; when provided, page_size is ignored. required: false schema: type: string format: byte description: Base64URL-encoded pagination token example: eyJvZmZzZXQiOjEwMCwibGltaXQiOjEwMH0= responses: "200": description: Ranked list of matching instruments content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/InstrumentCoreList" type: object examples: CompanyNameMatch: summary: Company-name search resolves "APPLE" to AAPL value: data: - country_of_issue: US currency: USD easy_to_borrow: true id: 0f5a1a4e-5b3e-4d8f-9b7a-2b1d0e3f4a5b instrument_type: COMMON_STOCK is_fractionable: false is_liquidation_only: false is_marginable: true is_ptp: false is_short_prohibited: false is_threshold_security: false is_tradable: true name: Apple Inc. symbol: AAPL venue: XNMS error: null metadata: request_id: 6c7d8e9f-0a1b-2c3d-4e5f-6a7b8c9d0e1f ExactSymbolMatch: summary: Exact symbol match for AAPL value: data: - country_of_issue: US currency: USD easy_to_borrow: true id: 0f5a1a4e-5b3e-4d8f-9b7a-2b1d0e3f4a5b instrument_type: COMMON_STOCK is_fractionable: false is_liquidation_only: false is_marginable: true is_ptp: false is_short_prohibited: false is_threshold_security: false is_tradable: true name: Apple Inc. symbol: AAPL venue: XNMS error: null metadata: request_id: 5b6c7d8e-9f0a-1b2c-3d4e-5f6a7b8c9d0e "400": description: Missing or invalid query parameters content: application/json: schema: $ref: "#/components/schemas/ApiError" "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" "503": description: Instrument data is not ready yet content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/instruments/{instrument_id}: get: tags: - Instruments summary: Get Instrument By ID description: Retrieves detailed information for a specific instrument. operationId: get_instrument_by_id parameters: - name: instrument_id in: path description: Instrument ID (UUID) or symbol (equity ticker or OSI option symbol). required: true schema: $ref: "#/components/schemas/InstrumentIdOrSymbol" - name: include_options_expiry_dates in: query description: When true, include unique options expiry dates for this instrument required: false schema: type: - boolean - "null" responses: "200": description: Instrument details content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/Instrument" type: object examples: EasyToBorrowInstrument: summary: An instrument that is easy-to-borrow value: data: country_of_issue: US currency: USD easy_to_borrow: true id: 0f5a1a4e-5b3e-4d8f-9b7a-2b1d0e3f4a5b instrument_type: COMMON_STOCK is_fractionable: false is_liquidation_only: false is_marginable: true is_ptp: false is_short_prohibited: false is_threshold_security: false is_tradable: true long_margin_rate: "0.25" name: Apple Inc. short_margin_rate: "0.25" symbol: AAPL venue: XNMS error: null metadata: request_id: 5b6c7d8e-9f0a-1b2c-3d4e-5f6a7b8c9d0e "404": description: Instrument not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: InstrumentNotFound: summary: Instrument identifier does not exist value: error: code: 404 message: "Instrument not found: AAP" metadata: request_id: fa8cc9b2-fbf0-4f5b-8ce3-b3205b9f85f2 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/instruments/{instrument_id}/analyst-reporting: get: tags: - Instrument Data summary: Get Instrument Analyst Consensus description: Retrieves analyst ratings and price targets for an instrument. operationId: get_instrument_analyst_consensus parameters: - name: instrument_id in: path description: Instrument ID (UUID) or symbol (equity ticker or OSI option symbol). required: true schema: $ref: "#/components/schemas/InstrumentIdOrSymbol" - name: from in: query description: The start date for the query range, inclusive (YYYY-MM-DD) required: false schema: type: string format: date example: 2025-04-24 - name: to in: query description: The end date for the query range, inclusive (YYYY-MM-DD) required: false schema: type: string format: date example: 2025-07-24 responses: "200": description: Analyst consensus data content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/InstrumentAnalystConsensus" type: object examples: AnalystRatings: summary: Analyst consensus with price targets and ratings value: data: date: 2025-10-01 distribution: buy: 20 hold: 3 sell: 1 strong_buy: 18 strong_sell: 0 price_target: average: "240.00" currency: USD high: "275.00" low: "190.00" rating: BUY error: null metadata: request_id: 9e0f1a2b-3c4d-5e6f-7890-1a2b3c4d5e6f "404": description: Instrument not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: InstrumentNotFound: summary: Instrument identifier does not exist value: error: code: 404 message: "Instrument not found: AAP" metadata: request_id: fa8cc9b2-fbf0-4f5b-8ce3-b3205b9f85f2 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/instruments/{instrument_id}/balance-sheets: get: tags: - Instrument Data summary: Get Instrument Balance Sheet Statements description: |- Get balance sheet statements for an instrument. Retrieves quarterly balance sheet statements for a specific instrument, sorted by fiscal period (most recent first). Date range defaults: - `from_date`: None (no lower bound) - `to_date`: None (no upper bound) operationId: get_instrument_balance_sheet_statements parameters: - name: instrument_id in: path description: Instrument ID (UUID) or symbol (equity ticker or OSI option symbol). required: true schema: $ref: "#/components/schemas/InstrumentIdOrSymbol" - name: page_size in: query description: The number of items to return per page. Only used when page_token is not provided. required: false schema: type: integer format: int64 default: 1000 maximum: 1000 minimum: 1 - name: page_token in: query description: Token for retrieving the next or previous page of results. Contains encoded pagination state; when provided, page_size is ignored. required: false schema: type: string format: byte description: Base64URL-encoded pagination token example: eyJvZmZzZXQiOjEwMCwibGltaXQiOjEwMH0= - name: from_date in: query description: The start date for the query range, inclusive (YYYY-MM-DD). required: false schema: type: string example: 2025-04-24 - name: to_date in: query description: The end date for the query range, inclusive (YYYY-MM-DD). required: false schema: type: string example: 2025-07-24 responses: "200": description: List of quarterly balance sheet statements content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/InstrumentBalanceSheetStatementList" type: object examples: BalanceSheetStatements: summary: List of balance sheet statements, most recent first value: data: - accepted_date: 2025-05-02T14:30:00Z cash_and_cash_equivalents: "29943000000" filing_date: 2025-05-01 net_debt: "76323000000" period: Q1 period_type: QUARTERLY reported_currency: USD total_assets: "352583000000" total_debt: "106266000000" total_liabilities: "308258000000" total_stockholders_equity: "56727000000" year: 2025 error: null metadata: next_page_token: AAAAAAAAAGQAAAAAAAAAZQ== page_number: 1 request_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 total_items: 20 total_pages: 2 "404": description: Instrument not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: InstrumentNotFound: summary: Instrument identifier does not exist value: error: code: 404 message: "Instrument not found: AAP" metadata: request_id: fa8cc9b2-fbf0-4f5b-8ce3-b3205b9f85f2 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/instruments/{instrument_id}/cash-flow-statements: get: tags: - Instrument Data summary: Get Instrument Cash Flow Statements description: |+ Get cash flow statements for an instrument. Retrieves historical cash flow statements for the specified instrument. Cash flow statements show cash inflows and outflows from operating, investing, and financing activities. operationId: get_instrument_cash_flow_statements parameters: - name: instrument_id in: path description: Instrument ID (UUID) or symbol (equity ticker or OSI option symbol). required: true schema: $ref: "#/components/schemas/InstrumentIdOrSymbol" - name: page_size in: query description: The number of items to return per page. Only used when page_token is not provided. required: false schema: type: integer format: int64 default: 1000 maximum: 1000 minimum: 1 - name: page_token in: query description: Token for retrieving the next or previous page of results. Contains encoded pagination state; when provided, page_size is ignored. required: false schema: type: string format: byte description: Base64URL-encoded pagination token example: eyJvZmZzZXQiOjEwMCwibGltaXQiOjEwMH0= - name: from_date in: query description: The start date for the query range, inclusive (YYYY-MM-DD). required: false schema: type: string example: 2025-04-24 - name: to_date in: query description: The end date for the query range, inclusive (YYYY-MM-DD). required: false schema: type: string example: 2025-07-24 responses: "200": description: Cash flow statements retrieved successfully content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/InstrumentCashFlowStatementList" type: object examples: CashFlowStatements: summary: Cash flow statements for a security value: data: - accepted_date: 2025-05-02T14:30:00Z capital_expenditure: "-2600000000" cash_at_beginning_of_period: "33743000000" cash_at_end_of_period: "29943000000" change_in_working_capital: "-3200000000" common_stock_repurchased: "-23000000000" depreciation_and_amortization: "2900000000" filing_date: 2025-05-01 free_cash_flow: "25800000000" investments_in_property_plant_and_equipment: "-2600000000" net_cash_provided_by_financing_activities: "-28300000000" net_cash_provided_by_investing_activities: "-3900000000" net_cash_provided_by_operating_activities: "28400000000" net_change_in_cash: "-3800000000" net_debt_issuance: "-1500000000" net_dividends_paid: "-3800000000" net_income: "22200000000" operating_cash_flow: "28400000000" period: Q1 period_type: QUARTERLY purchases_of_investments: "-9500000000" reported_currency: USD sales_maturities_of_investments: "8200000000" stock_based_compensation: "2500000000" year: 2025 error: null metadata: next_page_token: AAAAAAAAAGQAAAAAAAAAZQ== page_number: 1 request_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 total_items: 20 total_pages: 2 "404": description: Instrument not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: InstrumentNotFound: summary: Instrument identifier does not exist value: error: code: 404 message: "Instrument not found: AAP" metadata: request_id: fa8cc9b2-fbf0-4f5b-8ce3-b3205b9f85f2 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/instruments/{instrument_id}/events: get: tags: - Instrument Data summary: Get Instrument Events description: |- Retrieves corporate events (dividends, splits, etc.) for an instrument, grouped by event type. Date range defaults: - `from_date`: today - 365 days - `to_date`: today + 60 days operationId: get_instrument_events parameters: - name: instrument_id in: path description: Instrument ID (UUID) or symbol (equity ticker or OSI option symbol). required: true schema: $ref: "#/components/schemas/InstrumentIdOrSymbol" - name: from_date in: query description: The start date for the query range, inclusive (YYYY-MM-DD). required: false schema: type: string example: 2025-04-24 - name: to_date in: query description: The end date for the query range, inclusive (YYYY-MM-DD). required: false schema: type: string example: 2025-07-24 responses: "200": description: Instrument events grouped by type content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/InstrumentEventsData" type: object examples: GroupedCorporateEvents: summary: Earnings, dividends, and splits for AAPL value: data: dividends: - adjusted_dividend_amount: "0.25" declaration_date: 2024-10-31 dividend_amount: "0.25" dividend_yield: "0.44" ex_date: 2024-11-08 frequency: Quarterly payment_date: 2024-11-14 record_date: 2024-11-11 earnings: - date: 2024-10-31 eps_actual: "1.64" eps_estimate: "1.60" eps_surprise_percent: "2.5" revenue_actual: "94930000000" revenue_estimate: "94500000000" revenue_surprise_percent: "0.45" instrument_id: a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8 reporting_currency: USD splits: - date: 2020-08-31 denominator: "1" numerator: "4" split_type: stock-split error: null metadata: request_id: 0f1a2b3c-4d5e-6789-8a7b-6c5d4e3f2a1b "404": description: Instrument not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: InstrumentNotFound: summary: Instrument identifier does not exist value: error: code: 404 message: "Instrument not found: AAP" metadata: request_id: fa8cc9b2-fbf0-4f5b-8ce3-b3205b9f85f2 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/instruments/{instrument_id}/fundamentals: get: tags: - Instrument Data summary: Get Instrument Fundamentals description: Retrieves supplemental fundamentals and company profile data for an instrument. operationId: get_instrument_fundamentals parameters: - name: instrument_id in: path description: Instrument ID (UUID) or symbol (equity ticker or OSI option symbol). required: true schema: $ref: "#/components/schemas/InstrumentIdOrSymbol" responses: "200": description: Instrument fundamentals content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/InstrumentFundamentals" type: object examples: InstrumentFundamentals: summary: Supplemental fundamentals for an instrument value: data: average_volume: 76000000 beta: "1.20" description: Apple Inc. designs, manufactures, and markets smartphones, personal computers, tablets, wearables, and accessories worldwide. dividend_yield: "0.005" earnings_per_share: "5.61" fifty_two_week_high: "230.00" fifty_two_week_low: "165.00" industry: Consumer Electronics list_date: 1980-12-12 logo_url: https://example.com/logos/aapl.png market_cap: "2800000000000" previous_close: "210.87" price_to_earnings: "30.5" reporting_currency: USD sector: Technology error: null metadata: request_id: 5b6c7d8e-9f0a-1b2c-3d4e-5f6a7b8c9d0e "404": description: Instrument or fundamentals not found content: application/json: schema: $ref: "#/components/schemas/ApiError" "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/instruments/{instrument_id}/income-statements: get: tags: - Instrument Data summary: Get Instrument Income Statements description: |- Retrieves quarterly income statements for a specific instrument, sorted by fiscal period (most recent first). Date range defaults: - `from_date`: None (no lower bound) - `to_date`: None (no upper bound) operationId: get_instrument_income_statements parameters: - name: instrument_id in: path description: Instrument ID (UUID) or symbol (equity ticker or OSI option symbol). required: true schema: $ref: "#/components/schemas/InstrumentIdOrSymbol" - name: page_size in: query description: The number of items to return per page. Only used when page_token is not provided. required: false schema: type: integer format: int64 default: 1000 maximum: 1000 minimum: 1 - name: page_token in: query description: Token for retrieving the next or previous page of results. Contains encoded pagination state; when provided, page_size is ignored. required: false schema: type: string format: byte description: Base64URL-encoded pagination token example: eyJvZmZzZXQiOjEwMCwibGltaXQiOjEwMH0= - name: from_date in: query description: The start date for the query range, inclusive (YYYY-MM-DD). required: false schema: type: string example: 2025-04-24 - name: to_date in: query description: The end date for the query range, inclusive (YYYY-MM-DD). required: false schema: type: string example: 2025-07-24 responses: "200": description: List of quarterly income statements content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/InstrumentIncomeStatementList" type: object examples: IncomeStatements: summary: List of income statements, most recent first value: data: - accepted_date: 2025-05-02T14:30:00Z cost_of_revenue: "52080000000" eps: "1.40" eps_diluted: "1.38" filing_date: 2025-05-01 gross_profit: "42850000000" net_income: "22200000000" operating_income: "26550000000" period: Q1 period_type: QUARTERLY reported_currency: USD revenue: "94930000000" year: 2025 error: null metadata: next_page_token: AAAAAAAAAGQAAAAAAAAAZQ== page_number: 1 request_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 total_items: 20 total_pages: 2 "404": description: Instrument not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: InstrumentNotFound: summary: Instrument identifier does not exist value: error: code: 404 message: "Instrument not found: AAP" metadata: request_id: fa8cc9b2-fbf0-4f5b-8ce3-b3205b9f85f2 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/market-data/daily-summary: get: tags: - Instrument Data summary: Get Daily Aggregate Summaries description: |- Returns the most recent open, high, low, volume (OHLV) and current price for the requested instruments. Response contract: every request returns one row per **unique** `instrument_id`, in first-seen request order. Unresolvable IDs come back with `symbol = null` and every market-data field `null`; resolvable IDs with no available data come back with `symbol` populated but market-data fields `null`. operationId: get_daily_summaries parameters: - name: instrument_ids in: query description: Comma-separated instrument identifiers (required, 1..=100) required: true schema: type: string responses: "200": description: Daily aggregate summaries content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/DailySummaryList" type: object "400": description: Missing, empty, or over-cap instrument_ids content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/market-data/snapshot: get: tags: - Instrument Data summary: Get Snapshots description: Get market data snapshots for one or more securities. operationId: get_snapshots parameters: - name: instrument_ids in: query description: Comma-separated instrument identifiers. required: false schema: type: array items: type: string format: uuid style: form explode: false responses: "200": description: Market data snapshots content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/MarketDataSnapshotList" type: object examples: Snapshots: summary: Snapshot response with quote, trade, and session data value: data: - cumulative_volume: 12345678 instrument_id: a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8 last_quote: ask: "210.14" ask_size: 120 bid: "210.10" bid_size: 100 midpoint: "210.12" last_trade: price: "210.12" size: 150 name: Apple Inc. session: change: "1.82" change_percent: "0.8737" previous_close: "208.30" symbol: AAPL error: null metadata: request_id: 2d0c9159-8f5d-49ca-a861-0d8346fd11da "400": description: Invalid query parameters content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: MissingRequiredQueryParams: summary: Missing required id filters value: error: code: 400 message: At least one instrument_id is required metadata: request_id: 3af8662e-2dd9-4c59-8d32-7c167377fb8f "404": description: Instrument not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: InstrumentNotFoundById: summary: Instrument does not exist for provided id value: error: code: 404 message: Instrument not found for id `a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8` metadata: request_id: 95683d84-2863-43f0-8f0a-63537c3cef85 /v1/news: get: tags: - Instrument Data summary: Get News description: |- Retrieves news items with optional filtering by security IDs, time range, publisher, type, and text query. operationId: get_news parameters: - name: page_size in: query description: The number of items to return per page. Only used when page_token is not provided. required: false schema: type: integer format: int64 default: 1000 maximum: 1000 minimum: 1 - name: page_token in: query description: Token for retrieving the next or previous page of results. Contains encoded pagination state; when provided, page_size is ignored. required: false schema: type: string format: byte description: Base64URL-encoded pagination token example: eyJvZmZzZXQiOjEwMCwibGltaXQiOjEwMH0= - name: from in: query description: Inclusive start timestamp. Accepts `YYYY-MM-DD` or RFC3339 datetime. required: false schema: type: string - name: to in: query description: Inclusive end timestamp. Accepts `YYYY-MM-DD` or RFC3339 datetime. required: false schema: type: string - name: include_publishers in: query description: Comma-separated list of publishers to include (mutually exclusive with exclude_publishers). required: false schema: type: string - name: exclude_publishers in: query description: Comma-separated list of publishers to exclude (mutually exclusive with include_publishers). required: false schema: type: string - name: news_type in: query description: Filter by news type. required: false schema: type: string description: News item classification. enum: - NEWS - PRESS_RELEASE - name: search_query in: query description: Free-text query matched against title/text and associated security IDs. required: false schema: type: string - name: instrument_ids in: query description: Comma-delimited instrument identifiers to filter by. required: false schema: type: array items: type: string style: form explode: false - name: sectors in: query description: Comma-separated sector values to filter by. required: false schema: type: array items: type: string description: Market sector classification. enum: - BASIC_MATERIALS - COMMUNICATION_SERVICES - CONSUMER_CYCLICAL - CONSUMER_DEFENSIVE - ENERGY - FINANCIAL_SERVICES - HEALTHCARE - INDUSTRIALS - REAL_ESTATE - TECHNOLOGY - UTILITIES style: form explode: false responses: "200": description: News items content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/NewsItemList" type: object examples: NewsList: summary: Filtered list of news items value: data: - instruments: - instrument_id: f47ac10b-58cc-4372-a567-0e02b2c3d479 name: Apple Inc. symbol: AAPL news_type: NEWS published_at: 2025-10-31T14:30:00.000000000Z publisher: Reuters site: reuters.com title: Apple announces new hardware lineup url: https://example.com/news/1 error: null metadata: next_page_token: cGFnZT0yJmxhc3Rfc3ltYm9sPVRTM0E page_number: 1 request_id: 0f1a2b3c-4d5e-6f78-9012-3a4b5c6d7e8f total_items: 25 total_pages: 3 "400": description: Invalid query parameters content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: InvalidDateQueryParam: summary: Invalid date format in query parameters value: error: code: 400 message: 'Failed to deserialize query string: from: invalid date or datetime ''123'': expected YYYY-MM-DD or RFC3339 (e.g. 2025-01-30T14:30:00Z)' metadata: request_id: d706b33d-ef0c-484d-a5e5-2f8b68ecb203 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/omni-ai/entitlement-agreements: get: tags: - Omni AI summary: Get Entitlement Agreements description: List current signable entitlement agreements for consent UX. operationId: get_entitlement_agreements responses: "200": description: Current signable entitlement agreements content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/EntitlementAgreementResourceList" type: object "404": description: No active signable agreements content: application/json: schema: $ref: "#/components/schemas/ApiError" "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/omni-ai/entitlements: get: tags: - Omni AI summary: Get Entitlements description: List caller's active entitlement grants. operationId: get_entitlements parameters: - name: trading_account_id in: query required: false schema: type: integer format: int64 responses: "200": description: Caller's active entitlement grants content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/EntitlementResourceList" type: object "403": description: Caller lacks access to requested account content: application/json: schema: $ref: "#/components/schemas/ApiError" "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" post: tags: - Omni AI summary: Create Entitlements description: Record consent and upsert one-or-more active grants. operationId: create_entitlements requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateEntitlementsRequest" required: true responses: "200": description: Resulting active grants for requested scope content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/EntitlementResourceList" type: object "400": description: Invalid request payload content: application/json: schema: $ref: "#/components/schemas/ApiError" "403": description: Caller lacks access to one or more requested accounts content: application/json: schema: $ref: "#/components/schemas/ApiError" "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/omni-ai/entitlements/{entitlement_id}: delete: tags: - Omni AI summary: Delete Entitlement description: Revoke one entitlement grant by id. operationId: delete_entitlement parameters: - name: entitlement_id in: path description: Entitlement grant id required: true schema: type: string responses: "200": description: Grant revoked content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/DeleteEntitlementResponse" type: object "404": description: Grant not found content: application/json: schema: $ref: "#/components/schemas/ApiError" "409": description: Grant already inactive content: application/json: schema: $ref: "#/components/schemas/ApiError" "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/omni-ai/messages/{message_id}: get: tags: - Omni AI summary: Get Message By ID description: |- Get a finalized message by ID. Returns a single finalized message. Returns **404** if the message belongs to an in-progress assistant turn (use the response endpoint for live output). Once the turn completes, the message becomes available here. operationId: get_message_by_id parameters: - name: message_id in: path description: Message identifier required: true schema: type: string format: uuid - name: account_id in: query description: Account ID for the request required: true schema: type: integer format: int64 responses: "200": description: Finalized message with content parts content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/Message" type: object examples: FinalizedAssistantMessage: summary: Finalized assistant message with text and suggested actions value: data: content: parts: - text: |- **Pre-market as of 7:30 AM ET** ... type: text - payload: actionButtons: - buttonId: btn_followup_0 label: Check my positions prompt: prompt: What are my current positions? type: suggested_actions created_at: 2026-04-16T09:20:17.309212+00:00 id: 019d9597-599c-7132-a7de-e5c21eaaab77 outcome: completed role: ASSISTANT seq: 2 thread_id: 019d9597-597c-7571-a0c9-a49c0e51f6eb metadata: request_id: 0f991501-757d-4051-bf00-6d7f452d6fcf "400": description: Invalid query parameters content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: MissingAccountId: summary: Required account_id query parameter is missing value: error: code: 400 message: "Failed to deserialize query string: missing field `account_id`" metadata: request_id: e0c1c9f2-2100-40f0-b5fc-378a35dafa18 "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: Forbidden: summary: Caller does not have permission value: error: code: 403 message: The caller does not have permission to execute the specified operation metadata: request_id: d68b5e7a-75f4-4a87-a349-3f7c57952578 "404": description: Message not found or still in progress content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: MessageNotFound: summary: Requested message does not exist value: error: code: 404 message: Message not found metadata: request_id: ec35dacd-36f1-4bf7-b138-00b15a3d09dd "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/omni-ai/messages/{message_id}/feedback: post: tags: - Omni AI summary: Submit Feedback description: |- Submit feedback on a finalized assistant message. Attaches a score and optional comment to a finalized assistant message. Feedback is only valid for messages with role `ASSISTANT` that have reached a terminal outcome. operationId: submit_feedback parameters: - name: message_id in: path description: Finalized assistant message to rate required: true schema: type: string format: uuid requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateFeedbackRequest" required: true responses: "200": description: Feedback recorded content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/CreateFeedbackResponse" type: object examples: FeedbackRecorded: summary: Feedback accepted and stored value: data: created_at: 2026-04-23T16:09:51.746912+00:00 feedback_id: 019dbb1a-d782-7f42-8dd8-a1a7ca5d48e3 metadata: request_id: 372a359a-fd4f-4c69-8f11-d80831aa5f23 "400": description: Invalid request content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: MalformedJsonSyntax: summary: Malformed JSON payload value: error: code: 400 message: "Failed to parse the request body as JSON: trailing comma at line 3 column 1" metadata: request_id: 289d4f75-2220-4cbb-97cd-f0a64a87d470 "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: Forbidden: summary: Caller does not have permission value: error: code: 403 message: The caller does not have permission to execute the specified operation metadata: request_id: 31d1fdeb-3fc6-4ded-b647-429ca7e79ffa "422": description: Malformed request payload content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: PayloadMissingScore: summary: Missing required score field in JSON body value: error: code: 422 message: "Failed to deserialize the JSON body into the target type: missing field `score` at line 3 column 1" metadata: request_id: cbe190c1-b260-4016-99c9-c507e923a2a5 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/omni-ai/responses/{response_id}: get: tags: - Omni AI summary: Get Response By ID description: |- Poll a response for assistant output. Returns the current snapshot of an in-progress or completed response. While the status is `queued` or `running`, the content may be partial and may include `thinking` parts. Poll this endpoint periodically until the status reaches a terminal value (`succeeded`, `failed`, or `canceled`). Once terminal, the finalized assistant message is available in thread history via `GET /omni-ai/threads/{thread_id}/messages`. operationId: get_response_by_id parameters: - name: response_id in: path description: Response identifier (returned by create thread/message) required: true schema: type: string format: uuid - name: account_id in: query description: Account ID for the request required: true schema: type: integer format: int64 responses: "200": description: Current response snapshot with status and partial content content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/Response" type: object examples: ResponseSnapshot: summary: Succeeded response with assistant output value: data: content: parts: - text: "[AAPL](ticker:AAPL) is currently trading at ..." type: text - thoughts: - Fetching current market data for AAPL... type: thinking id: 019dbafd-db54-7523-a412-ec9195cc5d99 output_message_id: 019dbafd-db61-73a0-8bd9-d4034d132f81 status: succeeded thread_id: 019dbafd-db54-7523-a412-ec8a292246ad user_message_id: 019dbafd-db56-78a2-8a91-d54a39f44174 metadata: request_id: abc16101-2cbc-475a-84ef-98c8c588dcbb "400": description: Invalid query parameters content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: MissingAccountId: summary: Required account_id query parameter is missing value: error: code: 400 message: "Failed to deserialize query string: missing field `account_id`" metadata: request_id: f5acc83c-57e7-4966-a699-17a9b552199b "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: Forbidden: summary: Caller does not have permission value: error: code: 403 message: The caller does not have permission to execute the specified operation metadata: request_id: b2d2d764-61f9-41c4-91c8-dd4366fc35c8 "404": description: Response not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: ResponseNotFound: summary: Requested response does not exist value: error: code: 404 message: Response not found metadata: request_id: e232b453-b4a9-4594-a56f-85c1e62ef40f "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" delete: tags: - Omni AI summary: Cancel Response description: |- Cancel a response. Requests cancellation of a queued or running response. If the response has already reached a terminal status, this is an idempotent success. A canceled turn still produces a final assistant message with outcome `canceled` in the thread history. operationId: cancel_response parameters: - name: response_id in: path description: Response identifier to cancel required: true schema: type: string format: uuid - name: account_id in: query description: Account ID for the request required: true schema: type: integer format: int64 responses: "200": description: Cancellation accepted (idempotent) content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/CancelResponsePayload" type: object examples: CancellationResult: summary: Response cancellation result value: data: canceled: false metadata: request_id: fa26a786-f5d3-48b0-80eb-778e17af4964 "400": description: Invalid query parameters content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: MissingAccountId: summary: Required account_id query parameter is missing value: error: code: 400 message: "Failed to deserialize query string: missing field `account_id`" metadata: request_id: 10f877f8-130b-4f02-b40a-1b6ab5d8acdf "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: Forbidden: summary: Caller does not have permission value: error: code: 403 message: The caller does not have permission to execute the specified operation metadata: request_id: 1c610eec-b873-4092-93aa-f14b6f501e4b "404": description: Response not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: ResponseNotFound: summary: Requested response does not exist value: error: code: 404 message: Response not found metadata: request_id: a5bc6ea6-1b72-4f31-bb7d-2bd57151decc "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/omni-ai/threads: get: tags: - Omni AI summary: Get Threads description: |- List conversation threads. Returns thread metadata ordered by most recently created first. Use `page_size` and `page_token` for pagination. Thread objects contain only metadata (title, timestamps) — use the messages endpoint for conversation history. operationId: get_threads parameters: - name: account_id in: query description: Account ID for the request required: true schema: type: integer format: int64 - name: page_size in: query description: The number of items to return per page. Only used when page_token is not provided. required: false schema: type: integer format: int64 default: 100 maximum: 100 minimum: 1 - name: page_token in: query description: Token for retrieving the next or previous page of results. Contains encoded pagination state; when provided, page_size is ignored. required: false schema: type: string format: byte description: Base64URL-encoded pagination token example: eyJvZmZzZXQiOjEwMCwibGltaXQiOjEwMH0= responses: "200": description: Paginated list of thread metadata content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/ThreadList" type: object examples: ThreadsList: summary: Single thread in list response value: data: - created_at: 2026-04-23T15:15:54.929830+00:00 id: 019dbae9-73b3-7fe0-bd14-25fe57e91475 title: What is current price of AAPL? updated_at: 2026-04-23T15:15:54.929830+00:00 metadata: request_id: eb95e1b8-d245-41b1-bbd0-cc1073e68bfd "400": description: Invalid query parameters content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: MissingAccountId: summary: Required account_id query parameter is missing value: error: code: 400 message: "Failed to deserialize query string: missing field `account_id`" metadata: request_id: 3d8aa540-5f00-4efe-bf63-e55ee65ac14b "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" post: tags: - Omni AI summary: Create Thread description: |- Create a new conversation thread. Atomically creates a new thread and submits the first user turn. The response contains a `response_id` that should be polled via `GET /omni-ai/responses/{response_id}` for assistant output. Two creation modes are supported: - **instant** — provide `text` with a natural-language prompt. - **deep_insights** — provide a `target` ticker and optional `thesis` for long-form research. operationId: create_thread requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateThreadRequest" required: true responses: "200": description: Thread created. Poll the returned `response_id` for assistant output. content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/CreateThreadResponse" type: object examples: ThreadCreated: summary: Thread created successfully value: data: response_id: 019dbae9-73b4-7760-a947-8b4bcab57c49 thread_id: 019dbae9-73b3-7fe0-bd14-25fe57e91475 user_message_id: 019dbae9-73b8-75b2-9c06-ac348927696d metadata: request_id: f7a9ad4d-753a-403e-aa0e-ca151f991a81 "400": description: Invalid request (missing required fields or invalid mode) content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: MissingInstantText: summary: text is required in instant mode value: error: code: 400 message: text is required for instant mode metadata: request_id: c075d493-8499-40e3-8ce1-411e205f0380 "422": description: Malformed request payload content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: PayloadMissingType: summary: Missing required `type` field in JSON body value: error: code: 422 message: "Failed to deserialize the JSON body into the target type: missing field `type` at line 3 column 1" metadata: request_id: 625523fe-02ba-4a74-8544-81f43f204b59 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/omni-ai/threads/{thread_id}: get: tags: - Omni AI summary: Get Thread By ID description: |- Get a specific thread. Returns metadata (title, timestamps) for a single thread. Does not include messages — use `GET /omni-ai/threads/{thread_id}/messages` for conversation history. operationId: get_thread_by_id parameters: - name: thread_id in: path description: Thread identifier required: true schema: type: string format: uuid - name: account_id in: query description: Account ID for the request required: true schema: type: integer format: int64 responses: "200": description: Thread metadata content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/Thread" type: object examples: ThreadMetadata: summary: Thread metadata for a single thread value: data: created_at: 2026-04-23T15:15:54.929830+00:00 id: 019dbae9-73b3-7fe0-bd14-25fe57e91475 title: What is current price of AAPL? updated_at: 2026-04-23T15:15:54.929830+00:00 metadata: request_id: 5683a394-6dd1-4843-8591-f102ced2e636 "400": description: Invalid query parameters content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: MissingAccountId: summary: Required account_id query parameter is missing value: error: code: 400 message: "Failed to deserialize query string: missing field `account_id`" metadata: request_id: e949291a-3817-4e72-8298-90420c86e6be "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: Forbidden: summary: Caller does not have permission value: error: code: 403 message: The caller does not have permission to execute the specified operation metadata: request_id: 31d1fdeb-3fc6-4ded-b647-429ca7e79ffa "404": description: Thread not found or not owned by this user content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: ThreadNotFound: summary: Thread does not exist for this account/user value: error: code: 404 message: Thread not found metadata: request_id: f1556e8f-a7aa-43d3-b7d1-2229e266ada7 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/omni-ai/threads/{thread_id}/messages: get: tags: - Omni AI summary: Get Messages description: |- List finalized messages in a thread. Returns the latest page of **finalized** messages by default, with messages within each page ordered chronologically. Messages from in-progress assistant turns are excluded — use `GET /omni-ai/threads/{thread_id}/response` or `GET /omni-ai/responses/{response_id}` for live output. If the last finalized message has role `USER`, an active response likely exists and should be polled separately. operationId: get_messages parameters: - name: thread_id in: path description: Thread to list messages for required: true schema: type: string format: uuid - name: account_id in: query description: Account ID for the request required: true schema: type: integer format: int64 - name: page_size in: query description: The number of items to return per page. Only used when page_token is not provided. required: false schema: type: integer format: int64 default: 100 maximum: 100 minimum: 1 - name: page_token in: query description: Token for retrieving the next or previous page of results. Contains encoded pagination state; when provided, page_size is ignored. required: false schema: type: string format: byte description: Base64URL-encoded pagination token example: eyJvZmZzZXQiOjEwMCwibGltaXQiOjEwMH0= responses: "200": description: Paginated list of finalized messages; latest page by default, chronological within each page content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/MessageList" type: object examples: ThreadMessages: summary: User and assistant finalized messages value: data: - content: parts: - text: How are the markets doing today? type: text created_at: 2026-04-16T09:20:17.274943+00:00 id: 019d9597-5983-7691-8281-7ce264127740 outcome: completed role: USER seq: 1 thread_id: 019d9597-597c-7571-a0c9-a49c0e51f6eb - content: parts: - text: |- **Pre-market as of 7:30 AM ET** ... type: text - payload: actionButtons: - buttonId: btn_followup_0 label: Check my positions prompt: prompt: What are my current positions? type: suggested_actions created_at: 2026-04-16T09:20:17.309212+00:00 id: 019d9597-599c-7132-a7de-e5c21eaaab77 outcome: completed role: ASSISTANT seq: 2 thread_id: 019d9597-597c-7571-a0c9-a49c0e51f6eb metadata: request_id: 664c0f85-cdab-4fac-afe3-8ecc0148cd4a "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: Forbidden: summary: Caller does not have permission value: error: code: 403 message: The caller does not have permission to execute the specified operation metadata: request_id: e3e4df36-1c33-45b1-b06d-832c80adbbf6 "404": description: Thread not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: ThreadNotFound: summary: Requested thread does not exist value: error: code: 404 message: Thread not found metadata: request_id: a1c173e9-4fc0-44d0-b89f-4ac67ca45032 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" post: tags: - Omni AI summary: Create Message description: |- Continue an existing conversation thread. Appends a new user message to the thread and starts an assistant response. Only one response may be active per thread at a time — if the previous turn is still in progress, this endpoint returns **409 Conflict**. Wait for the active response to reach a terminal status before submitting the next turn. Poll the returned `response_id` via `GET /omni-ai/responses/{response_id}` for assistant output. operationId: create_message parameters: - name: thread_id in: path description: Thread to continue required: true schema: type: string format: uuid requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateMessageRequest" required: true responses: "200": description: Message accepted. Poll the returned `response_id` for assistant output. content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/CreateMessageResponse" type: object examples: MessageAccepted: summary: Thread message accepted successfully value: data: response_id: 019dbaec-8dd3-7fa3-89d0-5303609f125f thread_id: 019dbae9-73b3-7fe0-bd14-25fe57e91475 user_message_id: 019dbaec-8dd4-7f91-bce2-3ec8fba79eb7 metadata: request_id: 48775400-61f4-4c6c-bc6d-8f4996c571c7 "400": description: Invalid request content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: MalformedJsonSyntax: summary: Malformed JSON payload value: error: code: 400 message: "Failed to parse the request body as JSON: EOF while parsing an object at line 3 column 0" metadata: request_id: 8cf61bb3-a8c6-4f3e-abe8-5a5327001b55 "409": description: Thread already has an active response — wait for it to complete content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: ActiveResponseConflict: summary: Thread already has an active response value: error: code: 409 message: thread already has an active response metadata: request_id: 7b34ad9b-e09a-40d1-aab8-2185a8df5a31 "422": description: Malformed request payload content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: PayloadMissingAccountId: summary: Missing required account_id field in JSON body value: error: code: 422 message: "Failed to deserialize the JSON body into the target type: missing field `account_id` at line 3 column 3" metadata: request_id: 9fbd975d-be1e-4710-9004-1f54d0d4dfb6 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/omni-ai/threads/{thread_id}/response: get: tags: - Omni AI summary: Get Thread Response description: |- Get the active response for a thread. Convenience endpoint to look up the currently active response for a thread without knowing the `response_id`. Useful when reloading a thread whose last finalized message is a `USER` message — this indicates an assistant turn is likely in progress. Returns **404** if no active response exists (the thread is idle). operationId: get_thread_response parameters: - name: thread_id in: path description: Thread to check for active response required: true schema: type: string format: uuid - name: account_id in: query description: Account ID for the request required: true schema: type: integer format: int64 responses: "200": description: Current response snapshot or idle thread content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: oneOf: - $ref: "#/components/schemas/Response" - type: "null" type: object examples: ActiveThreadResponse: summary: Currently running response for a thread value: data: content: parts: - text: "" type: text - thoughts: - "[1/4] Running parallel analysis on AAPL -- fundamentals, technicals, sentiment, and macro..." type: thinking id: 019dbb03-cf23-74e1-9c31-ef0136ff7fed output_message_id: 019dbb03-cf32-74d1-906b-a148d4be3da9 status: running thread_id: 019dbb03-cf22-7da0-a663-f51c756efa07 user_message_id: 019dbb03-cf24-7b03-8286-5bfc2411b052 metadata: request_id: 927a85a6-b11b-4cc5-a2cd-3f46ae64e85d IdleThread: summary: Thread is idle value: data: null metadata: request_id: e0f1c3a2-5b6d-4f8e-9c1a-2d3e4f5b6c7d "403": description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: Forbidden: summary: Caller does not have permission value: error: code: 403 message: The caller does not have permission to execute the specified operation metadata: request_id: ef354353-f9ca-4d0c-a8ef-4566a5072434 "404": description: Thread not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: ThreadNotFound: summary: Thread doesn't exist value: error: code: 404 message: Thread not found metadata: request_id: dadd546f-eb7e-4b78-8d36-7d0a70b8a70d "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/saved-screeners: get: tags: - Screener summary: Get Screeners description: |- List saved screener configurations. Returns all screener configurations for the authenticated user. operationId: get_screeners responses: "200": description: List of saved screeners content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/ScreenerEntryList" type: object examples: SavedScreenerList: summary: List of saved screeners for the authenticated user value: data: - created_at: 2026-03-20T14:30:00Z filters: - left: name: market_cap op: name: GREATER_OR_EQUAL right: - value: 1000000000.0 id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 name: Tech Large Caps sorts: - direction: DESC field: name: market_cap updated_at: 2026-03-20T14:30:00Z - columns: - name: symbol - name: price - name: volume created_at: 2026-03-21T09:00:00Z filters: - left: name: volume op: name: GREATER_OR_EQUAL right: - value: 10000000.0 id: b2c3d4e5-f6a7-8901-bcde-f12345678901 name: High Volume updated_at: 2026-03-21T09:00:00Z metadata: request_id: 1a2b3c4d-5e6f-7890-1234-5a6b7c8d9e0f "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" post: tags: - Screener summary: Create Screener description: |- Create a saved screener configuration. Persists a screener configuration for the authenticated user. operationId: create_screener requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateScreenerRequest" required: true responses: "200": description: Screener created successfully content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/ScreenerEntry" type: object examples: SavedScreener: summary: A saved screener with filters and sort value: data: columns: - name: symbol - name: price - name: market_cap created_at: 2026-03-20T14:30:00Z filters: - left: name: market_cap op: name: GREATER_OR_EQUAL right: - value: 1000000000.0 id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 name: Tech Large Caps sorts: - direction: DESC field: name: market_cap updated_at: 2026-03-20T14:30:00Z metadata: request_id: 1a2b3c4d-5e6f-7890-1234-5a6b7c8d9e0f "400": description: Invalid request content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: MalformedPayload: summary: Malformed JSON in request body value: error: code: 400 message: "Failed to parse the request body as JSON: trailing comma at line 3 column 1" metadata: request_id: a91ced80-b496-44af-a923-b8b8f1fbdc83 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/saved-screeners/{screener_id}: get: tags: - Screener summary: Get Screener By ID description: |- Get a saved screener configuration by ID. Returns a single screener configuration for the authenticated user. operationId: get_screener_by_id parameters: - name: screener_id in: path description: Screener ID required: true schema: type: string format: uuid example: 550e8400-e29b-41d4-a716-446655440000 responses: "200": description: Screener details content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/ScreenerEntry" type: object examples: SavedScreener: summary: A saved screener configuration value: data: columns: - name: symbol - name: price - name: market_cap created_at: 2026-03-20T14:30:00Z filters: - left: name: market_cap op: name: GREATER_OR_EQUAL right: - value: 1000000000.0 id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 name: Tech Large Caps sorts: - direction: DESC field: name: market_cap updated_at: 2026-03-20T14:30:00Z metadata: request_id: 1a2b3c4d-5e6f-7890-1234-5a6b7c8d9e0f "400": description: Invalid request content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: InvalidScreenerId: summary: Invalid screener_id path parameter value: error: code: 400 message: "Cannot parse `screener_id` with value `123`: UUID parsing failed: invalid length: expected length 32 for simple format, found 3" metadata: request_id: 1940e272-8ce1-41bf-ad3e-7e2a9fd9c4df "404": description: Screener not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: ScreenerNotFound: summary: Screener does not exist value: error: code: 404 message: Some requested entity was not found metadata: request_id: cb63a84c-6b39-4c37-bfdd-588b8256c7ea "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" put: tags: - Screener summary: Replace Screener description: |- Update a saved screener configuration. Replaces the screener configuration for the authenticated user. If `name` is null, the existing name is preserved. operationId: replace_screener parameters: - name: screener_id in: path description: Screener ID required: true schema: type: string format: uuid example: 550e8400-e29b-41d4-a716-446655440000 requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateScreenerRequest" required: true responses: "200": description: Screener updated successfully content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/ScreenerEntry" type: object examples: UpdatedScreener: summary: Screener updated successfully value: data: columns: - name: symbol - name: price - name: market_cap created_at: 2026-04-23T13:37:04.041398Z filters: - left: name: market_cap op: name: GREATER_OR_EQUAL right: - value: 1000000000.0 id: 69fcb40a-1812-4856-b2d3-97dec805efee name: Tech Large Caps sorts: - direction: ASC field: name: market_cap updated_at: 2026-04-23T13:37:21.860106Z metadata: request_id: 71ac58a8-9b12-49b9-8301-6239febe4e56 "400": description: Invalid request content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: MalformedPayload: summary: Malformed JSON in request body value: error: code: 400 message: "Failed to parse the request body as JSON: trailing comma at line 3 column 1" metadata: request_id: b8d191a9-0f76-4867-996e-4845ae01d864 "404": description: Screener not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: ScreenerNotFound: summary: Screener does not exist value: error: code: 404 message: Some requested entity was not found metadata: request_id: 2cf7b8b2-f4c7-4db5-a617-b45324352fb7 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" delete: tags: - Screener summary: Delete Screener description: |- Delete a saved screener configuration. Deletes the screener configuration for the authenticated user. operationId: delete_screener parameters: - name: screener_id in: path description: Screener ID required: true schema: type: string format: uuid example: 550e8400-e29b-41d4-a716-446655440000 responses: "200": description: Screener deleted successfully "404": description: Screener not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: ScreenerNotFound: summary: Screener does not exist value: error: code: 404 message: Some requested entity was not found metadata: request_id: aafc54ec-939e-49a9-ab6e-bbabca005cb2 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/screener: post: tags: - Screener summary: Search Screener description: |- Search instruments using structured filters. Returns a columnar response where each row is an array of column objects. Each column contains a human-readable name, a field reference, an optional type hint (e.g. `CURR_USD`, `PERCENT`), and the value. Use `columns` to select which columns appear in each row. When omitted, the default field set is returned. operationId: search_screener requestBody: content: application/json: schema: $ref: "#/components/schemas/ScreenerSearchRequest" required: true responses: "200": description: Screener results content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/ScreenerRowList" type: object examples: TwoResults: summary: Filtered screener results with two instruments value: data: - - field: name: symbol name: Symbol value: AAPL - field: name: price name: Price type: CURR_USD value: 175.05 - field: name: market_cap name: Market Cap type: CURR_USD value: 3500000000000 - field: name: beta name: Beta value: 1.2 - field: lookback: ONE_WEEK name: change_pct name: Change (1W) type: PERCENT value: 2.35 - field: name: consensus_rating name: Consensus Rating value: STRONG_BUY - field: name: earnings_per_share period: QUARTER name: EPS (Q) type: CURR_USD value: 1.55 - - field: name: symbol name: Symbol value: F - field: name: price name: Price type: CURR_USD value: 12.5 - field: name: market_cap name: Market Cap type: CURR_USD value: 45000000000 - field: name: beta name: Beta value: 1.5 - field: lookback: ONE_WEEK name: change_pct name: Change (1W) type: PERCENT value: -0.85 - field: name: consensus_rating name: Consensus Rating value: HOLD - field: name: earnings_per_share period: QUARTER name: EPS (Q) type: CURR_USD value: 0.23 metadata: next_page_token: AAAAAAAAAAoAAAAAAAAAAg request_id: abc-123 "400": description: Invalid request content: application/json: schema: $ref: "#/components/schemas/ApiError" "422": description: Malformed request payload content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: PayloadUnknownField: summary: Unknown field in request payload value: error: code: 422 message: "Failed to deserialize the JSON body into the target type: unknown field `sort_by` at line 3 column 18" metadata: request_id: 69f02ce8-20e3-4bcd-a134-bb006eca5749 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/version: get: tags: - API version summary: Get the API version. description: Returns the current version string for this API endpoint. operationId: get_version responses: "200": description: API version information content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/Version" type: object examples: CurrentVersion: summary: Current API version value: data: version: 2025-10-31 error: null metadata: request_id: 2c3d4e5f-6a7b-8c9d-0e1f-2a3b4c5d6e7f "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/watchlists: get: tags: - Watchlist summary: Get Watchlists description: List watchlists for the authenticated user operationId: get_watchlists parameters: - name: page_size in: query description: The number of items to return per page. Only used when page_token is not provided. required: false schema: type: integer format: int64 default: 1000 maximum: 1000 minimum: 1 - name: page_token in: query description: Token for retrieving the next or previous page of results. Contains encoded pagination state; when provided, page_size is ignored. required: false schema: type: string format: byte description: Base64URL-encoded pagination token example: eyJvZmZzZXQiOjEwMCwibGltaXQiOjEwMH0= responses: "200": description: List of watchlists content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/WatchlistEntryList" type: object examples: WatchlistList: summary: List of user's watchlists value: data: - created_at: 2025-01-15T10:00:00.000000000Z id: 550e8400-e29b-41d4-a716-446655440000 name: Tech Stocks - created_at: 2025-01-10T14:30:00.000000000Z id: 660e8400-e29b-41d4-a716-446655440001 name: Dividend Portfolio error: null metadata: next_page_token: null page_number: 1 request_id: a1b2c3d4-e5f6-7890-1234-567890abcdef total_items: 2 total_pages: 1 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" post: tags: - Watchlist summary: Create Watchlist operationId: create_watchlist requestBody: description: Watchlist configuration content: application/json: schema: $ref: "#/components/schemas/CreateWatchlistRequest" required: true responses: "200": description: Watchlist created successfully content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/WatchlistEntry" type: object examples: NewWatchlist: summary: Newly created watchlist value: data: created_at: 2025-01-23T12:00:00.000000000Z id: 770e8400-e29b-41d4-a716-446655440002 name: Growth Stocks error: null metadata: request_id: b2c3d4e5-f6a7-8901-2345-678901bcdefg "400": description: Invalid request content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: MalformedPayload: summary: Malformed JSON in request body value: error: code: 400 message: "Failed to parse the request body as JSON: trailing comma at line 3 column 1" metadata: request_id: 72348112-c92d-4610-829a-f769c82a9a0f "409": description: Resource already exists content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: WatchlistAlreadyExists: summary: Duplicate resource value: error: code: 409 message: Resource already exists metadata: request_id: 0efec74c-7d58-4fef-b73b-df50731e4f6b "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/watchlists/{watchlist_id}: get: tags: - Watchlist summary: Get Watchlist By ID description: Get a watchlist by ID with all its items operationId: get_watchlist_by_id parameters: - name: watchlist_id in: path description: Watchlist ID required: true schema: type: string format: uuid example: 550e8400-e29b-41d4-a716-446655440000 responses: "200": description: Watchlist details with items content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/WatchlistDetail" type: object examples: WatchlistWithItems: summary: Watchlist with instrument items value: data: created_at: 2025-01-15T10:00:00.000000000Z id: 550e8400-e29b-41d4-a716-446655440000 items: - added_at: 2025-01-16T09:30:00.000000000Z added_price: "150.25" id: 660e8400-e29b-41d4-a716-446655440001 instrument: country_of_issue: US currency: USD easy_to_borrow: true id: a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8 instrument_type: COMMON_STOCK is_fractionable: false is_liquidation_only: false is_marginable: true is_ptp: false is_short_prohibited: false is_threshold_security: false is_tradable: true name: Apple Inc. symbol: AAPL venue: XNMS name: Tech Stocks error: null metadata: request_id: a1b2c3d4-e5f6-7890-1234-567890abcdef "404": description: Watchlist not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: WatchlistNotFound: summary: Watchlist does not exist value: error: code: 404 message: Some requested entity was not found metadata: request_id: 8e6cec7b-342c-4231-a4f0-e650b48db699 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" delete: tags: - Watchlist summary: Delete Watchlist description: Delete a watchlist and all its items operationId: delete_watchlist parameters: - name: watchlist_id in: path description: Watchlist ID required: true schema: type: string format: uuid example: 550e8400-e29b-41d4-a716-446655440000 responses: "200": description: Watchlist deleted successfully content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: type: "null" examples: DeletedWatchlist: summary: Watchlist deleted successfully value: data: null metadata: request_id: cb824f1b-ea6e-4045-8169-9503be2b24d7 "404": description: Watchlist not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: WatchlistNotFound: summary: Watchlist does not exist value: error: code: 404 message: Some requested entity was not found metadata: request_id: b8e5824d-391f-448c-a183-9d1582170a1c "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/watchlists/{watchlist_id}/items: post: tags: - Watchlist summary: Add Watchlist Item description: Add an instrument to a watchlist operationId: add_watchlist_item parameters: - name: watchlist_id in: path description: Watchlist ID required: true schema: type: string format: uuid example: 550e8400-e29b-41d4-a716-446655440000 requestBody: description: Instrument to add content: application/json: schema: $ref: "#/components/schemas/AddWatchlistItemRequest" required: true responses: "200": description: Item added successfully content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: $ref: "#/components/schemas/AddWatchlistItemData" type: object examples: ItemAdded: summary: Instrument added to watchlist value: data: item_id: 770e8400-e29b-41d4-a716-446655440002 error: null metadata: request_id: b2c3d4e5-f6a7-8901-2345-678901bcdefg "400": description: Invalid request or watchlist is full content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: MalformedPayload: summary: Malformed JSON in request body value: error: code: 400 message: "Failed to parse the request body as JSON: trailing comma at line 3 column 1" metadata: request_id: 3dc2f3ee-b66f-4b4e-9206-2c7f8aa933f6 WatchlistAtCapacity: summary: Watchlist exceeds maximum item limit value: error: code: 400 message: Watchlist cannot exceed 1000 items metadata: request_id: d9766cbe-74fa-4cc7-a0a8-9a7dd5b5294c "404": description: Watchlist or instrument not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: InstrumentNotFound: summary: Instrument does not exist value: error: code: 404 message: "Instrument not found: 69fcb40a-1812-4856-b2d3-97dec805efee" metadata: request_id: 6cf943be-2a63-4af5-85f4-60c14ffcee08 WatchlistNotFound: summary: Watchlist does not exist value: error: code: 404 message: Some requested entity was not found metadata: request_id: ce99b89c-e465-423c-959c-73c8305f9244 "409": description: Instrument already exists in watchlist content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: InstrumentAlreadyExistsInWatchlist: summary: Instrument already exists in watchlist value: error: code: 409 message: Instrument already exists in watchlist metadata: request_id: 95d49456-75c6-480a-9695-fae2b1a8befd "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" /v1/watchlists/{watchlist_id}/items/{item_id}: delete: tags: - Watchlist summary: Delete Watchlist Item description: Delete an instrument from a watchlist operationId: delete_watchlist_item parameters: - name: watchlist_id in: path description: Watchlist ID required: true schema: type: string format: uuid example: 550e8400-e29b-41d4-a716-446655440000 - name: item_id in: path description: Item ID required: true schema: type: string format: uuid example: 660e8400-e29b-41d4-a716-446655440001 responses: "200": description: Item deleted successfully content: application/json: schema: allOf: - $ref: "#/components/schemas/BaseResponse" - type: object required: - data properties: data: type: "null" examples: DeletedWatchlistItem: summary: Watchlist item deleted successfully value: data: null metadata: request_id: 5b0709e3-5868-4116-9a84-26f1b8c30503 "404": description: Watchlist or item not found content: application/json: schema: $ref: "#/components/schemas/ApiError" examples: WatchlistItemNotFound: summary: Watchlist or watchlist item was not found value: error: code: 404 message: Some requested entity was not found metadata: request_id: 8462e079-739c-421b-b2d2-35cf007b4fc7 "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ApiError" components: schemas: Account: type: object description: Represents a trading account required: - id - short_name - full_name - type - subtype - open_date - account_holder_entity_id - options_level - status properties: account_holder_entity_id: type: integer format: int64 description: The account holder entity identifier example: 987654321 close_date: type: - string - "null" format: date description: |- The date the account was closed, if applicable When a null/undefined value is observed, it indicates it does not apply. example: 2026-01-15 full_name: type: string description: The full legal name of the account example: Test Trading Account id: $ref: "#/components/schemas/i64" description: The unique identifier for the account open_date: type: string format: date description: The date the account was opened example: 2023-01-15 options_level: $ref: "#/components/schemas/i64" description: The options level of the account short_name: type: string description: The short name of the account example: TST-ACCOUNT-01 status: $ref: "#/components/schemas/AccountStatus" description: The current status of the account subtype: $ref: "#/components/schemas/AccountSubtype" description: The sub-type of account type: $ref: "#/components/schemas/AccountType" description: The type of account example: account_holder_entity_id: 987654321 close_date: null full_name: Test Trading Account id: 19816 open_date: 2023-01-15 options_level: 1 short_name: TST-ACCOUNT-01 status: ACTIVE subtype: MARGIN type: CUSTOMER AccountBalances: type: object description: Represents the balance details for a trading account required: - account_id - buying_power - currency - equity - long_market_value - settled_cash - withdrawable_cash - trade_cash - open_order_adjustment - unsettled_credits - unsettled_debits - margin_type - unrealized_pnl - daily_unrealized_pnl - daily_total_pnl - daily_pnl - daily_change - daily_realized_pnl - sod properties: account_id: $ref: "#/components/schemas/i64" description: The unique identifier for the account buying_power: type: string description: The total buying power available in the account. example: "500000.00" currency: type: string description: Currency identifier for all monetary values. example: USD daily_change: type: string description: Difference between current equity and start-of-day equity. example: "0.00" daily_pnl: type: string description: Total profit or loss since start of day. example: "1250.00" daily_realized_pnl: type: string description: Realized profit or loss since start of day. example: "700.00" daily_total_pnl: type: string description: Total profit or loss since start of day. example: "1250.00" daily_unrealized_pnl: type: string description: Total unrealized profit or loss across all positions relative to prior close. example: "550.00" equity: type: string description: The total equity in the account. example: "250000.00" long_market_value: type: string description: The total market value of all long positions. example: "170000.00" margin_details: oneOf: - type: "null" - $ref: "#/components/schemas/MarginDetails" description: |- Margin-account-only details. When a null/undefined value is observed, it indicates it does not apply. margin_type: $ref: "#/components/schemas/MarginType" description: The applicable margin model for the account multiplier: type: - string - "null" description: |- Applied multiplier for margin calculations. When a null/undefined value is observed, it indicates it does not apply. example: "2" open_order_adjustment: type: string description: Signed buying-power correction from open orders. example: "-5000.00" settled_cash: type: string description: The amount of cash that is settled and available for withdrawal or trading. example: "80000.00" short_market_value: type: - string - "null" description: |- The total market value of all short positions. When null/undefined, the value should be assumed to be zero. The field is omitted to simplify the response. example: "20000.00" sod: $ref: "#/components/schemas/AccountBalancesSod" description: Start-of-day snapshot balances. trade_cash: type: string description: Trade-date effective cash. example: "122086.50" unrealized_pnl: type: string description: Total unrealized profit or loss across all open positions. example: "1500.00" unsettled_credits: type: string description: Trade-date unsettled cash credits. example: "100.00" unsettled_debits: type: string description: Trade-date unsettled cash debits. example: "100.00" withdrawable_cash: type: string description: The amount of cash currently available to withdraw. example: "75000.00" example: account_id: 19816 buying_power: "90000.00" currency: USD daily_change: "0.00" daily_pnl: "1250.00" daily_realized_pnl: "700.00" daily_total_pnl: "1250.00" daily_unrealized_pnl: "550.00" equity: "100000.00" long_market_value: "40000.00" margin_details: day_trade_buying_power_usage: "0.00" day_trade_count: 2 initial_margin_excess: "50000.00" initial_margin_requirement: "50000.00" intraday_details: buying_power: "90000.00" multiplier: "2" maintenance_margin_excess: "75000.00" maintenance_margin_requirement: "25000.00" overnight_details: buying_power: "90000.00" multiplier: "2" pattern_day_trader: false top_contributors: - day_trade_buying_power_usage: "5000.00" initial_margin_requirement: "25000.00" maintenance_margin_requirement: "15000.00" market_value: "50000.00" underlying_instrument_id: a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8 usage: total: "100000.00" used: "5000.00" margin_type: REG_T multiplier: "2" open_order_adjustment: "-10000.00" settled_cash: "99775.05" short_market_value: "10000.00" sod: asof: 2023-09-27 buying_power: "90000.00" day_trade_buying_power: "200000.00" equity: "100000.00" long_market_value: "40000.00" maintenance_margin_excess: "50000.00" maintenance_margin_requirement: "50000.00" short_market_value: "10000.00" trade_cash: "70000.00" trade_cash: "70000.00" unrealized_pnl: "1500.00" unsettled_credits: "20000.00" unsettled_debits: "10000.00" withdrawable_cash: "75000.00" AccountBalancesSod: type: object required: - buying_power - equity - long_market_value - short_market_value properties: asof: type: - string - "null" format: date description: |- Timestamp for the start-of-day values. When a null/undefined value is observed, it indicates that there is no available data. example: 2023-09-27 buying_power: type: string description: Start-of-day buying power. example: "90000.00" day_trade_buying_power: type: - string - "null" description: |- Start-of-day day-trade buying power. When a null/undefined value is observed, it indicates it does not apply. deprecated: true example: "200000.00" equity: type: string description: Start-of-day equity. example: "100000.00" long_market_value: type: string description: Start-of-day long market value. example: "40000.00" maintenance_margin_excess: type: - string - "null" description: |- Start-of-day maintenance margin excess. When a null/undefined value is observed, it indicates it does not apply. example: "50000.00" maintenance_margin_requirement: type: - string - "null" description: |- Start-of-day maintenance margin requirement. When a null/undefined value is observed, it indicates it does not apply. example: "50000.00" short_market_value: type: string description: Start-of-day short market value. example: "10000.00" trade_cash: type: - string - "null" description: |- Start-of-day trade cash. When a null/undefined value is observed, it indicates it does not apply. example: "70000.00" AccountList: type: array items: $ref: "#/components/schemas/Account" AccountSettings: type: object properties: risk: oneOf: - type: "null" - $ref: "#/components/schemas/RiskSettings" description: |- Risk settings for the account When a null/undefined value is observed, it indicates that there is no available data. example: risk: max_notional: "5000000.00" AccountStatus: type: string description: Account status enum: - ACTIVE - INACTIVE - CLOSED AccountSubtype: type: string description: Account subtype classification providing more granular categorization enum: - CASH - MARGIN - OTHER AccountType: type: string description: Account type classification enum: - CUSTOMER - OTHER ActionButton: type: object description: Button metadata shared by chart and suggested-actions payloads. required: - buttonId - label properties: buttonId: type: string description: Stable button identifier within the content part. label: type: string description: User-visible label. prompt: oneOf: - type: "null" - $ref: "#/components/schemas/PromptButtonAction" description: |- Follow-up prompt to submit as the next user message. When a null/undefined value is observed, it indicates it does not apply. structuredAction: oneOf: - type: "null" - $ref: "#/components/schemas/StructuredActionButtonAction" description: |- Structured action in the same message to execute on click. When a null/undefined value is observed, it indicates it does not apply. AddWatchlistItemData: type: object description: Response data for adding a watchlist item required: - item_id properties: item_id: type: string format: uuid description: ID of the created item AddWatchlistItemRequest: type: object description: Request to add an instrument to a watchlist required: - instrument_id properties: instrument_id: $ref: "#/components/schemas/InstrumentIdOrSymbol" description: Instrument ID (UUID) or symbol (equity ticker or OSI option symbol). AllEventsEventType: type: string description: Event types supported by the all-events endpoint. enum: - EARNINGS - DIVIDEND - STOCK_SPLIT - IPO AnalystDistribution: type: object description: Analyst recommendation distribution required: - strong_buy - buy - hold - sell - strong_sell properties: buy: type: integer format: int64 description: Number of buy recommendations example: 28 hold: type: integer format: int64 description: Number of hold recommendations example: 6 sell: type: integer format: int64 description: Number of sell recommendations example: 2 strong_buy: type: integer format: int64 description: Number of strong buy recommendations example: 20 strong_sell: type: integer format: int64 description: Number of strong sell recommendations example: 0 AnalystRating: type: string description: Analyst rating category enum: - STRONG_BUY - BUY - HOLD - SELL - STRONG_SELL ApiError: type: object description: A direct mapping of tonic::Status, for use in HTTP responses. required: - code - message properties: code: type: integer format: int32 description: |- The error code is used to identify the nature of the error. It corresponds to an HTTP status code. example: 400 minimum: 0 details: $ref: "#/components/schemas/ErrorDetails" description: |- Additional error details, if any. This can include structured information such as field violations or error metadata. message: type: string description: A human-readable message providing more details about the error. example: Order quantity must be greater than zero AssetClass: type: string description: |- Asset class bucket for the instrument search endpoint. Coarser-grained than [`SecurityType`]. The `Equity` bucket includes common stocks, preferred shares, ADRs, ETFs, and exchange-traded mutual funds. enum: - EQUITY - OPTION - WARRANT - BOND - FX - OTHER BaseResponse: type: object required: - metadata properties: error: oneOf: - oneOf: - type: "null" - $ref: "#/components/schemas/ApiError" description: Structured error details when the request is unsuccessful. metadata: $ref: "#/components/schemas/ResponseMetadata" description: Response metadata, including the request ID and optional pagination info. CancelOrderRequest: type: object description: |- 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. required: - order_id - account_id properties: account_id: $ref: "#/components/schemas/i64" description: Account ID (from path parameter) order_id: type: string description: Order ID to cancel (from path parameter) CancelResponsePayload: type: object required: - canceled properties: canceled: type: boolean Capability: type: string description: |- Capability allowlist for structured actions. Clients declare which capabilities they support when starting a run. Omni AI will only emit structured actions that match the declared capabilities. enum: - PREFILL_ORDER - OPEN_CHART - OPEN_SCREENER - OPEN_ENTITLEMENT_CONSENT ChartPayload: type: object description: Typed chart payload rendered inline in assistant content. required: - chartId properties: actionButtons: type: array items: $ref: "#/components/schemas/ActionButton" description: Buttons associated with this chart. chartId: type: string description: Stable chart identifier scoped to the content part. dataChart: oneOf: - type: "null" - $ref: "#/components/schemas/DataChart" description: |- Explicit series-driven chart definition. When a null/undefined value is observed, it indicates it does not apply. example: actionButtons: - buttonId: btn_compare_aapl_spy label: Compare AAPL vs SPY prompt: prompt: Compare AAPL vs SPY over 1 year chartId: chart_revenue_growth dataChart: series: - name: Revenue points: - x: Q1 y: 100.0 - x: Q2 y: 150.0 ChartPoint: type: object description: Single chart coordinate. required: - x - y properties: x: type: string y: type: number format: double ChartSeries: type: object description: Named data series within a chart. required: - name properties: name: type: string points: type: array items: $ref: "#/components/schemas/ChartPoint" ClockDetail: type: object description: Current server time and market clock information required: - clock properties: clock: type: string format: date-time description: Current server time in UTC example: 2025-03-01T03:35:00.000000000Z example: clock: 2025-03-01T03:35:00.000000000Z ClosePositionRequest: type: object properties: cancel_orders: type: - boolean - "null" description: Whether to cancel existing open orders for the position before submitting closing orders. example: false example: cancel_orders: false ContentPartChartPayload: type: object description: Chart payload content part. required: - payload properties: payload: $ref: "#/components/schemas/ChartPayload" ContentPartCustomPayload: type: object description: Escape-hatch custom payload content part. required: - payload properties: payload: type: object ContentPartStructuredActionPayload: type: object description: Structured action content part. required: - action_id - action properties: action: $ref: "#/components/schemas/StructuredAction" action_id: type: string format: uuid ContentPartSuggestedActionsPayload: type: object description: Suggested actions payload content part. required: - payload properties: payload: $ref: "#/components/schemas/SuggestedActionsPayload" ContentPartTextPayload: type: object description: Text content part. required: - text properties: text: type: string ContentPartThinkingPayload: type: object description: Thinking content part shown on dynamic response polling. required: - thoughts properties: thoughts: type: array items: type: string ContractType: type: string description: The type of options contract enum: - CALL - PUT ConversationMode: type: string description: Thread creation mode. enum: - instant - deep_insights CreateEntitlementsRequest: type: object required: - agreement_id - entitlement_codes - account_ids properties: account_ids: type: array items: type: integer format: int64 agreement_id: type: string entitlement_codes: type: array items: $ref: "#/components/schemas/EntitlementCode" example: account_ids: - 100019 - 100021 agreement_id: 01JZ0000000000000000000000 entitlement_codes: - omni.account_data CreateFeedbackRequest: type: object required: - account_id - score properties: account_id: type: integer format: int64 description: Account ID for the request comment: type: string description: Optional feedback comment metadata: type: - object - "null" description: Optional metadata score: type: integer format: int32 description: Feedback score (-1, 0, +1 or 1-5) CreateFeedbackResponse: type: object required: - created_at properties: created_at: type: string feedback_id: type: - string - "null" format: uuid description: When a null/undefined value is observed, it indicates that there is no available data. CreateMessageRequest: type: object description: Continue-thread message creation request body. required: - account_id - text properties: account_id: type: integer format: int64 capabilities: type: array items: $ref: "#/components/schemas/Capability" text: type: string example: account_id: 19816 text: Compare that to AMD. CreateMessageResponse: type: object description: Response payload for continuing a thread with a new message. required: - response_id - thread_id - user_message_id properties: response_id: type: string format: uuid thread_id: type: string format: uuid user_message_id: type: string format: uuid CreateScreenerRequest: type: object description: Request body for creating or updating a saved screener configuration properties: columns: type: - array - "null" items: $ref: "#/components/schemas/FieldRef" description: Structured field references to include when running this screener field_filter: type: - array - "null" items: $ref: "#/components/schemas/FieldRef" description: "Deprecated: use `columns` instead. Ignored when `columns` is provided." deprecated: true filters: type: - array - "null" items: $ref: "#/components/schemas/SearchFilter" description: Structured search filter criteria name: type: - string - "null" description: The name for this screener configuration sorts: type: - array - "null" items: $ref: "#/components/schemas/SortSpec" description: Multi-field sort specifications CreateThreadRequest: type: object description: Create-thread request body. required: - account_id - type properties: account_id: type: integer format: int64 capabilities: type: array items: $ref: "#/components/schemas/Capability" target: oneOf: - type: "null" - $ref: "#/components/schemas/DeepInsightsTarget" text: type: - string - "null" thesis: type: - string - "null" type: $ref: "#/components/schemas/ConversationMode" example: account_id: 19816 text: What changed in NVDA today? type: instant CreateThreadResponse: type: object description: Response payload for thread creation. required: - response_id - thread_id - user_message_id properties: response_id: type: string format: uuid thread_id: type: string format: uuid user_message_id: type: string format: uuid CreateWatchlistRequest: type: object description: Create watchlist request payload. required: - name properties: name: type: string description: The desired watchlist name. DailySummary: type: object description: |- Daily aggregate (OHLV) summary for a single instrument. Returned by `GET /market-data/daily-summary`. Every field except `instrument_id` is `Option`: - Unresolvable `instrument_id` → all other fields `None` (including `symbol`). - Resolvable `instrument_id` with no realtime cache entry → `symbol` populated, OHLV/`trade_date` `None`. - `trade_date` reflects the session the OHLV represents (today during trading hours, the last trading date during weekends/holidays). required: - instrument_id properties: high: type: - string - "null" description: |- Session high. When a null/undefined value is observed, it indicates that there is no available data. instrument_id: type: string format: uuid description: Unique instrument identifier. Always populated; echoes the request ID. low: type: - string - "null" description: |- Session low. When a null/undefined value is observed, it indicates that there is no available data. open: type: - string - "null" description: |- Opening price for the session. When a null/undefined value is observed, it indicates that there is no available data. symbol: type: - string - "null" description: |- Display symbol for the security. `None` for unresolvable IDs. When a null/undefined value is observed, it indicates that there is no available data. trade_date: type: - string - "null" format: date description: |- Session date the OHLV represents, US/Eastern. When a null/undefined value is observed, it indicates that there is no available data. volume: type: - integer - "null" format: int64 description: |- Session cumulative trading volume. When a null/undefined value is observed, it indicates that there is no available data. example: high: "215.20" instrument_id: a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8 low: "210.10" open: "211.00" symbol: AAPL trade_date: 2026-04-23 volume: 88000000 DailySummaryList: type: array items: $ref: "#/components/schemas/DailySummary" DataChart: type: object description: Chart represented by explicit data series. properties: series: type: array items: $ref: "#/components/schemas/ChartSeries" DateUnit: type: string description: Time unit for date arithmetic in modifiers. enum: - DAY - WEEK - MONTH - YEAR DayType: type: string description: Day type for market hours - indicates the type of trading day enum: - TRADING_DAY - EARLY_CLOSE - HOLIDAY - WEEKEND DeepInsightsTarget: type: object description: Deep-insights target payload. required: - type - ticker properties: ticker: type: string type: $ref: "#/components/schemas/DeepInsightsTargetType" DeepInsightsTargetType: type: string description: Deep-insights target type. Launch supports ticker-only. enum: - ticker DeleteEntitlementResponse: type: object required: - entitlement_id - revoked properties: entitlement_id: type: string revoked: type: boolean DisplayType: type: string description: Display characteristics of a venue enum: - LIT - DARK - PERIODIC_AUCTION - RFQ EntitlementAgreementKey: type: string description: Stable entitlement agreement family key. enum: - omni_account_data_access EntitlementAgreementResource: type: object required: - agreement_id - agreement_key - version - title - document_content - document_sha256 - entitlement_codes properties: agreement_id: type: string agreement_key: $ref: "#/components/schemas/EntitlementAgreementKey" document_content: type: string document_sha256: type: string entitlement_codes: type: array items: $ref: "#/components/schemas/EntitlementCode" title: type: string version: type: integer format: int32 EntitlementAgreementResourceList: type: array items: $ref: "#/components/schemas/EntitlementAgreementResource" EntitlementCode: type: string description: Stable entitlement code granted by an agreement. enum: - omni.account_data EntitlementResource: type: object required: - entitlement_id - trading_account_id - entitlement_code - agreement_id - granted_at properties: agreement_id: type: string entitlement_code: $ref: "#/components/schemas/EntitlementCode" entitlement_id: type: string granted_at: type: string trading_account_id: type: integer format: int64 EntitlementResourceList: type: array items: $ref: "#/components/schemas/EntitlementResource" ErrorDetails: type: array items: type: object additionalProperties: true ErrorStatus: type: object description: Shared sanitized error payload. required: - code - message properties: code: type: string details: type: - object - "null" description: When a null/undefined value is observed, it indicates it does not apply. message: type: string Execution: type: object description: Represents a single fill of an order for an account. required: - id - order_id - symbol - instrument_id - side - quantity - price - transaction_time properties: id: type: string format: uuid description: Unique identifier for this execution report. example: 019d216d-9857-7e23-ae01-edc07126c9e4 instrument_id: type: string format: uuid description: Unique instrument identifier. example: 528ec5c3-cdbf-447c-b995-ec6c83cfbc02 order_id: type: string format: uuid description: Identifier of the order this execution belongs to. example: 01928b4d-c000-7000-8000-000000000001 price: type: string description: Fill price. example: "150.25" quantity: type: string description: Filled quantity. example: "100" side: $ref: "#/components/schemas/Side" description: Side of the fill. symbol: type: string description: Trading symbol. example: AAPL transaction_time: type: string format: date-time description: Transaction timestamp in nanosecond precision (UTC). example: 2026-03-24T19:58:43.798000Z example: id: 019d216d-9857-7e23-ae01-edc07126c9e4 instrument_id: 528ec5c3-cdbf-447c-b995-ec6c83cfbc02 order_id: 01928b4d-c000-7000-8000-000000000001 price: "150.25" quantity: "100" side: BUY symbol: AAPL transaction_time: 2026-03-24T19:58:43.798000Z ExecutionList: type: array items: $ref: "#/components/schemas/Execution" ExerciseStyle: type: string description: The exercise style of an options contract enum: - AMERICAN - EUROPEAN FieldLookback: type: string description: Historical lookback window for price/change fields. enum: - ONE_DAY - ONE_WEEK - ONE_MONTH - THREE_MONTHS - SIX_MONTHS - YEAR_TO_DATE - ONE_YEAR FieldPeriod: type: string description: Reporting period for financial data fields. enum: - QUARTER - TRAILING_TWELVE_MONTHS FieldRef: type: object description: A reference to a screener field. required: - name properties: lookback: oneOf: - type: "null" - $ref: "#/components/schemas/FieldLookback" description: Optional historical lookback window. name: type: string description: The field name. example: market_cap period: oneOf: - type: "null" - $ref: "#/components/schemas/FieldPeriod" description: Optional reporting period (e.g. quarter or TTM). value_type: oneOf: - type: "null" - $ref: "#/components/schemas/FieldType" description: The data type of the field value. Present only in responses. example: name: market_cap FieldType: type: string description: The data type of a screener field value. enum: - DECIMAL - INTEGER - STRING - ANALYST_RATING - DATE FilterOpSpec: type: object description: Operator specification with optional behavioral arguments. required: - name properties: args: type: array items: $ref: "#/components/schemas/OperatorArg" description: Optional arguments that modify operator behavior. name: $ref: "#/components/schemas/FilterOperator" description: The operator to apply. example: name: GREATER_OR_EQUAL FilterOperator: type: string description: |- Filter operators supported by the screener. Abbreviated and lowercase forms are accepted as serde aliases for backward compatibility with earlier API revisions; the canonical wire form is the SCREAMING_SNAKE_CASE rendering. enum: - 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 FilterValue: type: object description: "A filter value: either a literal or a variable reference." properties: value: oneOf: - type: number - type: string - type: "null" variable: oneOf: - type: "null" - $ref: "#/components/schemas/Variable" description: A variable reference. example: value: 1000000000.0 FiscalPeriodType: type: string description: Fiscal period type for earnings reports enum: - QUARTERLY - ANNUAL - TTM - BIANNUAL GtdAccepts: type: object description: Good-till-date order acceptance capabilities required: - date - timestamp properties: date: type: boolean description: Whether the venue accepts date-only expiration (YYYY-MM-DD) example: true timestamp: type: boolean description: Whether the venue accepts precise timestamp expiration example: true Instrument: allOf: - type: object required: - id - symbol - venue - country_of_issue - currency - is_marginable - easy_to_borrow - is_short_prohibited - is_threshold_security - is_liquidation_only - is_tradable - is_fractionable - is_ptp properties: adv: type: - string - "null" description: |- Average daily share volume from the security definition. When a null/undefined value is observed, it indicates that there is no available data. example: "75000000" country_of_issue: type: string description: The ISO country code of the instrument's issue example: US currency: type: string description: The ISO currency code in which the instrument is traded example: USD easy_to_borrow: type: boolean description: Indicates if the instrument is classified as Easy-To-Borrow example: true expiry: type: - string - "null" format: date description: |- Deprecated. Always null. When a null/undefined value is observed, it indicates it does not apply. deprecated: true id: type: string format: uuid description: Unique instrument identifier (UUID) example: 0f5a1a4e-5b3e-4d8f-9b7a-2b1d0e3f4a5b instrument_type: oneOf: - type: "null" - $ref: "#/components/schemas/SecurityType" description: |- The type of security (e.g., Common Stock, ETF) When a null/undefined value is observed, it indicates that there is no available data. is_fractionable: type: boolean description: Indicates if the instrument supports fractional-quantity orders example: false is_liquidation_only: type: boolean description: Indicates if the instrument is liquidation only and cannot be bought example: false is_marginable: type: boolean description: Indicates if the instrument is marginable example: true is_ptp: type: boolean description: |- Indicates if the instrument is a publicly traded partnership (PTP). PTP sales are subject to a 10% withholding tax for non-US tax residents. example: false is_short_prohibited: type: boolean description: Indicates if short selling is prohibited for the instrument example: false is_threshold_security: type: boolean description: Indicates if the instrument is on the Regulation SHO Threshold Security List example: false is_tradable: type: boolean description: Indicates if the instrument is tradable example: true long_margin_rate: type: - string - "null" description: |- The percent of a long position's value you must post as margin When a null/undefined value is observed, it indicates that there is no available data. example: "0.25" name: type: - string - "null" description: |- The full name of the instrument or its issuer When a null/undefined value is observed, it indicates that there is no available data. example: Apple Inc. notional_adv: type: - string - "null" description: |- Notional average daily volume (ADV multiplied by previous close price). When a null/undefined value is observed, it indicates that there is no available data. example: "15815250000" previous_close: type: - string - "null" description: |- Last close price from the security definition. When a null/undefined value is observed, it indicates that there is no available data. example: "210.87" short_margin_rate: type: - string - "null" description: |- The percent of a short position's value you must post as margin When a null/undefined value is observed, it indicates that there is no available data. example: "0.25" strike_price: type: - string - "null" description: |- Deprecated. Always null. When a null/undefined value is observed, it indicates it does not apply. deprecated: true symbol: type: string description: The trading symbol for the instrument example: AAPL venue: type: string description: The MIC code of the primary listing venue example: XNMS example: country_of_issue: US currency: USD easy_to_borrow: true id: 0f5a1a4e-5b3e-4d8f-9b7a-2b1d0e3f4a5b instrument_type: COMMON_STOCK is_fractionable: false is_liquidation_only: false is_marginable: true is_ptp: false is_short_prohibited: false is_threshold_security: false is_tradable: true long_margin_rate: "0.25" name: Apple Inc. short_margin_rate: "0.25" symbol: AAPL venue: XNMS - type: object properties: options_expiry_dates: type: - array - "null" items: type: string format: date description: |- Available options expiration dates for this instrument. Present only when `include_options_expiry_dates=true` in the request. When a null/undefined value is observed, it indicates it does not apply. description: Represents a tradable financial instrument. example: country_of_issue: US currency: USD easy_to_borrow: true id: 0f5a1a4e-5b3e-4d8f-9b7a-2b1d0e3f4a5b instrument_type: COMMON_STOCK is_fractionable: false is_liquidation_only: false is_marginable: true is_ptp: false is_short_prohibited: false is_threshold_security: false is_tradable: true long_margin_rate: "0.25" name: Apple Inc. short_margin_rate: "0.25" symbol: AAPL venue: XNMS InstrumentAllEventsData: type: object description: All-events payload grouped by date. required: - event_dates properties: event_dates: type: array items: $ref: "#/components/schemas/InstrumentEventsByDate" description: Events grouped by date in descending order. InstrumentAnalystConsensus: type: object description: Aggregated analyst consensus metrics required: - date properties: date: type: string format: date description: The date the consensus snapshot was generated example: 2024-11-15 distribution: oneOf: - type: "null" - $ref: "#/components/schemas/AnalystDistribution" description: |- Count of individual analyst recommendations by category When a null/undefined value is observed, it indicates that there is no available data. price_target: oneOf: - type: "null" - $ref: "#/components/schemas/PriceTarget" description: |- Aggregated analyst price target statistics When a null/undefined value is observed, it indicates that there is no available data. rating: oneOf: - type: "null" - $ref: "#/components/schemas/AnalystRating" description: |- Consensus analyst rating When a null/undefined value is observed, it indicates that there is no available data. example: date: 2024-11-15 distribution: buy: 28 hold: 6 sell: 2 strong_buy: 20 strong_sell: 0 price_target: average: "220.00" currency: USD high: "250.00" low: "180.00" rating: STRONG_BUY InstrumentBalanceSheetStatement: type: object description: A quarterly balance sheet statement for an instrument. required: - reported_currency - filing_date - accepted_date - year - period - period_type properties: accepted_date: type: string format: date-time description: The date and time when the filing was accepted by the SEC example: 2025-05-02T14:30:00Z account_payables: type: - string - "null" description: Account payables example: "68960000000" accounts_receivables: type: - string - "null" description: Accounts receivables accrued_expenses: type: - string - "null" description: Accrued expenses accumulated_other_comprehensive_income_loss: type: - string - "null" description: Accumulated other comprehensive income/loss additional_paid_in_capital: type: - string - "null" description: Additional paid-in capital capital_lease_obligations: type: - string - "null" description: Capital lease obligations (total) capital_lease_obligations_current: type: - string - "null" description: Capital lease obligations (current portion) cash_and_cash_equivalents: type: - string - "null" description: Cash and cash equivalents example: "29943000000" cash_and_short_term_investments: type: - string - "null" description: Cash and short-term investments combined example: "61533000000" common_stock: type: - string - "null" description: Common stock example: "79850000000" deferred_revenue: type: - string - "null" description: Deferred revenue deferred_revenue_non_current: type: - string - "null" description: Deferred revenue (non-current) deferred_tax_liabilities_non_current: type: - string - "null" description: Deferred tax liabilities (non-current) filing_date: type: string format: date description: The date the financial statement was filed example: 2025-05-01 goodwill: type: - string - "null" description: Goodwill example: "0" goodwill_and_intangible_assets: type: - string - "null" description: Goodwill and intangible assets combined intangible_assets: type: - string - "null" description: Intangible assets example: "0" inventory: type: - string - "null" description: Inventory example: "6128000000" long_term_debt: type: - string - "null" description: Long-term debt example: "95281000000" long_term_investments: type: - string - "null" description: Long-term investments example: "100544000000" minority_interest: type: - string - "null" description: Minority interest net_debt: type: - string - "null" description: Net debt (total debt minus cash) example: "76323000000" net_receivables: type: - string - "null" description: Net receivables example: "66243000000" other_assets: type: - string - "null" description: Other assets other_current_assets: type: - string - "null" description: Other current assets other_current_liabilities: type: - string - "null" description: Other current liabilities other_liabilities: type: - string - "null" description: Other liabilities other_non_current_assets: type: - string - "null" description: Other non-current assets other_non_current_liabilities: type: - string - "null" description: Other non-current liabilities other_payables: type: - string - "null" description: Other payables other_receivables: type: - string - "null" description: Other receivables other_total_stockholders_equity: type: - string - "null" description: Other total stockholders equity period: type: string description: The fiscal period identifier (e.g., "Q1", "Q2", "Q3", "Q4") example: Q1 period_type: $ref: "#/components/schemas/FiscalPeriodType" description: The type of fiscal period preferred_stock: type: - string - "null" description: Preferred stock prepaids: type: - string - "null" description: Prepaids property_plant_and_equipment_net: type: - string - "null" description: Property, plant and equipment net of depreciation example: "45336000000" reported_currency: type: string description: The currency in which the statement is reported (ISO 4217) example: USD retained_earnings: type: - string - "null" description: Retained earnings example: "-19154000000" short_term_debt: type: - string - "null" description: Short-term debt example: "10985000000" short_term_investments: type: - string - "null" description: Short-term investments example: "31590000000" tax_assets: type: - string - "null" description: Tax assets tax_payables: type: - string - "null" description: Tax payables total_assets: type: - string - "null" description: Total assets example: "352583000000" total_current_assets: type: - string - "null" description: Total current assets example: "143566000000" total_current_liabilities: type: - string - "null" description: Total current liabilities example: "145308000000" total_debt: type: - string - "null" description: Total debt example: "106266000000" total_equity: type: - string - "null" description: Total equity example: "44325000000" total_investments: type: - string - "null" description: Total investments total_liabilities: type: - string - "null" description: Total liabilities example: "308258000000" total_liabilities_and_total_equity: type: - string - "null" description: Total liabilities and total equity example: "352583000000" total_non_current_assets: type: - string - "null" description: Total non-current assets example: "209017000000" total_non_current_liabilities: type: - string - "null" description: Total non-current liabilities example: "162950000000" total_payables: type: - string - "null" description: Total payables total_stockholders_equity: type: - string - "null" description: Total stockholders equity example: "56727000000" treasury_stock: type: - string - "null" description: Treasury stock year: type: integer format: int32 description: The fiscal year of the statement example: 2025 example: accepted_date: 2025-05-02T14:30:00Z account_payables: "68960000000" cash_and_cash_equivalents: "29943000000" cash_and_short_term_investments: "61533000000" common_stock: "79850000000" filing_date: 2025-05-01 goodwill: "0" intangible_assets: "0" inventory: "6128000000" long_term_debt: "95281000000" long_term_investments: "100544000000" net_debt: "76323000000" net_receivables: "66243000000" period: Q1 period_type: QUARTERLY property_plant_and_equipment_net: "45336000000" reported_currency: USD retained_earnings: "-19154000000" short_term_debt: "10985000000" short_term_investments: "31590000000" total_assets: "352583000000" total_current_assets: "143566000000" total_current_liabilities: "145308000000" total_debt: "106266000000" total_equity: "44325000000" total_liabilities: "308258000000" total_liabilities_and_total_equity: "352583000000" total_non_current_assets: "209017000000" total_non_current_liabilities: "162950000000" total_stockholders_equity: "56727000000" year: 2025 InstrumentBalanceSheetStatementList: type: array items: $ref: "#/components/schemas/InstrumentBalanceSheetStatement" InstrumentCashFlowStatement: type: object description: A quarterly cash flow statement for an instrument. required: - reported_currency - filing_date - accepted_date - year - period - period_type properties: accepted_date: type: string format: date-time description: The date and time when the filing was accepted by the SEC example: 2025-05-02T14:30:00Z accounts_payables: type: - string - "null" description: Change in accounts payables accounts_receivables: type: - string - "null" description: Change in accounts receivables acquisitions_net: type: - string - "null" description: Net acquisitions capital_expenditure: type: - string - "null" description: Capital expenditure example: "-2600000000" cash_at_beginning_of_period: type: - string - "null" description: Cash and cash equivalents at beginning of period example: "33743000000" cash_at_end_of_period: type: - string - "null" description: Cash and cash equivalents at end of period example: "29943000000" change_in_working_capital: type: - string - "null" description: Change in working capital example: "-3200000000" common_dividends_paid: type: - string - "null" description: Common dividends paid common_stock_issuance: type: - string - "null" description: Common stock issuance common_stock_repurchased: type: - string - "null" description: Common stock repurchased (buybacks) example: "-23000000000" deferred_income_tax: type: - string - "null" description: Deferred income tax expense depreciation_and_amortization: type: - string - "null" description: Depreciation and amortization expense example: "2900000000" effect_of_forex_changes_on_cash: type: - string - "null" description: Effect of foreign exchange changes on cash filing_date: type: string format: date description: The date the financial statement was filed example: 2025-05-01 free_cash_flow: type: - string - "null" description: Free cash flow (operating cash flow minus capital expenditure) example: "25800000000" income_taxes_paid: type: - string - "null" description: Income taxes paid interest_paid: type: - string - "null" description: Interest paid inventory: type: - string - "null" description: Change in inventory investments_in_property_plant_and_equipment: type: - string - "null" description: Investments in property, plant, and equipment example: "-2600000000" long_term_net_debt_issuance: type: - string - "null" description: Long-term net debt issuance net_cash_provided_by_financing_activities: type: - string - "null" description: Net cash provided by financing activities example: "-28300000000" net_cash_provided_by_investing_activities: type: - string - "null" description: Net cash provided by investing activities example: "-3900000000" net_cash_provided_by_operating_activities: type: - string - "null" description: Net cash provided by operating activities example: "28400000000" net_change_in_cash: type: - string - "null" description: Net change in cash during the period example: "-3800000000" net_common_stock_issuance: type: - string - "null" description: Net common stock issuance net_debt_issuance: type: - string - "null" description: Net debt issuance (long-term + short-term) example: "-1500000000" net_dividends_paid: type: - string - "null" description: Net dividends paid (common + preferred) example: "-3800000000" net_income: type: - string - "null" description: Net income for the period example: "22200000000" net_preferred_stock_issuance: type: - string - "null" description: Net preferred stock issuance net_stock_issuance: type: - string - "null" description: Net stock issuance (common + preferred) operating_cash_flow: type: - string - "null" description: Operating cash flow (alternative calculation) example: "28400000000" other_financing_activities: type: - string - "null" description: Other financing activities other_investing_activities: type: - string - "null" description: Other investing activities other_non_cash_items: type: - string - "null" description: Other non-cash items other_working_capital: type: - string - "null" description: Change in other working capital period: type: string description: The fiscal period identifier (e.g., "Q1", "Q2", "Q3", "Q4") example: Q1 period_type: $ref: "#/components/schemas/FiscalPeriodType" description: The type of fiscal period preferred_dividends_paid: type: - string - "null" description: Preferred dividends paid purchases_of_investments: type: - string - "null" description: Purchases of investments example: "-9500000000" reported_currency: type: string description: The currency in which the statement is reported (ISO 4217) example: USD sales_maturities_of_investments: type: - string - "null" description: Sales and maturities of investments example: "8200000000" short_term_net_debt_issuance: type: - string - "null" description: Short-term net debt issuance stock_based_compensation: type: - string - "null" description: Stock-based compensation expense example: "2500000000" year: type: integer format: int32 description: The fiscal year of the statement example: 2025 example: accepted_date: 2025-05-02T14:30:00Z capital_expenditure: "-2600000000" cash_at_beginning_of_period: "33743000000" cash_at_end_of_period: "29943000000" change_in_working_capital: "-3200000000" common_stock_repurchased: "-23000000000" depreciation_and_amortization: "2900000000" filing_date: 2025-05-01 free_cash_flow: "25800000000" investments_in_property_plant_and_equipment: "-2600000000" net_cash_provided_by_financing_activities: "-28300000000" net_cash_provided_by_investing_activities: "-3900000000" net_cash_provided_by_operating_activities: "28400000000" net_change_in_cash: "-3800000000" net_debt_issuance: "-1500000000" net_dividends_paid: "-3800000000" net_income: "22200000000" operating_cash_flow: "28400000000" period: Q1 period_type: QUARTERLY purchases_of_investments: "-9500000000" reported_currency: USD sales_maturities_of_investments: "8200000000" stock_based_compensation: "2500000000" year: 2025 InstrumentCashFlowStatementList: type: array items: $ref: "#/components/schemas/InstrumentCashFlowStatement" InstrumentCore: type: object required: - id - symbol - venue - country_of_issue - currency - is_marginable - easy_to_borrow - is_short_prohibited - is_threshold_security - is_liquidation_only - is_tradable - is_fractionable - is_ptp properties: adv: type: - string - "null" description: |- Average daily share volume from the security definition. When a null/undefined value is observed, it indicates that there is no available data. example: "75000000" country_of_issue: type: string description: The ISO country code of the instrument's issue example: US currency: type: string description: The ISO currency code in which the instrument is traded example: USD easy_to_borrow: type: boolean description: Indicates if the instrument is classified as Easy-To-Borrow example: true expiry: type: - string - "null" format: date description: |- Deprecated. Always null. When a null/undefined value is observed, it indicates it does not apply. deprecated: true id: type: string format: uuid description: Unique instrument identifier (UUID) example: 0f5a1a4e-5b3e-4d8f-9b7a-2b1d0e3f4a5b instrument_type: oneOf: - type: "null" - $ref: "#/components/schemas/SecurityType" description: |- The type of security (e.g., Common Stock, ETF) When a null/undefined value is observed, it indicates that there is no available data. is_fractionable: type: boolean description: Indicates if the instrument supports fractional-quantity orders example: false is_liquidation_only: type: boolean description: Indicates if the instrument is liquidation only and cannot be bought example: false is_marginable: type: boolean description: Indicates if the instrument is marginable example: true is_ptp: type: boolean description: |- Indicates if the instrument is a publicly traded partnership (PTP). PTP sales are subject to a 10% withholding tax for non-US tax residents. example: false is_short_prohibited: type: boolean description: Indicates if short selling is prohibited for the instrument example: false is_threshold_security: type: boolean description: Indicates if the instrument is on the Regulation SHO Threshold Security List example: false is_tradable: type: boolean description: Indicates if the instrument is tradable example: true long_margin_rate: type: - string - "null" description: |- The percent of a long position's value you must post as margin When a null/undefined value is observed, it indicates that there is no available data. example: "0.25" name: type: - string - "null" description: |- The full name of the instrument or its issuer When a null/undefined value is observed, it indicates that there is no available data. example: Apple Inc. notional_adv: type: - string - "null" description: |- Notional average daily volume (ADV multiplied by previous close price). When a null/undefined value is observed, it indicates that there is no available data. example: "15815250000" previous_close: type: - string - "null" description: |- Last close price from the security definition. When a null/undefined value is observed, it indicates that there is no available data. example: "210.87" short_margin_rate: type: - string - "null" description: |- The percent of a short position's value you must post as margin When a null/undefined value is observed, it indicates that there is no available data. example: "0.25" strike_price: type: - string - "null" description: |- Deprecated. Always null. When a null/undefined value is observed, it indicates it does not apply. deprecated: true symbol: type: string description: The trading symbol for the instrument example: AAPL venue: type: string description: The MIC code of the primary listing venue example: XNMS example: country_of_issue: US currency: USD easy_to_borrow: true id: 0f5a1a4e-5b3e-4d8f-9b7a-2b1d0e3f4a5b instrument_type: COMMON_STOCK is_fractionable: false is_liquidation_only: false is_marginable: true is_ptp: false is_short_prohibited: false is_threshold_security: false is_tradable: true long_margin_rate: "0.25" name: Apple Inc. short_margin_rate: "0.25" symbol: AAPL venue: XNMS InstrumentCoreList: type: array items: $ref: "#/components/schemas/InstrumentCore" InstrumentDividendEvent: type: object description: Represents a dividend event for an instrument required: - ex_date - adjusted_dividend_amount properties: adjusted_dividend_amount: type: string description: The adjusted dividend amount accounting for any splits. example: "0.88" declaration_date: type: - string - "null" format: date description: |- The declaration date of the dividend When a null/undefined value is observed, it indicates that there is no available data. example: 2025-07-25 dividend_amount: type: - string - "null" description: |- The dividend amount per share. When a null/undefined value is observed, it indicates that there is no available data. example: "0.88" dividend_yield: type: - string - "null" description: |- The dividend yield as a percentage of the stock price. When a null/undefined value is observed, it indicates that there is no available data. example: "1.25" ex_date: type: string format: date description: The day the stock starts trading without the right to receive that dividend. example: 2025-08-15 frequency: type: - string - "null" description: |- The frequency of the dividend payments (e.g., "Quarterly", "Annual"). When a null/undefined value is observed, it indicates that there is no available data. example: Quarterly payment_date: type: - string - "null" format: date description: |- The payment date is the date on which a declared stock dividend is scheduled to be paid. When a null/undefined value is observed, it indicates that there is no available data. example: 2025-08-20 record_date: type: - string - "null" format: date description: |- The record date, set by a company's board of directors, is when a company compiles a list of shareholders of the stock for which it has declared a dividend. When a null/undefined value is observed, it indicates that there is no available data. example: 2025-08-01 example: adjusted_dividend_amount: "0.88" declaration_date: 2025-07-25 dividend_amount: "0.88" dividend_yield: "1.25" ex_date: 2025-08-15 frequency: Quarterly payment_date: 2025-08-20 record_date: 2025-08-01 InstrumentEarnings: type: object description: Represents instrument earnings data required: - date properties: date: type: string format: date description: The date when the earnings report was published example: 2025-07-25 eps_actual: type: - string - "null" description: |- The actual earnings per share (EPS) for the period When a null/undefined value is observed, it indicates that there is no available data. example: "1.35" eps_estimate: type: - string - "null" description: |- The estimated earnings per share (EPS) for the period When a null/undefined value is observed, it indicates that there is no available data. example: "1.30" eps_surprise_percent: type: - string - "null" description: |- The percentage difference between actual and estimated EPS When a null/undefined value is observed, it indicates that there is no available data. example: "3.8" revenue_actual: type: - string - "null" description: |- The actual total revenue for the period When a null/undefined value is observed, it indicates that there is no available data. example: "391035000000" revenue_estimate: type: - string - "null" description: |- The estimated total revenue for the period When a null/undefined value is observed, it indicates that there is no available data. example: "391025000000" revenue_surprise_percent: type: - string - "null" description: |- The percentage difference between actual and estimated revenue When a null/undefined value is observed, it indicates that there is no available data. example: "0.05" example: date: 2025-07-25 eps_actual: "1.35" eps_estimate: "1.30" eps_surprise_percent: "3.8" revenue_actual: "391035000000" revenue_estimate: "391025000000" revenue_surprise_percent: "0.05" InstrumentEventEnvelope: type: object description: Unified envelope for the all-events response. required: - type - symbol properties: dividend_event_data: oneOf: - type: "null" - $ref: "#/components/schemas/InstrumentDividendEvent" description: |- Dividend payload when type is DIVIDEND. When a null/undefined value is observed, it indicates it does not apply. earnings_event_data: oneOf: - type: "null" - $ref: "#/components/schemas/InstrumentEarnings" description: |- Earnings payload when type is EARNINGS. When a null/undefined value is observed, it indicates it does not apply. instrument_id: type: - string - "null" format: uuid description: |- Instrument identifier, when available. When a null/undefined value is observed, it indicates that there is no available data. ipo_event_data: oneOf: - type: "null" - $ref: "#/components/schemas/InstrumentEventIpoItem" description: |- IPO payload when type is IPO. When a null/undefined value is observed, it indicates it does not apply. name: type: - string - "null" description: |- Instrument name associated with the event, when available. When a null/undefined value is observed, it indicates that there is no available data. reporting_currency: type: - string - "null" description: |- The currency used for reporting financial data. When a null/undefined value is observed, it indicates that there is no available data. stock_split_event_data: oneOf: - type: "null" - $ref: "#/components/schemas/InstrumentSplitEvent" description: |- Stock split payload when type is STOCK_SPLIT. When a null/undefined value is observed, it indicates it does not apply. symbol: type: string description: Symbol associated with the event. type: $ref: "#/components/schemas/AllEventsEventType" description: Event type discriminator. InstrumentEventIpoItem: type: object description: IPO event in the all-events date grouping response. properties: actions: type: - string - "null" description: |- IPO action. When a null/undefined value is observed, it indicates that there is no available data. announced_at: type: - string - "null" format: date-time description: |- IPO announced timestamp. When a null/undefined value is observed, it indicates that there is no available data. company: type: - string - "null" description: |- IPO company name. When a null/undefined value is observed, it indicates that there is no available data. exchange: type: - string - "null" description: |- IPO exchange. When a null/undefined value is observed, it indicates that there is no available data. market_cap: type: - string - "null" description: |- IPO market cap. When a null/undefined value is observed, it indicates that there is no available data. price_range: type: - string - "null" description: |- IPO price range. When a null/undefined value is observed, it indicates that there is no available data. shares: type: - string - "null" description: |- IPO shares offered. When a null/undefined value is observed, it indicates that there is no available data. InstrumentEventType: type: string description: Event type for instrument events enum: - EARNINGS - DIVIDEND - SPLIT - MERGER_ACQUISITION - IPO InstrumentEventsByDate: type: object description: Instrument events for a single date. required: - date - events properties: date: type: string format: date description: Event date. events: type: array items: $ref: "#/components/schemas/InstrumentEventEnvelope" description: Flat event envelopes for this date. InstrumentEventsData: type: object description: Grouped instrument events by type required: - instrument_id - earnings - dividends - splits properties: dividends: type: array items: $ref: "#/components/schemas/InstrumentDividendEvent" description: Dividend distribution events earnings: type: array items: $ref: "#/components/schemas/InstrumentEarnings" description: Earnings announcement events instrument_id: type: string format: uuid description: Instrument identifier reporting_currency: type: - string - "null" description: |- The currency used for reporting financial data When a null/undefined value is observed, it indicates that there is no available data. splits: type: array items: $ref: "#/components/schemas/InstrumentSplitEvent" description: Stock split events example: dividends: - adjusted_dividend_amount: "0.25" declaration_date: 2024-10-31 dividend_amount: "0.25" dividend_yield: "0.44" ex_date: 2024-11-08 frequency: Quarterly payment_date: 2024-11-14 record_date: 2024-11-11 earnings: - date: 2024-10-31 eps_actual: "1.64" eps_estimate: "1.60" eps_surprise_percent: "2.5" revenue_actual: "94930000000" revenue_estimate: "94500000000" revenue_surprise_percent: "0.45" instrument_id: a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8 splits: - date: 2020-08-31 denominator: "1" numerator: "4" split_type: stock-split InstrumentFundamentals: type: object description: Supplemental fundamentals and company profile data for an instrument. properties: average_volume: type: - integer - "null" format: int64 description: |- The average daily trading volume over the past 30 days When a null/undefined value is observed, it indicates that there is no available data. example: 76000000 beta: type: - string - "null" description: |- The beta value, measuring the instrument's volatility relative to the overall market When a null/undefined value is observed, it indicates that there is no available data. example: "1.20" description: type: - string - "null" description: |- A detailed description of the instrument or company When a null/undefined value is observed, it indicates that there is no available data. example: Apple Inc. designs, manufactures, and markets smartphones, personal computers, tablets, wearables, and accessories worldwide. dividend_yield: type: - string - "null" description: |- The trailing twelve months (TTM) dividend yield When a null/undefined value is observed, it indicates that there is no available data. example: "0.005" earnings_per_share: type: - string - "null" description: |- The trailing twelve months (TTM) earnings per share When a null/undefined value is observed, it indicates that there is no available data. example: "5.61" fifty_two_week_high: type: - string - "null" description: |- The highest price over the last 52 weeks When a null/undefined value is observed, it indicates that there is no available data. example: "230.00" fifty_two_week_low: type: - string - "null" description: |- The lowest price over the last 52 weeks When a null/undefined value is observed, it indicates that there is no available data. example: "165.00" industry: type: - string - "null" description: |- The specific industry of the instrument's issuer When a null/undefined value is observed, it indicates that there is no available data. example: Consumer Electronics list_date: type: - string - "null" format: date description: |- The date the instrument was first listed When a null/undefined value is observed, it indicates that there is no available data. example: 1980-12-12 logo_url: type: - string - "null" description: |- URL to a representative logo image for the instrument or issuer When a null/undefined value is observed, it indicates that there is no available data. example: https://example.com/logos/aapl.png market_cap: type: - string - "null" description: |- The total market capitalization When a null/undefined value is observed, it indicates that there is no available data. example: "2800000000000" previous_close: type: - string - "null" description: |- The closing price from the previous trading day When a null/undefined value is observed, it indicates that there is no available data. example: "210.87" price_to_earnings: type: - string - "null" description: |- The price-to-earnings (P/E) ratio for the trailing twelve months (TTM) When a null/undefined value is observed, it indicates that there is no available data. example: "30.5" reporting_currency: type: - string - "null" description: |- The currency used for reporting financial data When a null/undefined value is observed, it indicates that there is no available data. example: USD sector: type: - string - "null" description: |- The business sector of the instrument's issuer When a null/undefined value is observed, it indicates that there is no available data. example: Technology example: average_volume: 76000000 beta: "1.20" description: Apple Inc. designs, manufactures, and markets smartphones, personal computers, tablets, wearables, and accessories worldwide. dividend_yield: "0.005" earnings_per_share: "5.61" fifty_two_week_high: "230.00" fifty_two_week_low: "165.00" industry: Consumer Electronics list_date: 1980-12-12 logo_url: https://example.com/logos/aapl.png market_cap: "2800000000000" previous_close: "210.87" price_to_earnings: "30.5" sector: Technology InstrumentIdOrSymbol: oneOf: - type: string format: uuid description: Instrument identifier - type: string description: Symbol (symbol for equities, OSI for options) description: "Instrument identifier: either an instrument identifier or a symbol (symbol for equities, OSI for options). Non-UUID inputs are resolved server-side." InstrumentIncomeStatement: type: object description: A quarterly income statement for an instrument. required: - reported_currency - filing_date - accepted_date - year - period - period_type properties: accepted_date: type: string format: date-time description: The date and time when the filing was accepted by the SEC example: 2025-05-02T14:30:00Z bottom_line_net_income: type: - string - "null" description: Bottom line net income after all adjustments example: "22200000000" cost_and_expenses: type: - string - "null" description: Total costs and expenses example: "68380000000" cost_of_revenue: type: - string - "null" description: Direct costs attributable to producing goods sold example: "52080000000" depreciation_and_amortization: type: - string - "null" description: Depreciation and amortization expenses example: "2800000000" ebit: type: - string - "null" description: Earnings before interest and taxes example: "26550000000" ebitda: type: - string - "null" description: Earnings before interest, taxes, depreciation, and amortization example: "29350000000" eps: type: - string - "null" description: Basic earnings per share example: "1.40" eps_diluted: type: - string - "null" description: Diluted earnings per share example: "1.38" filing_date: type: string format: date description: The date the financial statement was filed example: 2025-05-01 general_and_administrative_expenses: type: - string - "null" description: General administrative overhead expenses example: "2500000000" gross_profit: type: - string - "null" description: Revenue minus cost of revenue example: "42850000000" income_before_tax: type: - string - "null" description: Income before income tax expense example: "26400000000" income_tax_expense: type: - string - "null" description: Income tax expense for the period example: "4200000000" interest_expense: type: - string - "null" description: Interest paid on debt example: "1450000000" interest_income: type: - string - "null" description: Interest earned on investments and cash example: "1200000000" net_income: type: - string - "null" description: Total net income for the period example: "22200000000" net_income_deductions: type: - string - "null" description: Deductions from net income net_income_from_continuing_operations: type: - string - "null" description: Net income from continuing operations example: "22200000000" net_income_from_discontinued_operations: type: - string - "null" description: Net income from discontinued operations net_interest_income: type: - string - "null" description: Net interest income (interest income minus interest expense) example: "-250000000" non_operating_income_excluding_interest: type: - string - "null" description: Non-operating income excluding interest example: "100000000" operating_expenses: type: - string - "null" description: Total operating expenses example: "16300000000" operating_income: type: - string - "null" description: Income from core business operations example: "26550000000" other_adjustments_to_net_income: type: - string - "null" description: Other adjustments to net income other_expenses: type: - string - "null" description: Other miscellaneous expenses example: "0" period: type: string description: The fiscal period identifier (e.g., "Q1", "Q2", "Q3", "Q4") example: Q1 period_type: $ref: "#/components/schemas/FiscalPeriodType" description: The type of fiscal period reported_currency: type: string description: The currency in which the statement is reported (ISO 4217) example: USD research_and_development_expenses: type: - string - "null" description: Expenditure on research and development activities example: "7700000000" revenue: type: - string - "null" description: Total revenue from sales of goods and services example: "94930000000" selling_and_marketing_expenses: type: - string - "null" description: Expenditure on marketing and sales activities example: "6100000000" selling_general_and_administrative_expenses: type: - string - "null" description: Combined selling, general, and administrative expenses example: "8600000000" total_other_income_expenses_net: type: - string - "null" description: Net of other income and expenses example: "-150000000" weighted_average_shs_out: type: - string - "null" description: Weighted average shares outstanding (basic) example: "15800000000" weighted_average_shs_out_dil: type: - string - "null" description: Weighted average shares outstanding (diluted) example: "16000000000" year: type: integer format: int32 description: The fiscal year of the statement example: 2025 example: accepted_date: 2025-05-02T14:30:00Z bottom_line_net_income: "22200000000" cost_and_expenses: "68380000000" cost_of_revenue: "52080000000" depreciation_and_amortization: "2800000000" ebit: "26550000000" ebitda: "29350000000" eps: "1.40" eps_diluted: "1.38" filing_date: 2025-05-01 general_and_administrative_expenses: "2500000000" gross_profit: "42850000000" income_before_tax: "26400000000" income_tax_expense: "4200000000" interest_expense: "1450000000" interest_income: "1200000000" net_income: "22200000000" net_income_deductions: null net_income_from_continuing_operations: "22200000000" net_income_from_discontinued_operations: null net_interest_income: "-250000000" non_operating_income_excluding_interest: "100000000" operating_expenses: "16300000000" operating_income: "26550000000" other_adjustments_to_net_income: null other_expenses: "0" period: Q1 period_type: QUARTERLY reported_currency: USD research_and_development_expenses: "7700000000" revenue: "94930000000" selling_and_marketing_expenses: "6100000000" selling_general_and_administrative_expenses: "8600000000" total_other_income_expenses_net: "-150000000" weighted_average_shs_out: "15800000000" weighted_average_shs_out_dil: "16000000000" year: 2025 InstrumentIncomeStatementList: type: array items: $ref: "#/components/schemas/InstrumentIncomeStatement" InstrumentSplitEvent: type: object description: Represents a stock split event for an instrument required: - date - numerator - denominator - split_type properties: date: type: string format: date description: The date of the stock split example: 2025-07-20 denominator: type: string description: The denominator of the split ratio numerator: type: string description: The numerator of the split ratio split_type: type: string description: The type of stock split (e.g., "stock-split", "stock-dividend", "bonus-issue") example: date: 2025-08-15 denominator: "4" numerator: "1" split_type: stock-split ListingType: type: string description: The listing type of an options contract enum: - STANDARD - FLEX - OTC MarginDetails: type: object required: - pattern_day_trader - day_trade_count - intraday_details - overnight_details - maintenance_margin_requirement - maintenance_margin_excess - initial_margin_requirement - initial_margin_excess properties: day_trade_buying_power_usage: type: - string - "null" description: |- The amount of day-trade buying power used during the current trading day. When null/undefined, the value should be assumed to be zero. The field is omitted to simplify the response. deprecated: true example: "50000.00" day_trade_count: type: integer format: int32 description: The number of day trades executed over the 5 most recent trading days. deprecated: true minimum: 0 initial_margin_excess: type: string description: Initial margin excess for trade-date balances. example: "50000.00" initial_margin_requirement: type: string description: Initial margin requirement for trade-date balances. example: "50000.00" intraday_details: $ref: "#/components/schemas/MarginSessionDetails" description: Intraday session margin calculation details. maintenance_margin_excess: type: string description: Maintenance margin excess for trade-date balances. example: "75000.00" maintenance_margin_requirement: type: string description: Maintenance margin requirement for trade-date balances. example: "25000.00" overnight_details: $ref: "#/components/schemas/MarginSessionDetails" description: Overnight session margin calculation details. pattern_day_trader: type: boolean description: "`true` if the account is currently flagged as a PDT, otherwise `false`." deprecated: true top_contributors: type: array items: $ref: "#/components/schemas/MarginTopContributor" description: Optional top margin contributors, returned only when explicitly requested. usage: oneOf: - type: "null" - $ref: "#/components/schemas/MarginDetailsUsage" description: |- Current usage totals. When a null/undefined value is observed, it indicates that there is no available data. MarginDetailsUsage: type: object required: - used - total properties: total: type: string description: The total margin available in the current model. example: "100000.00" used: type: string description: The amount of margin that is currently being utilized. example: "5000.00" MarginSessionDetails: type: object required: - buying_power properties: buying_power: type: string description: Maximum buying power available in the account during the session. example: "500000.00" multiplier: type: - string - "null" description: Effective multiplier for margin calculations during the session. example: "2" example: buying_power: "500000.00" multiplier: "2" MarginTopContributor: type: object required: - underlying_instrument_id - initial_margin_requirement - maintenance_margin_requirement - market_value - day_trade_buying_power_usage properties: day_trade_buying_power_usage: type: string description: |- Day-trade buying power consumed by fills against this underlying on the current trade date. Populated only for pattern day trader accounts. deprecated: true example: "5000.00" initial_margin_requirement: type: string description: Initial margin requirement attributable to this underlying. example: "25000.00" maintenance_margin_requirement: type: string description: Maintenance margin requirement attributable to this underlying. example: "15000.00" market_value: type: string description: Net market value attributable to this underlying. example: "50000.00" underlying_instrument_id: type: string format: uuid description: UUID of the underlying security contributing to margin requirement. example: a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8 MarginType: type: string description: An account's margin type enum: - OTHER - NONE - PORTFOLIO_MARGIN - RISK_BASED_HAIRCUT_BROKER_DEALER - REG_T - RISK_BASED_HAIRCUT_MARKET_MAKER - CIRO - FUTURES_NLV - FUTURES_TOT_EQ MarketDataSnapshot: type: object description: Market data snapshot for a single security. required: - instrument_id - symbol properties: cumulative_volume: type: - integer - "null" format: int64 description: |- Cumulative traded volume reported on the most recent trade, in shares for equities or contracts for options. Absent when no trade is available. When a null/undefined value is observed, it indicates that there is no available data. minimum: 0 greeks: oneOf: - type: "null" - $ref: "#/components/schemas/SnapshotGreeks" description: |- Theoretical price and Greeks for option instruments. `None` for equities, and for options whose Greeks have not yet been observed When a null/undefined value is observed, it indicates that there is no available data. instrument_id: type: string description: Unique instrument identifier. last_quote: oneOf: - type: "null" - $ref: "#/components/schemas/SnapshotQuote" description: |- Most recent quote if available. When a null/undefined value is observed, it indicates that there is no available data. last_trade: oneOf: - type: "null" - $ref: "#/components/schemas/SnapshotLastTrade" description: |- Most recent last-sale trade if available. When a null/undefined value is observed, it indicates that there is no available data. name: type: - string - "null" description: |- Security name if available. When a null/undefined value is observed, it indicates that there is no available data. session: oneOf: - type: "null" - $ref: "#/components/schemas/SnapshotSession" description: |- Session metrics computed from previous close and last trade, if available. When a null/undefined value is observed, it indicates that there is no available data. symbol: type: string description: Display symbol for the security. example: cumulative_volume: 12345678 instrument_id: a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8 last_quote: ask: "210.14" ask_size: 200 bid: "210.10" bid_size: 300 midpoint: "210.12" last_trade: price: "210.12" size: 100 name: Apple Inc. session: change: "1.82" change_percent: "0.8737" previous_close: "208.30" symbol: AAPL MarketDataSnapshotList: type: array items: $ref: "#/components/schemas/MarketDataSnapshot" MarketHoursDetail: type: object description: Comprehensive market hours information for a specific market and date required: - market - market_name - date - timezone - current_time - status - today_sessions - next_sessions properties: current_time: type: string format: date-time description: Current time in market timezone with offset example: 2025-10-15T14:30:00-04:00 date: type: string format: date description: The date for which market hours are provided example: 2025-10-15 market: $ref: "#/components/schemas/MarketType" description: Market type identifier market_name: type: string description: Human-readable market name example: US Equities next_sessions: $ref: "#/components/schemas/TradingSessions" description: Next trading day's session schedules (without time_until fields) status: $ref: "#/components/schemas/MarketStatus" description: Market status information timezone: type: string description: IANA timezone identifier for the market example: America/New_York today_sessions: $ref: "#/components/schemas/TradingSessions" description: Trading session schedules for the requested date with time_until fields example: current_time: 2025-10-15T14:30:00-04:00 date: 2025-10-15 market: us_equities market_name: US Equities next_sessions: after_hours: close: 2025-10-16T20:00:00-04:00 open: 2025-10-16T16:00:00-04:00 pre_market: close: 2025-10-16T09:30:00-04:00 open: 2025-10-16T04:00:00-04:00 regular: close: 2025-10-16T16:00:00-04:00 open: 2025-10-16T09:30:00-04:00 status: current_session: regular day_type: TRADING_DAY is_open: true timezone: America/New_York today_sessions: after_hours: close: 2025-10-15T20:00:00-04:00 open: 2025-10-15T16:00:00-04:00 time_until_open: PT1H30M pre_market: close: 2025-10-15T09:30:00-04:00 open: 2025-10-15T04:00:00-04:00 regular: close: 2025-10-15T16:00:00-04:00 open: 2025-10-15T09:30:00-04:00 time_until_close: PT1H30M MarketHoursDetailList: type: array items: $ref: "#/components/schemas/MarketHoursDetail" MarketSessionType: type: string description: Session type for market hours enum: - pre_market - regular - after_hours MarketStatus: type: object description: Market status information required: - day_type - is_open properties: current_session: oneOf: - type: "null" - $ref: "#/components/schemas/MarketSessionType" description: |- Current session type if market is open, null if closed When a null/undefined value is observed, it indicates it does not apply. day_type: $ref: "#/components/schemas/DayType" description: The type of trading day is_open: type: boolean description: Whether the market is currently open (real-time) example: true example: current_session: regular day_type: TRADING_DAY is_open: true MarketType: type: string description: Market type for market hours calendar endpoint enum: - us_equities - us_options Message: type: object description: Final immutable message. required: - id - thread_id - created_at - seq - role - outcome - content properties: content: $ref: "#/components/schemas/MessageContent" created_at: type: string error: oneOf: - type: "null" - $ref: "#/components/schemas/ErrorStatus" description: When a null/undefined value is observed, it indicates it does not apply. id: type: string format: uuid outcome: $ref: "#/components/schemas/MessageOutcome" role: $ref: "#/components/schemas/MessageRole" seq: type: integer format: int64 thread_id: type: string format: uuid MessageContent: type: object description: Finalized immutable message content container. Never includes thinking parts. required: - parts properties: parts: type: array items: $ref: "#/components/schemas/MessageContentPart" MessageContentPart: oneOf: - allOf: - $ref: "#/components/schemas/ContentPartTextPayload" - type: object required: - type properties: type: type: string enum: - text title: ContentPartText - allOf: - $ref: "#/components/schemas/ContentPartStructuredActionPayload" - type: object required: - type properties: type: type: string enum: - structured_action title: ContentPartStructuredAction - allOf: - $ref: "#/components/schemas/ContentPartChartPayload" - type: object required: - type properties: type: type: string enum: - chart title: ContentPartChart - allOf: - $ref: "#/components/schemas/ContentPartSuggestedActionsPayload" - type: object required: - type properties: type: type: string enum: - suggested_actions title: ContentPartSuggestedActions - allOf: - $ref: "#/components/schemas/ContentPartCustomPayload" - type: object required: - type properties: type: type: string enum: - custom title: ContentPartCustom description: Final immutable content part visible on persisted messages. MessageList: type: array items: $ref: "#/components/schemas/Message" MessageOutcome: type: string description: Immutable terminal outcome for a finalized assistant message. enum: - completed - errored - canceled MessageRole: type: string description: Finalized message role in the public contract. enum: - USER - ASSISTANT Modifier: type: object description: Arithmetic modifier applied to a variable value. required: - name - args properties: args: type: array items: oneOf: - type: number - type: string name: $ref: "#/components/schemas/ModifierOp" description: The modifier operation. example: args: - 30 - DAY name: SUBTRACT ModifierOp: type: string description: Modifier operation applied to a variable. enum: - ADD - SUBTRACT NewOrderMultilegLegRequest: type: object description: A single leg in a multileg strategy request. required: - security - ratio - side properties: id: type: - string - "null" description: Optional leg reference identifier. position_effect: oneOf: - type: "null" - $ref: "#/components/schemas/PositionEffect" description: Optional leg position effect. ratio: type: string description: Ratio for the leg. security: $ref: "#/components/schemas/SecurityIdentifier" description: Security identifier for the leg. side: $ref: "#/components/schemas/Side" description: Leg side. NewOrderMultilegRequest: type: object description: Request to submit a new multileg order strategy. required: - order_type - time_in_force - legs properties: id: type: - string - "null" description: Optional client-provided unique ID (idempotency). Required to be unique per account. example: my-mleg-ref-20251001-001 maxLength: 64 legs: type: array items: $ref: "#/components/schemas/NewOrderMultilegLegRequest" description: Legs that compose the strategy. minItems: 1 limit_price: type: - string - "null" description: Strategy price, required for LIMIT orders. example: "0.50" order_type: $ref: "#/components/schemas/RequestOrderType" description: Type of order (currently MARKET or LIMIT for multileg strategy submission) quantity: type: string description: Optional strategy-level quantity. Multiplies leg quantities. Defaults to 1. example: "1" time_in_force: $ref: "#/components/schemas/RequestTimeInForce" description: Time in force example: id: my-mleg-ref-20251001-001 legs: - id: "1" position_effect: OPEN qty: "100" security: 0193bb84-447a-706f-996f-097254663f02 side: BUY - id: "2" position_effect: OPEN qty: "1" security: 0193bb84-4db4-78ec-b4fd-cba8be61cf8a side: SELL - id: "3" position_effect: OPEN qty: "1" security: 0193bb84-5264-7f20-8fd3-35df82cd6ef0 side: BUY limit_price: "0.50" order_type: LIMIT quantity: "1" time_in_force: DAY NewOrderRequest: type: object description: Request to submit a new order (PlaceOrderRequest from spec) required: - side - quantity - order_type - time_in_force properties: expires_at: type: - string - "null" format: date-time description: The timestamp when the order should expire (UTC). Required when time_in_force is GOOD_TILL_DATE. example: 2025-10-15T16:00:00.000000000Z extended_hours: type: - boolean - "null" description: Allow trading outside regular trading hours. Some brokers disallow options outside RTH. id: type: - string - "null" description: Optional client-provided unique ID (idempotency). Required to be unique per account. example: my-ref-id-20251001-002 maxLength: 64 instrument_id: oneOf: - type: "null" - $ref: "#/components/schemas/InstrumentIdOrSymbol" description: Instrument ID (UUID) or symbol (equity ticker or OSI option symbol). Either `symbol` or `instrument_id` must be provided. limit_offset: type: - string - "null" description: Limit offset for trailing stop-limit orders (signed) example: "0.50" limit_price: type: - string - "null" description: Limit price (required for LIMIT and STOP_LIMIT orders) example: "48.00" order_type: $ref: "#/components/schemas/RequestOrderType" description: Type of order position_effect: $ref: "#/components/schemas/PositionEffect" description: Required for options. Specifies whether the order opens or closes a position. quantity: type: string description: |- Quantity to trade. For COMMON_STOCK: shares (may be fractional if supported). For OPTION (single-leg): contracts (must be an integer) example: "1" side: $ref: "#/components/schemas/Side" description: Side of the order stop_price: type: - string - "null" description: Stop price (required for STOP and STOP_LIMIT orders) example: "52.00" symbol: type: - string - "null" description: |- 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. example: TSLA time_in_force: $ref: "#/components/schemas/RequestTimeInForce" description: Time in force trailing_offset: type: - string - "null" description: Trailing offset amount (required for trailing orders) example: "2.00" trailing_offset_type: oneOf: - type: "null" - $ref: "#/components/schemas/TrailingOffsetType" description: Trailing offset type (PRICE or PERCENT_BPS) example: order_type: MARKET quantity: "1" side: BUY symbol: TSLA time_in_force: DAY NewsInstrument: type: object description: Instrument associated with a news item. required: - instrument_id properties: instrument_id: type: string format: uuid description: Instrument identifier. name: type: - string - "null" description: |- Instrument name/description, if available. When a null/undefined value is observed, it indicates that there is no available data. symbol: type: - string - "null" description: |- Trading symbol, if available. When a null/undefined value is observed, it indicates that there is no available data. example: instrument_id: f47ac10b-58cc-4372-a567-0e02b2c3d479 name: Apple Inc. symbol: AAPL NewsItem: type: object description: A single news item and its associated instruments. required: - news_type - published_at - publisher - title - url - instruments properties: image_url: type: - string - "null" description: |- URL of an associated image if provided by the source. When a null/undefined value is observed, it indicates that there is no available data. instruments: type: array items: $ref: "#/components/schemas/NewsInstrument" description: Instruments associated with this news item. news_type: $ref: "#/components/schemas/NewsType" description: Classification of the item. published_at: type: string format: date-time description: The published date/time of the article in UTC. publisher: type: string description: The publisher or newswire source. site: type: - string - "null" description: |- The primary domain/site of the publisher. When a null/undefined value is observed, it indicates that there is no available data. text: type: - string - "null" description: |- The full or excerpted article body. When a null/undefined value is observed, it indicates that there is no available data. title: type: string description: The headline/title of the article. url: type: string description: Canonical URL to the full article. example: image_url: https://images.financialmodelingprep.com/news/apple-reports-first-quarter-results-20250130.jpg instruments: - instrument_id: f47ac10b-58cc-4372-a567-0e02b2c3d479 name: Apple Inc. symbol: AAPL news_type: NEWS published_at: 2025-01-30T16:30:00.000000000Z publisher: Business Wire site: businesswire.com text: CUPERTINO, Calif.--(BUSINESS WIRE)--Apple today announced financial results... title: Apple reports first quarter results url: https://www.businesswire.com/news/home/20250130261281/en/Apple-reports-first-quarter-results/ NewsItemList: type: array items: $ref: "#/components/schemas/NewsItem" NewsType: type: string description: News item classification. enum: - NEWS - PRESS_RELEASE OpenChartAction: type: object description: Action to open a chart for a symbol. required: - symbol properties: extras: type: object description: |- Additional chart configuration (indicators, overlays, etc.) When a null/undefined value is observed, it indicates it does not apply. symbol: type: string description: Trading symbol to chart example: AAPL timeframe: type: - string - "null" description: |- Chart timeframe (e.g., "1D", "1W", "1M", "3M", "1Y", "5Y") When a null/undefined value is observed, it indicates it does not apply. example: 1M example: symbol: AAPL timeframe: 1M OpenEntitlementConsentAction: type: object description: Action to open entitlement consent flow for one or more accounts. required: - agreement_key - account_ids - entitlement_codes - reason properties: account_ids: type: array items: type: integer format: int64 agreement_key: $ref: "#/components/schemas/EntitlementAgreementKey" entitlement_codes: type: array items: $ref: "#/components/schemas/EntitlementCode" reason: type: string example: account_ids: - 100019 agreement_key: omni_account_data_access entitlement_codes: - omni.account_data reason: Portfolio analysis requires Omni consent to access account data. OpenScreenerAction: type: object description: Action to open a stock screener with filters. required: - filters properties: columns: type: - array - "null" items: type: string description: |- Optional field/column selection for screener results. When a null/undefined value is observed, it indicates it does not apply. field_filter: type: - array - "null" items: type: string description: "Deprecated: use `columns` instead. Mirrors `columns`." deprecated: true filters: type: array items: $ref: "#/components/schemas/ScreenerFilter" description: Filter criteria for the screener page_size: type: - integer - "null" format: int32 description: |- Optional page size. When a null/undefined value is observed, it indicates it does not apply. sort_by: type: - string - "null" description: |- Optional sort field for screener rows. When a null/undefined value is observed, it indicates it does not apply. sort_direction: type: - string - "null" description: |- Optional sort direction (`ASC` or `DESC`). When a null/undefined value is observed, it indicates it does not apply. example: filters: - field: sector operator: eq value: Technology - field: market_cap operator: gte value: 10000000000 OperatorArg: type: string description: Argument that modifies operator behavior. enum: - LEFT_INCLUSIVE - RIGHT_INCLUSIVE - LEFT_EXCLUSIVE - RIGHT_EXCLUSIVE - CASE_INSENSITIVE OptionsContract: type: object description: An options contract with options-specific metadata required: - id - symbol - currency - exchange - expiry - contract_type - strike_price - multiplier - exercise_style - listing_type - is_liquidation_only - is_marginable properties: contract_type: $ref: "#/components/schemas/ContractType" description: Whether this is a CALL or PUT currency: type: string description: ISO currency code example: USD exchange: type: string description: MIC code of the primary listing venue example: BATO exercise_style: $ref: "#/components/schemas/ExerciseStyle" description: Exercise style expiry: type: string format: date description: Expiration date example: 2026-03-18 id: type: string format: uuid description: Instrument identifier example: b6f4b5e2-94a8-4fe4-9a85-2b4a81d30cc5 is_liquidation_only: type: boolean description: Whether the contract is liquidation-only is_marginable: type: boolean description: Whether the contract is marginable listing_type: $ref: "#/components/schemas/ListingType" description: Listing type multiplier: type: string description: Contract multiplier (100 for standard options) example: "100" open_interest: type: - integer - "null" format: int64 description: |- Open interest (number of outstanding contracts), if available When a null/undefined value is observed, it indicates that there is no available data. strike_price: type: string description: Strike price example: "150.00" symbol: type: string description: OSI symbol (e.g. "AAPL 251219C00150000") example: AAPL 251219C00150000 underlying_instrument_id: type: - string - "null" format: uuid description: |- Instrument ID of the underlying instrument, when available When a null/undefined value is observed, it indicates that there is no available data. OptionsContractList: type: array items: $ref: "#/components/schemas/OptionsContract" Order: type: object description: |- A trading order with its current state and execution details. This is the unified API representation of an order across its lifecycle, combining data from execution reports, order status queries, and parent/child tracking. required: - id - client_order_id - account_id - instrument_id - symbol - venue - instrument_type - side - quantity - order_type - time_in_force - status - filled_quantity - leaves_quantity - created_at - updated_at properties: account_id: $ref: "#/components/schemas/i64" description: Account placing the order average_fill_price: type: - string - "null" description: |- Average fill price across all executions When a null/undefined value is observed, it indicates that there is no available data. example: "47.95" client_order_id: type: string description: Client-provided identifier echoed back. example: my-ref-id-20251001-001 created_at: type: string format: date-time description: Timestamp when order was created (UTC) example: 2025-10-31T13:30:00.000000000Z details: type: array items: type: string description: Contains execution, rejection or cancellation details, if any expires_at: type: - string - "null" format: date-time description: |- Timestamp when the order will expire (UTC). Present when time_in_force is GOOD_TILL_DATE. When a null/undefined value is observed, it indicates it does not apply. example: 2025-10-15T16:00:00.000000000Z extended_hours: type: - boolean - "null" description: Whether the order is eligible for extended-hours trading. example: true filled_quantity: type: string description: Cumulative filled quantity example: "50" id: type: string description: Engine-assigned unique identifier for this order (UUID). example: 0195f6c7-4f64-7e3c-8b0a-1d8e4f5e6a7b instrument_id: type: string format: uuid description: Instrument identifier for the traded instrument. example: f47ac10b-58cc-4372-a567-0e02b2c3d479 instrument_type: $ref: "#/components/schemas/SecurityType" description: Type of security leaves_quantity: type: string description: Remaining unfilled quantity example: "50" limit_offset: type: - string - "null" description: |- Limit offset for trailing stop-limit orders (signed) When a null/undefined value is observed, it indicates it does not apply. example: "0.50" limit_price: type: - string - "null" description: |- Limit price (for LIMIT and STOP_LIMIT orders) When a null/undefined value is observed, it indicates it does not apply. example: "48.00" order_type: $ref: "#/components/schemas/OrderType" description: Type of order (MARKET, LIMIT, etc.) quantity: type: string description: Total order quantity example: "100" queue_state: oneOf: - type: "null" - $ref: "#/components/schemas/QueueState" description: |- Parent order queue state, present when the order is awaiting release or released. When a null/undefined value is observed, it indicates it does not apply. releases_at: type: - string - "null" format: date-time description: |- Scheduled release time for orders awaiting release. When a null/undefined value is observed, it indicates it does not apply. example: 2025-10-31T14:30:00.000000000Z side: $ref: "#/components/schemas/Side" description: Side of the order (BUY, SELL, SELL_SHORT) status: $ref: "#/components/schemas/OrderStatus" description: Current status of the order stop_price: type: - string - "null" description: |- Stop price (for STOP and STOP_LIMIT orders) When a null/undefined value is observed, it indicates it does not apply. example: "52.00" symbol: type: string description: Trading symbol example: TSLA time_in_force: $ref: "#/components/schemas/TimeInForce" description: Time in force instruction trailing_limit_px: type: - string - "null" description: |- Current trailing limit price computed by the trailing strategy When a null/undefined value is observed, it indicates it does not apply. example: "47.50" trailing_offset: type: - string - "null" description: |- Trailing offset amount for trailing orders When a null/undefined value is observed, it indicates it does not apply. example: "2.00" trailing_offset_type: oneOf: - type: "null" - $ref: "#/components/schemas/TrailingOffsetType" description: |- Trailing offset type for trailing orders When a null/undefined value is observed, it indicates it does not apply. trailing_stop_px: type: - string - "null" description: |- Current trailing stop price computed by the trailing strategy When a null/undefined value is observed, it indicates it does not apply. example: "48.00" trailing_watermark_px: type: - string - "null" description: |- Trailing watermark price for trailing orders When a null/undefined value is observed, it indicates it does not apply. example: "50.00" trailing_watermark_ts: type: - string - "null" format: date-time description: |- Trailing watermark timestamp for trailing orders When a null/undefined value is observed, it indicates it does not apply. example: 2025-10-31T13:35:10.000000000Z underlying_instrument_id: type: - string - "null" format: uuid description: |- Instrument ID of the option's underlying instrument. Populated only for options orders. A `null` means one of two things: the order is not an option, so the field does not apply; or the order is an option whose underlier has not yet been resolved. When a null/undefined value is observed, it indicates it does not apply. example: a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8 updated_at: type: string format: date-time description: Timestamp of the most recent update (UTC) example: 2025-10-31T13:35:10.000000000Z venue: type: string description: MIC code of the venue where the order is routed example: XNAS example: account_id: 19816 client_order_id: my-ref-id-20251001-001 created_at: 2025-10-31T13:30:00.000000000Z extended_hours: false filled_quantity: "0" id: 0195f6c7-4f64-7e3c-8b0a-1d8e4f5e6a7b instrument_id: d4d5d6d7-e4e5-f4f5-a4a5-a6a7a8a9aaab instrument_type: COMMON_STOCK leaves_quantity: "1" limit_price: "48.00" order_type: LIMIT quantity: "1" side: BUY status: PENDING_NEW stop_price: null symbol: TSLA time_in_force: DAY updated_at: 2025-10-31T13:30:00.000000000Z venue: XNAS OrderList: type: array items: $ref: "#/components/schemas/Order" OrderStatus: type: string description: Order status enum: - PENDING_NEW - NEW - PARTIALLY_FILLED - FILLED - CANCELED - REJECTED - EXPIRED - PENDING_CANCEL - PENDING_REPLACE - REPLACED - DONE_FOR_DAY - STOPPED - SUSPENDED - CALCULATED - OTHER OrderSubmissionRequest: oneOf: - $ref: "#/components/schemas/NewOrderMultilegRequest" description: Multileg strategy order request - $ref: "#/components/schemas/NewOrderRequest" description: Single-leg order request description: |- Request to submit a single-leg or multileg order. Existing single-leg payloads are still accepted as-is. Multileg payloads are identified by the required `legs` field. OrderType: type: string description: Order type enum: - MARKET - LIMIT - STOP - STOP_LIMIT - TRAILING_STOP - TRAILING_STOP_LIMIT - OTHER Pagination: type: string format: byte description: Base64URL-encoded pagination token PaginationParams: type: object description: |- Pagination parameters for list endpoints **Important:** `page_token` contains both limit and offset. When `page_token` is provided, `page_size` is ignored. Only use `page_size` for the first request. properties: page_size: type: - integer - "null" description: The number of items to return per page (only used when page_token is not provided) minimum: 0 page_token: oneOf: - type: "null" - $ref: "#/components/schemas/Pagination" description: |- Token for retrieving the next page of results. Contains encoded pagination state (limit + offset). When provided, page_size is ignored. PortfolioHistoryResponse: type: object required: - segments properties: segments: type: array items: $ref: "#/components/schemas/PortfolioHistorySegment" PortfolioHistorySegment: type: object required: - date - realized_pnl - unrealized_pnl - sod_equity - eod_equity properties: bought_notional: type: - string - "null" description: Amount bought MTM date: type: string format: date description: The date for this segment day_pnl: type: - string - "null" description: Sum of the profit and loss from intraday trading activities for the trading day. eod_equity: type: string description: The equity at the end of the trading day. net_pnl: type: - string - "null" description: P&L after netting all realized and unrealized P&L, adjustments, dividends, change in accruals, income and expenses position_pnl: type: - string - "null" description: P&L attributable to start-of-day (carried) positions from market movement during this trading day. realized_pnl: type: string description: Sum of the profit and loss realized from position closing trading activity. sod_equity: type: string description: The equity at the start of the trading day. sold_notional: type: - string - "null" description: Amount sold MTM unrealized_pnl: type: string description: Sum of the profit and loss from market changes. Position: type: object description: Represents a holding of a particular instrument in an account required: - account_id - instrument_id - symbol - instrument_type - quantity - market_value - position_type - available_quantity properties: account_id: type: integer format: int64 description: The account this position belongs to example: 19816 available_quantity: type: string description: The quantity of a position that is free to be operated on. example: "100" avg_price: type: - string - "null" description: |- The average price paid per share or contract for this position When a null/undefined value is observed, it indicates that there is no available data. example: "145.00" closing_price: type: - string - "null" description: |- The closing price used to value the position for the last trading day When a null/undefined value is observed, it indicates that there is no available data. example: "150.50" closing_price_date: type: - string - "null" format: date description: |- The market date associated with `closing_price` When a null/undefined value is observed, it indicates that there is no available data. example: 2026-01-15 cost_basis: type: - string - "null" description: |- The total cost basis for this position When a null/undefined value is observed, it indicates that there is no available data. example: "14500.00" daily_realized_pnl: type: - string - "null" description: |- The realized profit or loss for this position for the current day When a null/undefined value is observed, it indicates that there is no available data. example: "700.00" daily_unrealized_pnl: type: - string - "null" description: |- The unrealized profit or loss for this position relative to the previous close When a null/undefined value is observed, it indicates that there is no available data. example: "550.00" daily_unrealized_pnl_pct: type: - string - "null" description: |- The unrealized profit/loss for the position for the current day, expressed as a percentage of the baseline value (range: 0-100). When a null/undefined value is observed, it indicates that there is no available data. example: "3.65" instrument_id: type: string format: uuid description: Unique instrument identifier example: f47ac10b-58cc-4372-a567-0e02b2c3d479 instrument_price: type: - string - "null" description: |- The current market price of the instrument When a null/undefined value is observed, it indicates that there is no available data. example: "151.00" instrument_type: $ref: "#/components/schemas/SecurityType" description: Type of security market_value: type: string description: The current market value of the position example: "15050.00" position_type: $ref: "#/components/schemas/PositionType" description: The type of position quantity: type: string description: The number of shares or contracts. Can be positive (long) or negative (short) example: "100" symbol: type: string description: The trading symbol for the instrument example: AAPL underlying_instrument_id: type: - string - "null" format: uuid description: |- Identifier of the underlying instrument, when available When a null/undefined value is observed, it indicates it does not apply. example: b6f4b5e2-94a8-4fe4-9a85-2b4a81d30cc5 unrealized_pnl: type: - string - "null" description: |- The total unrealized profit or loss for this position based on current market value When a null/undefined value is observed, it indicates that there is no available data. example: "550.00" unrealized_pnl_pct: type: - string - "null" description: |- The unrealized profit/loss for the position, expressed as a percentage of the position's cost basis (range: 0-100). When a null/undefined value is observed, it indicates that there is no available data. example: "3.79" example: account_id: 19816 avg_price: "145.00" closing_price: "150.50" closing_price_date: 2025-10-31 cost_basis: "14500.00" daily_realized_pnl: "700.00" daily_unrealized_pnl: "550.00" daily_unrealized_pnl_pct: "3.65" instrument_id: f47ac10b-58cc-4372-a567-0e02b2c3d479 instrument_price: "151.00" instrument_type: COMMON_STOCK market_value: "15050.00" position_type: LONG quantity: "100" symbol: AAPL unrealized_pnl: "550.00" unrealized_pnl_pct: "3.79" PositionEffect: type: string description: Position effect for options orders enum: - OPEN - CLOSE PositionInstruction: type: object description: A position instruction and its current lifecycle state. required: - id - instruction_id - account_id - instruction_type - instrument_id - symbol - quantity - status properties: accepted_quantity: type: - string - "null" description: |- Number of contracts accepted by the clearing venue. Populated once the instruction reaches `ACCEPTED`. When a null/undefined value is observed, it indicates that there is no available data. account_id: $ref: "#/components/schemas/i64" description: Account the instruction belongs to. created_at: type: - string - "null" format: date-time description: |- When the instruction was first accepted by the service. When a null/undefined value is observed, it indicates that there is no available data. id: type: string format: uuid description: Server-assigned id. Used as the path parameter on cancel. instruction_id: type: string description: |- Caller-supplied idempotency key echoed from the submit request; the server-assigned fallback when none was supplied. instruction_type: $ref: "#/components/schemas/PositionInstructionType" description: The action this instruction requests. instrument_id: type: string format: uuid description: Identifier of the options contract this instruction acts on. quantity: type: string description: Number of contracts included in the instruction. example: "1" rejection_reason: type: - string - "null" description: |- Human-readable explanation populated on any non-success terminal status — `REJECTED` or `CANCEL_FAILED`. On a `207 Multi-Status` batch submit the top-level `error` field summarizes the batch; per-row detail continues to live here. When a null/undefined value is observed, it indicates it does not apply. status: $ref: "#/components/schemas/PositionInstructionStatus" description: Current lifecycle status. symbol: type: string description: Options symbol (OSI) for display. updated_at: type: - string - "null" format: date-time description: |- When the instruction's lifecycle state last changed. When a null/undefined value is observed, it indicates that there is no available data. example: accepted_quantity: null account_id: 122503 created_at: 2026-04-24T14:30:00Z id: 0195f6d0-a1b2-7c3d-8e4f-5a6b7c8d9e02 instruction_id: ui-20260424-001 instruction_type: EXERCISE instrument_id: 0195f6d0-a1b2-7c3d-8e4f-5a6b7c8d9e02 quantity: "1" rejection_reason: null status: SENT symbol: AAPL 280121C00195000 updated_at: 2026-04-24T14:30:00Z PositionInstructionList: type: array items: $ref: "#/components/schemas/PositionInstruction" PositionInstructionStatus: type: string description: |- Lifecycle status of a position instruction. - `SENT`: accepted and submitted to the clearing venue. - `ACCEPTED`: terminal — accepted by the clearing venue. - `REJECTED`: terminal rejection; `rejection_reason` carries the detail. Covers both venue-reported rejections and rejections raised before the instruction reached the clearing venue (e.g. duplicate `instruction_id`, `DO_NOT_EXERCISE` / `CONTRARY_EXERCISE` submitted on a non-expiry day, insufficient position, or an instrument that does not resolve). - `CANCEL_REQUESTED`: cancel accepted; final cancel state pending. - `CANCELLED`: terminal — cancel completed. - `CANCEL_FAILED`: cancel could not be completed; operator attention required. `rejection_reason` carries the detail. - `UNKNOWN`: status could not be determined. enum: - SENT - ACCEPTED - REJECTED - CANCEL_REQUESTED - CANCELLED - CANCEL_FAILED - UNKNOWN PositionInstructionSubmissionRequest: type: object description: |- A position instruction to submit. Use `DELETE /accounts/{account_id}/positions/instructions/{instruction_id}` to cancel an outstanding instruction. required: - instruction_type - instrument_id - quantity properties: instruction_id: type: - string - "null" description: |- Caller-supplied idempotency key. Echoed on the response. The server generates a unique id when omitted. example: ui-20260424-001 instruction_type: $ref: "#/components/schemas/PositionInstructionType" description: The action to take. instrument_id: type: string format: uuid description: Identifier of the options contract to act on. Unknown ids return 404. quantity: type: string description: Number of contracts to include in the instruction. example: "1" example: instruction_id: ui-20260424-001 instruction_type: EXERCISE instrument_id: 0195f6d0-a1b2-7c3d-8e4f-5a6b7c8d9e02 quantity: "1" PositionInstructionType: type: string description: The action to take against an options position. enum: - EXERCISE - DO_NOT_EXERCISE - CONTRARY_EXERCISE PositionList: type: array items: $ref: "#/components/schemas/Position" PositionType: type: string description: Position type classification enum: - LONG - SHORT - LONG_CALL - SHORT_CALL - LONG_PUT - SHORT_PUT PrefillCancelOrderAction: type: object description: Cancel-order prefill action. required: - orders properties: orders: type: array items: $ref: "#/components/schemas/CancelOrderRequest" description: Orders to cancel using the same identifiers required by the cancel-order API. example: action_type: CANCEL orders: - account_id: 100019 order_id: 019dfd73-8b49-7d21-8d62-a736fc4199d2 PrefillNewOrderAction: type: object description: New-order prefill action. required: - orders properties: orders: type: array items: $ref: "#/components/schemas/NewOrderRequest" description: Orders to prefill using the same shape accepted by the orders API. example: action_type: NEW orders: - limit_price: "150.00" order_type: LIMIT quantity: "100" side: BUY symbol: AAPL time_in_force: DAY PrefillOrderAction: oneOf: - allOf: - $ref: "#/components/schemas/PrefillNewOrderAction" description: Create one or more new orders. - type: object required: - action_type properties: action_type: type: string enum: - NEW title: PrefillNewOrderAction description: Create one or more new orders. - allOf: - $ref: "#/components/schemas/PrefillCancelOrderAction" description: Cancel one or more existing orders. - type: object required: - action_type properties: action_type: type: string enum: - CANCEL title: PrefillCancelOrderAction description: Cancel one or more existing orders. description: |- 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. PriceTarget: type: object description: Analyst price target statistics required: - high - low - average - currency properties: average: type: string description: Average analyst price target example: "220.00" currency: type: string description: ISO 4217 currency code of the price targets example: USD high: type: string description: Highest analyst price target example: "250.00" low: type: string description: Lowest analyst price target example: "180.00" PromptButtonAction: type: object description: Prompt-style button behavior. required: - prompt properties: prompt: type: string description: Prompt text to submit as the next user turn. QueueState: type: string description: Parent order queue or hold state. enum: - AWAITING_RELEASE - RELEASED ReplaceOrderRequest: type: object description: |- Request to replace (modify) an existing order At least one field must be provided. properties: limit_price: type: - string - "null" description: New limit price for the order example: "49.00" quantity: type: - string - "null" description: New quantity for the order example: "1" stop_price: type: - string - "null" description: New stop price for the order example: "52.00" time_in_force: $ref: "#/components/schemas/RequestTimeInForce" description: New time in force for the order example: limit_price: "49.00" RequestOrderType: type: string description: Strict order-type enum for order submission/replacement requests. enum: - MARKET - LIMIT - STOP - STOP_LIMIT - TRAILING_STOP - TRAILING_STOP_LIMIT RequestTimeInForce: type: string description: Strict time-in-force enum for order submission/replacement requests. enum: - DAY - GOOD_TILL_CANCEL - IMMEDIATE_OR_CANCEL - FILL_OR_KILL - GOOD_TILL_DATE - AT_THE_OPENING - AT_THE_CLOSE - GOOD_TILL_CROSSING - GOOD_THROUGH_CROSSING - AT_CROSSING Response: type: object description: Dynamic pollable response. required: - id - status - thread_id - user_message_id properties: content: oneOf: - type: "null" - $ref: "#/components/schemas/ResponseContent" description: When a null/undefined value is observed, it indicates that there is no available data. error: oneOf: - type: "null" - $ref: "#/components/schemas/ErrorStatus" description: When a null/undefined value is observed, it indicates it does not apply. id: type: string format: uuid output_message_id: type: - string - "null" format: uuid description: When a null/undefined value is observed, it indicates it does not apply. status: $ref: "#/components/schemas/ResponseStatus" thread_id: type: string format: uuid user_message_id: type: string format: uuid ResponseContent: type: object description: Dynamic response content container. May include thinking parts. required: - parts properties: parts: type: array items: $ref: "#/components/schemas/ResponseContentPart" ResponseContentPart: oneOf: - allOf: - $ref: "#/components/schemas/ContentPartTextPayload" - type: object required: - type properties: type: type: string enum: - text title: ContentPartText - allOf: - $ref: "#/components/schemas/ContentPartThinkingPayload" - type: object required: - type properties: type: type: string enum: - thinking title: ContentPartThinking - allOf: - $ref: "#/components/schemas/ContentPartStructuredActionPayload" - type: object required: - type properties: type: type: string enum: - structured_action title: ContentPartStructuredAction - allOf: - $ref: "#/components/schemas/ContentPartChartPayload" - type: object required: - type properties: type: type: string enum: - chart title: ContentPartChart - allOf: - $ref: "#/components/schemas/ContentPartSuggestedActionsPayload" - type: object required: - type properties: type: type: string enum: - suggested_actions title: ContentPartSuggestedActions - allOf: - $ref: "#/components/schemas/ContentPartCustomPayload" - type: object required: - type properties: type: type: string enum: - custom title: ContentPartCustom description: Dynamic content part visible on a pollable response. ResponseMetadata: type: object description: |- Metadata for the response. This will always contain a request ID which can be used to identify the request to Clear Street for tracing, and optionally may include pagination data. required: - request_id properties: next_page_token: oneOf: - type: "null" - type: string format: byte description: Base64URL-encoded pagination token description: |- A token that can be used to retrieve the next page of results, if any. The token contains opaque pagination state. Filtering and sorting parameters must be provided with each request. page_number: type: - integer - "null" format: int32 description: Pagination. Included if this was a GET (list) response example: "1" minimum: 0 previous_page_token: oneOf: - type: "null" - type: string format: byte description: Base64URL-encoded pagination token description: |- A token that can be used to retrieve the previous page of results, if any. The token contains opaque pagination state. Filtering and sorting parameters must be provided with each request. request_id: type: string description: A unique ID for this request, generated upon ingestion of the request. total_items: type: - integer - "null" format: int64 description: Total number of items available (not just in this page). example: "42" minimum: 0 total_pages: type: - integer - "null" format: int32 description: Total number of pages available. example: "5" minimum: 0 ResponseStatus: type: string description: Dynamic lifecycle status for a pollable response. enum: - queued - running - succeeded - failed - canceled RiskSettings: type: object description: Risk settings for an account properties: max_notional: type: - string - "null" description: |- The maximum notional value available to the account When a null/undefined value is observed, it indicates that there is no available data. example: "1000000.00" ScreenerColumn: type: object description: A single column in the screener search response. required: - name - field - value properties: field: $ref: "#/components/schemas/FieldRef" description: Field reference (same shape as filter/sort field references) name: type: string description: Human-readable display name for this field example: Market Cap type: type: - string - "null" description: |- Value format hint: "CURR_USD", "PERCENT", etc. Omitted when not applicable. When a null/undefined value is observed, it indicates it does not apply. value: oneOf: - type: number - type: string - type: "null" example: field: name: market_cap value_type: DECIMAL name: Market Cap type: CURR_USD value: 2890000000000.0 ScreenerEntry: type: object description: A saved screener configuration entry required: - id - name - filters - created_at - updated_at properties: columns: type: - array - "null" items: $ref: "#/components/schemas/FieldRef" description: Field references included when running this screener. created_at: type: string format: date-time field_filter: type: - array - "null" items: $ref: "#/components/schemas/FieldRef" description: "Deprecated: use `columns` instead. Mirrors `columns`." deprecated: true filters: type: array items: $ref: "#/components/schemas/SearchFilter" id: type: string format: uuid name: type: string sorts: type: - array - "null" items: $ref: "#/components/schemas/SortSpec" updated_at: type: string format: date-time ScreenerEntryList: type: array items: $ref: "#/components/schemas/ScreenerEntry" ScreenerFilter: type: object description: A single filter criterion for the screener. required: - field - operator - value properties: field: type: string description: Field to filter on (e.g., "market_cap", "sector", "price") example: market_cap operator: type: string description: Comparison operator (e.g., "eq", "gte", "lte", "in") example: gte value: type: object description: Filter value example: field: market_cap operator: gte value: 10000000000 ScreenerRow: type: array items: $ref: "#/components/schemas/ScreenerColumn" description: A single row of screener columns for one instrument. ScreenerRowList: type: array items: $ref: "#/components/schemas/ScreenerRow" ScreenerSearchRequest: allOf: - $ref: "#/components/schemas/PaginationParams" - type: object properties: columns: type: - array - "null" items: $ref: "#/components/schemas/FieldRef" description: Subset of fields to include in the response. field_filter: type: - array - "null" items: $ref: "#/components/schemas/FieldRef" description: "Deprecated: use `columns` instead. Ignored when `columns` is provided." deprecated: true filters: type: - array - "null" items: $ref: "#/components/schemas/SearchFilter" description: Filter conditions to apply. sort_case_sensitive: type: - boolean - "null" description: "Whether string sorts should be case-sensitive (default: false)." sorts: type: - array - "null" items: $ref: "#/components/schemas/SortSpec" description: Multi-field sort specifications. description: Request body for POST /screener. example: columns: - name: market_cap - name: price - name: volume filters: - left: name: market_cap op: name: GREATER_OR_EQUAL right: - value: 1000000000.0 page_size: 25 sorts: - direction: DESC field: name: market_cap SearchFilter: type: object description: |- A single filter condition. When `op` and `right` are both absent, the filter is "unenabled": it persists a `left` field reference without applying any predicate. Unenabled filters are skipped during search execution but still round-trip through save/load so callers can preserve draft state. required: - left properties: left: $ref: "#/components/schemas/FieldRef" description: The field to filter on. op: oneOf: - type: "null" - $ref: "#/components/schemas/FilterOpSpec" description: The operator and optional arguments. Omit together with `right` for an unenabled filter. right: type: - array - "null" items: $ref: "#/components/schemas/FilterValue" description: The value(s) to compare against. Omit together with `op` for an unenabled filter. example: left: name: market_cap op: name: GREATER_OR_EQUAL right: - value: 1000000000.0 Sector: type: string description: Market sector classification. enum: - BASIC_MATERIALS - COMMUNICATION_SERVICES - CONSUMER_CYCLICAL - CONSUMER_DEFENSIVE - ENERGY - FINANCIAL_SERVICES - HEALTHCARE - INDUSTRIALS - REAL_ESTATE - TECHNOLOGY - UTILITIES SecurityIdSource: type: string description: Security identifier source enum: - CMS - CLST - OPRA - FIGI - CUSIP - CURRENCY - FMP - OEMS - SEDOL - QUIK - ISIN - RIC - COUNTRY - EXCHANGE - CTA - BLOOMBERG - WERTPAPIER - DUTCH - VALOREN - SICOVAM - BELGIAN - COMMON - CLEARING_HOUSE - ISDA_FPML_SPECIFICATION - ISDA_FPML_URL - LETTER_OF_CREDIT - MARKETPLACE_ASSIGNED_IDENTIFIER - MARKIT_RED_ENTITY_CLIP - MARKIT_RED_PAIR_CLIP - CFTC - ISDA_COMMODITY_REFERENCE_PRICE - LEGAL_ENTITY_IDENTIFIER - SYNTHETIC - FIDESSA_INSTRUMENT_MNEMONIC - INDEX_NAME - UNIFORM_SYMBOL - DIGITAL_TOKEN_IDENTIFIER - MASSIVE - OTHER SecurityIdentifier: oneOf: - type: string description: Trading symbol (e.g. "AAPL" or OSI symbol for options) - type: string format: uuid description: Instrument identifier description: Multileg-order leg security identifier. SecurityType: type: string description: Security type enum: - COMMON_STOCK - OPTION - CASH SessionSchedule: type: object description: Session schedule with open and close timestamps required: - open - close properties: close: type: string format: date-time description: Session close timestamp with timezone offset example: 2025-10-15T16:00:00-04:00 open: type: string format: date-time description: Session open timestamp with timezone offset example: 2025-10-15T09:30:00-04:00 time_until_close: type: - string - "null" format: duration description: |- ISO 8601 duration until session closes. Null if session is not currently open. When a null/undefined value is observed, it indicates it does not apply. example: PT1H30M time_until_open: type: - string - "null" format: duration description: |- ISO 8601 duration until session opens. Null if session has already started or closed. When a null/undefined value is observed, it indicates it does not apply. example: PT2H30M example: close: 2025-10-15T16:00:00-04:00 open: 2025-10-15T09:30:00-04:00 time_until_close: PT1H30M time_until_open: null Side: type: string description: Side of an order enum: - BUY - SELL - SELL_SHORT - OTHER SnapshotGreeks: type: object description: |- Theoretical price and Greeks for an options snapshot. All values are **per share**; no contract multiplier is applied. required: - theo_price - iv - delta - gamma - vega - theta - rho - timestamp properties: delta: type: string description: 'Delta: ∂V/∂S, range \[-1, 1\].' gamma: type: string description: "Gamma: ∂²V/∂S²." iv: type: string description: Implied volatility, annualized (`0.20` == 20%). rho: type: string description: Rho per 1.0 rate point. theo_price: type: string description: Theoretical option price in USD per share. theta: type: string description: Theta per trading day. timestamp: type: string format: date-time description: Timestamp when the Greeks were calculated. vega: type: string description: Vega per 1.0 vol point. SnapshotLastTrade: type: object description: Last-trade fields for a market data snapshot. required: - price - size properties: price: type: string description: Most recent last-sale eligible trade price. size: type: integer format: int32 description: Share quantity of the most recent last-sale eligible trade. minimum: 0 SnapshotQuote: type: object description: L1 quote fields for a market data snapshot. properties: ask: type: - string - "null" description: |- Current best ask. Absent when no ask is available (one-sided quote). When a null/undefined value is observed, it indicates that there is no available data. ask_size: type: - integer - "null" format: int32 description: |- Size at the best ask, in shares. When a null/undefined value is observed, it indicates that there is no available data. minimum: 0 bid: type: - string - "null" description: |- Current best bid. Absent when no bid is available (one-sided quote). When a null/undefined value is observed, it indicates that there is no available data. bid_size: type: - integer - "null" format: int32 description: |- Size at the best bid, in shares. When a null/undefined value is observed, it indicates that there is no available data. minimum: 0 midpoint: type: - string - "null" description: |- Midpoint of bid and ask. Absent when either side is missing. When a null/undefined value is observed, it indicates that there is no available data. SnapshotSession: type: object description: Session-level pricing metrics for a market data snapshot. required: - previous_close - change - change_percent properties: change: type: string description: Absolute change from previous close to last trade. change_percent: type: string description: Percent change from previous close to last trade. previous_close: type: string description: Previous session close price. SortDirection: type: string description: Sort direction sorted results enum: - ASC - DESC SortSpec: type: object description: A sort specification pairing a field with a direction. required: - field properties: direction: $ref: "#/components/schemas/SortDirection" description: Sort direction (defaults to DESC). field: $ref: "#/components/schemas/FieldRef" description: The field to sort by. example: direction: DESC field: name: market_cap StructuredAction: oneOf: - type: object title: PrefillOrder description: Prefill an order ticket for user confirmation required: - prefill_order properties: prefill_order: $ref: "#/components/schemas/PrefillOrderAction" description: Prefill an order ticket for user confirmation - type: object title: OpenChart description: Open a chart for a symbol required: - open_chart properties: open_chart: $ref: "#/components/schemas/OpenChartAction" description: Open a chart for a symbol - type: object title: OpenScreener description: Open a stock screener with filters required: - open_screener properties: open_screener: $ref: "#/components/schemas/OpenScreenerAction" description: Open a stock screener with filters - type: object title: OpenEntitlementConsent description: Open entitlement consent flow required: - open_entitlement_consent properties: open_entitlement_consent: $ref: "#/components/schemas/OpenEntitlementConsentAction" description: Open entitlement consent flow description: |- 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. StructuredActionButtonAction: type: object description: Structured-action button behavior. properties: actionId: type: - string - "null" format: uuid description: |- UUID of a `structured_action` content part in the same message. When a null/undefined value is observed, it indicates it does not apply. SuggestedActionsPayload: type: object description: Suggested follow-up buttons rendered at the end of an assistant message. properties: actionButtons: type: array items: $ref: "#/components/schemas/ActionButton" description: Ordered message-level buttons. example: actionButtons: - buttonId: btn_show_aapl_1y label: Show AAPL over 1 year prompt: prompt: Show AAPL over the last year - buttonId: btn_compare_aapl_spy label: Compare AAPL vs SPY prompt: prompt: Compare AAPL vs SPY over 1 year Thread: type: object description: Thread metadata returned by list/get thread endpoints. required: - id - title - created_at - updated_at properties: created_at: type: string id: type: string format: uuid title: type: string updated_at: type: string ThreadList: type: array items: $ref: "#/components/schemas/Thread" TimeInForce: type: string description: Time in force enum: - DAY - GOOD_TILL_CANCEL - IMMEDIATE_OR_CANCEL - FILL_OR_KILL - GOOD_TILL_DATE - AT_THE_OPENING - AT_THE_CLOSE - GOOD_TILL_CROSSING - GOOD_THROUGH_CROSSING - AT_CROSSING - OTHER TradingSessions: type: object description: Trading sessions for a market day with full timestamps properties: after_hours: oneOf: - type: "null" - $ref: "#/components/schemas/SessionSchedule" description: |- After-hours session schedule, null if not available When a null/undefined value is observed, it indicates it does not apply. pre_market: oneOf: - type: "null" - $ref: "#/components/schemas/SessionSchedule" description: |- Pre-market session schedule, null if not available When a null/undefined value is observed, it indicates it does not apply. regular: oneOf: - type: "null" - $ref: "#/components/schemas/SessionSchedule" description: |- Regular trading session schedule, null if holiday/weekend When a null/undefined value is observed, it indicates it does not apply. example: after_hours: close: 2025-10-15T20:00:00-04:00 open: 2025-10-15T16:00:00-04:00 pre_market: close: 2025-10-15T09:30:00-04:00 open: 2025-10-15T04:00:00-04:00 regular: close: 2025-10-15T16:00:00-04:00 open: 2025-10-15T09:30:00-04:00 TrailingOffsetType: type: string description: Trailing offset type for trailing stop orders. enum: - PRICE - BPS TupleUnit: default: null UpdateAccountSettingsRequest: type: object description: Request to update account settings properties: risk: oneOf: - type: "null" - $ref: "#/components/schemas/RiskSettings" description: Risk settings for the account additionalProperties: false example: risk: max_notional: "5000000.00" Variable: type: object description: A variable reference (field or built-in like `today`). required: - name properties: lookback: oneOf: - type: "null" - $ref: "#/components/schemas/FieldLookback" description: Optional historical lookback window. modifier: oneOf: - type: "null" - $ref: "#/components/schemas/Modifier" description: Optional arithmetic modifier. name: type: string description: The variable name. example: today period: oneOf: - type: "null" - $ref: "#/components/schemas/FieldPeriod" description: Optional reporting period. example: modifier: args: - 30 - DAY name: SUBTRACT name: today VenueSession: type: object description: A trading session within a venue's trading day required: - name - start_local - end_local properties: end_local: type: string description: Session end time in venue's local timezone (HH:MM format, 24-hour) example: 16:00 name: type: string description: The name of the trading session example: CONTINUOUS start_local: type: string description: Session start time in venue's local timezone (HH:MM format, 24-hour) example: 09:30 example: end_local: 16:00 name: CONTINUOUS start_local: 09:30 Version: type: object description: API version information required: - version properties: version: type: string description: API version string WatchlistDetail: type: object description: Detailed watchlist with all items required: - id - name - created_at - items properties: created_at: type: string format: date-time description: Creation timestamp id: type: string format: uuid description: Watchlist ID items: type: array items: $ref: "#/components/schemas/WatchlistItemEntry" description: Items in the watchlist name: type: string description: Watchlist name WatchlistEntry: type: object description: Represents a user watchlist. required: - id - name - created_at properties: created_at: type: string format: date-time description: The timestamp when the watchlist was created. id: type: string format: uuid description: The unique identifier for the watchlist. name: type: string description: The user-provided watchlist name. WatchlistEntryList: type: array items: $ref: "#/components/schemas/WatchlistEntry" WatchlistItemEntry: type: object description: A single item in a watchlist required: - id - added_at properties: added_at: type: string format: date-time description: When the item was added added_price: type: - string - "null" description: |- Price when the item was added When a null/undefined value is observed, it indicates that there is no available data. id: type: string format: uuid description: Item ID instrument: oneOf: - type: "null" - $ref: "#/components/schemas/Instrument" description: |- Instrument details When a null/undefined value is observed, it indicates that there is no available data. i64: type: integer format: int64 securitySchemes: BearerAuth: type: http scheme: bearer bearerFormat: JWT security: - BearerAuth: [] tags: - name: API version description: Endpoints for API service metadata. - name: Accounts description: Manage trading accounts, balances, and portfolio history. - name: Orders description: Place, monitor, and manage trading orders. - name: Positions description: View positions and manage position instructions. - name: Watchlist description: Create and manage watchlists. - name: Instruments description: Retrieve core details and discovery endpoints for tradable instruments. - name: Instrument Data description: Retrieve instrument analytics, market data, news, and related reference data. - name: Calendar description: Access clocks and financial calendars for market sessions and events. - name: Screener description: Search instruments and manage saved screeners. - name: Websocket description: Active Websocket. - name: Omni AI description: 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.