> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sequency.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Screen stocks with options-centric defaults

> Screen stocks with options-focused default sort (options_confluence_score DESC).

Uses the same request body as the stock screener but defaults to sorting by
`options_confluence_score` descending. All existing filters (price, volume,
technical, fundamental, etc.) are available alongside options-specific filters.

## Options-Specific Sort Fields

- `options_confluence_score`: Standalone options confluence (0-100)
- `iv_rank`: IV rank vs 52-week range
- `pricing_edge_bull`: Pricing edge for bullish trades

## Options Filters

- `iv_percentile`: Range filter (min/max)
- `chain_total_oi_min`: Minimum total open interest
- `chain_volume_1d_min`: Minimum today's options volume
- `put_call_ratio`: Range filter

## Performance Target

<500ms with includes, <200ms without.



## OpenAPI

````yaml /api/openapi.json post /api/graph/v1/options/screener
openapi: 3.1.0
info:
  title: Sequency Graph API
  description: >

    # Sequency Graph-Native Trading API


    Graph-native API for trading intelligence, built on FalkorDB.


    ## Features


    - **Screener**: Filter stocks using graph-native queries with relationship
    expansion

    - **Stock Detail**: Complete stock context with all relationships

    - **Confluence Scoring**: Setup quality assessment with weighted components

    - **Strategy Matching**: Find matching options strategies via graph
    traversal

    - **Market Context**: Current market-wide context for trading decisions


    ## Data Sources


    All data is sourced from the FalkorDB knowledge graph, populated by:

    - Pattern detector (Go) - Technical indicators, patterns

    - Graph sync service - Levels, volume profiles, news, day classification
  version: 1.0.0
servers: []
security: []
paths:
  /api/graph/v1/options/screener:
    post:
      tags:
        - Options Screener
      summary: Screen stocks with options-centric defaults
      description: >-
        Screen stocks with options-focused default sort
        (options_confluence_score DESC).


        Uses the same request body as the stock screener but defaults to sorting
        by

        `options_confluence_score` descending. All existing filters (price,
        volume,

        technical, fundamental, etc.) are available alongside options-specific
        filters.


        ## Options-Specific Sort Fields


        - `options_confluence_score`: Standalone options confluence (0-100)

        - `iv_rank`: IV rank vs 52-week range

        - `pricing_edge_bull`: Pricing edge for bullish trades


        ## Options Filters


        - `iv_percentile`: Range filter (min/max)

        - `chain_total_oi_min`: Minimum total open interest

        - `chain_volume_1d_min`: Minimum today's options volume

        - `put_call_ratio`: Range filter


        ## Performance Target


        <500ms with includes, <200ms without.
      operationId: options_screener_api_graph_v1_options_screener_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScreenerRequest-Input'
        required: true
      responses:
        '200':
          description: Options screener results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenerResponse'
        '422':
          description: Validation error
        '504':
          description: Query timeout
components:
  schemas:
    ScreenerRequest-Input:
      properties:
        filters:
          anyOf:
            - $ref: '#/components/schemas/Filters'
            - type: 'null'
        include:
          anyOf:
            - $ref: '#/components/schemas/IncludeOptions'
            - type: 'null'
        sort:
          anyOf:
            - $ref: '#/components/schemas/SortOptions'
            - type: 'null'
        pagination:
          anyOf:
            - $ref: '#/components/schemas/Pagination-Input'
            - type: 'null'
      additionalProperties: false
      type: object
      title: ScreenerRequest
      description: >-
        Screener request payload.


        Screen stocks using graph-native filters with optional relationship
        expansion.


        Example:
            ```json
            {
                "filters": {
                    "volume": {"adv30_usd_min": 50000000},
                    "technical": {"rsi_14": {"min": 30, "max": 70}}
                },
                "include": {"levels": true, "patterns": true},
                "sort": {"by": "dollar_volume", "order": "desc"},
                "pagination": {"limit": 50}
            }
            ```
      example:
        filters:
          technical:
            trend_stack: true
          volume:
            adv30_usd_min: 50000000
        include:
          levels: true
        pagination:
          limit: 50
        sort:
          by: dollar_volume
          order: desc
    ScreenerResponse:
      properties:
        stocks:
          items:
            $ref: '#/components/schemas/StockResult'
          type: array
          title: Stocks
        metadata:
          $ref: '#/components/schemas/ScreenerMetadata'
        source:
          type: string
          title: Source
          description: >-
            Market-data feed source label (entitlement layer): 'realtime_sip' |
            'delayed' | 'byok'. Non-realtime_sip callers get 'delayed': the live
            overlay (VWAP/VWAP±σ/RSI/MACD + scores) is skipped and each stock's
            last_price is delayed to a clamped bar. Each stock also carries its
            own source label.
          default: realtime_sip
      type: object
      required:
        - stocks
        - metadata
      title: ScreenerResponse
      description: Screener response with results and metadata.
      example:
        metadata:
          data_freshness: '2025-12-20T15:30:00Z'
          filters_applied:
            - volume
            - technical
          offset: 0
          query_ms: 125.5
          returned: 50
          total_matched: 150
        stocks:
          - adv30_usd: 7500000000
            dollar_volume: 8797500000
            last_price: 195.5
            symbol: AAPL
            updated_at: '2025-12-20T15:30:00Z'
            volume: 45000000
    Filters:
      properties:
        price:
          anyOf:
            - $ref: '#/components/schemas/PriceFilter'
            - type: 'null'
        volume:
          anyOf:
            - $ref: '#/components/schemas/VolumeFilter'
            - type: 'null'
        options:
          anyOf:
            - $ref: '#/components/schemas/OptionsFilter'
            - type: 'null'
        technical:
          anyOf:
            - $ref: '#/components/schemas/TechnicalFilter'
            - type: 'null'
        fundamental:
          anyOf:
            - $ref: '#/components/schemas/FundamentalFilter'
            - type: 'null'
        day_type:
          anyOf:
            - items:
                $ref: '#/components/schemas/app__models__screener__DayType'
              type: array
            - type: 'null'
          title: Day Type
          description: Filter by day type classification
        directional_bias:
          anyOf:
            - items:
                $ref: '#/components/schemas/DirectionalBias'
              type: array
            - type: 'null'
          title: Directional Bias
          description: 'Phase 15: Filter by directional bias classification'
        patterns:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Patterns
          description: Filter by active pattern types
        confluence:
          anyOf:
            - $ref: '#/components/schemas/ConfluenceFilter'
            - type: 'null'
          description: Filter by V4 confluence scores
        pulse:
          anyOf:
            - $ref: '#/components/schemas/PulseFilter'
            - type: 'null'
          description: Filter by V4.5 Pulse scores
        dark_pool:
          anyOf:
            - $ref: '#/components/schemas/DarkPoolFilter'
            - type: 'null'
          description: Dark pool intelligence filters
        conviction:
          anyOf:
            - $ref: '#/components/schemas/ConvictionFilter'
            - type: 'null'
        earnings:
          anyOf:
            - $ref: '#/components/schemas/EarningsFilter'
            - type: 'null'
        price_events:
          anyOf:
            - $ref: '#/components/schemas/PriceEventFilter'
            - type: 'null'
          description: Filter by recent price events
        theme:
          anyOf:
            - $ref: '#/components/schemas/ThemeFilter'
            - type: 'null'
          description: Filter by thematic exposure (structural themes)
        max_intraday_decline:
          anyOf:
            - type: number
              maximum: 0
              minimum: -100
            - type: 'null'
          title: Max Intraday Decline
          description: >-
            Maximum intraday decline % to include (e.g., -7.0 excludes stocks
            down more than 7%)
        exclude_halted:
          type: boolean
          title: Exclude Halted
          description: Exclude halted stocks
          default: true
        symbols:
          anyOf:
            - items:
                type: string
              type: array
              maxItems: 50
            - type: 'null'
          title: Symbols
          description: Filter to specific symbols (max 50)
      additionalProperties: false
      type: object
      title: Filters
      description: All available screener filters.
    IncludeOptions:
      properties:
        levels:
          type: boolean
          title: Levels
          description: Include IntradayLevel data
          default: false
        volume_profile:
          type: boolean
          title: Volume Profile
          description: Include VolumeProfileSession data
          default: false
        patterns:
          type: boolean
          title: Patterns
          description: Include Pattern relationships
          default: false
        news:
          type: boolean
          title: News
          description: Include NewsEvent summary
          default: false
        day_classification:
          type: boolean
          title: Day Classification
          description: Include full DayClassification data
          default: false
        price_events:
          type: boolean
          title: Price Events
          description: Include recent price events (gaps, breakouts, MA crossovers, etc.)
          default: false
        session_price:
          type: boolean
          title: Session Price
          description: Include session-specific price data (change, open, low)
          default: false
        thematic_exposure:
          type: boolean
          title: Thematic Exposure
          description: Include structural theme exposures (EXPOSED_TO edges)
          default: false
      type: object
      title: IncludeOptions
      description: Options for including related data in response.
    SortOptions:
      properties:
        by:
          $ref: '#/components/schemas/SortField'
          description: Field to sort by
          default: dollar_volume
        order:
          type: string
          enum:
            - asc
            - desc
          title: Order
          description: Sort order
          default: desc
      type: object
      title: SortOptions
      description: Sorting options.
    Pagination-Input:
      properties:
        limit:
          type: integer
          maximum: 500
          minimum: 1
          title: Limit
          description: Maximum results to return
          default: 50
        offset:
          type: integer
          minimum: 0
          title: Offset
          description: Number of results to skip
          default: 0
      type: object
      title: Pagination
      description: Pagination options.
    StockResult:
      properties:
        symbol:
          type: string
          title: Symbol
          description: Stock ticker symbol
        company_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Company Name
          description: Company name (e.g. NVIDIA Corporation)
        company_description:
          anyOf:
            - type: string
            - type: 'null'
          title: Company Description
          description: Company description
        ceo:
          anyOf:
            - type: string
            - type: 'null'
          title: Ceo
          description: CEO name
        headquarters:
          anyOf:
            - type: string
            - type: 'null'
          title: Headquarters
          description: Headquarters location
        employees:
          anyOf:
            - type: integer
            - type: 'null'
          title: Employees
          description: Number of full-time employees
        ipo_date:
          anyOf:
            - type: string
            - type: 'null'
          title: Ipo Date
          description: IPO date
        website:
          anyOf:
            - type: string
            - type: 'null'
          title: Website
          description: Company website URL
        logo_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Logo Url
          description: Company logo URL
        last_price:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Last Price
          description: >-
            Last price. Delayed (>= 15m old) for non-realtime_sip callers; the
            live scalar is suppressed to null when no delayed bar is available
            (see `source`).
        source:
          type: string
          title: Source
          description: >-
            Market-data feed source label (entitlement layer): 'realtime_sip' |
            'delayed' | 'byok'. Non-realtime_sip callers get 'delayed'.
          default: realtime_sip
        volume:
          type: integer
          minimum: 0
          title: Volume
        dollar_volume:
          type: number
          minimum: 0
          title: Dollar Volume
          description: >-
            DEPRECATED: Use adv20_usd (20-day avg) or dollar_volume_today.
            Currently stores 20-day average.
        dollar_volume_today:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Dollar Volume Today
          description: Today's dollar volume (last_price × volume)
        adv20_usd:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Adv20 Usd
          description: >-
            20-day average dollar volume (canonical name for what was
            misleadingly called dollar_volume)
        adv30_usd:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Adv30 Usd
          description: 30-day average dollar volume
        adv30_shares:
          anyOf:
            - type: integer
              minimum: 0
            - type: 'null'
          title: Adv30 Shares
          description: '30-day average daily share volume (for liquidity hard gate: >= 500k)'
        rel_volume:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Rel Volume
          description: 'Relative volume: yesterday''s volume / 20-day average daily volume'
        rel_vol_5d:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Rel Vol 5D
          description: 5-day average volume / 20-day average volume (volume trend)
        volume_trend:
          anyOf:
            - type: string
              enum:
                - increasing
                - decreasing
                - stable
            - type: 'null'
          title: Volume Trend
        technical:
          anyOf:
            - $ref: '#/components/schemas/Technical'
            - type: 'null'
        compression:
          anyOf:
            - $ref: '#/components/schemas/Compression'
            - type: 'null'
        options:
          anyOf:
            - $ref: '#/components/schemas/Options'
            - type: 'null'
        fundamental:
          anyOf:
            - $ref: '#/components/schemas/Fundamental'
            - type: 'null'
        day_context:
          anyOf:
            - $ref: '#/components/schemas/DayContext'
            - type: 'null'
        earnings:
          anyOf:
            - $ref: '#/components/schemas/Earnings'
            - type: 'null'
        range_3d:
          anyOf:
            - $ref: '#/components/schemas/Range3D'
            - type: 'null'
        analyst:
          anyOf:
            - $ref: '#/components/schemas/Analyst'
            - type: 'null'
        ownership:
          anyOf:
            - $ref: '#/components/schemas/Ownership'
            - type: 'null'
        levels:
          anyOf:
            - $ref: '#/components/schemas/Levels'
            - type: 'null'
        volume_profile:
          anyOf:
            - $ref: '#/components/schemas/VolumeProfile'
            - type: 'null'
        patterns:
          anyOf:
            - items:
                $ref: '#/components/schemas/app__models__stock__Pattern'
              type: array
            - type: 'null'
          title: Patterns
        news:
          anyOf:
            - $ref: '#/components/schemas/News'
            - type: 'null'
        price_events:
          anyOf:
            - items:
                $ref: '#/components/schemas/PriceEvent'
              type: array
            - type: 'null'
          title: Price Events
          description: >-
            Recent price events (gaps, breakouts, MA crossovers, volume events).
            Populated via include option.
        confluence_components:
          anyOf:
            - $ref: '#/components/schemas/ConfluenceComponentBreakdown'
            - type: 'null'
          description: >-
            Structured breakdown of 8 v4.5 confluence components with weights
            and notes. Populated via include option.
        level_ladder:
          anyOf:
            - $ref: '#/components/schemas/LevelLadder'
            - type: 'null'
          description: >-
            Sorted level ladder with ATR distances and confluence zones.
            Populated via include option.
        price:
          anyOf:
            - $ref: '#/components/schemas/SessionPriceData'
            - type: 'null'
          description: >-
            Session-specific price data with pre-market, regular, and
            after-hours OHLC
        confluence_score:
          anyOf:
            - type: number
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Confluence Score
          description: >-
            Confluence score v3 (0-100): weighted combination of volume,
            technical, day type, pattern, and proximity scores
        confluence_tier:
          anyOf:
            - type: string
            - type: 'null'
          title: Confluence Tier
          description: >-
            Tier derived from confluence_score: EXCELLENT (>=90), GOOD (>=80),
            MODERATE (>=70), WEAK (>=60), POOR (<60)
        bullish_confluence:
          anyOf:
            - type: number
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Bullish Confluence
          description: 'Canonical bullish confluence (0-100): v5 scoring'
        bearish_confluence:
          anyOf:
            - type: number
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Bearish Confluence
          description: 'Canonical bearish confluence (0-100): v5 scoring'
        bullish_tier:
          anyOf:
            - type: string
            - type: 'null'
          title: Bullish Tier
          description: >-
            Tier from bullish_confluence: EXCELLENT (>=85), GOOD (>=70),
            MODERATE (>=50), WEAK (>=25), POOR (<25)
        bearish_tier:
          anyOf:
            - type: string
            - type: 'null'
          title: Bearish Tier
          description: >-
            Tier from bearish_confluence: EXCELLENT (>=85), GOOD (>=70),
            MODERATE (>=50), WEAK (>=25), POOR (<25)
        net_confluence:
          anyOf:
            - type: number
              maximum: 100
              minimum: -100
            - type: 'null'
          title: Net Confluence
          description: >-
            Canonical net confluence (-100 to +100): bullish_confluence -
            bearish_confluence
        directional_bias:
          anyOf:
            - type: string
            - type: 'null'
          title: Directional Bias
          description: Canonical directional bias from net_confluence thresholds
        scoring_version:
          anyOf:
            - type: string
            - type: 'null'
          title: Scoring Version
          description: Canonical confluence scoring version source (v5 preferred)
        conviction_max_v5:
          anyOf:
            - type: number
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Conviction Max V5
          description: max(bull, bear) — conviction regardless of direction (0-100)
        conflict_min_v5:
          anyOf:
            - type: number
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Conflict Min V5
          description: min(bull, bear) — disagreement signal (0-100)
        directional_bias_v5:
          anyOf:
            - type: string
            - type: 'null'
          title: Directional Bias V5
          description: BULL_DOMINANT / BEAR_DOMINANT / MIXED (10pt margin)
        is_overextended:
          type: boolean
          title: Is Overextended
          description: True if price is >2 ATR from SMA20 (exhaustion risk for bulls)
          default: false
        is_distribution:
          type: boolean
          title: Is Distribution
          description: True if elevated volume with declining trend (bearish signal)
          default: false
        nearest_level_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Nearest Level Type
          description: >-
            Classification of nearest level: 'support', 'resistance', or
            'neutral'
        cvd:
          anyOf:
            - type: number
            - type: 'null'
          title: Cvd
          description: >-
            Cumulative Volume Delta (raw shares, positive=buying,
            negative=selling)
        cvd_pct:
          anyOf:
            - type: number
            - type: 'null'
          title: Cvd Pct
          description: >-
            CVD as % of total session volume (normalized, cross-symbol
            comparable)
        cvd_divergence:
          anyOf:
            - type: string
            - type: 'null'
          title: Cvd Divergence
          description: 'CVD vs price divergence: bullish_div, bearish_div, none'
        cvd_trend:
          anyOf:
            - type: string
            - type: 'null'
          title: Cvd Trend
          description: 'CVD trend: accumulating, distributing, neutral'
        bullish_entry_score:
          anyOf:
            - type: number
            - type: 'null'
          title: Bullish Entry Score
          description: Bullish entry score 0-100 (intraday timing)
        bearish_entry_score:
          anyOf:
            - type: number
            - type: 'null'
          title: Bearish Entry Score
          description: Bearish entry score 0-100 (intraday timing)
        net_entry_score:
          anyOf:
            - type: number
            - type: 'null'
          title: Net Entry Score
          description: 'Net entry score (-100 to +100): bullish - bearish'
        entry_score_completeness:
          anyOf:
            - type: number
            - type: 'null'
          title: Entry Score Completeness
          description: Entry score completeness 0.0-1.0 (how many components available)
        entry_gates_passed:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Entry Gates Passed
          description: Whether all entry quality gates passed
        entry_failed_gates:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Entry Failed Gates
          description: List of failed entry quality gate names
        entry_gex_modifier:
          anyOf:
            - type: string
            - type: 'null'
          title: Entry Gex Modifier
          description: 'GEX regime modifier applied: long_gamma, short_gamma, or empty'
        gex_regime:
          anyOf:
            - type: string
            - type: 'null'
          title: Gex Regime
          description: 'Current GEX regime: long_gamma, short_gamma, or neutral'
        gex_gamma_flip:
          anyOf:
            - type: number
            - type: 'null'
          title: Gex Gamma Flip
          description: Strike price where dealer gamma flips sign
        momentum_trend_bull:
          anyOf:
            - type: number
              maximum: 10
              minimum: 0
            - type: 'null'
          title: Momentum Trend Bull
          description: >-
            V4.2 momentum component bullish score (0-10). Positive momentum
            favors bulls.
        momentum_trend_bear:
          anyOf:
            - type: number
              maximum: 10
              minimum: 0
            - type: 'null'
          title: Momentum Trend Bear
          description: >-
            V4.2 momentum component bearish score (0-10). Negative momentum
            favors bears.
        momentum_blend:
          anyOf:
            - type: number
            - type: 'null'
          title: Momentum Blend
          description: >-
            Blended multi-horizon return: 0.5*ret_60d + 0.3*ret_90d +
            0.2*ret_20d (percentage)
        momentum_slope_60d:
          anyOf:
            - type: number
            - type: 'null'
          title: Momentum Slope 60D
          description: >-
            Linear regression slope of log(close) over 60 days (annualized
            percentage)
        proximity_bull:
          anyOf:
            - type: number
            - type: 'null'
          title: Proximity Bull
        proximity_bear:
          anyOf:
            - type: number
            - type: 'null'
          title: Proximity Bear
        volatility_bull:
          anyOf:
            - type: number
            - type: 'null'
          title: Volatility Bull
        volatility_bear:
          anyOf:
            - type: number
            - type: 'null'
          title: Volatility Bear
        volume_bull:
          anyOf:
            - type: number
            - type: 'null'
          title: Volume Bull
        volume_bear:
          anyOf:
            - type: number
            - type: 'null'
          title: Volume Bear
        pattern_bull:
          anyOf:
            - type: number
            - type: 'null'
          title: Pattern Bull
        pattern_bear:
          anyOf:
            - type: number
            - type: 'null'
          title: Pattern Bear
        iv_bull:
          anyOf:
            - type: number
            - type: 'null'
          title: Iv Bull
        iv_bear:
          anyOf:
            - type: number
            - type: 'null'
          title: Iv Bear
        day_type_bull:
          anyOf:
            - type: number
            - type: 'null'
          title: Day Type Bull
        day_type_bear:
          anyOf:
            - type: number
            - type: 'null'
          title: Day Type Bear
        vix_regime_bull:
          anyOf:
            - type: number
            - type: 'null'
          title: Vix Regime Bull
        vix_regime_bear:
          anyOf:
            - type: number
            - type: 'null'
          title: Vix Regime Bear
        event_proximity_bull:
          anyOf:
            - type: number
            - type: 'null'
          title: Event Proximity Bull
        event_proximity_bear:
          anyOf:
            - type: number
            - type: 'null'
          title: Event Proximity Bear
        beta_gate_passed:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Beta Gate Passed
          description: >-
            True if stock passes beta risk gate (VIX-aware: max 1.5 in
            EXTREME_FEAR, 2.0 in ELEVATED)
        beta_gate_reason:
          anyOf:
            - type: string
            - type: 'null'
          title: Beta Gate Reason
          description: Explanation for beta gate result
        fundamental_gate_passed:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Fundamental Gate Passed
          description: True if stock passes fundamental quality gate (quality score >= 50)
        fundamental_quality_score:
          anyOf:
            - type: integer
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Fundamental Quality Score
          description: >-
            Fundamental quality score (0-100) based on P/E, ROE, and profit
            margin
        fundamental_grade:
          anyOf:
            - type: string
            - type: 'null'
          title: Fundamental Grade
          description: >-
            Fundamental health grade A-F based on growth, margins, leverage,
            earnings execution, and sentiment
        fundamental_health_score:
          anyOf:
            - type: integer
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Fundamental Health Score
          description: Fundamental health score (0-100) underlying the A-F grade
        earnings_sentiment_bias:
          anyOf:
            - type: string
            - type: 'null'
          title: Earnings Sentiment Bias
          description: >-
            Earnings sentiment from surprise %: POSITIVE (>10%), SLIGHT_POSITIVE
            (0-10%), SLIGHT_NEGATIVE (-10-0%), NEGATIVE (<-10%)
        all_quality_gates_passed:
          anyOf:
            - type: boolean
            - type: 'null'
          title: All Quality Gates Passed
          description: >-
            True if all quality gates (beta, fundamental, earnings sentiment)
            passed
        pricing_edge_bull:
          anyOf:
            - type: number
              maximum: 10
              minimum: 0
            - type: 'null'
          title: Pricing Edge Bull
          description: Pricing edge bullish score from binomial pricer (0-10)
        pricing_edge_bear:
          anyOf:
            - type: number
              maximum: 10
              minimum: 0
            - type: 'null'
          title: Pricing Edge Bear
          description: Pricing edge bearish score (0-10)
        greek_alignment_bull:
          anyOf:
            - type: number
              maximum: 10
              minimum: 0
            - type: 'null'
          title: Greek Alignment Bull
          description: Greek alignment bullish score based on VIX regime (0-10)
        greek_alignment_bear:
          anyOf:
            - type: number
              maximum: 10
              minimum: 0
            - type: 'null'
          title: Greek Alignment Bear
          description: Greek alignment bearish score (0-10)
        orb_structure_bull:
          anyOf:
            - type: number
              maximum: 10
              minimum: 0
            - type: 'null'
          title: Orb Structure Bull
          description: ORB structure bullish score (trap/breakout patterns, 0-10)
        orb_structure_bear:
          anyOf:
            - type: number
              maximum: 10
              minimum: 0
            - type: 'null'
          title: Orb Structure Bear
          description: ORB structure bearish score (0-10)
        orb_proximity_bull:
          anyOf:
            - type: number
              maximum: 10
              minimum: 0
            - type: 'null'
          title: Orb Proximity Bull
          description: ORB proximity bullish score (0-10)
        orb_proximity_bear:
          anyOf:
            - type: number
              maximum: 10
              minimum: 0
            - type: 'null'
          title: Orb Proximity Bear
          description: ORB proximity bearish score (0-10)
        v44_intraday_circuit_breaker_gate_passed:
          anyOf:
            - type: boolean
            - type: 'null'
          title: V44 Intraday Circuit Breaker Gate Passed
          description: True if intraday circuit breaker gate passed (no severe decline)
        intraday_return_pct:
          anyOf:
            - type: number
            - type: 'null'
          title: Intraday Return Pct
          description: 'Intraday return percentage: (last_price - pdc) / pdc * 100'
        intraday_return_bull:
          anyOf:
            - type: number
              maximum: 10
              minimum: 0
            - type: 'null'
          title: Intraday Return Bull
          description: Intraday return bullish component score (0-10)
        intraday_return_bear:
          anyOf:
            - type: number
              maximum: 10
              minimum: 0
            - type: 'null'
          title: Intraday Return Bear
          description: Intraday return bearish component score (0-10)
        extreme_rsi_warning:
          type: boolean
          title: Extreme Rsi Warning
          description: True when RSI < 15 or RSI > 85 (extreme territory)
          default: false
        confluence_computed_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Confluence Computed At
          description: >-
            Timestamp when confluence scores were last computed (for staleness
            detection)
        score_warnings:
          items:
            type: string
          type: array
          title: Score Warnings
          description: >-
            Active score warnings. Open-set vocabulary — consumers MUST default
            to pass-through on unknown values. Current known values:
            intraday_decline_severe, extreme_rsi, circuit_breaker_active,
            score_stale, conviction_stale. See
            app/documentation/ontology/SCORING_REGISTRY.md § Scoring Version
            Precedence.
        pulse_bull:
          anyOf:
            - type: number
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Pulse Bull
          description: 'Pulse bullish score (0-100): real-time intraday conviction'
        pulse_bear:
          anyOf:
            - type: number
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Pulse Bear
          description: 'Pulse bearish score (0-100): real-time intraday conviction'
        pulse_net:
          anyOf:
            - type: number
              maximum: 100
              minimum: -100
            - type: 'null'
          title: Pulse Net
          description: 'Pulse net score (-100 to +100): pulse_bull - pulse_bear'
        pulse_bias:
          anyOf:
            - type: string
            - type: 'null'
          title: Pulse Bias
          description: >-
            Pulse directional bias:
            STRONG_LONG/MOD_LONG/NEUTRAL/MOD_SHORT/STRONG_SHORT
        pulse_computed_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Pulse Computed At
          description: >-
            Timestamp when pulse scores were last computed (for staleness
            detection)
        entry_score_computed_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Entry Score Computed At
          description: >-
            Timestamp when entry scores were last computed (for staleness
            detection)
        orb_directional_bias:
          anyOf:
            - type: string
            - type: 'null'
          title: Orb Directional Bias
          description: 'ORB directional bias: bullish|bearish|neutral'
        dark_pool_pct_1d:
          anyOf:
            - type: number
            - type: 'null'
          title: Dark Pool Pct 1D
          description: Session dark pool volume percentage (0-1)
        block_trade_count:
          anyOf:
            - type: integer
            - type: 'null'
          title: Block Trade Count
          description: Number of block trades detected today
        buy_sell_ratio:
          anyOf:
            - type: number
            - type: 'null'
          title: Buy Sell Ratio
          description: Buy/sell volume ratio (Lee-Ready tick rule)
        net_buy_volume:
          anyOf:
            - type: integer
            - type: 'null'
          title: Net Buy Volume
          description: Net buy volume (buy - sell)
        dark_volume_1d:
          anyOf:
            - type: integer
            - type: 'null'
          title: Dark Volume 1D
          description: Total dark pool volume today
        lit_volume_1d:
          anyOf:
            - type: integer
            - type: 'null'
          title: Lit Volume 1D
          description: Total lit exchange volume today
        regime_v5:
          anyOf:
            - $ref: '#/components/schemas/RegimeV5'
            - type: 'null'
        confluence_v5:
          anyOf:
            - $ref: '#/components/schemas/ConfluenceV5'
            - type: 'null'
        momentum_health_v5:
          anyOf:
            - $ref: '#/components/schemas/MomentumHealthV5'
            - type: 'null'
        conviction_v5:
          anyOf:
            - $ref: '#/components/schemas/ConvictionV5'
            - type: 'null'
        conviction_v5_session_open:
          anyOf:
            - type: number
            - type: 'null'
          title: Conviction V5 Session Open
        conviction_v5_lookback:
          anyOf:
            - type: number
            - type: 'null'
          title: Conviction V5 Lookback
        conviction_v5_lookback_minutes:
          anyOf:
            - type: integer
            - type: 'null'
          title: Conviction V5 Lookback Minutes
        conviction_v5_velocity:
          anyOf:
            - type: number
            - type: 'null'
          title: Conviction V5 Velocity
        conviction_v5_stability:
          anyOf:
            - type: number
            - type: 'null'
          title: Conviction V5 Stability
        conviction_v5_direction_minutes:
          anyOf:
            - type: integer
            - type: 'null'
          title: Conviction V5 Direction Minutes
        conviction_v5_direction_flip:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Conviction V5 Direction Flip
        conviction_v5_delta_valid:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Conviction V5 Delta Valid
        pulse_v5:
          anyOf:
            - $ref: '#/components/schemas/PulseV5'
            - type: 'null'
        entry_v2:
          anyOf:
            - $ref: '#/components/schemas/EntryV2'
            - type: 'null'
        peer_divergence_v1:
          anyOf:
            - $ref: '#/components/schemas/PeerDivergenceV1'
            - type: 'null'
        thematic_exposures:
          anyOf:
            - items:
                $ref: '#/components/schemas/ThematicExposure'
              type: array
            - type: 'null'
          title: Thematic Exposures
          description: Structural theme exposures with direction, magnitude, and momentum
        updated_at:
          type: string
          format: date-time
          title: Updated At
        halted:
          type: boolean
          title: Halted
          default: false
        quote_timestamp:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Quote Timestamp
          description: 'Timestamp of latest quote data (SLA: < 5 seconds)'
        bar_1min_timestamp:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Bar 1Min Timestamp
          description: 'Timestamp of latest 1-minute bar (SLA: < 5 minutes)'
        bar_daily_timestamp:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Bar Daily Timestamp
          description: 'Timestamp of latest daily bar (SLA: < 4 hours during market)'
      type: object
      required:
        - symbol
        - volume
        - dollar_volume
        - updated_at
      title: StockResult
      description: |-
        Complete stock data with all available metrics.

        This is the primary response model for stock queries.
      example:
        adv20_usd: 8000000000
        adv30_usd: 7500000000
        dollar_volume: 8000000000
        dollar_volume_today: 8797500000
        last_price: 195.5
        rel_volume: 1.17
        symbol: AAPL
        technical:
          rsi_14: 55.2
          trend_stack_valid: true
        updated_at: '2025-12-20T15:30:00Z'
        volume: 45000000
    ScreenerMetadata:
      properties:
        total_matched:
          type: integer
          title: Total Matched
          description: Total stocks matching filters
        returned:
          type: integer
          title: Returned
          description: Number of stocks in response
        offset:
          type: integer
          title: Offset
          description: Offset used for pagination
        query_ms:
          type: number
          title: Query Ms
          description: Query execution time in milliseconds
        data_freshness:
          type: string
          format: date-time
          title: Data Freshness
          description: Timestamp of most recent data
        filters_applied:
          items:
            type: string
          type: array
          title: Filters Applied
          description: List of filter types applied
      type: object
      required:
        - total_matched
        - returned
        - offset
        - query_ms
        - data_freshness
      title: ScreenerMetadata
      description: Metadata about screener query execution.
    PriceFilter:
      properties:
        min:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Min
        max:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Max
      additionalProperties: false
      type: object
      title: PriceFilter
      description: Price range filter.
    VolumeFilter:
      properties:
        adv30_usd_min:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Adv30 Usd Min
          description: Minimum 30-day average dollar volume
        dollar_volume_min:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Dollar Volume Min
          description: Minimum today's dollar volume
        rel_volume_min:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Rel Volume Min
          description: Minimum relative volume
        cvd_trend:
          anyOf:
            - type: string
              enum:
                - accumulating
                - distributing
                - neutral
            - type: 'null'
          title: Cvd Trend
          description: Filter by CVD trend classification
      additionalProperties: false
      type: object
      title: VolumeFilter
      description: Volume/liquidity filters.
    OptionsFilter:
      properties:
        chain_total_oi_min:
          anyOf:
            - type: integer
              minimum: 0
            - type: 'null'
          title: Chain Total Oi Min
          description: Minimum total open interest
        chain_volume_1d_min:
          anyOf:
            - type: integer
              minimum: 0
            - type: 'null'
          title: Chain Volume 1D Min
          description: Minimum today's options volume
        iv_percentile:
          anyOf:
            - $ref: '#/components/schemas/PriceFilter'
            - type: 'null'
          description: IV percentile range filter (0-100)
        put_call_ratio:
          anyOf:
            - $ref: '#/components/schemas/PriceFilter'
            - type: 'null'
          description: Put/call ratio range filter
      additionalProperties: false
      type: object
      title: OptionsFilter
      description: |-
        Options-related filters.

        Note: These filters require the options-collector pipeline to be active.
        Properties are written to graph vertices by Go collectors.
    TechnicalFilter:
      properties:
        rsi_14:
          anyOf:
            - $ref: '#/components/schemas/PriceFilter'
            - type: 'null'
          description: RSI(14) range filter
        trend_stack:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Trend Stack
          description: Filter for trend stack alignment (EMA9 > EMA20 > SMA50 > SMA200)
        compression:
          anyOf:
            - items:
                $ref: '#/components/schemas/CompressionType'
              type: array
            - type: 'null'
          title: Compression
          description: Filter for specific compression patterns
        atr_compression_max:
          anyOf:
            - type: number
            - type: 'null'
          title: Atr Compression Max
          description: Maximum ATR compression ratio
      additionalProperties: false
      type: object
      title: TechnicalFilter
      description: Technical indicator filters.
    FundamentalFilter:
      properties:
        market_cap_min:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Market Cap Min
        market_cap_max:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Market Cap Max
        sector:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Sector
          description: Filter by sectors
        exchange:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Exchange
          description: Filter by exchanges
        fundamental_health_score_min:
          anyOf:
            - type: integer
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Fundamental Health Score Min
          description: >-
            Minimum fundamental health score (0-100 integer, maps to letter
            grades)
        roe_min:
          anyOf:
            - type: number
            - type: 'null'
          title: Roe Min
          description: Minimum return on equity (%)
        dividend_yield_min:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Dividend Yield Min
          description: Minimum dividend yield (%)
      additionalProperties: false
      type: object
      title: FundamentalFilter
      description: Fundamental filters.
    app__models__screener__DayType:
      type: string
      enum:
        - trending
        - rotational
        - uncertain
      title: DayType
      description: Day type classification.
    DirectionalBias:
      type: string
      enum:
        - STRONG_LONG
        - MOD_LONG
        - NEUTRAL
        - MOD_SHORT
        - STRONG_SHORT
      title: DirectionalBias
      description: 'Phase 15: Directional bias from net_confluence thresholds.'
    ConfluenceFilter:
      properties:
        bullish_min:
          anyOf:
            - type: number
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Bullish Min
          description: Minimum bullish confluence score (0-100)
        bearish_min:
          anyOf:
            - type: number
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Bearish Min
          description: Minimum bearish confluence score (0-100)
        net_min:
          anyOf:
            - type: number
              maximum: 100
              minimum: -100
            - type: 'null'
          title: Net Min
          description: Minimum net confluence (-100 to +100)
        net_max:
          anyOf:
            - type: number
              maximum: 100
              minimum: -100
            - type: 'null'
          title: Net Max
          description: Maximum net confluence (-100 to +100)
      additionalProperties: false
      type: object
      title: ConfluenceFilter
      description: >-
        Confluence scoring filters.


        Filter by V4 dual bull/bear confluence scores and net directional
        signal.
    PulseFilter:
      properties:
        net_min:
          anyOf:
            - type: number
              maximum: 100
              minimum: -100
            - type: 'null'
          title: Net Min
          description: Minimum pulse net score (-100 to +100)
        net_max:
          anyOf:
            - type: number
              maximum: 100
              minimum: -100
            - type: 'null'
          title: Net Max
          description: Maximum pulse net score (-100 to +100)
        bias:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Bias
          description: >-
            Filter by pulse bias: STRONG_LONG, MOD_LONG, NEUTRAL, MOD_SHORT,
            STRONG_SHORT
      additionalProperties: false
      type: object
      title: PulseFilter
      description: |-
        V4.5 Pulse score filters.

        Filter by real-time intraday conviction (Pulse) scores.
    DarkPoolFilter:
      properties:
        dark_pool_pct_min:
          anyOf:
            - type: number
              maximum: 1
              minimum: 0
            - type: 'null'
          title: Dark Pool Pct Min
          description: Minimum dark pool % (0-1)
        dark_pool_pct_max:
          anyOf:
            - type: number
              maximum: 1
              minimum: 0
            - type: 'null'
          title: Dark Pool Pct Max
          description: Maximum dark pool % (0-1)
        buy_sell_ratio_min:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Buy Sell Ratio Min
          description: Minimum buy/sell ratio
        buy_sell_ratio_max:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Buy Sell Ratio Max
          description: Maximum buy/sell ratio
        min_block_trades:
          anyOf:
            - type: integer
              minimum: 0
            - type: 'null'
          title: Min Block Trades
          description: Minimum block trade count
      additionalProperties: false
      type: object
      title: DarkPoolFilter
      description: Dark pool intelligence filters.
    ConvictionFilter:
      properties:
        conviction_min:
          anyOf:
            - type: number
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Conviction Min
        conviction_max:
          anyOf:
            - type: number
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Conviction Max
        conviction_confidence_min:
          anyOf:
            - type: number
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Conviction Confidence Min
        conviction_max_v5_min:
          anyOf:
            - type: number
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Conviction Max V5 Min
        conviction_max_v5_max:
          anyOf:
            - type: number
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Conviction Max V5 Max
        conflict_min_v5_min:
          anyOf:
            - type: number
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Conflict Min V5 Min
        conflict_min_v5_max:
          anyOf:
            - type: number
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Conflict Min V5 Max
      additionalProperties: false
      type: object
      title: ConvictionFilter
      description: Conviction score filters (v5 scoring architecture).
    EarningsFilter:
      properties:
        within_days:
          anyOf:
            - type: integer
              minimum: 1
            - type: 'null'
          title: Within Days
          description: Only stocks with earnings within N days. Requires earnings pipeline.
          x-data-status: pending
        cleared:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Cleared
          description: Filter for stocks that have cleared earnings (>3 days past)
      additionalProperties: false
      type: object
      title: EarningsFilter
      description: |-
        Earnings-related filters.

        Note: These filters require the earnings-sync pipeline to be active.
    PriceEventFilter:
      properties:
        event_types:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Event Types
          description: >-
            Filter by event types (gap_up, gap_down, breakout_52w_high,
            golden_cross, etc.)
        min_severity:
          anyOf:
            - type: string
            - type: 'null'
          title: Min Severity
          description: 'Minimum severity level: low, medium, high, critical'
        days:
          anyOf:
            - type: integer
              maximum: 90
              minimum: 1
            - type: 'null'
          title: Days
          description: Events within N days (default 30, max 90)
          default: 30
      additionalProperties: false
      type: object
      title: PriceEventFilter
      description: |-
        Price event filters for Go pattern-detector events.

        Filter stocks by recent price events including gaps, breakouts,
        MA crossovers, volume events, and pattern triggers.
    ThemeFilter:
      properties:
        theme_ids:
          anyOf:
            - items:
                type: string
              type: array
              maxItems: 30
            - type: 'null'
          title: Theme Ids
          description: >-
            Filter to stocks exposed to any of these themes (from
            VALID_THEME_IDS)
      additionalProperties: false
      type: object
      title: ThemeFilter
      description: Filter stocks by thematic exposure.
    SortField:
      type: string
      enum:
        - dollar_volume
        - adv30_usd
        - market_cap
        - confluence_score
        - rsi_14
        - iv_percentile
        - proximity_score
        - rel_volume
        - bullish_confluence
        - bearish_confluence
        - net_confluence
        - cvd_pct
        - bullish_entry_score
        - bearish_entry_score
        - net_entry_score
        - pattern_count
        - options_confluence_score
        - iv_rank
        - pricing_edge_bull
        - abs_net_confluence
        - pulse_net
        - abs_pulse_net
        - confluence_bull_v5
        - confluence_bear_v5
        - confluence_net_v5
        - momentum_health_v5
        - conviction_v5
        - conviction_max_v5
        - conviction_confidence_v5
        - conflict_min_v5
        - pulse_bull_v5
        - pulse_bear_v5
        - pulse_net_v5
        - entry_bull_v2
        - entry_bear_v2
        - options_confluence_v5
        - momentum_crowding_v5
        - news_sentiment_v5
        - dark_pool_pct
        - buy_sell_ratio
        - peer_divergence
        - fundamental_health_score
        - dividend_yield
        - roe
      title: SortField
      description: Available sort fields for screener.
    Technical:
      properties:
        rsi_14:
          anyOf:
            - type: number
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Rsi 14
        macd:
          anyOf:
            - type: number
            - type: 'null'
          title: Macd
        macd_signal:
          anyOf:
            - type: number
            - type: 'null'
          title: Macd Signal
        adx_14:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Adx 14
        atr_14:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Atr 14
        moving_averages:
          anyOf:
            - $ref: '#/components/schemas/MovingAverages'
            - type: 'null'
        bollinger:
          anyOf:
            - $ref: '#/components/schemas/Bollinger'
            - type: 'null'
        trend_stack_valid:
          type: boolean
          title: Trend Stack Valid
          description: True if EMA9 > EMA20 > SMA50 > SMA200
          default: false
        atr_1m_14:
          anyOf:
            - type: number
            - type: 'null'
          title: Atr 1M 14
        daily_atr:
          additionalProperties:
            anyOf:
              - type: number
              - type: 'null'
          type: object
          title: Daily Atr
          description: 'EOD-frozen daily ATR by period. Keys: ''14'', ''20''.'
        daily_atr_live:
          anyOf:
            - type: number
            - type: 'null'
          title: Daily Atr Live
        range_vs_atr_14:
          anyOf:
            - type: number
            - type: 'null'
          title: Range Vs Atr 14
      type: object
      title: Technical
      description: Technical indicator values.
    Compression:
      properties:
        is_nr7:
          type: boolean
          title: Is Nr7
          description: Narrowest range of last 7 days
          default: false
        is_inside_day:
          type: boolean
          title: Is Inside Day
          description: Today's range inside prior day
          default: false
        atr_compression_ratio:
          anyOf:
            - type: number
            - type: 'null'
          title: Atr Compression Ratio
          description: 'Legacy: ATR(3) / ATR(14). Prefer range_vs_atr_14.'
        range_vs_atr_14:
          anyOf:
            - type: number
            - type: 'null'
          title: Range Vs Atr 14
          description: Today's range / daily ATR(14) — replaces atr_compression_ratio
        vcp_contraction_count:
          type: integer
          title: Vcp Contraction Count
          description: Number of contracting pivot ranges
          default: 0
      type: object
      title: Compression
      description: Volatility compression indicators.
    Options:
      properties:
        iv_percentile:
          anyOf:
            - type: number
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Iv Percentile
          description: IV percentile vs 52-week range. Requires options pipeline.
          x-data-status: pending
        chain_total_oi:
          anyOf:
            - type: integer
            - type: 'null'
          title: Chain Total Oi
          description: Total open interest across all strikes. Requires options pipeline.
          x-data-status: pending
        chain_volume_1d:
          anyOf:
            - type: integer
            - type: 'null'
          title: Chain Volume 1D
          description: Total options volume today. Requires options pipeline.
          x-data-status: pending
        put_call_ratio:
          anyOf:
            - type: number
            - type: 'null'
          title: Put Call Ratio
          description: Put volume / Call volume. Requires options pipeline.
          x-data-status: pending
        unusual_activity:
          type: boolean
          title: Unusual Activity
          description: Flagged for unusual options activity
          default: false
        iv_rank:
          anyOf:
            - type: number
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Iv Rank
          description: 'IV rank: current IV vs 52-week high/low range (0-100)'
        iv_skew:
          anyOf:
            - type: number
            - type: 'null'
          title: Iv Skew
          description: 'IV skew: put IV premium over call IV'
        pricing_edge_bull:
          anyOf:
            - type: number
            - type: 'null'
          title: Pricing Edge Bull
          description: Pricing edge bullish component score from binomial pricer (0-10)
        pricing_edge_bear:
          anyOf:
            - type: number
            - type: 'null'
          title: Pricing Edge Bear
          description: Pricing edge bearish component score (0-10)
        theta_drag_15d:
          anyOf:
            - type: number
            - type: 'null'
          title: Theta Drag 15D
          description: 15-day theta drag as % of premium
        options_confluence_score:
          anyOf:
            - type: number
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Options Confluence Score
          description: >-
            Standalone options confluence score (0-100): IV rank + pricing edge
            + skew + flow + Greeks + liquidity + equity confluence
        best_options_strategy:
          anyOf:
            - type: string
            - type: 'null'
          title: Best Options Strategy
          description: >-
            Best options strategy recommendation (e.g., MomentumBreakout,
            VolatilityCompression)
        strategy_scores_json:
          anyOf:
            - type: string
            - type: 'null'
          title: Strategy Scores Json
          description: JSON-encoded per-strategy viability scores from graph
        refresh_timestamp:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Refresh Timestamp
          description: 'Timestamp of last options data refresh (for SLA validation: < 60s)'
      type: object
      title: Options
      description: |-
        Options-related data.

        Note: Data availability depends on options-collector pipeline status.
    Fundamental:
      properties:
        market_cap:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Market Cap
        sector:
          anyOf:
            - type: string
            - type: 'null'
          title: Sector
        exchange:
          anyOf:
            - type: string
            - type: 'null'
          title: Exchange
        pe_ratio:
          anyOf:
            - type: number
            - type: 'null'
          title: Pe Ratio
          description: Trailing P/E ratio (TTM)
        forward_pe:
          anyOf:
            - type: number
            - type: 'null'
          title: Forward Pe
          description: Forward P/E ratio
        eps_ttm:
          anyOf:
            - type: number
            - type: 'null'
          title: Eps Ttm
          description: Earnings per share (TTM)
        price_to_book:
          anyOf:
            - type: number
            - type: 'null'
          title: Price To Book
          description: Price to book value ratio
        price_to_sales:
          anyOf:
            - type: number
            - type: 'null'
          title: Price To Sales
          description: Price to sales ratio
        enterprise_value:
          anyOf:
            - type: number
            - type: 'null'
          title: Enterprise Value
          description: Enterprise value (USD)
        peg_ratio:
          anyOf:
            - type: number
            - type: 'null'
          title: Peg Ratio
          description: 'PEG ratio: forward P/E / (earnings growth YoY × 100)'
        peg_warning:
          anyOf:
            - type: string
            - type: 'null'
          title: Peg Warning
          description: 'PEG warning flag: ''negative_base'' when prior-period EPS is negative'
        ev_ebitda:
          anyOf:
            - type: number
            - type: 'null'
          title: Ev Ebitda
          description: EV/EBITDA ratio
        ev_ebitda_warning:
          anyOf:
            - type: string
            - type: 'null'
          title: Ev Ebitda Warning
          description: 'EV/EBITDA warning: ''negative_ebitda'' or ''extremely_high'''
        cash_and_equivalents:
          anyOf:
            - type: number
            - type: 'null'
          title: Cash And Equivalents
          description: Cash and short-term investments (USD)
        total_debt:
          anyOf:
            - type: number
            - type: 'null'
          title: Total Debt
          description: Total debt (USD)
        book_value_per_share:
          anyOf:
            - type: number
            - type: 'null'
          title: Book Value Per Share
          description: Book value per share (USD)
        operating_cash_flow:
          anyOf:
            - type: number
            - type: 'null'
          title: Operating Cash Flow
          description: Operating cash flow TTM (USD)
        net_leverage:
          anyOf:
            - type: number
            - type: 'null'
          title: Net Leverage
          description: 'Net leverage: (total_debt - cash) / EBITDA'
        roe:
          anyOf:
            - type: number
            - type: 'null'
          title: Roe
          description: Return on equity (%)
        roa:
          anyOf:
            - type: number
            - type: 'null'
          title: Roa
          description: Return on assets (%)
        profit_margin:
          anyOf:
            - type: number
            - type: 'null'
          title: Profit Margin
          description: Net profit margin (%)
        gross_margin:
          anyOf:
            - type: number
            - type: 'null'
          title: Gross Margin
          description: Gross profit margin (%)
        operating_margin:
          anyOf:
            - type: number
            - type: 'null'
          title: Operating Margin
          description: Operating margin (%)
        net_margin:
          anyOf:
            - type: number
            - type: 'null'
          title: Net Margin
          description: Net profit margin (%) — from FMP ratios
        roic:
          anyOf:
            - type: number
            - type: 'null'
          title: Roic
          description: Return on invested capital (%)
        dividend_yield:
          anyOf:
            - type: number
            - type: 'null'
          title: Dividend Yield
          description: Dividend yield (%)
        payout_ratio:
          anyOf:
            - type: number
            - type: 'null'
          title: Payout Ratio
          description: Dividend payout ratio (%)
        debt_to_equity:
          anyOf:
            - type: number
            - type: 'null'
          title: Debt To Equity
          description: Debt to equity ratio
        current_ratio:
          anyOf:
            - type: number
            - type: 'null'
          title: Current Ratio
          description: Current ratio (liquidity)
        revenue_growth_yoy:
          anyOf:
            - type: number
            - type: 'null'
          title: Revenue Growth Yoy
          description: Revenue growth YoY (%)
        earnings_growth_yoy:
          anyOf:
            - type: number
            - type: 'null'
          title: Earnings Growth Yoy
          description: Earnings growth YoY (%)
        beta:
          anyOf:
            - type: number
            - type: 'null'
          title: Beta
          description: Beta vs market
        shares_outstanding:
          anyOf:
            - type: number
            - type: 'null'
          title: Shares Outstanding
          description: Total shares outstanding
        float_shares:
          anyOf:
            - type: number
            - type: 'null'
          title: Float Shares
          description: Float shares
        free_float_pct:
          anyOf:
            - type: number
            - type: 'null'
          title: Free Float Pct
          description: Free float percentage
      type: object
      title: Fundamental
      description: >-
        Fundamental data.


        Most fields are written by the Go graph writer from Yahoo Finance

        fundamentals collector. market_cap, sector, exchange are core
        identifiers.
    DayContext:
      properties:
        day_type:
          type: string
          enum:
            - trending
            - rotational
            - uncertain
          title: Day Type
        day_type_detail:
          anyOf:
            - type: string
              enum:
                - strong_trend
                - trending
                - mixed
                - rotational
                - strong_rotational
            - type: 'null'
          title: Day Type Detail
          description: 5-point scale day type classification for more granular analysis
        trend_score:
          type: number
          maximum: 1
          minimum: -1
          title: Trend Score
        rotation_score:
          type: number
          maximum: 1
          minimum: 0
          title: Rotation Score
        strategy_bias:
          anyOf:
            - type: string
            - type: 'null'
          title: Strategy Bias
        size_modifier:
          type: number
          maximum: 2
          minimum: 0.5
          title: Size Modifier
          default: 1
      type: object
      required:
        - day_type
        - trend_score
        - rotation_score
      title: DayContext
      description: Daily classification context.
    Earnings:
      properties:
        days_until:
          anyOf:
            - type: integer
            - type: 'null'
          title: Days Until
          description: Days until next earnings. Requires earnings pipeline.
          x-data-status: pending
        cleared:
          type: boolean
          title: Cleared
          description: True if >3 days past most recent earnings
          default: false
        surprise_pct:
          anyOf:
            - type: number
            - type: 'null'
          title: Surprise Pct
          description: 'Earnings surprise %: ((actual - estimate) / |estimate|) * 100'
        surprise_zscore:
          anyOf:
            - type: number
            - type: 'null'
          title: Surprise Zscore
          description: Z-score vs trailing 8-quarter surprise distribution
        consecutive_beats:
          type: integer
          title: Consecutive Beats
          description: Consecutive beats (positive) or misses (negative)
          default: 0
        beat_rate_8q:
          anyOf:
            - type: number
              maximum: 1
              minimum: 0
            - type: 'null'
          title: Beat Rate 8Q
          description: Beat rate over trailing 8 quarters (0.0 to 1.0)
        surprise_category:
          anyOf:
            - type: string
            - type: 'null'
          title: Surprise Category
          description: BLOWOUT_BEAT, SOLID_BEAT, INLINE, MISS, BLOWOUT_MISS
        normalized_surprise:
          anyOf:
            - type: string
            - type: 'null'
          title: Normalized Surprise
          description: EXCEPTIONAL_BEAT, STRONG_BEAT, MODEST_BEAT, INLINE, etc.
        revenue_eps_aligned:
          type: boolean
          title: Revenue Eps Aligned
          description: True if both EPS and revenue beat or both miss
          default: false
      type: object
      title: Earnings
      description: |-
        Earnings-related data including surprise metrics.

        Note: Data availability depends on earnings-sync pipeline status.
    Range3D:
      properties:
        high:
          type: number
          title: High
        low:
          type: number
          title: Low
        break_high:
          type: boolean
          title: Break High
          description: Broke 3-day high today
          default: false
        break_low:
          type: boolean
          title: Break Low
          description: Broke 3-day low today
          default: false
      type: object
      required:
        - high
        - low
      title: Range3D
      description: 3-day range breakout tracking.
    Analyst:
      properties:
        consensus:
          anyOf:
            - type: string
            - type: 'null'
          title: Consensus
          description: 'Consensus label: Buy, Hold, Sell, etc.'
        score:
          anyOf:
            - type: number
            - type: 'null'
          title: Score
          description: Weighted score 1-5 (strongSell=1..strongBuy=5)
        count:
          anyOf:
            - type: integer
            - type: 'null'
          title: Count
          description: Total analyst ratings count
        strong_buy_count:
          anyOf:
            - type: integer
            - type: 'null'
          title: Strong Buy Count
          description: Strong Buy analyst count
        buy_count:
          anyOf:
            - type: integer
            - type: 'null'
          title: Buy Count
          description: Buy analyst count
        hold_count:
          anyOf:
            - type: integer
            - type: 'null'
          title: Hold Count
          description: Hold analyst count
        sell_count:
          anyOf:
            - type: integer
            - type: 'null'
          title: Sell Count
          description: Sell analyst count
        strong_sell_count:
          anyOf:
            - type: integer
            - type: 'null'
          title: Strong Sell Count
          description: Strong Sell analyst count
        target_mean:
          anyOf:
            - type: number
            - type: 'null'
          title: Target Mean
          description: Consensus target price
        target_high:
          anyOf:
            - type: number
            - type: 'null'
          title: Target High
          description: Highest analyst target
        target_low:
          anyOf:
            - type: number
            - type: 'null'
          title: Target Low
          description: Lowest analyst target
        target_upside:
          anyOf:
            - type: number
            - type: 'null'
          title: Target Upside
          description: '% upside to target from current price'
        est_eps_avg:
          anyOf:
            - type: number
            - type: 'null'
          title: Est Eps Avg
          description: Consensus EPS estimate (annual)
        est_eps_high:
          anyOf:
            - type: number
            - type: 'null'
          title: Est Eps High
          description: Highest EPS estimate
        est_eps_low:
          anyOf:
            - type: number
            - type: 'null'
          title: Est Eps Low
          description: Lowest EPS estimate
        est_revenue_avg:
          anyOf:
            - type: number
            - type: 'null'
          title: Est Revenue Avg
          description: Consensus revenue estimate (USD)
        num_analysts_eps:
          anyOf:
            - type: integer
            - type: 'null'
          title: Num Analysts Eps
          description: Number of analysts covering EPS
        est_fy2_eps_avg:
          anyOf:
            - type: number
            - type: 'null'
          title: Est Fy2 Eps Avg
          description: FY+2 consensus EPS estimate
        est_fy2_eps_high:
          anyOf:
            - type: number
            - type: 'null'
          title: Est Fy2 Eps High
          description: FY+2 highest EPS estimate
        est_fy2_eps_low:
          anyOf:
            - type: number
            - type: 'null'
          title: Est Fy2 Eps Low
          description: FY+2 lowest EPS estimate
        latest_grade_firm:
          anyOf:
            - type: string
            - type: 'null'
          title: Latest Grade Firm
          description: Most recent grading firm
        latest_grade_action:
          anyOf:
            - type: string
            - type: 'null'
          title: Latest Grade Action
          description: 'Action: maintain, upgrade, downgrade'
        latest_grade_to:
          anyOf:
            - type: string
            - type: 'null'
          title: Latest Grade To
          description: 'New grade: Overweight, Buy, etc.'
        latest_grade_date:
          anyOf:
            - type: string
            - type: 'null'
          title: Latest Grade Date
          description: Date of grade change (YYYY-MM-DD)
      type: object
      title: Analyst
      description: Analyst consensus, estimates, and rating data from FMP (COR-68/69).
    Ownership:
      properties:
        insider_purchases:
          anyOf:
            - type: integer
            - type: 'null'
          title: Insider Purchases
          description: Total insider purchase transactions
        insider_sales:
          anyOf:
            - type: integer
            - type: 'null'
          title: Insider Sales
          description: Total insider sale transactions
        insider_acquired:
          anyOf:
            - type: number
            - type: 'null'
          title: Insider Acquired
          description: Total shares acquired by insiders
        insider_disposed:
          anyOf:
            - type: number
            - type: 'null'
          title: Insider Disposed
          description: Total shares disposed by insiders
        insider_sentiment:
          anyOf:
            - type: string
            - type: 'null'
          title: Insider Sentiment
          description: 'Derived: buying, selling, neutral'
      type: object
      title: Ownership
      description: Insider and institutional ownership data from FMP (COR-68/69).
    Levels:
      properties:
        pivot_pp:
          anyOf:
            - type: number
            - type: 'null'
          title: Pivot Pp
        pivot_r1:
          anyOf:
            - type: number
            - type: 'null'
          title: Pivot R1
        pivot_r2:
          anyOf:
            - type: number
            - type: 'null'
          title: Pivot R2
        pivot_r3:
          anyOf:
            - type: number
            - type: 'null'
          title: Pivot R3
        pivot_s1:
          anyOf:
            - type: number
            - type: 'null'
          title: Pivot S1
        pivot_s2:
          anyOf:
            - type: number
            - type: 'null'
          title: Pivot S2
        pivot_s3:
          anyOf:
            - type: number
            - type: 'null'
          title: Pivot S3
        cpr_tc:
          anyOf:
            - type: number
            - type: 'null'
          title: Cpr Tc
        cpr_bc:
          anyOf:
            - type: number
            - type: 'null'
          title: Cpr Bc
        ib_high:
          anyOf:
            - type: number
            - type: 'null'
          title: Ib High
        ib_low:
          anyOf:
            - type: number
            - type: 'null'
          title: Ib Low
        ib_range:
          anyOf:
            - type: number
            - type: 'null'
          title: Ib Range
          description: IB High - IB Low
        ib_1_5x_high:
          anyOf:
            - type: number
            - type: 'null'
          title: Ib 1 5X High
          description: IB 1.5x extension high
        ib_2x_high:
          anyOf:
            - type: number
            - type: 'null'
          title: Ib 2X High
          description: IB 2x extension high
        ib_1_5x_low:
          anyOf:
            - type: number
            - type: 'null'
          title: Ib 1 5X Low
          description: IB 1.5x extension low
        ib_2x_low:
          anyOf:
            - type: number
            - type: 'null'
          title: Ib 2X Low
          description: IB 2x extension low
        orb_5m_high:
          anyOf:
            - type: number
            - type: 'null'
          title: Orb 5M High
          description: 5-minute ORB high (9:30-9:35 ET)
        orb_5m_low:
          anyOf:
            - type: number
            - type: 'null'
          title: Orb 5M Low
          description: 5-minute ORB low (9:30-9:35 ET)
        orb_15m_high:
          anyOf:
            - type: number
            - type: 'null'
          title: Orb 15M High
          description: 15-minute ORB high (9:30-9:45 ET)
        orb_15m_low:
          anyOf:
            - type: number
            - type: 'null'
          title: Orb 15M Low
          description: 15-minute ORB low (9:30-9:45 ET)
        orb_30m_high:
          anyOf:
            - type: number
            - type: 'null'
          title: Orb 30M High
          description: 30-minute ORB high (9:30-10:00 ET)
        orb_30m_low:
          anyOf:
            - type: number
            - type: 'null'
          title: Orb 30M Low
          description: 30-minute ORB low (9:30-10:00 ET)
        orb_5m_status:
          anyOf:
            - type: string
            - type: 'null'
          title: Orb 5M Status
          description: >-
            5m ORB status:
            inside|breakout_up|breakout_down|failed_breakout_up|failed_breakout_down
        orb_15m_status:
          anyOf:
            - type: string
            - type: 'null'
          title: Orb 15M Status
          description: >-
            15m ORB status:
            inside|breakout_up|breakout_down|failed_breakout_up|failed_breakout_down
        orb_30m_status:
          anyOf:
            - type: string
            - type: 'null'
          title: Orb 30M Status
          description: >-
            30m ORB status:
            inside|breakout_up|breakout_down|failed_breakout_up|failed_breakout_down
        orb_structure:
          anyOf:
            - type: string
            - type: 'null'
          title: Orb Structure
          description: >-
            Derived ORB structure:
            bull_trap|bear_trap|breakout_held_up|breakout_held_down|range_bound
        orb_directional_bias:
          anyOf:
            - type: string
            - type: 'null'
          title: Orb Directional Bias
          description: 'ORB directional bias: bullish|bearish|neutral'
        vah:
          anyOf:
            - type: number
            - type: 'null'
          title: Vah
          description: Value Area High
        val:
          anyOf:
            - type: number
            - type: 'null'
          title: Val
          description: Value Area Low
        poc:
          anyOf:
            - type: number
            - type: 'null'
          title: Poc
          description: Point of Control
        vwap:
          anyOf:
            - type: number
            - type: 'null'
          title: Vwap
          description: Volume Weighted Average Price
        vwap_plus_1sd:
          anyOf:
            - type: number
            - type: 'null'
          title: Vwap Plus 1Sd
          description: VWAP + 1 standard deviation
        vwap_plus_2sd:
          anyOf:
            - type: number
            - type: 'null'
          title: Vwap Plus 2Sd
          description: VWAP + 2 standard deviations
        vwap_minus_1sd:
          anyOf:
            - type: number
            - type: 'null'
          title: Vwap Minus 1Sd
          description: VWAP - 1 standard deviation
        vwap_minus_2sd:
          anyOf:
            - type: number
            - type: 'null'
          title: Vwap Minus 2Sd
          description: VWAP - 2 standard deviations
        price_vs_vwap_sd:
          anyOf:
            - type: number
            - type: 'null'
          title: Price Vs Vwap Sd
          description: >-
            Current price position relative to VWAP in SD units (-3 to +3
            typical)
        pdh:
          anyOf:
            - type: number
            - type: 'null'
          title: Pdh
          description: Prior Day High
        pdl:
          anyOf:
            - type: number
            - type: 'null'
          title: Pdl
          description: Prior Day Low
        pdc:
          anyOf:
            - type: number
            - type: 'null'
          title: Pdc
          description: Prior Day Close
        pwh:
          anyOf:
            - type: number
            - type: 'null'
          title: Pwh
          description: Prior Week High
        pwl:
          anyOf:
            - type: number
            - type: 'null'
          title: Pwl
          description: Prior Week Low
        onh:
          anyOf:
            - type: number
            - type: 'null'
          title: Onh
          description: Overnight/Pre-market High (4pm-9:30am)
        onl:
          anyOf:
            - type: number
            - type: 'null'
          title: Onl
          description: Overnight/Pre-market Low (4pm-9:30am)
        nearest_level:
          anyOf:
            - type: string
            - type: 'null'
          title: Nearest Level
          description: Name of the nearest significant level
        dist_to_nearest_atr:
          anyOf:
            - type: number
            - type: 'null'
          title: Dist To Nearest Atr
          description: Distance to nearest level in ATR units
      type: object
      title: Levels
      description: Key price levels from IntradayLevel vertex.
    VolumeProfile:
      properties:
        prior:
          anyOf:
            - $ref: '#/components/schemas/VolumeProfilePrior'
            - type: 'null'
        developing:
          anyOf:
            - $ref: '#/components/schemas/VolumeProfileDeveloping'
            - type: 'null'
      type: object
      title: VolumeProfile
      description: Volume profile data from VolumeProfileSession vertex.
    app__models__stock__Pattern:
      properties:
        type:
          type: string
          title: Type
          description: Pattern type (e.g., 'bull_flag', 'head_shoulders')
        confidence:
          type: number
          maximum: 1
          minimum: 0
          title: Confidence
        detected_at:
          type: string
          format: date-time
          title: Detected At
      type: object
      required:
        - type
        - confidence
        - detected_at
      title: Pattern
      description: Technical pattern from Pattern vertex.
    News:
      properties:
        count:
          type: integer
          minimum: 0
          title: Count
          default: 0
        avg_sentiment:
          anyOf:
            - type: number
              maximum: 1
              minimum: -1
            - type: 'null'
          title: Avg Sentiment
        high_impact_count:
          type: integer
          minimum: 0
          title: High Impact Count
          default: 0
        sentiment:
          anyOf:
            - $ref: '#/components/schemas/NewsSentiment'
            - type: 'null'
          description: Structured sentiment from FinBERT/Claude hybrid scoring
      type: object
      title: News
      description: News summary aggregated from news_sentiment table.
    PriceEvent:
      properties:
        event_id:
          type: string
          title: Event Id
          description: 'Unique ID: {symbol}_{type}_{YYYYMMDD_HHMMSS}_{hash6}'
        event_type:
          type: string
          title: Event Type
          description: Event type (gap_up, gap_down, breakout_52w_high, golden_cross, etc.)
        event_date:
          type: string
          format: date-time
          title: Event Date
          description: Bar timestamp when event was detected
        severity:
          type: string
          title: Severity
          description: 'Event severity: low, medium, high, critical'
        magnitude:
          anyOf:
            - type: number
            - type: 'null'
          title: Magnitude
          description: Percentage change or ratio for the event
        reference_price:
          anyOf:
            - type: number
            - type: 'null'
          title: Reference Price
          description: Prior price used for comparison
        trigger_price:
          anyOf:
            - type: number
            - type: 'null'
          title: Trigger Price
          description: Price that triggered the event
        level_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Level Name
          description: Level crossed (52w_high, ib_low, vwap, etc.)
        level_value:
          anyOf:
            - type: number
            - type: 'null'
          title: Level Value
          description: Value of the level that was crossed
        rel_volume:
          anyOf:
            - type: number
            - type: 'null'
          title: Rel Volume
          description: Relative volume at time of event
        atr_ratio:
          anyOf:
            - type: number
            - type: 'null'
          title: Atr Ratio
          description: Move size relative to ATR(14)
        details:
          anyOf:
            - type: string
            - type: 'null'
          title: Details
          description: Human-readable event description
      type: object
      required:
        - event_id
        - event_type
        - event_date
        - severity
      title: PriceEvent
      description: >-
        Price event detected by Go pattern-detector.


        Events include gaps, breakouts, MA crossovers, volume events, and
        pattern triggers.

        All 28 event types are edge-triggered (detect crosses, not just state).
    ConfluenceComponentBreakdown:
      properties:
        scoring_version:
          type: string
          title: Scoring Version
          default: v4.5
        components:
          items:
            $ref: '#/components/schemas/ComponentScoreDetail'
          type: array
          title: Components
          description: 8 confluence components ordered by weight (descending)
        total_bull:
          type: number
          maximum: 100
          minimum: 0
          title: Total Bull
          description: Sum of weighted bull contributions = bullish_confluence
        total_bear:
          type: number
          maximum: 100
          minimum: 0
          title: Total Bear
          description: Sum of weighted bear contributions = bearish_confluence
        net:
          type: number
          maximum: 100
          minimum: -100
          title: Net
          description: total_bull - total_bear = net_confluence
      type: object
      required:
        - components
        - total_bull
        - total_bear
        - net
      title: ConfluenceComponentBreakdown
      description: >-
        Structured breakdown of confluence score components (v4.5).


        Returned via `include=confluence_components` on the stock detail
        endpoint.

        Contains the 8 v4.5 weighted components with descriptive notes.
    LevelLadder:
      properties:
        current_price:
          type: number
          title: Current Price
          description: Current stock price for reference
        atr_14:
          anyOf:
            - type: number
            - type: 'null'
          title: Atr 14
          description: ATR(14) used for distance calculations
        levels:
          items:
            $ref: '#/components/schemas/LevelLadderEntry'
          type: array
          title: Levels
          description: All non-null levels sorted by price descending
        nearest_support:
          anyOf:
            - $ref: '#/components/schemas/LevelLadderEntry'
            - type: 'null'
          description: Nearest support level below current price
        nearest_resistance:
          anyOf:
            - $ref: '#/components/schemas/LevelLadderEntry'
            - type: 'null'
          description: Nearest resistance level above current price
      type: object
      required:
        - current_price
        - atr_14
        - levels
      title: LevelLadder
      description: >-
        Sorted level ladder with ATR distances and confluence zones.


        Returned via `include=level_ladder` on the stock detail endpoint.

        Levels sorted by price descending (resistance at top, support at
        bottom).
    SessionPriceData:
      properties:
        current:
          type: number
          title: Current
          description: Current/latest trade price
        change:
          anyOf:
            - type: number
            - type: 'null'
          title: Change
          description: Price change from the official previous close
        change_percent:
          anyOf:
            - type: number
            - type: 'null'
          title: Change Percent
          description: Percentage change from the official previous close
        previous_close:
          anyOf:
            - type: number
            - type: 'null'
          title: Previous Close
          description: Previous trading day's split-adjusted SIP daily-bar close
        market_status:
          type: string
          enum:
            - overnight
            - pre-market
            - open
            - after-hours
            - closed
          title: Market Status
          description: Current market session status
        official_close:
          anyOf:
            - type: number
            - type: 'null'
          title: Official Close
          description: Most recent completed session's split-adjusted SIP daily-bar close
        official_close_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Official Close Date
          description: Trading date associated with official_close
        close_source:
          anyOf:
            - type: string
              const: alpaca_sip_1day
            - type: 'null'
          title: Close Source
          description: >-
            Authority used for official close fields (split-adjusted); null
            means unavailable
        close_change:
          anyOf:
            - type: number
            - type: 'null'
          title: Close Change
          description: Day change of the most recent regular session close
        close_change_percent:
          anyOf:
            - type: number
            - type: 'null'
          title: Close Change Percent
          description: Day change percent of the most recent regular session close
        close_time:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Close Time
          description: Timestamp of the most recent regular session close
        overnight:
          anyOf:
            - $ref: '#/components/schemas/SessionOHLC'
            - type: 'null'
          description: Overnight session OHLC (8:00 PM prev day - 4:00 AM ET)
        pre_market:
          anyOf:
            - $ref: '#/components/schemas/SessionOHLC'
            - type: 'null'
          description: Pre-market session OHLC (4:00 AM - 9:30 AM ET)
        regular_session:
          anyOf:
            - $ref: '#/components/schemas/SessionOHLC'
            - type: 'null'
          description: Regular trading session OHLC (9:30 AM - 4:00 PM ET)
        after_hours:
          anyOf:
            - $ref: '#/components/schemas/SessionOHLC'
            - type: 'null'
          description: After-hours session OHLC (4:00 PM - 8:00 PM ET)
        has_extended_trades:
          type: boolean
          title: Has Extended Trades
          description: >-
            True if any trades occurred in the current extended session
            (pre-market or after-hours). False means current price is the stale
            close — UI should show 'No activity'.
          default: false
        bid:
          type: number
          title: Bid
          description: Current bid price
        ask:
          type: number
          title: Ask
          description: Current ask price
        bid_size:
          type: integer
          title: Bid Size
          description: Current bid size
        ask_size:
          type: integer
          title: Ask Size
          description: Current ask size
        last_update:
          type: string
          format: date-time
          title: Last Update
          description: Timestamp of last data update
      type: object
      required:
        - current
        - change
        - change_percent
        - previous_close
        - market_status
        - bid
        - ask
        - bid_size
        - ask_size
        - last_update
      title: SessionPriceData
      description: |-
        Complete session-specific price data.

        Contains current price, change metrics, and OHLC data for each
        market session (pre-market, regular hours, after-hours).
      example:
        ask: 195.52
        ask_size: 150
        bid: 195.48
        bid_size: 200
        change: 2.3
        change_percent: 1.19
        current: 195.5
        last_update: '2025-01-06T14:30:45Z'
        market_status: open
        pre_market:
          close: 194.6
          high: 194.8
          last: 194.65
          low: 193.25
          open: 193.5
        previous_close: 193.2
        regular_session:
          close: 195.48
          high: 196
          last: 195.5
          low: 194.5
          open: 194.7
    RegimeV5:
      properties:
        strong_trend:
          anyOf:
            - type: number
            - type: 'null'
          title: Strong Trend
        mild_trend:
          anyOf:
            - type: number
            - type: 'null'
          title: Mild Trend
        rotation:
          anyOf:
            - type: number
            - type: 'null'
          title: Rotation
        vol_expand:
          anyOf:
            - type: number
            - type: 'null'
          title: Vol Expand
        compressed:
          anyOf:
            - type: number
            - type: 'null'
          title: Compressed
        transitional:
          anyOf:
            - type: number
            - type: 'null'
          title: Transitional
        dominant:
          anyOf:
            - type: string
            - type: 'null'
          title: Dominant
        confidence:
          anyOf:
            - type: number
            - type: 'null'
          title: Confidence
        computed_at:
          anyOf:
            - type: string
            - type: 'null'
          title: Computed At
      type: object
      title: RegimeV5
      description: V5 regime state vector (shadow mode).
    ConfluenceV5:
      properties:
        bull:
          anyOf:
            - type: number
            - type: 'null'
          title: Bull
        bear:
          anyOf:
            - type: number
            - type: 'null'
          title: Bear
        net:
          anyOf:
            - type: number
            - type: 'null'
          title: Net
        bias:
          anyOf:
            - type: string
            - type: 'null'
          title: Bias
        confidence:
          anyOf:
            - type: number
            - type: 'null'
          title: Confidence
        regime_applied:
          anyOf:
            - type: string
            - type: 'null'
          title: Regime Applied
      type: object
      title: ConfluenceV5
      description: V5 confluence scoring with regime-conditioned weights (shadow mode).
    MomentumHealthV5:
      properties:
        total:
          anyOf:
            - type: number
            - type: 'null'
          title: Total
        decay_rate:
          anyOf:
            - type: number
            - type: 'null'
          title: Decay Rate
        multi_tf:
          anyOf:
            - type: number
            - type: 'null'
          title: Multi Tf
        trend_quality:
          anyOf:
            - type: number
            - type: 'null'
          title: Trend Quality
        ma_slope:
          anyOf:
            - type: number
            - type: 'null'
          title: Ma Slope
        tier:
          anyOf:
            - type: string
            - type: 'null'
          title: Tier
        computed_at:
          anyOf:
            - type: string
            - type: 'null'
          title: Computed At
      type: object
      title: MomentumHealthV5
      description: V5 momentum health 4-axis composite (shadow mode).
    ConvictionV5:
      properties:
        score:
          anyOf:
            - type: number
            - type: 'null'
          title: Score
          description: Conviction v5 (0-100)
        core:
          anyOf:
            - type: number
            - type: 'null'
          title: Core
          description: Core conviction (no options)
        confidence:
          anyOf:
            - type: number
            - type: 'null'
          title: Confidence
          description: Statistical confidence (0-100)
        direction:
          anyOf:
            - type: string
            - type: 'null'
          title: Direction
          description: BULLISH/BEARISH/NEUTRAL
        regime:
          anyOf:
            - type: string
            - type: 'null'
          title: Regime
          description: Regime at computation
        formula_variant:
          anyOf:
            - type: string
              enum:
                - core4
                - enriched5
                - enriched6
            - type: 'null'
          title: Formula Variant
          description: core4/enriched5/enriched6
        options_participation:
          anyOf:
            - type: string
              enum:
                - ACTIVE
                - STALE
                - INELIGIBLE
            - type: 'null'
          title: Options Participation
        options_weight:
          anyOf:
            - type: number
            - type: 'null'
          title: Options Weight
        weight_confluence:
          anyOf:
            - type: number
            - type: 'null'
          title: Weight Confluence
          description: Regime-conditioned confluence weight
        weight_pulse:
          anyOf:
            - type: number
            - type: 'null'
          title: Weight Pulse
          description: Regime-conditioned pulse weight
        weight_entry:
          anyOf:
            - type: number
            - type: 'null'
          title: Weight Entry
          description: Regime-conditioned entry weight
        weight_momentum:
          anyOf:
            - type: number
            - type: 'null'
          title: Weight Momentum
          description: Regime-conditioned momentum weight
        computed_at:
          anyOf:
            - type: string
            - type: 'null'
          title: Computed At
          description: ISO timestamp of last computation
        norm_confluence:
          anyOf:
            - type: number
            - type: 'null'
          title: Norm Confluence
        norm_pulse:
          anyOf:
            - type: number
            - type: 'null'
          title: Norm Pulse
        norm_entry:
          anyOf:
            - type: number
            - type: 'null'
          title: Norm Entry
        norm_momentum:
          anyOf:
            - type: number
            - type: 'null'
          title: Norm Momentum
        norm_options:
          anyOf:
            - type: number
            - type: 'null'
          title: Norm Options
        confluence_net_at_source:
          anyOf:
            - type: number
            - type: 'null'
          title: Confluence Net At Source
        pulse_net_at_source:
          anyOf:
            - type: number
            - type: 'null'
          title: Pulse Net At Source
        entry_net_at_source:
          anyOf:
            - type: number
            - type: 'null'
          title: Entry Net At Source
        momentum_health_at_source:
          anyOf:
            - type: number
            - type: 'null'
          title: Momentum Health At Source
        options_score_at_source:
          anyOf:
            - type: number
            - type: 'null'
          title: Options Score At Source
        source_bar_ts:
          anyOf:
            - type: string
            - type: 'null'
          title: Source Bar Ts
          description: RFC3339 timestamp of the bar that produced this conviction
      type: object
      title: ConvictionV5
      description: Conviction meta-score (MSE real-time).
    PulseV5:
      properties:
        bull:
          anyOf:
            - type: number
            - type: 'null'
          title: Bull
        bear:
          anyOf:
            - type: number
            - type: 'null'
          title: Bear
        net:
          anyOf:
            - type: number
            - type: 'null'
          title: Net
        bias:
          anyOf:
            - type: string
            - type: 'null'
          title: Bias
        confidence:
          anyOf:
            - type: number
            - type: 'null'
          title: Confidence
      type: object
      title: PulseV5
      description: Pulse v5 real-time momentum.
    EntryV2:
      properties:
        bull:
          anyOf:
            - type: number
            - type: 'null'
          title: Bull
        bear:
          anyOf:
            - type: number
            - type: 'null'
          title: Bear
        net:
          anyOf:
            - type: number
            - type: 'null'
          title: Net
        completeness:
          anyOf:
            - type: number
            - type: 'null'
          title: Completeness
        confidence:
          anyOf:
            - type: number
            - type: 'null'
          title: Confidence
      type: object
      title: EntryV2
      description: Entry Score v2 execution timing.
    PeerDivergenceV1:
      properties:
        local:
          anyOf:
            - type: number
            - type: 'null'
          title: Local
        medium:
          anyOf:
            - type: number
            - type: 'null'
          title: Medium
        broad:
          anyOf:
            - type: number
            - type: 'null'
          title: Broad
        composite:
          anyOf:
            - type: number
            - type: 'null'
          title: Composite
        signal:
          anyOf:
            - type: string
            - type: 'null'
          title: Signal
        peers_local:
          anyOf:
            - type: integer
            - type: 'null'
          title: Peers Local
        peers_medium:
          anyOf:
            - type: integer
            - type: 'null'
          title: Peers Medium
        peers_broad:
          anyOf:
            - type: integer
            - type: 'null'
          title: Peers Broad
        weight_config:
          anyOf:
            - type: string
            - type: 'null'
          title: Weight Config
        updated_at:
          anyOf:
            - type: string
            - type: 'null'
          title: Updated At
      type: object
      title: PeerDivergenceV1
      description: >-
        Peer divergence via graph diffusion (heat kernel on multi-layer
        adjacency).
    ThematicExposure:
      properties:
        theme_id:
          type: string
          title: Theme Id
          description: Theme identifier (e.g., 'ai_ml')
        theme_name:
          type: string
          title: Theme Name
          description: Human-readable theme name
        theme_type:
          type: string
          title: Theme Type
          description: '''opportunity'' or ''risk'''
        direction:
          type: string
          title: Direction
          description: '''positive'', ''negative'', or ''mixed'''
        magnitude_pctile:
          type: integer
          maximum: 100
          minimum: 0
          title: Magnitude Pctile
          description: Exposure percentile within industry
        momentum:
          anyOf:
            - type: number
              maximum: 1
              minimum: -1
            - type: 'null'
          title: Momentum
          description: Theme momentum score
      type: object
      required:
        - theme_id
        - theme_name
        - theme_type
        - direction
        - magnitude_pctile
      title: ThematicExposure
      description: A stock's exposure to a structural theme.
    CompressionType:
      type: string
      enum:
        - nr7
        - bb_squeeze
        - vcp
        - inside_day
      title: CompressionType
      description: Volatility compression patterns.
    MovingAverages:
      properties:
        ema_9:
          anyOf:
            - type: number
            - type: 'null'
          title: Ema 9
        ema_20:
          anyOf:
            - type: number
            - type: 'null'
          title: Ema 20
        sma_50:
          anyOf:
            - type: number
            - type: 'null'
          title: Sma 50
        sma_200:
          anyOf:
            - type: number
            - type: 'null'
          title: Sma 200
      type: object
      title: MovingAverages
      description: Moving average values.
    Bollinger:
      properties:
        upper:
          anyOf:
            - type: number
            - type: 'null'
          title: Upper
        middle:
          anyOf:
            - type: number
            - type: 'null'
          title: Middle
        lower:
          anyOf:
            - type: number
            - type: 'null'
          title: Lower
        width_percentile:
          anyOf:
            - type: number
            - type: 'null'
          title: Width Percentile
          description: Percentile of current BB width vs 52-week range
      type: object
      title: Bollinger
      description: Bollinger band values.
    VolumeProfilePrior:
      properties:
        vah:
          anyOf:
            - type: number
            - type: 'null'
          title: Vah
        val:
          anyOf:
            - type: number
            - type: 'null'
          title: Val
        poc:
          anyOf:
            - type: number
            - type: 'null'
          title: Poc
        distribution:
          anyOf:
            - type: string
            - type: 'null'
          title: Distribution
          description: p-shaped, b-shaped, or d-shaped
      type: object
      title: VolumeProfilePrior
      description: Prior session volume profile.
    VolumeProfileDeveloping:
      properties:
        vah:
          anyOf:
            - type: number
            - type: 'null'
          title: Vah
        val:
          anyOf:
            - type: number
            - type: 'null'
          title: Val
        poc:
          anyOf:
            - type: number
            - type: 'null'
          title: Poc
      type: object
      title: VolumeProfileDeveloping
      description: Developing (current) session volume profile.
    NewsSentiment:
      properties:
        score:
          anyOf:
            - type: number
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Score
          description: >-
            Sentiment score 0-100 (0=strong bearish, 50=neutral, 100=strong
            bullish)
        label:
          anyOf:
            - type: string
            - type: 'null'
          title: Label
          description: >-
            5-class label: strong_bullish, bullish, neutral, bearish,
            strong_bearish
        method:
          anyOf:
            - type: string
            - type: 'null'
          title: Method
          description: 'Scoring method: finbert, claude_refined, keyword'
        confidence:
          anyOf:
            - type: number
              maximum: 1
              minimum: 0
            - type: 'null'
          title: Confidence
          description: Model confidence (0-1), higher for Claude/FinBERT
        context_summary:
          anyOf:
            - type: string
            - type: 'null'
          title: Context Summary
          description: Claude reasoning summary (when method=claude_refined)
      type: object
      title: NewsSentiment
      description: News sentiment scoring results (FinBERT/Claude hybrid).
    ComponentScoreDetail:
      properties:
        name:
          type: string
          title: Name
          description: 'Component key: proximity_to_level, volume_confirmation, etc.'
        label:
          type: string
          title: Label
          description: 'Human-readable label: Proximity to Level, etc.'
        weight:
          type: number
          maximum: 1
          minimum: 0
          title: Weight
          description: Component weight in v4.5 formula (sums to 1.0)
        bull:
          type: number
          maximum: 10
          minimum: 0
          title: Bull
          description: Bullish component score (0-10)
        bear:
          type: number
          maximum: 10
          minimum: 0
          title: Bear
          description: Bearish component score (0-10)
        weighted_bull:
          type: number
          title: Weighted Bull
          description: Weighted bullish contribution to total (bull * weight * 10)
        weighted_bear:
          type: number
          title: Weighted Bear
          description: Weighted bearish contribution to total (bear * weight * 10)
        note:
          anyOf:
            - type: string
            - type: 'null'
          title: Note
          description: Contextual note about this component
      type: object
      required:
        - name
        - label
        - weight
        - bull
        - bear
        - weighted_bull
        - weighted_bear
      title: ComponentScoreDetail
      description: >-
        Individual component in the confluence score breakdown.


        Used by the `include=confluence_components` response to give the
        frontend

        an iterable list of components with weights, scores, and contextual
        notes.
    LevelLadderEntry:
      properties:
        type:
          type: string
          title: Type
          description: 'Level type: pivot_pp, ib_high, vwap, sma_50, etc.'
        label:
          type: string
          title: Label
          description: 'Human-readable label: Pivot PP, IB High, VWAP, etc.'
        price:
          type: number
          title: Price
          description: Level price
        side:
          type: string
          enum:
            - support
            - resistance
            - neutral
          title: Side
          description: Whether this level is support, resistance, or at-price
        distance_atr:
          anyOf:
            - type: number
            - type: 'null'
          title: Distance Atr
          description: Distance from current price in ATR units (negative = below)
        distance_pct:
          anyOf:
            - type: number
            - type: 'null'
          title: Distance Pct
          description: Distance from current price as percentage
        freshness:
          type: string
          enum:
            - live
            - daily
            - structural
          title: Freshness
          description: 'Data freshness: live (~60s), daily (pivots, IB), structural (MAs)'
        confluence_count:
          type: integer
          title: Confluence Count
          description: Number of other levels within 0.25 ATR (confluence zone)
          default: 0
      type: object
      required:
        - type
        - label
        - price
        - side
        - freshness
      title: LevelLadderEntry
      description: Single entry in the sorted level ladder.
    SessionOHLC:
      properties:
        open:
          type: number
          title: Open
          description: First trade price when session opened
        high:
          type: number
          title: High
          description: Highest price during session
        low:
          type: number
          title: Low
          description: Lowest price during session
        last:
          type: number
          title: Last
          description: Last trade price in session
        close:
          type: number
          title: Close
          description: Latest 1-min bar close in session
        last_time:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Last Time
          description: Timestamp of the last bar in this session
      type: object
      required:
        - open
        - high
        - low
        - last
        - close
      title: SessionOHLC
      description: OHLC data for a single market session.
      example:
        close: 195.75
        high: 196.2
        last: 195.8
        last_time: '2025-01-06T16:00:00Z'
        low: 194.25
        open: 194.5

````