{
  "version": "v2",
  "generated_at_iso": "2026-09-26",
  "counts": {
    "fields": 275,
    "flags": 152
  },
  "taxonomy": {
    "groups": [
      {
        "slug": "price",
        "label": "Price",
        "derivation": "record",
        "description": "Price levels and records: quotes, bars, session levels, and rolling highs & lows, plus the signals those levels own (at / above / approaching / breaking).",
        "categories": [
          {
            "slug": "trades_quotes",
            "label": "Trades & quotes",
            "description": "Last trade and the current quote: price, bid/ask, and depth."
          },
          {
            "slug": "bars",
            "label": "Latest bars",
            "description": "OHLC of the latest minute bar and the prior session's daily bar."
          },
          {
            "slug": "session_structure",
            "label": "Session levels & position",
            "description": "Today's session levels (open, high, low) and where price sits relative to them and yesterday's landmarks."
          },
          {
            "slug": "highs_lows",
            "label": "Highs & lows",
            "description": "Rolling-window highs and lows (5-day, 20-day, 52-week), their dates and distances, and the at/approaching/breaking signals those levels own."
          },
          {
            "slug": "support_resistance",
            "label": "Support & resistance",
            "description": "Pivot-detected price levels a ticker has repeatedly touched, and whether price is at one now. Levels are found nightly across the equity universe; a ticker with too little history has none and its booleans read NULL rather than false."
          }
        ]
      },
      {
        "slug": "volume",
        "label": "Volume",
        "derivation": "record",
        "description": "How much traded: absolute quantities and averages, and activity relative to baseline.",
        "categories": [
          {
            "slug": "volume_levels",
            "label": "Volume & averages",
            "description": "Absolute trading quantities: today's and prior volumes, dollar volume, averages, bar-level counts."
          },
          {
            "slug": "volume_activity",
            "label": "Relative & unusual volume",
            "description": "Trading activity relative to baseline: relative volume, bursts, unusual-volume booleans, liquidity conditions."
          }
        ]
      },
      {
        "slug": "price_action",
        "label": "Price action",
        "derivation": "behavior",
        "description": "How price is moving: behaviors recognized directly from the price record — changes, gaps, momentum episodes, range structures — with no indicator in between.",
        "categories": [
          {
            "slug": "performance",
            "label": "Performance & change",
            "description": "Price change over standard horizons, today through 1 year, plus streaks and day-mover booleans."
          },
          {
            "slug": "gaps",
            "label": "Gaps",
            "description": "Opening gaps: size, direction, extremes, and intraday fill."
          },
          {
            "slug": "intraday_momentum",
            "label": "Intraday momentum",
            "description": "Directional strength read straight off the session's bars: drives, drifts, spikes, rallies, exhaustion."
          },
          {
            "slug": "ranges",
            "label": "Ranges & reversals",
            "description": "Range structures and their resolution: opening range, breaks, consolidation, pullbacks, reversals, unusual range width."
          }
        ]
      },
      {
        "slug": "technicals",
        "label": "Technicals",
        "derivation": "indicator",
        "description": "Named technical indicators (SMA, EMA, VWAP, RSI, stochastics, MACD, ADX, Bollinger, ATR) and every signal computed through one. The test: a named mathematical object sits between the bars and the signal.",
        "categories": [
          {
            "slug": "moving_averages",
            "label": "Moving averages & VWAP",
            "description": "SMAs, EMAs, and VWAPs, with the distances, above/below states, and crosses they own."
          },
          {
            "slug": "oscillators",
            "label": "Oscillators",
            "description": "Bounded momentum oscillators: RSI and stochastics, with their threshold booleans."
          },
          {
            "slug": "trend",
            "label": "Trend & direction",
            "description": "Trend direction and strength: MACD, ADX/±DI, SMA-based trend reads, and reversal composites."
          },
          {
            "slug": "volatility_bands",
            "label": "Volatility & bands",
            "description": "Volatility measures and deviation envelopes: ATR, Bollinger machinery, VWAP σ-bands."
          }
        ]
      },
      {
        "slug": "fundamentals",
        "label": "Fundamentals",
        "derivation": "reported",
        "description": "Company financials: statement lines as reported, ratios derived from them, market-price multiples on top of them, share structure, and short positioning.",
        "categories": [
          {
            "slug": "income_statement",
            "label": "Income statement",
            "description": "Income-statement lines as reported, EPS, and their growth rates."
          },
          {
            "slug": "balance_sheet",
            "label": "Balance sheet",
            "description": "Balance-sheet lines as reported."
          },
          {
            "slug": "cash_flow",
            "label": "Cash flow",
            "description": "Cash-flow-statement lines and free cash flow."
          },
          {
            "slug": "margins_ratios",
            "label": "Margins & ratios",
            "description": "Ratios computed entirely from statement lines — margins, returns, liquidity, leverage. No market price in the formula."
          },
          {
            "slug": "valuation",
            "label": "Valuation",
            "description": "Metrics crossing market price with financials — cap, EV, multiples, yield, beta — plus the size/style tags they own (cap tiers, beta tags, value_stock)."
          },
          {
            "slug": "share_structure",
            "label": "Share structure & ownership",
            "description": "How the equity is divided and held: share counts, float and its tags, insider/institutional ownership, ETF holders."
          },
          {
            "slug": "short_interest",
            "label": "Short interest",
            "description": "Short positioning: readings, ratios, days-to-cover, and their booleans."
          }
        ]
      },
      {
        "slug": "events",
        "label": "Events",
        "derivation": "calendar",
        "description": "What happened or is scheduled to happen to the company: earnings, dividends, IPOs, share-capital changes, insider transactions.",
        "categories": [
          {
            "slug": "earnings",
            "label": "Earnings",
            "description": "The earnings calendar and its outcomes: dates, windows, surprises, streaks."
          },
          {
            "slug": "dividends",
            "label": "Dividends",
            "description": "Dividend amount, schedule, and approach booleans."
          },
          {
            "slug": "ipos",
            "label": "IPOs",
            "description": "IPO dates and status, from pending through recently listed."
          },
          {
            "slug": "capital_changes",
            "label": "Splits & share changes",
            "description": "Events that alter share count or float: splits, buybacks, dilution."
          },
          {
            "slug": "insider_activity",
            "label": "Insider activity",
            "description": "Insider (Form 4) transaction booleans: C-suite buys and sells, clustered buying."
          }
        ]
      },
      {
        "slug": "profile",
        "label": "Profile",
        "derivation": "reference",
        "description": "Who and what the security is: categorical classification and identity data. Lookup information, not computed signals.",
        "categories": [
          {
            "slug": "classification",
            "label": "Classification",
            "description": "Categorical facts: sector, industry, SIC, exchange, country, currency, asset class and sub-class."
          },
          {
            "slug": "identity",
            "label": "Identifiers & reference",
            "description": "Which company this is: name, IDs (CIK, FIGI), listing status, contact, branding, employees."
          },
          {
            "slug": "company",
            "label": "Company profile",
            "description": "The issuer behind the symbol: description, address, contacts, branding, headcount, and lifecycle notes. Describes the company, not the instrument — the state row carries it; the symbol catalog does not."
          }
        ]
      },
      {
        "slug": "analyst",
        "label": "Analyst ratings",
        "derivation": "opinion",
        "description": "Third-party analyst judgment: the consensus, individual firm actions, price targets, and forward estimates.",
        "categories": [
          {
            "slug": "consensus_ratings",
            "label": "Consensus ratings",
            "description": "The aggregate analyst opinion: consensus rating, the buy/hold/sell distribution, coverage depth."
          },
          {
            "slug": "analyst_actions",
            "label": "Upgrades & downgrades",
            "description": "Individual firm actions: rating changes, initiations, and price-target changes."
          },
          {
            "slug": "price_targets",
            "label": "Price targets",
            "description": "Where analysts say it's going: consensus/high/low targets and price-versus-target state."
          },
          {
            "slug": "estimates",
            "label": "Estimates",
            "description": "What analysts say it will earn: forward EPS/revenue estimates and their revisions."
          }
        ]
      },
      {
        "slug": "news",
        "label": "News",
        "derivation": "text",
        "description": "Signals derived from news coverage: article volume and sentiment.",
        "categories": [
          {
            "slug": "news",
            "label": "News",
            "description": "News coverage signals: article volume and volume-weighted sentiment."
          }
        ]
      }
    ]
  },
  "fields": [
    {
      "name": "accounts_payable",
      "type": "bigint",
      "category": "balance_sheet",
      "category_label": "Balance sheet",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Trade payables to suppliers as of the quarter end.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "address_address1",
      "type": "text",
      "category": "company",
      "category_label": "Company profile",
      "group": "profile",
      "group_label": "Profile",
      "description": "Company headquarters street address.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "address_city",
      "type": "text",
      "category": "company",
      "category_label": "Company profile",
      "group": "profile",
      "group_label": "Profile",
      "description": "Company headquarters city.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "address_postal_code",
      "type": "text",
      "category": "company",
      "category_label": "Company profile",
      "group": "profile",
      "group_label": "Profile",
      "description": "Company headquarters postal code.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "address_state",
      "type": "text",
      "category": "company",
      "category_label": "Company profile",
      "group": "profile",
      "group_label": "Profile",
      "description": "Company headquarters state or region.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "adx_14",
      "type": "numeric",
      "category": "trend",
      "category_label": "Trend & direction",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "Average Directional Index (14-period): trend strength from 0 to 100.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "afterhours_change_pct",
      "type": "numeric",
      "category": "performance",
      "category_label": "Performance & change",
      "group": "price_action",
      "group_label": "Price action",
      "description": "Percent change between regular-session close and most recent after-hours print. Sparse — most equities don't trade in after-hours, and the column updates only when a print actually happens.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "%",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "afterhours_price",
      "type": "numeric",
      "category": "session_structure",
      "category_label": "Session levels & position",
      "group": "price",
      "group_label": "Price",
      "description": "Last after-hours price, if available.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "analyst_consensus_rating",
      "type": "text",
      "category": "consensus_ratings",
      "category_label": "Consensus ratings",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "description": "Consensus analyst rating across contributing firms. One of `strong buy`, `buy`, `hold`, `sell`, `strong sell`. NULL for tickers without analyst coverage.",
      "cadence": "hourly",
      "cadence_label": "hourly",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "analyst_consensus_rating_value",
      "type": "numeric",
      "category": "consensus_ratings",
      "category_label": "Consensus ratings",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "description": "Consensus rating as a numeric score on the standard 1–5 scale (1 = strong buy, 5 = strong sell). Lower is more bullish.",
      "cadence": "hourly",
      "cadence_label": "hourly",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "analyst_consensus_target_price",
      "type": "numeric",
      "category": "price_targets",
      "category_label": "Price targets",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "description": "Mean of contributing analysts' 12-month price targets.",
      "cadence": "hourly",
      "cadence_label": "hourly",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "analyst_count_buy",
      "type": "integer",
      "category": "consensus_ratings",
      "category_label": "Consensus ratings",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "description": "Number of contributing firms rating the ticker as buy.",
      "cadence": "hourly",
      "cadence_label": "hourly",
      "unit": "count",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "analyst_count_hold",
      "type": "integer",
      "category": "consensus_ratings",
      "category_label": "Consensus ratings",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "description": "Number of contributing firms rating the ticker as hold (neutral).",
      "cadence": "hourly",
      "cadence_label": "hourly",
      "unit": "count",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "analyst_count_sell",
      "type": "integer",
      "category": "consensus_ratings",
      "category_label": "Consensus ratings",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "description": "Number of contributing firms rating the ticker as sell.",
      "cadence": "hourly",
      "cadence_label": "hourly",
      "unit": "count",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "analyst_count_strong_buy",
      "type": "integer",
      "category": "consensus_ratings",
      "category_label": "Consensus ratings",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "description": "Number of contributing firms rating the ticker as strong buy.",
      "cadence": "hourly",
      "cadence_label": "hourly",
      "unit": "count",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "analyst_count_strong_sell",
      "type": "integer",
      "category": "consensus_ratings",
      "category_label": "Consensus ratings",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "description": "Number of contributing firms rating the ticker as strong sell.",
      "cadence": "hourly",
      "cadence_label": "hourly",
      "unit": "count",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "analyst_count_total",
      "type": "integer",
      "category": "consensus_ratings",
      "category_label": "Consensus ratings",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "description": "Total number of contributing firms covering the ticker with any rating. Sum of the five `analyst_count_*` buckets. `well_covered` fires when this is at least 10.",
      "cadence": "hourly",
      "cadence_label": "hourly",
      "unit": "count",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "analyst_count_with_target",
      "type": "integer",
      "category": "consensus_ratings",
      "category_label": "Consensus ratings",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "description": "Number of contributing firms whose rating includes a published 12-month price target. Always ≤ `analyst_count_total`.",
      "cadence": "hourly",
      "cadence_label": "hourly",
      "unit": "count",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "analyst_target_price_high",
      "type": "numeric",
      "category": "price_targets",
      "category_label": "Price targets",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "description": "Highest single-analyst 12-month price target across contributing firms.",
      "cadence": "hourly",
      "cadence_label": "hourly",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "analyst_target_price_low",
      "type": "numeric",
      "category": "price_targets",
      "category_label": "Price targets",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "description": "Lowest single-analyst 12-month price target across contributing firms.",
      "cadence": "hourly",
      "cadence_label": "hourly",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "analyst_target_upside_pct",
      "type": "numeric",
      "category": "price_targets",
      "category_label": "Price targets",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "description": "Implied upside from the current price to the consensus target, in percent. `(analyst_consensus_target_price - price) / price * 100`. Negative when price is above target. Recomputed every minute during market hours.",
      "cadence": "hourly",
      "cadence_label": "hourly",
      "unit": "%",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "asset_class",
      "type": "text",
      "category": "identity",
      "category_label": "Identifiers & reference",
      "group": "profile",
      "group_label": "Profile",
      "description": "Asset class of the ticker: stocks, rates, crypto, or fx.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": false,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "asset_type",
      "type": "text",
      "category": "identity",
      "category_label": "Identifiers & reference",
      "group": "profile",
      "group_label": "Profile",
      "description": "Asset class. One of `equity`, `etf`, or `crypto`.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "assets",
      "type": "bigint",
      "category": "balance_sheet",
      "category_label": "Balance sheet",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Total assets on the balance sheet as of the most recently reported quarter.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "atr_14",
      "type": "numeric",
      "category": "volatility_bands",
      "category_label": "Volatility & bands",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "14-day Average True Range.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "atr_pct",
      "type": "numeric",
      "category": "volatility_bands",
      "category_label": "Volatility & bands",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "ATR(14) as a percent of price. Useful as a volatility filter.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "%",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "avg_volume_10d",
      "type": "bigint",
      "category": "volume_levels",
      "category_label": "Volume & averages",
      "group": "volume",
      "group_label": "Volume",
      "description": "10-day trailing average daily volume.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "shares",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "avg_volume_30d",
      "type": "bigint",
      "category": "volume_levels",
      "category_label": "Volume & averages",
      "group": "volume",
      "group_label": "Volume",
      "description": "30-day trailing average daily volume.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "shares",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "basic_average_shares",
      "type": "bigint",
      "category": "share_structure",
      "category_label": "Share structure & ownership",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Weighted-average basic shares outstanding for the quarter. Denominator for basic EPS.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "shares",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "basic_earnings_per_share",
      "type": "numeric",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Basic EPS for the most-recently reported quarter. Signed.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "benefits_costs_expenses",
      "type": "bigint",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Benefits and post-employment costs line item, where reported. Mostly insurance / utility issuers.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "beta",
      "type": "numeric",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Trailing beta vs SPY. Null for issuers with insufficient price history.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "bollinger_b",
      "type": "numeric",
      "category": "volatility_bands",
      "category_label": "Volatility & bands",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "Position within Bollinger bands. 0 = at lower band, 1 = at upper band, >1 = outside.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "bollinger_lower",
      "type": "numeric",
      "category": "volatility_bands",
      "category_label": "Volatility & bands",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "Lower Bollinger band (20-period, 2σ).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "bollinger_middle",
      "type": "numeric",
      "category": "volatility_bands",
      "category_label": "Volatility & bands",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "20-day SMA — the centerline of the Bollinger band. `bollinger_upper` and `bollinger_lower` are already documented; this fills in the missing middle.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "bollinger_upper",
      "type": "numeric",
      "category": "volatility_bands",
      "category_label": "Volatility & bands",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "Upper Bollinger band (20-period, 2σ).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "bollinger_width",
      "type": "numeric",
      "category": "volatility_bands",
      "category_label": "Volatility & bands",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "`(bollinger_upper â bollinger_lower) / bollinger_middle`. Normalized width â measures volatility regime. Narrow widths often precede expansion (see the boolean `bollinger_squeeze`).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "book_value",
      "type": "numeric",
      "category": "balance_sheet",
      "category_label": "Balance sheet",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Trailing-12m book value per share. Computed from `equity_attributable_to_parent / diluted_average_shares`.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "branding_icon_url",
      "type": "text",
      "category": "company",
      "category_label": "Company profile",
      "group": "profile",
      "group_label": "Profile",
      "description": "URL of the company's square icon image, served by this API: request it with your API key (the same Authorization: Bearer header) and you get the image bytes (PNG or JPEG) with their Content-Type. Null when the issuer has no icon on file.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "branding_logo_url",
      "type": "text",
      "category": "company",
      "category_label": "Company profile",
      "group": "profile",
      "group_label": "Profile",
      "description": "URL of the company's logo image, served by this API: request it with your API key (the same Authorization: Bearer header) and you get the image bytes (SVG when available, else PNG) with their Content-Type. Null when the issuer has no logo on file.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "cap_class",
      "type": "text",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Market-capitalization tier. One of `nano` (<$50M), `micro` ($50Mâ$300M), `small` ($300Mâ$2B), `mid` ($2Bâ$10B), `large` ($10Bâ$200B), `mega` (â¥$200B), or `unknown` when `market_cap` is null. Updates daily post-close as `market_cap` moves. Preferred over the legacy `nano_cap/micro_cap/small_cap/mid_cap/large_cap/mega_cap` boolean signals (which remain in sync as backward-compat shortcuts).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": false,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "cash_on_hand",
      "type": "bigint",
      "category": "balance_sheet",
      "category_label": "Balance sheet",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Cash plus cash equivalents — the most-liquid balance-sheet line.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "change_1d_pct",
      "type": "numeric",
      "category": "performance",
      "category_label": "Performance & change",
      "group": "price_action",
      "group_label": "Price action",
      "description": "Percent change vs `previous_close`, as a whole percent (0.5 = 0.5%, not a fraction). Signed. Percent scale on every read â live, `asof` by date and `asof` by timestamp â since the 2026-09-07 cutover (this signal was `day_change_pct` as a fraction before it).",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": null,
      "nullable": false,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "change_1m_pct",
      "type": "numeric",
      "category": "performance",
      "category_label": "Performance & change",
      "group": "price_action",
      "group_label": "Price action",
      "description": "Percent change vs. close ~21 trading days ago. Daily; see `change_1w_pct` for note.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": false,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "change_1w_pct",
      "type": "numeric",
      "category": "performance",
      "category_label": "Performance & change",
      "group": "price_action",
      "group_label": "Price action",
      "description": "Percent change in close vs. the close 5 trading days ago. Computed post-close; does NOT update intraday — use `from_open_pct` + `change_1d_pct` for intraday-aware change.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": false,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "change_1y_pct",
      "type": "numeric",
      "category": "performance",
      "category_label": "Performance & change",
      "group": "price_action",
      "group_label": "Price action",
      "description": "Percent change vs. close ~252 trading days ago.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": false,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "change_3m_pct",
      "type": "numeric",
      "category": "performance",
      "category_label": "Performance & change",
      "group": "price_action",
      "group_label": "Price action",
      "description": "Percent change vs. close ~63 trading days ago.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": false,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "change_6m_pct",
      "type": "numeric",
      "category": "performance",
      "category_label": "Performance & change",
      "group": "price_action",
      "group_label": "Price action",
      "description": "Percent change vs. close ~126 trading days ago.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": false,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "change_ytd_pct",
      "type": "numeric",
      "category": "performance",
      "category_label": "Performance & change",
      "group": "price_action",
      "group_label": "Price action",
      "description": "Percent change since the first trading day of the calendar year.",
      "cadence": null,
      "cadence_label": null,
      "unit": null,
      "nullable": false,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "cik",
      "type": "text",
      "category": "identity",
      "category_label": "Identifiers & reference",
      "group": "profile",
      "group_label": "Profile",
      "description": "SEC Central Index Key — the company's identifier in EDGAR filings.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "composite_figi",
      "type": "text",
      "category": "identity",
      "category_label": "Identifiers & reference",
      "group": "profile",
      "group_label": "Profile",
      "description": "Composite FIGI — Bloomberg's cross-exchange security identifier.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "cost_of_revenue",
      "type": "bigint",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Cost of goods sold for the quarter.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "costs_and_expenses",
      "type": "bigint",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Total costs and expenses reported on the income statement (COGS + opex).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "country",
      "type": "text",
      "category": "identity",
      "category_label": "Identifiers & reference",
      "group": "profile",
      "group_label": "Profile",
      "description": "Listing locale from the reference vendor, not the issuer's home country. Every US-listed symbol, including ADRs, reports `us`. For where the company is run from and where it is incorporated, use `issuer_country` and `incorporation_country`.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "currency_name",
      "type": "text",
      "category": "identity",
      "category_label": "Identifiers & reference",
      "group": "profile",
      "group_label": "Profile",
      "description": "Currency the prices are quoted in (`usd`, `eur`, `gbp`, etc.). Effectively always `usd` for US-listed equities.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "current_assets",
      "type": "bigint",
      "category": "balance_sheet",
      "category_label": "Balance sheet",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Assets expected to be converted to cash or used up within 12 months.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "current_liabilities",
      "type": "bigint",
      "category": "balance_sheet",
      "category_label": "Balance sheet",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Liabilities due within 12 months — accounts payable, short-term debt, accrued expenses.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "current_ratio",
      "type": "numeric",
      "category": "margins_ratios",
      "category_label": "Margins & ratios",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Current assets ÷ current liabilities. Short-term liquidity. >1 = able to cover short-term obligations from current assets.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "day_change",
      "type": "numeric",
      "category": "performance",
      "category_label": "Performance & change",
      "group": "price_action",
      "group_label": "Price action",
      "description": "Absolute change vs `previous_close`.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "day_dollar_volume",
      "type": "numeric",
      "category": "volume_levels",
      "category_label": "Volume & averages",
      "group": "volume",
      "group_label": "Volume",
      "description": "Today’s cumulative dollar volume traded.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "day_vwap",
      "type": "numeric",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "Today’s session volume-weighted average price.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "days_down",
      "type": "integer",
      "category": "performance",
      "category_label": "Performance & change",
      "group": "price_action",
      "group_label": "Price action",
      "description": "Consecutive trading days closing lower than the prior close. Resets to 0 on an up day.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "days",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "days_since_52w_high",
      "type": "integer",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "description": "Trading days since the most recent 52-week high.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "days",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "days_since_52w_low",
      "type": "integer",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "description": "Trading days since the most recent 52-week low.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "days",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "days_to_cover",
      "type": "numeric",
      "category": "short_interest",
      "category_label": "Short interest",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Short interest divided by 30-day average daily volume. Trader’s \"how many days of normal trading to cover all shorts\" measure.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "days",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "days_to_earnings",
      "type": "integer",
      "category": "earnings",
      "category_label": "Earnings",
      "group": "events",
      "group_label": "Events",
      "description": "Calendar days until next earnings announcement. Negative after report.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "days",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "days_up",
      "type": "integer",
      "category": "performance",
      "category_label": "Performance & change",
      "group": "price_action",
      "group_label": "Price action",
      "description": "Consecutive trading days closing higher than the prior close. Resets to 0 on a down day.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "days",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "debt_to_equity",
      "type": "numeric",
      "category": "margins_ratios",
      "category_label": "Margins & ratios",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Total debt divided by total shareholders' equity. Common leverage ratio; lower = less leveraged.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "delisted_utc",
      "type": "timestamp with time zone",
      "category": "identity",
      "category_label": "Identifiers & reference",
      "group": "profile",
      "group_label": "Profile",
      "description": "",
      "cadence": null,
      "cadence_label": null,
      "unit": null,
      "nullable": false,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "description",
      "type": "text",
      "category": "company",
      "category_label": "Company profile",
      "group": "profile",
      "group_label": "Profile",
      "description": "Business description of the company.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "diluted_average_shares",
      "type": "bigint",
      "category": "share_structure",
      "category_label": "Share structure & ownership",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Weighted-average diluted shares outstanding for the quarter. Denominator for diluted EPS.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "shares",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "diluted_eps_ttm",
      "type": "numeric",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Trailing-12m diluted EPS.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "dividend",
      "type": "numeric",
      "category": "dividends",
      "category_label": "Dividends",
      "group": "events",
      "group_label": "Events",
      "description": "Most-recent dividend amount per share.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "dividend_date",
      "type": "date",
      "category": "dividends",
      "category_label": "Dividends",
      "group": "events",
      "group_label": "Events",
      "description": "Date of the most-recent dividend payment.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "dividend_frequency",
      "type": "integer",
      "category": "dividends",
      "category_label": "Dividends",
      "group": "events",
      "group_label": "Events",
      "description": "Payment frequency: `quarterly`, `monthly`, `semiannual`, `annual`.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "count",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "dividend_yield",
      "type": "numeric",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Forward dividend yield as a fraction (0.025 = 2.5%). Null for non-payers.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "earnings_beat_streak",
      "type": "integer",
      "category": "earnings",
      "category_label": "Earnings",
      "group": "events",
      "group_label": "Events",
      "description": "Consecutive quarters the company has beaten consensus EPS estimates. Resets to 0 on a miss.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "count",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "earnings_date",
      "type": "date",
      "category": "earnings",
      "category_label": "Earnings",
      "group": "events",
      "group_label": "Events",
      "description": "Next scheduled earnings announcement date. Null if not scheduled.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "earnings_fiscal_quarter",
      "type": "text",
      "category": "earnings",
      "category_label": "Earnings",
      "group": "events",
      "group_label": "Events",
      "description": "Fiscal quarter the next earnings report covers (e.g. \"2026Q1\"). Distinct from calendar quarter — covers companies whose fiscal year doesn't match the calendar.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "earnings_growth_yoy_pct",
      "type": "numeric",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Year-over-year EPS growth percent from the most recently reported quarter vs. the same quarter prior year. Signed; positive = growth.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "%",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "earnings_report_time",
      "type": "text",
      "category": "earnings",
      "category_label": "Earnings",
      "group": "events",
      "group_label": "Events",
      "description": "When in the trading day the next earnings will be reported. One of `BMO` (before market open), `AMC` (after market close), `DMH` (during market hours).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "ebitda",
      "type": "bigint",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Earnings before interest, taxes, depreciation, and amortization (TTM).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "ema_12",
      "type": "numeric",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "12-day EMA. Fast-side input of canonical MACD (`macd = ema_12 − ema_26`).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "ema_21",
      "type": "numeric",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "21-day EMA. Often paired with `ema_9` for short-trend bias; also serves as a dynamic-support reference.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "ema_26",
      "type": "numeric",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "26-day EMA. Slow-side input of canonical MACD (`macd = ema_12 − ema_26`).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "ema_9",
      "type": "numeric",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "9-day exponential moving average of close. Most-recent-weighted; reacts faster than the same-period SMA. Commonly paired with `ema_21` for short-trend bias.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "enterprise_value",
      "type": "bigint",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Market cap + total debt − cash.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "eps",
      "type": "numeric",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Earnings per share (trailing twelve months).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "eps_estimate_revision_down_30d",
      "type": "integer",
      "category": "estimates",
      "category_label": "Estimates",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "description": "Count of analysts who lowered their next-quarter EPS estimate in the last 30 days.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "count",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "eps_estimate_revision_up_30d",
      "type": "integer",
      "category": "estimates",
      "category_label": "Estimates",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "description": "Count of analysts who raised their next-quarter EPS estimate in the last 30 days. A positive read on forward sentiment momentum.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "count",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "equity",
      "type": "bigint",
      "category": "balance_sheet",
      "category_label": "Balance sheet",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Total shareholders' equity.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "equity_attributable_to_noncontrolling_interest",
      "type": "bigint",
      "category": "balance_sheet",
      "category_label": "Balance sheet",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Equity attributable to minority shareholders of consolidated subsidiaries. Usually 0 for non-conglomerates.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "equity_attributable_to_parent",
      "type": "bigint",
      "category": "balance_sheet",
      "category_label": "Balance sheet",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Equity attributable to the parent entity's shareholders (excludes minority interest).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "etf_holders",
      "type": "text[]",
      "category": "share_structure",
      "category_label": "Share structure & ownership",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "ETFs that hold this ticker, ordered by the ticker's weight within each (the reverse of ETF holdings). Filter with array operators in /v2/scan, e.g. `'SPY' = ANY(etf_holders)` to find SPY constituents. Refreshed nightly post-close.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "ev_to_ebitda",
      "type": "numeric",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "`enterprise_value` ÷ `ebitda`. Capital-structure-neutral profitability multiple.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "ev_to_sales",
      "type": "numeric",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "`enterprise_value` ÷ `revenue_ttm`. Capital-structure-neutral revenue multiple.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "exchange",
      "type": "text",
      "category": "identity",
      "category_label": "Identifiers & reference",
      "group": "profile",
      "group_label": "Profile",
      "description": "Primary listing exchange, human-readable name — e.g. `NASDAQ`, `NYSE`, `NYSE Arca`, `Cboe BZX`, `NYSE American`. See `exchange_mic` for the raw ISO 10383 code. Null for a small number of delisted/edge names.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "exchange_mic",
      "type": "text",
      "category": "identity",
      "category_label": "Identifiers & reference",
      "group": "profile",
      "group_label": "Profile",
      "description": "Primary listing exchange as an ISO 10383 **MIC code**: `XNAS` = NASDAQ, `XNYS` = NYSE, `ARCX` = NYSE Arca, `BATS` = Cboe BZX, `XASE` = NYSE American. The `?exchange=` filter accepts either this code or the human name.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "fixed_assets",
      "type": "bigint",
      "category": "balance_sheet",
      "category_label": "Balance sheet",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Property, plant, and equipment (PP&E), net of accumulated depreciation.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "float_effective_date",
      "type": "date",
      "category": "capital_changes",
      "category_label": "Splits & share changes",
      "group": "events",
      "group_label": "Events",
      "description": "As-of date for the current float-shares figure.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "float_shares",
      "type": "bigint",
      "category": "share_structure",
      "category_label": "Share structure & ownership",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Public float (shares available to trade).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "shares",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "forward_pe",
      "type": "numeric",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Forward price-to-earnings ratio using next-12m consensus EPS. Lower = cheaper on forward basis.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "free_cash_flow",
      "type": "bigint",
      "category": "cash_flow",
      "category_label": "Cash flow",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Operating cash flow minus capital expenditures. Cash the business generates above what it needs to maintain operations.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "free_float_pct",
      "type": "numeric",
      "category": "share_structure",
      "category_label": "Share structure & ownership",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Percent of shares outstanding actually available for trading (excludes insider / restricted holdings).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "%",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "from_52w_high_pct",
      "type": "numeric",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "description": "Percent distance from the 52-week high, as a whole percent. Signed: negative below the high (â27 = 27% under it), 0 at it, positive only on a new high before the window updates. Use the `at_52w_high` boolean to test highs. Was `pct_from_52w_high` as a fraction before the 2026-09-07 cutover.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": false,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "from_52w_low_pct",
      "type": "numeric",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "description": "Percent distance above the 52-week low, as a whole percent (22 = 22% above it). Signed; â¥ 0 except at a new low before the window updates. Use the `at_52w_low` boolean to test lows.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": false,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "from_open_pct",
      "type": "numeric",
      "category": "performance",
      "category_label": "Performance & change",
      "group": "price_action",
      "group_label": "Price action",
      "description": "Intraday: percent change from today’s session open to the latest snapshot price. Resets at session boundary.",
      "cadence": null,
      "cadence_label": null,
      "unit": null,
      "nullable": false,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "from_sma_10_pct",
      "type": "numeric",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "Percent difference between current close and `sma_10`. Positive = above MA, negative = below. Continuous version of the `above_sma_10` boolean.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": false,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "from_sma_100_pct",
      "type": "numeric",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "Percent difference between current close and `sma_100`. Daily-cadence because the slow MA changes slowly.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": false,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "from_sma_20_pct",
      "type": "numeric",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "Percent difference between current close and `sma_20`. Continuous version of the `above_sma_20` boolean.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": false,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "from_sma_200_pct",
      "type": "numeric",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "Percent distance from the 200-day SMA. Negative when price is below the average.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": false,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "from_sma_50_pct",
      "type": "numeric",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "Percent distance from the 50-day SMA. Negative when price is below the average.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": false,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "from_vwap_pct",
      "type": "numeric",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "Percent distance from today’s VWAP.",
      "cadence": null,
      "cadence_label": null,
      "unit": null,
      "nullable": false,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "gap_pct",
      "type": "numeric",
      "category": "gaps",
      "category_label": "Gaps",
      "group": "price_action",
      "group_label": "Price action",
      "description": "Percent change of `session_open` vs `previous_close`. One value per session.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "%",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "gross_margin",
      "type": "numeric",
      "category": "margins_ratios",
      "category_label": "Margins & ratios",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "`gross_profit / revenues` for the quarter.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "gross_profit",
      "type": "bigint",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "`revenues − cost_of_revenue` for the quarter.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "gross_profit_ttm",
      "type": "bigint",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Trailing-12m gross profit.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "high_20d",
      "type": "numeric",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "description": "Highest trade in the trailing 20 trading days.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "high_20d_eod",
      "type": "numeric",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "description": "Highest close over the last 20 trading sessions. Close-basis. For the intraday-wick variant use `at_20d_high`.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "high_52w",
      "type": "numeric",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "description": "Highest trade in the trailing 52 weeks (live, includes today).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "high_52w_date",
      "type": "date",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "description": "Date the trailing-52-week high was set. Useful for \"fresh 52w highs in the last 30 days\" scans.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "high_52w_eod",
      "type": "numeric",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "description": "Highest close over the trailing 52 weeks. The `_eod` distinguishes from the canonical intraday `52_week_high` (which captures wicks).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "high_5d",
      "type": "numeric",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "description": "Highest intraday high over the last 5 trading sessions, inclusive of the current session.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "high_5d_eod",
      "type": "numeric",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "description": "Highest close over the last 5 trading sessions. Close-basis (no intraday wicks) — pair with `high_5d` to distinguish.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "highly_relevant_news_count",
      "type": "integer",
      "category": "news",
      "category_label": "News",
      "group": "news",
      "group_label": "News",
      "description": "How many articles in the last 7 days had this name as a primary subject.",
      "cadence": "fifteen_min",
      "cadence_label": "Every 15 min",
      "unit": "count",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "homepage_url",
      "type": "text",
      "category": "company",
      "category_label": "Company profile",
      "group": "profile",
      "group_label": "Profile",
      "description": "Company homepage URL.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "inactive_at",
      "type": "timestamp without time zone",
      "category": "company",
      "category_label": "Company profile",
      "group": "profile",
      "group_label": "Profile",
      "description": "When the ticker was marked inactive.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "inactive_reason",
      "type": "text",
      "category": "company",
      "category_label": "Company profile",
      "group": "profile",
      "group_label": "Profile",
      "description": "Why the ticker was marked inactive (e.g. delisted, stale data).",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "income_loss_from_continuing_operations_after_tax",
      "type": "bigint",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "After-tax income from continuing operations for the quarter.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "income_loss_from_continuing_operations_before_tax",
      "type": "bigint",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Pre-tax income from continuing operations for the quarter.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "income_tax_expense_benefit",
      "type": "bigint",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Income tax expense (positive) or benefit (negative) for the quarter.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "income_tax_expense_benefit_deferred",
      "type": "bigint",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Deferred portion of income tax. Rare line item.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "incorporation_country",
      "type": "text",
      "category": "identity",
      "category_label": "Identifiers & reference",
      "group": "profile",
      "group_label": "Profile",
      "description": "Where the issuer is legally incorporated: the ISO 3166-1 alpha-2 country code (lower-case) of its state or country of incorporation in its SEC filings; US states map to `us`. `ky` for Huize (Cayman-incorporated, run from China), `us` for Apple. Null when the symbol has no SEC filer identifier. Pair with `issuer_country` to tell an offshore-incorporated operator from a domestic one.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "industry",
      "type": "text",
      "category": "classification",
      "category_label": "Classification",
      "group": "profile",
      "group_label": "Profile",
      "description": "GICS industry within the sector.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "insiders_pct",
      "type": "numeric",
      "category": "share_structure",
      "category_label": "Share structure & ownership",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Percent of shares held by company insiders (executives, directors, founders).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "%",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "institutions_pct",
      "type": "numeric",
      "category": "share_structure",
      "category_label": "Share structure & ownership",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Percent of shares held by institutional investors (mutual funds, ETFs, pensions).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "%",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "inventory",
      "type": "bigint",
      "category": "balance_sheet",
      "category_label": "Balance sheet",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Inventory on hand. NULL for service and financial companies that don't carry inventory.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "ipo_date",
      "type": "date",
      "category": "ipos",
      "category_label": "IPOs",
      "group": "events",
      "group_label": "Events",
      "description": "Date of the company's IPO, when known.",
      "cadence": "daily",
      "cadence_label": "daily",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "issuer_country",
      "type": "text",
      "category": "identity",
      "category_label": "Identifiers & reference",
      "group": "profile",
      "group_label": "Profile",
      "description": "Where the company is run from: the ISO 3166-1 alpha-2 country code (lower-case) of the issuer's business address in its SEC filings. `cn` for Huize (HUIZ), `us` for Apple. Null when the symbol has no SEC filer identifier (most ETFs and non-SEC filers). Distinct from `country`, which is the listing locale, and from `incorporation_country`, the legal domicile.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "last_20d_high_date",
      "type": "date",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "description": "Date the trailing-20-day high was set.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "last_20d_low_date",
      "type": "date",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "description": "Date the trailing-20-day low was set.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "last_earnings_surprise",
      "type": "numeric",
      "category": "earnings",
      "category_label": "Earnings",
      "group": "events",
      "group_label": "Events",
      "description": "`last_reported_eps − last_eps_estimate`. Signed; positive = beat.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "last_earnings_surprise_pct",
      "type": "numeric",
      "category": "earnings",
      "category_label": "Earnings",
      "group": "events",
      "group_label": "Events",
      "description": "Beat as percent of consensus.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "%",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "last_eps_estimate",
      "type": "numeric",
      "category": "estimates",
      "category_label": "Estimates",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "description": "Consensus EPS estimate going into the most recent earnings announcement.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "last_rating_action",
      "type": "text",
      "category": "analyst_actions",
      "category_label": "Upgrades & downgrades",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "description": "Action taken in the most recent rating change. Common values: `upgrades`, `downgrades`, `initiates_coverage_on`, `maintains`, `reiterates`, `assumes`, `reinstates`, `suspends`.",
      "cadence": "hourly",
      "cadence_label": "hourly",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "last_rating_date",
      "type": "date",
      "category": "analyst_actions",
      "category_label": "Upgrades & downgrades",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "description": "Date of the most recent rating action across all firms covering the ticker.",
      "cadence": "hourly",
      "cadence_label": "hourly",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "last_rating_firm",
      "type": "text",
      "category": "analyst_actions",
      "category_label": "Upgrades & downgrades",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "description": "Name of the firm that issued the most recent rating action.",
      "cadence": "hourly",
      "cadence_label": "hourly",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "last_reported_eps",
      "type": "numeric",
      "category": "earnings",
      "category_label": "Earnings",
      "group": "events",
      "group_label": "Events",
      "description": "Actual EPS reported in the most recent earnings announcement.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "liabilities",
      "type": "bigint",
      "category": "balance_sheet",
      "category_label": "Balance sheet",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Total liabilities on the balance sheet.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "liabilities_and_equity",
      "type": "bigint",
      "category": "balance_sheet",
      "category_label": "Balance sheet",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Total liabilities + total equity. Should equal `assets` (balance-sheet identity). Documented for completeness — useful as a sanity check rather than a scan target.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "list_date",
      "type": "text",
      "category": "identity",
      "category_label": "Identifiers & reference",
      "group": "profile",
      "group_label": "Profile",
      "description": "Date the symbol was first listed on its exchange.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "long_term_debt",
      "type": "bigint",
      "category": "balance_sheet",
      "category_label": "Balance sheet",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Long-term debt obligations. Often NULL because issuers fold this into `noncurrent_liabilities` instead of breaking it out.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "low_20d",
      "type": "numeric",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "description": "Lowest trade in the trailing 20 trading days.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "low_20d_eod",
      "type": "numeric",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "description": "Lowest close over the last 20 trading sessions. Close-basis.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "low_52w",
      "type": "numeric",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "description": "Lowest trade in the trailing 52 weeks (live, includes today).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "low_52w_date",
      "type": "date",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "description": "Date the trailing-52-week low was set.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "low_52w_eod",
      "type": "numeric",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "description": "Lowest close over the trailing 52 weeks.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "low_5d",
      "type": "numeric",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "description": "Lowest intraday low over the last 5 trading sessions, inclusive of the current session.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "low_5d_eod",
      "type": "numeric",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "description": "Lowest close over the last 5 trading sessions. Close-basis.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "macd_histogram",
      "type": "numeric",
      "category": "trend",
      "category_label": "Trend & direction",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "MACD line minus signal. Positive when bullish, negative when bearish.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "macd_line",
      "type": "numeric",
      "category": "trend",
      "category_label": "Trend & direction",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "MACD line (12-EMA minus 26-EMA).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "macd_signal",
      "type": "numeric",
      "category": "trend",
      "category_label": "Trend & direction",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "MACD signal line (9-EMA of MACD line).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "market_cap",
      "type": "bigint",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Market capitalization. Updated daily; intraday change derived from `price` × `shares_outstanding`.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "min_close",
      "type": "numeric",
      "category": "bars",
      "category_label": "Latest bars",
      "group": "price",
      "group_label": "Price",
      "description": "Current minute bar’s most-recent close (last print).",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "min_day_accumulated_dollar_volume",
      "type": "numeric",
      "category": "volume_levels",
      "category_label": "Volume & averages",
      "group": "volume",
      "group_label": "Volume",
      "description": "Today’s cumulative dollar volume across the session so far.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "min_day_accumulated_volume",
      "type": "bigint",
      "category": "volume_levels",
      "category_label": "Volume & averages",
      "group": "volume",
      "group_label": "Volume",
      "description": "Today’s cumulative shares traded across the session so far (4 AM ET onward).",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "shares",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "min_dollar_volume",
      "type": "numeric",
      "category": "volume_levels",
      "category_label": "Volume & averages",
      "group": "volume",
      "group_label": "Volume",
      "description": "Current minute bar’s dollar volume (close × volume approximation).",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "min_high",
      "type": "numeric",
      "category": "bars",
      "category_label": "Latest bars",
      "group": "price",
      "group_label": "Price",
      "description": "Current minute bar’s running high.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "min_low",
      "type": "numeric",
      "category": "bars",
      "category_label": "Latest bars",
      "group": "price",
      "group_label": "Price",
      "description": "Current minute bar’s running low.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "min_open",
      "type": "numeric",
      "category": "bars",
      "category_label": "Latest bars",
      "group": "price",
      "group_label": "Price",
      "description": "Current minute bar’s open. Updates every snapshot tick during market hours.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "min_trade_count",
      "type": "integer",
      "category": "volume_levels",
      "category_label": "Volume & averages",
      "group": "volume",
      "group_label": "Volume",
      "description": "Current minute bar’s number of trades.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "count",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "min_volume",
      "type": "integer",
      "category": "volume_levels",
      "category_label": "Volume & averages",
      "group": "volume",
      "group_label": "Volume",
      "description": "Current minute bar’s accumulated shares traded.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "shares",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "min_vwap",
      "type": "numeric",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "Current minute bar’s volume-weighted average price.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "minus_di",
      "type": "numeric",
      "category": "trend",
      "category_label": "Trend & direction",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "-DI (14-period): the bearish directional-movement component of the ADX system.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "name",
      "type": "text",
      "category": "identity",
      "category_label": "Identifiers & reference",
      "group": "profile",
      "group_label": "Profile",
      "description": "Company or asset display name.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": false,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "net_cash_flow",
      "type": "bigint",
      "category": "cash_flow",
      "category_label": "Cash flow",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Sum of operating + investing + financing cash flow — period change in cash.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "net_cash_flow_continuing",
      "type": "bigint",
      "category": "cash_flow",
      "category_label": "Cash flow",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Total cash flow excluding discontinued operations. Rare line item — populated only for companies in active discontinued-ops winddown.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "net_cash_flow_from_financing_activities",
      "type": "bigint",
      "category": "cash_flow",
      "category_label": "Cash flow",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Net cash from financing (debt, dividends, buybacks).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "net_cash_flow_from_financing_activities_continuing",
      "type": "bigint",
      "category": "cash_flow",
      "category_label": "Cash flow",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Financing cash flow excluding discontinued operations.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "net_cash_flow_from_investing_activities",
      "type": "bigint",
      "category": "cash_flow",
      "category_label": "Cash flow",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Net cash from investing activities (capex, acquisitions). Negative for net spend.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "net_cash_flow_from_investing_activities_continuing",
      "type": "bigint",
      "category": "cash_flow",
      "category_label": "Cash flow",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Investing cash flow excluding discontinued operations.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "net_cash_flow_from_operating_activities",
      "type": "bigint",
      "category": "cash_flow",
      "category_label": "Cash flow",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Net cash from operations for the quarter.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "net_cash_flow_from_operating_activities_continuing",
      "type": "bigint",
      "category": "cash_flow",
      "category_label": "Cash flow",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Same as `net_cash_flow_from_operating_activities` but excludes discontinued operations.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "net_income_loss",
      "type": "bigint",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Bottom-line net income/loss for the quarter. Signed.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "net_income_loss_attributable_to_noncontrolling_interest",
      "type": "bigint",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Portion of net income attributable to minority owners of consolidated subsidiaries. Usually 0 for non-conglomerates.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "net_income_loss_attributable_to_parent",
      "type": "bigint",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Net income attributable to the parent entity (excludes noncontrolling interest).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "net_income_loss_available_to_common_stockholders_basic",
      "type": "bigint",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Net income available to common shareholders — numerator for basic EPS.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "news_sentiment_volatility",
      "type": "numeric",
      "category": "news",
      "category_label": "News",
      "group": "news",
      "group_label": "News",
      "description": "How much the news sentiment about this name has been swinging over the last 7 days.",
      "cadence": "fifteen_min",
      "cadence_label": "Every 15 min",
      "unit": "score",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "news_volume",
      "type": "numeric",
      "category": "news",
      "category_label": "News",
      "group": "news",
      "group_label": "News",
      "description": "Count of news articles published in the last 24 hours mentioning this ticker with a relevance score ≥ 0.6. Refreshed every 15 minutes. Null when no qualifying articles in the window.",
      "cadence": "fifteen_min",
      "cadence_label": "Every 15 min",
      "unit": "count",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "news_volume_weighted_sentiment",
      "type": "numeric",
      "category": "news",
      "category_label": "News",
      "group": "news",
      "group_label": "News",
      "description": "Range -1.0 to +1.0. The relevance-weighted average sentiment of articles in the last 24 hours, attenuated by `tanh(news_volume / 15)` so quiet tickers (1-2 articles) read near zero regardless of sentiment sign. Strong negative = loud bad news; strong positive = loud good news; values near 0 = quiet or mixed. Null when no qualifying articles.",
      "cadence": "fifteen_min",
      "cadence_label": "Every 15 min",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "next_eps_estimate",
      "type": "numeric",
      "category": "estimates",
      "category_label": "Estimates",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "description": "Wall Street consensus EPS estimate for the next reported quarter — weighted average across analyst contributors.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "next_eps_estimate_high",
      "type": "numeric",
      "category": "estimates",
      "category_label": "Estimates",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "description": "Highest single-analyst EPS estimate for the next reported quarter.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "next_eps_estimate_low",
      "type": "numeric",
      "category": "estimates",
      "category_label": "Estimates",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "description": "Lowest single-analyst EPS estimate for the next reported quarter.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "next_revenue_estimate",
      "type": "bigint",
      "category": "estimates",
      "category_label": "Estimates",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "description": "Wall Street consensus revenue estimate (USD, full dollars) for the next reported quarter.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "noncurrent_assets",
      "type": "bigint",
      "category": "balance_sheet",
      "category_label": "Balance sheet",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Long-lived assets — property, plant, equipment, intangibles, long-term investments.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "noncurrent_liabilities",
      "type": "bigint",
      "category": "balance_sheet",
      "category_label": "Balance sheet",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Liabilities due beyond 12 months — long-term debt, deferred taxes, pension obligations.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "nonoperating_income_loss",
      "type": "bigint",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Non-operating income/loss (interest income, gains/losses on investments, etc.) for the quarter. Signed.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "operating_expenses",
      "type": "bigint",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Sum of operating costs reported on the income statement for the quarter (excludes COGS).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "operating_income_loss",
      "type": "bigint",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Operating income or loss for the quarter. Signed.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "operating_margin",
      "type": "numeric",
      "category": "margins_ratios",
      "category_label": "Margins & ratios",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "`operating_income_loss / revenues` for the quarter.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "operating_margin_ttm",
      "type": "numeric",
      "category": "margins_ratios",
      "category_label": "Margins & ratios",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Trailing-12m operating margin.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "other_current_assets",
      "type": "bigint",
      "category": "balance_sheet",
      "category_label": "Balance sheet",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Current assets not separately broken out (prepaid expenses, short-term receivables, etc.).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "other_current_liabilities",
      "type": "bigint",
      "category": "balance_sheet",
      "category_label": "Balance sheet",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Current liabilities not separately broken out.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "other_noncurrent_assets",
      "type": "bigint",
      "category": "balance_sheet",
      "category_label": "Balance sheet",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Non-current assets not separately broken out (intangibles, deferred tax assets, etc.).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "pe_ratio",
      "type": "numeric",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Price-to-earnings ratio (trailing twelve months). Null for unprofitable issuers.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "peg_ratio",
      "type": "numeric",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "PE ratio divided by EPS growth rate. Sparsely populated — PEG is only computed for tickers with positive earnings growth and analyst coverage.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "phone_number",
      "type": "text",
      "category": "company",
      "category_label": "Company profile",
      "group": "profile",
      "group_label": "Profile",
      "description": "Company contact phone number.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "plus_di",
      "type": "numeric",
      "category": "trend",
      "category_label": "Trend & direction",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "+DI (14-period): the bullish directional-movement component of the ADX system.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "position_in_52w_range_pct",
      "type": "numeric",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "description": "Where the live price sits in the 52-week range, 0–100. 0 = at low, 100 = at high.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": false,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "premarket_change_pct",
      "type": "numeric",
      "category": "performance",
      "category_label": "Performance & change",
      "group": "price_action",
      "group_label": "Price action",
      "description": "Pre-market: percent change from the previous session close to the latest pre-market print. Resets at session boundary.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "%",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "premarket_price",
      "type": "numeric",
      "category": "session_structure",
      "category_label": "Session levels & position",
      "group": "price",
      "group_label": "Price",
      "description": "Last premarket price, if available.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "prev_day_high",
      "type": "numeric",
      "category": "bars",
      "category_label": "Latest bars",
      "group": "price",
      "group_label": "Price",
      "description": "Previous trading day’s session high.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "prev_day_low",
      "type": "numeric",
      "category": "bars",
      "category_label": "Latest bars",
      "group": "price",
      "group_label": "Price",
      "description": "Previous trading day’s session low.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "prev_day_open",
      "type": "numeric",
      "category": "bars",
      "category_label": "Latest bars",
      "group": "price",
      "group_label": "Price",
      "description": "Previous trading day’s official open.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "prev_day_volume",
      "type": "bigint",
      "category": "volume_levels",
      "category_label": "Volume & averages",
      "group": "volume",
      "group_label": "Volume",
      "description": "Previous trading day’s total volume (raw shares).",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "shares",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "prev_day_vwap",
      "type": "numeric",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "Previous trading day’s session VWAP.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "previous_close",
      "type": "numeric",
      "category": "bars",
      "category_label": "Latest bars",
      "group": "price",
      "group_label": "Price",
      "description": "Official prior-session close.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "price",
      "type": "numeric",
      "category": "trades_quotes",
      "category_label": "Trades & quotes",
      "group": "price",
      "group_label": "Price",
      "description": "Current price. Fair-value mark when one exists, otherwise the last print.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "price_asof",
      "type": "timestamp with time zone",
      "category": "bars",
      "category_label": "Latest bars",
      "group": "price",
      "group_label": "Price",
      "description": "When the price on this row was current.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "timestamp",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "price_to_book",
      "type": "numeric",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Current price ÷ `book_value`. Common value-investing metric.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "price_to_cash_flow",
      "type": "numeric",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Current price ÷ operating cash flow per share. Less manipulable than P/E.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "price_to_free_cash_flow",
      "type": "numeric",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Current price ÷ `free_cash_flow` per share. Strictest cash-based valuation.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "price_to_sales",
      "type": "numeric",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Current price ÷ `revenue_per_share_ttm`. Often used when companies have no earnings.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "profit_margin",
      "type": "numeric",
      "category": "margins_ratios",
      "category_label": "Margins & ratios",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Net income ÷ revenue. Quarterly.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "profit_margin_ttm",
      "type": "numeric",
      "category": "margins_ratios",
      "category_label": "Margins & ratios",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Trailing-12m profit margin.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "quick_ratio",
      "type": "numeric",
      "category": "margins_ratios",
      "category_label": "Margins & ratios",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "(Current assets − inventory) ÷ current liabilities. Stricter liquidity — assumes inventory isn't quickly convertible.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "recent_news_count",
      "type": "integer",
      "category": "news",
      "category_label": "News",
      "group": "news",
      "group_label": "News",
      "description": "How many articles mentioned this name in the last 7 days, at any relevance.",
      "cadence": "fifteen_min",
      "cadence_label": "Every 15 min",
      "unit": "count",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "relative_volume",
      "type": "numeric",
      "category": "volume_activity",
      "category_label": "Relative & unusual volume",
      "group": "volume",
      "group_label": "Volume",
      "description": "Ratio of today’s pace-adjusted volume to the 10-day average. 2.0 means 2× normal.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "research_and_development",
      "type": "bigint",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "R&D spend for the quarter. NULL for companies that don't report R&D as a line item.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "return_on_assets",
      "type": "numeric",
      "category": "margins_ratios",
      "category_label": "Margins & ratios",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Net income ÷ total assets. Quarterly figure.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "return_on_assets_ttm",
      "type": "numeric",
      "category": "margins_ratios",
      "category_label": "Margins & ratios",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Trailing-12m return on assets.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "return_on_equity",
      "type": "numeric",
      "category": "margins_ratios",
      "category_label": "Margins & ratios",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Net income ÷ shareholders' equity. Quarterly figure.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "return_on_equity_ttm",
      "type": "numeric",
      "category": "margins_ratios",
      "category_label": "Margins & ratios",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Trailing-12m return on equity.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "revenue_growth_yoy_pct",
      "type": "numeric",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Year-over-year revenue growth: most-recent quarter vs same quarter prior year. Signed; positive = growth.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "%",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "revenue_growth_yoy_quarterly_pct",
      "type": "numeric",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "YoY quarterly revenue growth. Signed.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "%",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "revenue_per_share_ttm",
      "type": "numeric",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Trailing-12m revenue divided by diluted shares outstanding. USD per share.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "revenue_ttm",
      "type": "bigint",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Trailing-twelve-month revenue.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "revenues",
      "type": "bigint",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Total revenue for the most-recently reported quarter, from filed income statements.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "round_lot",
      "type": "integer",
      "category": "company",
      "category_label": "Company profile",
      "group": "profile",
      "group_label": "Profile",
      "description": "Standard trading lot size for the symbol.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "shares",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "rsi_14",
      "type": "numeric",
      "category": "oscillators",
      "category_label": "Oscillators",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "Relative Strength Index, 14-period. Range 0–100.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "rsi_7",
      "type": "numeric",
      "category": "oscillators",
      "category_label": "Oscillators",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "Relative Strength Index over 7 periods - a faster, more sensitive RSI. Range 0-100.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "sector",
      "type": "text",
      "category": "classification",
      "category_label": "Classification",
      "group": "profile",
      "group_label": "Profile",
      "description": "GICS sector. One of: Technology, Healthcare, Financials, Consumer Discretionary, Consumer Staples, Energy, Industrials, Materials, Utilities, Real Estate, Communication Services.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "selling_general_and_administrative_expenses",
      "type": "bigint",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "SG&A for the quarter.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "session_high",
      "type": "numeric",
      "category": "session_structure",
      "category_label": "Session levels & position",
      "group": "price",
      "group_label": "Price",
      "description": "Highest trade so far today.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "session_low",
      "type": "numeric",
      "category": "session_structure",
      "category_label": "Session levels & position",
      "group": "price",
      "group_label": "Price",
      "description": "Lowest trade so far today.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "session_open",
      "type": "numeric",
      "category": "session_structure",
      "category_label": "Session levels & position",
      "group": "price",
      "group_label": "Price",
      "description": "Today’s opening print.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "share_class_figi",
      "type": "text",
      "category": "company",
      "category_label": "Company profile",
      "group": "profile",
      "group_label": "Profile",
      "description": "Share-class FIGI — Bloomberg identifier for this specific share class.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "shares_outstanding",
      "type": "bigint",
      "category": "share_structure",
      "category_label": "Share structure & ownership",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Total shares outstanding.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "shares",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "short_float_pct",
      "type": "numeric",
      "category": "short_interest",
      "category_label": "Short interest",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Short interest as a fraction of the free float. 0.10 = 10% of float is short.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "%",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "short_interest",
      "type": "bigint",
      "category": "short_interest",
      "category_label": "Short interest",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Raw shares-shorted count as last reported (FINRA bi-monthly). Pair with `short_interest_settlement_date` (profile.ts) for the as-of date.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "shares",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "short_interest_settlement_date",
      "type": "date",
      "category": "short_interest",
      "category_label": "Short interest",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Settlement date of the most recent short-interest report.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "short_volume_ratio",
      "type": "numeric",
      "category": "short_interest",
      "category_label": "Short interest",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Share of the day's volume executed as short sales (0–1).",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "sic_code",
      "type": "text",
      "category": "classification",
      "category_label": "Classification",
      "group": "profile",
      "group_label": "Profile",
      "description": "SIC code — the SEC's Standard Industrial Classification for the company's industry.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "sic_description",
      "type": "text",
      "category": "classification",
      "category_label": "Classification",
      "group": "profile",
      "group_label": "Profile",
      "description": "Plain-text label for the company's SIC industry code.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "sma_10",
      "type": "numeric",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "10-day simple moving average.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "sma_100",
      "type": "numeric",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "100-day simple moving average of close. Slower than `sma_50`, faster than `sma_200` — useful for intermediate-term trend.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "sma_20",
      "type": "numeric",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "20-day simple moving average.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "sma_200",
      "type": "numeric",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "200-day simple moving average.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "sma_50",
      "type": "numeric",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "50-day simple moving average.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "stochastic_d",
      "type": "numeric",
      "category": "oscillators",
      "category_label": "Oscillators",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "Stochastic oscillator %D: 3-period smoothing of %K.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "stochastic_k",
      "type": "numeric",
      "category": "oscillators",
      "category_label": "Oscillators",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "Stochastic oscillator %K: where price sits within its recent high-low range, 0-100.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "ticker_category",
      "type": "text",
      "category": "classification",
      "category_label": "Classification",
      "group": "profile",
      "group_label": "Profile",
      "description": "Sub-class within an asset class, e.g. treasury_curve or policy_rate.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "ticker_root",
      "type": "text",
      "category": "company",
      "category_label": "Company profile",
      "group": "profile",
      "group_label": "Profile",
      "description": "Root symbol — the base ticker without class or suffix modifiers.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "total_employees",
      "type": "integer",
      "category": "company",
      "category_label": "Company profile",
      "group": "profile",
      "group_label": "Profile",
      "description": "Number of full-time employees as last reported. Useful for size-based filters (\"small-cap by employee count\").",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "count",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "trend_long",
      "type": "text",
      "category": "trend",
      "category_label": "Trend & direction",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "Long-term trend classification from `sma_200` slope. One of `uptrend`, `downtrend`, `sideways`.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "trend_medium",
      "type": "text",
      "category": "trend",
      "category_label": "Trend & direction",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "Medium-term trend classification from `sma_50` slope. One of `uptrend`, `downtrend`, `sideways`.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "trend_short",
      "type": "text",
      "category": "trend",
      "category_label": "Trend & direction",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "Short-term trend classification from short-MA slope. One of `uptrend`, `downtrend`, `sideways`.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "volume_change_vs_avg",
      "type": "numeric",
      "category": "volume_activity",
      "category_label": "Relative & unusual volume",
      "group": "volume",
      "group_label": "Volume",
      "description": "Ratio of today’s pace-adjusted volume to its 10-day average. Numeric surface of the same denominator `relative_volume` uses.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "volume_today",
      "type": "bigint",
      "category": "volume_levels",
      "category_label": "Volume & averages",
      "group": "volume",
      "group_label": "Volume",
      "description": "Shares traded so far today.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "shares",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "volume_trend_5d",
      "type": "text",
      "category": "volume_activity",
      "category_label": "Relative & unusual volume",
      "group": "volume",
      "group_label": "Volume",
      "description": "Slope of daily volume regressed over the last 5 trading days. Positive = building, negative = drying.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": null,
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "vwap",
      "type": "numeric",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "Daily volume-weighted average price from market open through the most recent print. Updates intraday with each new tick.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "vwap_lower_band",
      "type": "numeric",
      "category": "volatility_bands",
      "category_label": "Volatility & bands",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "VWAP − 2 standard deviations. Dynamic support reference.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "vwap_upper_band",
      "type": "numeric",
      "category": "volatility_bands",
      "category_label": "Volatility & bands",
      "group": "technicals",
      "group_label": "Technicals",
      "description": "VWAP + 2 standard deviations of intraday price action. Dynamic resistance reference.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1m",
        "1h",
        "1d"
      ]
    },
    {
      "name": "wages",
      "type": "bigint",
      "category": "income_statement",
      "category_label": "Income statement",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Wages and salaries line item, where reported. Rare — most companies fold this into SG&A.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "USD",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    },
    {
      "name": "weighted_shares_outstanding",
      "type": "bigint",
      "category": "share_structure",
      "category_label": "Share structure & ownership",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "description": "Weighted shares outstanding from the latest 10-Q / 10-K. Used by `market_cap = price × weighted_shares_outstanding`.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "unit": "shares",
      "nullable": true,
      "available_at_intervals": [
        "1d"
      ]
    }
  ],
  "flags": [
    {
      "name": "52_week_high",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price printed a new 52-week high today.",
      "definition": "high > max(high) over the prior 252 sessions",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "52_week_low",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price printed a new 52-week low today.",
      "definition": "low < min(low) over the prior 252 sessions",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "above_opening_range",
      "category": "ranges",
      "category_label": "Ranges & reversals",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price is trading above the first 15-minute opening-range high.",
      "definition": "close > or_high (OR = first 15 min after 09:30 ET)",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "above_premarket_high",
      "category": "session_structure",
      "category_label": "Session levels & position",
      "group": "price",
      "group_label": "Price",
      "kind": "state",
      "kind_label": "State",
      "summary": "Close above the pre-market session high.",
      "definition": "close > max(price[04:00..09:30])",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "above_price_target",
      "category": "price_targets",
      "category_label": "Price targets",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "kind": "state",
      "kind_label": "State",
      "summary": "Current price is above the consensus analyst target.",
      "definition": "price > analyst_consensus_target_price",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "above_session_open",
      "category": "session_structure",
      "category_label": "Session levels & position",
      "group": "price",
      "group_label": "Price",
      "kind": "state",
      "kind_label": "State",
      "summary": "Close above today’s session-open price.",
      "definition": "close > open_0930",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "above_sma_10",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price is above the 10-day simple moving average.",
      "definition": "close > sma_10",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "above_sma_20",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price is above the 20-day simple moving average.",
      "definition": "close > sma_20",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "above_sma_200",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price is above the 200-day simple moving average.",
      "definition": "close > sma_200",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "above_sma_50",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price is above the 50-day simple moving average.",
      "definition": "close > sma_50",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "above_vwap",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price is above today’s volume-weighted average price.",
      "definition": "close > vwap",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "above_vwap_minute",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "state",
      "kind_label": "State",
      "summary": "Current price above session VWAP.",
      "definition": "close > vwap_session",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "above_yesterday_close",
      "category": "session_structure",
      "category_label": "Session levels & position",
      "group": "price",
      "group_label": "Price",
      "kind": "state",
      "kind_label": "State",
      "summary": "Close above the prior session’s close.",
      "definition": "close > close_prev",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "above_yesterday_high",
      "category": "session_structure",
      "category_label": "Session levels & position",
      "group": "price",
      "group_label": "Price",
      "kind": "state",
      "kind_label": "State",
      "summary": "Close above the prior session’s intraday high.",
      "definition": "close > high_prev",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "active",
      "category": "identity",
      "category_label": "Identifiers & reference",
      "group": "profile",
      "group_label": "Profile",
      "kind": "state",
      "kind_label": "State",
      "summary": "Ticker is actively traded — not delisted or halted.",
      "definition": "active = true",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "afternoon_drift_up",
      "category": "intraday_momentum",
      "category_label": "Intraday momentum",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "state",
      "kind_label": "State",
      "summary": "Afternoon session net up.",
      "definition": "close_1600 > close_1200",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "approaching_52w_high",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price is within 5% of the 52-week high.",
      "definition": "close >= high_52w * 0.95 AND close < high_52w AND (close > sma_20 AND close > sma_50, OR >= 3 of last 5 days up) AND volume > avg_volume_10d",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "approaching_52w_low",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price is within 5% of the 52-week low.",
      "definition": "close <= low_52w * 1.05 AND close > low_52w AND (close < sma_20 AND close < sma_50, OR >= 3 of last 5 days down) AND volume > avg_volume_10d",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "at_20d_high",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price is at or above the 20-day high.",
      "definition": "close >= high_20d",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "at_20d_low",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price is at or below the 20-day low.",
      "definition": "close <= low_20d",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "at_52w_high",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price has traded within 0.5% of the 52-week high this session; once tagged, the boolean stays on for the rest of the session.",
      "definition": "session_high >= high_52w * 0.995",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "at_52w_low",
      "category": "highs_lows",
      "category_label": "Highs & lows",
      "group": "price",
      "group_label": "Price",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price has traded within 0.5% of the 52-week low this session; once tagged, the boolean stays on for the rest of the session.",
      "definition": "session_low <= low_52w * 1.005",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "at_bollinger_lower",
      "category": "volatility_bands",
      "category_label": "Volatility & bands",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price has reached the lower Bollinger band.",
      "definition": "abs(close - bb_lower) / close < 0.02 (within 2% of the lower band, above or below)",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "at_bollinger_upper",
      "category": "volatility_bands",
      "category_label": "Volatility & bands",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price has reached the upper Bollinger band.",
      "definition": "abs(close - bb_upper) / close < 0.02 (within 2% of the upper band, above or below)",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "at_resistance",
      "category": "support_resistance",
      "category_label": "Support & resistance",
      "group": "price",
      "group_label": "Price",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price is testing a detected resistance level.",
      "definition": "Price within 1.5 × ATR(20) of an active detected resistance level — a cluster of two or more historical swing highs within an ATR-scaled band, still unbroken.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "at_session_high",
      "category": "session_structure",
      "category_label": "Session levels & position",
      "group": "price",
      "group_label": "Price",
      "kind": "state",
      "kind_label": "State",
      "summary": "At today’s intraday session high (within tolerance).",
      "definition": "price >= session_high * 0.999",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "at_session_low",
      "category": "session_structure",
      "category_label": "Session levels & position",
      "group": "price",
      "group_label": "Price",
      "kind": "state",
      "kind_label": "State",
      "summary": "At today’s intraday session low (within tolerance).",
      "definition": "price <= session_low * 1.001",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "at_support",
      "category": "support_resistance",
      "category_label": "Support & resistance",
      "group": "price",
      "group_label": "Price",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price is testing a detected support level.",
      "definition": "Price within 1.5 × ATR(20) of an active detected support level — a cluster of two or more historical swing lows within an ATR-scaled band, still unbroken.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "bearish_consensus",
      "category": "consensus_ratings",
      "category_label": "Consensus ratings",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "kind": "state",
      "kind_label": "State",
      "summary": "Consensus analyst rating is `sell` or `strong sell`.",
      "definition": "analyst_consensus_rating IN ('sell', 'strong sell')",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "below_opening_range",
      "category": "ranges",
      "category_label": "Ranges & reversals",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price is trading below the first 15-minute opening-range low.",
      "definition": "close < or_low (OR = first 15 min after 09:30 ET)",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "below_premarket_low",
      "category": "session_structure",
      "category_label": "Session levels & position",
      "group": "price",
      "group_label": "Price",
      "kind": "state",
      "kind_label": "State",
      "summary": "Close below the pre-market session low.",
      "definition": "close < min(price[04:00..09:30])",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "below_price_target",
      "category": "price_targets",
      "category_label": "Price targets",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "kind": "state",
      "kind_label": "State",
      "summary": "Current price is below the consensus analyst target.",
      "definition": "price < analyst_consensus_target_price",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "below_yesterday_low",
      "category": "session_structure",
      "category_label": "Session levels & position",
      "group": "price",
      "group_label": "Price",
      "kind": "state",
      "kind_label": "State",
      "summary": "Close below the prior session’s intraday low.",
      "definition": "close < low_prev",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "bollinger_squeeze",
      "category": "volatility_bands",
      "category_label": "Volatility & bands",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "state",
      "kind_label": "State",
      "summary": "Bollinger band width compressed to a multi-week low — volatility is contracted.",
      "definition": "bollinger_width < 0.04",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "bounce_off_support",
      "category": "support_resistance",
      "category_label": "Support & resistance",
      "group": "price",
      "group_label": "Price",
      "kind": "state",
      "kind_label": "State",
      "summary": "Bounced off a detected support level: price tagged the band within three sessions and closed up.",
      "definition": "in last 3 bars: low within level ± 1.5 × ATR14 of an active support level AND close > prev close",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "bullish_consensus",
      "category": "consensus_ratings",
      "category_label": "Consensus ratings",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "kind": "state",
      "kind_label": "State",
      "summary": "Consensus analyst rating is `strong buy` or `buy`.",
      "definition": "analyst_consensus_rating IN ('strong buy', 'buy')",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "buyback_30d",
      "category": "capital_changes",
      "category_label": "Splits & share changes",
      "group": "events",
      "group_label": "Events",
      "kind": "state",
      "kind_label": "State",
      "summary": "Shares outstanding fell more than 1% over the last 30 days.",
      "definition": "shares_outstanding < 30d-ago × 0.99",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "consolidating_15m",
      "category": "ranges",
      "category_label": "Ranges & reversals",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "state",
      "kind_label": "State",
      "summary": "Last 15 minutes traded in a tight range.",
      "definition": "high_15m - low_15m < 0.5 * ((max(close, 30m) - min(close, 30m)) / 15) (ATR-30m proxy, not true ATR)",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "consolidation",
      "category": "ranges",
      "category_label": "Ranges & reversals",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price is range-bound — the last 5 sessions span less than 5%.",
      "definition": "(max(high) − min(low)) / midpoint < 0.05 over 5 bars",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "death_cross",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "event",
      "kind_label": "Event",
      "summary": "50-day SMA crossed below 200-day SMA today.",
      "definition": "Yesterday: sma_50 ≥ sma_200. Today: sma_50 < sma_200.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "death_regime",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "state",
      "kind_label": "State",
      "summary": "Long-term downtrend regime — 50-day SMA below 200-day SMA.",
      "definition": "sma_50 < sma_200",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "dilution_30d",
      "category": "capital_changes",
      "category_label": "Splits & share changes",
      "group": "events",
      "group_label": "Events",
      "kind": "state",
      "kind_label": "State",
      "summary": "Shares outstanding rose more than 3% over the last 30 days.",
      "definition": "shares_outstanding > 30d-ago × 1.03",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "dividend_approaching",
      "category": "dividends",
      "category_label": "Dividends",
      "group": "events",
      "group_label": "Events",
      "kind": "state",
      "kind_label": "State",
      "summary": "The ex-dividend date falls within the next 7 days.",
      "definition": "ex_dividend_date between today and today + 7d",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "earnings_approaching",
      "category": "earnings",
      "category_label": "Earnings",
      "group": "events",
      "group_label": "Events",
      "kind": "state",
      "kind_label": "State",
      "summary": "Earnings within 3 days.",
      "definition": "days_to_earnings = 3 (exactly three days before the scheduled earnings date)",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "earnings_next_week",
      "category": "earnings",
      "category_label": "Earnings",
      "group": "events",
      "group_label": "Events",
      "kind": "state",
      "kind_label": "State",
      "summary": "Earnings 8–14 days out — useful for the lead-up swing window.",
      "definition": "days_to_earnings >= 8 AND days_to_earnings <= 14",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "earnings_published",
      "category": "earnings",
      "category_label": "Earnings",
      "group": "events",
      "group_label": "Events",
      "kind": "state",
      "kind_label": "State",
      "summary": "Earnings report date has passed (next earnings date is in the past).",
      "definition": "days_to_earnings <= 0",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "earnings_this_week",
      "category": "earnings",
      "category_label": "Earnings",
      "group": "events",
      "group_label": "Events",
      "kind": "state",
      "kind_label": "State",
      "summary": "Earnings announcement scheduled in the next 7 days.",
      "definition": "0 <= days_to_earnings <= 7. Sourced from the forward earnings calendar plus the historical earnings table.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "earnings_today",
      "category": "earnings",
      "category_label": "Earnings",
      "group": "events",
      "group_label": "Events",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Earnings reported today.",
      "definition": "EXISTS(ticker_earnings_history row with reported_date = today). Both pre-market and post-market reports count.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "earnings_tomorrow",
      "category": "earnings",
      "category_label": "Earnings",
      "group": "events",
      "group_label": "Events",
      "kind": "state",
      "kind_label": "State",
      "summary": "Earnings reported in 1 calendar day. Pair with `earnings_report_time` to know BMO vs. AMC.",
      "definition": "days_to_earnings = 1",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "estimate_revised_down",
      "category": "estimates",
      "category_label": "Estimates",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "kind": "state",
      "kind_label": "State",
      "summary": "At least one analyst lowered their next-quarter EPS estimate in the last 30 days.",
      "definition": "eps_estimate_revision_down_30d > eps_estimate_revision_up_30d AND total 30d revisions (up + down) >= 3",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "estimate_revised_up",
      "category": "estimates",
      "category_label": "Estimates",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "kind": "state",
      "kind_label": "State",
      "summary": "At least one analyst raised their next-quarter EPS estimate in the last 30 days.",
      "definition": "eps_estimate_revision_up_30d > eps_estimate_revision_down_30d AND total 30d revisions (up + down) >= 3",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "expanded_hourly_range",
      "category": "ranges",
      "category_label": "Ranges & reversals",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "state",
      "kind_label": "State",
      "summary": "This hour’s range is unusually wide.",
      "definition": "(high - low) > 1.5 * atr_hourly_20",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "gap_down",
      "category": "gaps",
      "category_label": "Gaps",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Today opened 3%+ below prior close.",
      "definition": "(close_prev - open) / close_prev >= 0.03 AND price still below close_prev (gap has not been reclaimed)",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "gap_down_extreme",
      "category": "gaps",
      "category_label": "Gaps",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Today opened 10%+ below prior close.",
      "definition": "(close_prev - open) / close_prev >= 0.10",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "gap_filled_today",
      "category": "gaps",
      "category_label": "Gaps",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Today’s opening gap was closed by an intraday move.",
      "definition": "Opened with gap >= 0.5% AND intraday range straddled close_prev.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "gap_up",
      "category": "gaps",
      "category_label": "Gaps",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Today opened 3%+ above prior close.",
      "definition": "(open - close_prev) / close_prev >= 0.03 AND price still above close_prev (gap has not been filled negative)",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "gap_up_extreme",
      "category": "gaps",
      "category_label": "Gaps",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Today opened 10%+ above prior close.",
      "definition": "(open - close_prev) / close_prev >= 0.10",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "golden_cross",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "event",
      "kind_label": "Event",
      "summary": "50-day SMA crossed above 200-day SMA today.",
      "definition": "Yesterday: sma_50 ≤ sma_200. Today: sma_50 > sma_200.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "golden_regime",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "state",
      "kind_label": "State",
      "summary": "Long-term uptrend regime — 50-day SMA above 200-day SMA.",
      "definition": "sma_50 > sma_200",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "held_above_vwap_30m",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price has stayed above session VWAP without dipping for at least 30 minutes.",
      "definition": "close > vwap_session for every minute in the last 30",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "held_below_vwap_30m",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price has stayed below session VWAP without lifting for at least 30 minutes.",
      "definition": "close < vwap_session for every minute in the last 30",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "high_beta",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "kind": "classification",
      "kind_label": "Classification",
      "summary": "Beta above 1.5: moves more than the market.",
      "definition": "beta > 2.0.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "high_dividend_yield",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "kind": "classification",
      "kind_label": "Classification",
      "summary": "Dividend yield above 4%.",
      "definition": "dividend_yield >= 0.04.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "high_earnings_estimate",
      "category": "estimates",
      "category_label": "Estimates",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "kind": "classification",
      "kind_label": "Classification",
      "summary": "Consensus next-quarter EPS estimate exceeds an absolute $1.00 per share threshold.",
      "definition": "next_eps_estimate > 1.00",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "high_margin",
      "category": "margins_ratios",
      "category_label": "Margins & ratios",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "kind": "state",
      "kind_label": "State",
      "summary": "Trailing-twelve-month profit margin is above 20%.",
      "definition": "profit_margin_ttm > 0.20",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "high_short_interest",
      "category": "short_interest",
      "category_label": "Short interest",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "kind": "state",
      "kind_label": "State",
      "summary": "More than 20% of the float is sold short.",
      "definition": "short_float_pct > 20",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "high_volume_alert",
      "category": "volume_activity",
      "category_label": "Relative & unusual volume",
      "group": "volume",
      "group_label": "Volume",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Today’s volume is at least 2× the 30-day average.",
      "definition": "minute_volume > 5 x (avg_volume_10d / 390), i.e. this minute's volume exceeds 5x the typical per-minute pace from the 10-day average",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "hourly_reversal_bearish",
      "category": "ranges",
      "category_label": "Ranges & reversals",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Higher high, lower close than the prior hour.",
      "definition": "high > high_1h_ago AND close < close_1h_ago",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "hourly_reversal_bullish",
      "category": "ranges",
      "category_label": "Ranges & reversals",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Lower low, higher close than the prior hour.",
      "definition": "low < low_1h_ago AND close > close_1h_ago",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "illiquid",
      "category": "volume_activity",
      "category_label": "Relative & unusual volume",
      "group": "volume",
      "group_label": "Volume",
      "kind": "state",
      "kind_label": "State",
      "summary": "Thinly traded — 10-day average volume is under 100k shares.",
      "definition": "avg_volume_10d < 100000",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "in_downtrend",
      "category": "trend",
      "category_label": "Trend & direction",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "state",
      "kind_label": "State",
      "summary": "Stacked downtrend across short, medium, and long horizons.",
      "definition": "close < sma_50 AND sma_50 < sma_200",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "in_opening_range",
      "category": "ranges",
      "category_label": "Ranges & reversals",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price is inside the first-hour high/low range.",
      "definition": "or_low <= price <= or_high (OR = first 15 min after 09:30 ET)",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "in_uptrend",
      "category": "trend",
      "category_label": "Trend & direction",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "state",
      "kind_label": "State",
      "summary": "Stacked uptrend across short, medium, and long horizons.",
      "definition": "close > sma_50 AND sma_50 > sma_200",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "insider_c_suite_buy",
      "category": "insider_activity",
      "category_label": "Insider activity",
      "group": "events",
      "group_label": "Events",
      "kind": "state",
      "kind_label": "State",
      "summary": "A C-suite insider (CEO/CFO/COO/President/Chair) bought shares in the last 7 days.",
      "definition": "insider acquisition within 7d by an insider titled CEO, CFO, COO, President, Chairman, or Director",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "insider_c_suite_sell",
      "category": "insider_activity",
      "category_label": "Insider activity",
      "group": "events",
      "group_label": "Events",
      "kind": "state",
      "kind_label": "State",
      "summary": "A C-suite insider (CEO/CFO/COO/President/Chair) sold shares in the last 7 days.",
      "definition": "insider disposal by a C-suite title within 7d",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "insider_cluster_buy",
      "category": "insider_activity",
      "category_label": "Insider activity",
      "group": "events",
      "group_label": "Events",
      "kind": "state",
      "kind_label": "State",
      "summary": "Two or more distinct insiders bought shares in the last 14 days.",
      "definition": "count(distinct insider buyers) ≥ 2 within 14d",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "ipo_in_7d",
      "category": "ipos",
      "category_label": "IPOs",
      "group": "events",
      "group_label": "Events",
      "kind": "state",
      "kind_label": "State",
      "summary": "A firm IPO listing date falls within the next 7 days.",
      "definition": "IPO calendar listing date within 7 days",
      "cadence": "daily",
      "cadence_label": "daily",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "large_cap",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "kind": "classification",
      "kind_label": "Classification",
      "summary": "Market cap between $10B and $200B.",
      "definition": "market_cap >= 10B AND market_cap < 200B.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "last_hour_rally",
      "category": "intraday_momentum",
      "category_label": "Intraday momentum",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Final hour of session net up.",
      "definition": "close_1600 > close_1500 * 1.005",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "last_hour_selloff",
      "category": "intraday_momentum",
      "category_label": "Intraday momentum",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Final hour of session net down.",
      "definition": "close_1600 < close_1500 * 0.995",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "loss_estimate",
      "category": "estimates",
      "category_label": "Estimates",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "kind": "classification",
      "kind_label": "Classification",
      "summary": "Analyst consensus expects negative EPS for the upcoming report.",
      "definition": "next_eps_estimate < 0",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "low_beta",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "kind": "state",
      "kind_label": "State",
      "summary": "Beta below 0.5 — moves much less than the market.",
      "definition": "beta < 0.5",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "low_float",
      "category": "share_structure",
      "category_label": "Share structure & ownership",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "kind": "classification",
      "kind_label": "Classification",
      "summary": "Public float under 50 million shares.",
      "definition": "float_shares < 10,000,000.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "low_volume_regime",
      "category": "volume_activity",
      "category_label": "Relative & unusual volume",
      "group": "volume",
      "group_label": "Volume",
      "kind": "state",
      "kind_label": "State",
      "summary": "In a sustained quiet stretch — the last 30 minutes traded at or below 30% of this name's usual volume for this time of day.",
      "definition": "sum(volume, trailing 30 min) / expected_30min <= 0.30 to turn on; stays on until > 0.60. expected_30min = this bucket's median 15-min volume + the previous bucket's, medians over the last 20 sessions (volume_profile). Regular hours only; null until the name has a profile.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "macd_above_signal",
      "category": "trend",
      "category_label": "Trend & direction",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "state",
      "kind_label": "State",
      "summary": "MACD line is above its signal line.",
      "definition": "macd > macd_signal",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "macd_below_signal",
      "category": "trend",
      "category_label": "Trend & direction",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "state",
      "kind_label": "State",
      "summary": "MACD line is below its signal line.",
      "definition": "macd < macd_signal",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "mega_cap",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "kind": "classification",
      "kind_label": "Classification",
      "summary": "Market cap above $200B.",
      "definition": "market_cap >= 200B.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "micro_cap",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "kind": "state",
      "kind_label": "State",
      "summary": "Market cap between $50M and $300M.",
      "definition": "50e6 ≤ market_cap < 300e6",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "microspike_down",
      "category": "intraday_momentum",
      "category_label": "Intraday momentum",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Single 1-minute candle return ≤ −1%.",
      "definition": "(close - open) / open <= -0.01",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "microspike_up",
      "category": "intraday_momentum",
      "category_label": "Intraday momentum",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Single 1-minute candle return ≥ +1%.",
      "definition": "(close - open) / open >= 0.01",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "mid_cap",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "kind": "classification",
      "kind_label": "Classification",
      "summary": "Market cap between $2B and $10B.",
      "definition": "market_cap >= 2B AND market_cap < 10B.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "momentum_down",
      "category": "intraday_momentum",
      "category_label": "Intraday momentum",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "state",
      "kind_label": "State",
      "summary": "Sustained downward momentum on the daily bars.",
      "definition": "Three or more consecutive down days whose average daily move exceeds about 1%.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "momentum_exhaustion_down",
      "category": "intraday_momentum",
      "category_label": "Intraday momentum",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Downward momentum showing signs of exhaustion.",
      "definition": "rsi_14 < 30 AND days_down >= 5",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "momentum_exhaustion_up",
      "category": "intraday_momentum",
      "category_label": "Intraday momentum",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Upward momentum showing signs of exhaustion.",
      "definition": "rsi_14 > 70 AND days_up >= 5",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "momentum_strong_down",
      "category": "intraday_momentum",
      "category_label": "Intraday momentum",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Strong downward momentum across multiple measures.",
      "definition": "days_down >= 3 AND volume_trend_5d = 'increasing'",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "momentum_strong_up",
      "category": "intraday_momentum",
      "category_label": "Intraday momentum",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Strong upward momentum across multiple measures.",
      "definition": "days_up >= 3 AND volume_trend_5d = 'increasing'",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "momentum_up",
      "category": "intraday_momentum",
      "category_label": "Intraday momentum",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "state",
      "kind_label": "State",
      "summary": "Sustained upward momentum on the daily bars.",
      "definition": "Three or more consecutive up days whose average daily move exceeds about 1%.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "morning_strength",
      "category": "intraday_momentum",
      "category_label": "Intraday momentum",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "state",
      "kind_label": "State",
      "summary": "First two hours of session net positive.",
      "definition": "close_1130 > open_0930",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "nano_cap",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "kind": "state",
      "kind_label": "State",
      "summary": "Market cap below $50M.",
      "definition": "market_cap < 50e6",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "narrow_hourly_range",
      "category": "ranges",
      "category_label": "Ranges & reversals",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "state",
      "kind_label": "State",
      "summary": "This hour’s range is unusually narrow.",
      "definition": "(high - low) < 0.5 * atr_hourly_20",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "opening_drive_down",
      "category": "intraday_momentum",
      "category_label": "Intraday momentum",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "First 5 minutes of session down < −0.5%.",
      "definition": "close_0935 < open_0930 * 0.995",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "opening_drive_up",
      "category": "intraday_momentum",
      "category_label": "Intraday momentum",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "First 5 minutes of session up > +0.5%.",
      "definition": "close_0935 > open_0930 * 1.005",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "pending_ipo",
      "category": "ipos",
      "category_label": "IPOs",
      "group": "events",
      "group_label": "Events",
      "kind": "state",
      "kind_label": "State",
      "summary": "The ticker is in the IPO calendar but has not started trading.",
      "definition": "in the IPO calendar, pre-first-trade",
      "cadence": "daily",
      "cadence_label": "daily",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "pre_close_drift_down",
      "category": "intraday_momentum",
      "category_label": "Intraday momentum",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Last 10 minutes before close net down.",
      "definition": "close_1600 < close_1550",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "pre_close_drift_up",
      "category": "intraday_momentum",
      "category_label": "Intraday momentum",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Last 10 minutes before close net up.",
      "definition": "close_1600 > close_1550",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "pre_earnings_drift",
      "category": "intraday_momentum",
      "category_label": "Intraday momentum",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "state",
      "kind_label": "State",
      "summary": "Stock has moved ≥5% (absolute) over the trailing week with earnings within 7 days — a setup the literature shows often continues through the report.",
      "definition": "days_to_earnings BETWEEN 1 AND 7 AND ABS(change_1w_pct) >= 5",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "price_down_3pct",
      "category": "performance",
      "category_label": "Performance & change",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Intraday move of -3% or worse vs prior close.",
      "definition": "change_1d_pct <= -3",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "price_up_3pct",
      "category": "performance",
      "category_label": "Performance & change",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Intraday move of 3%+ vs prior close.",
      "definition": "change_1d_pct >= 3",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "profitable",
      "category": "margins_ratios",
      "category_label": "Margins & ratios",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "kind": "classification",
      "kind_label": "Classification",
      "summary": "Most-recently-reported quarter had positive net income.",
      "definition": "net_income_loss > 0",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "profitable_estimate",
      "category": "estimates",
      "category_label": "Estimates",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "kind": "classification",
      "kind_label": "Classification",
      "summary": "Analyst consensus expects positive EPS for the upcoming report.",
      "definition": "next_eps_estimate > 0",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "pullback",
      "category": "ranges",
      "category_label": "Ranges & reversals",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "state",
      "kind_label": "State",
      "summary": "Pullback to the 20-day moving average within an uptrend.",
      "definition": "in_uptrend (sma_50 > sma_200 AND price > sma_200) AND price below the 20-day or 50-day SMA by < 2% AND price down >= 2% from the 5-day high. Live evaluation at minute resolution.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "quiet_minute",
      "category": "volume_activity",
      "category_label": "Relative & unusual volume",
      "group": "volume",
      "group_label": "Volume",
      "kind": "state",
      "kind_label": "State",
      "summary": "A sustained quiet stretch — 10-minute volume average well below recent baseline.",
      "definition": "avg(volume, 10m) < 0.5 * avg(volume, prior 30m)",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "range_break_15m_down",
      "category": "ranges",
      "category_label": "Ranges & reversals",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Broke below the prior 15-minute low.",
      "definition": "close < min(low, prior 15 min)",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "range_break_15m_up",
      "category": "ranges",
      "category_label": "Ranges & reversals",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Broke above the prior 15-minute high.",
      "definition": "close > max(high, prior 15 min)",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "range_expansion",
      "category": "ranges",
      "category_label": "Ranges & reversals",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Today's true range > 2 × ATR(14) with volume — direction-agnostic regime-change tag.",
      "definition": "true_range > 2 * atr_14 AND volume > 1.5 * avg_volume_10d AND volume > 100,000",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "rapid_move_down_5m",
      "category": "intraday_momentum",
      "category_label": "Intraday momentum",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price down more than −0.5% in the last 5 minutes.",
      "definition": "(close - close_5m_ago) / close_5m_ago <= -0.005",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "rapid_move_up_5m",
      "category": "intraday_momentum",
      "category_label": "Intraday momentum",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price up more than +0.5% in the last 5 minutes.",
      "definition": "(close - close_5m_ago) / close_5m_ago >= 0.005",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "recent_downgrade",
      "category": "analyst_actions",
      "category_label": "Upgrades & downgrades",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "kind": "state",
      "kind_label": "State",
      "summary": "At least one analyst downgraded the ticker in the last 7 days.",
      "definition": "EXISTS (SELECT 1 FROM analyst_events WHERE ticker = t.ticker AND action = 'downgrades' AND timestamp >= NOW() - INTERVAL '7 days')",
      "cadence": "fifteen_min",
      "cadence_label": "Every 15 min",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "recent_initiation",
      "category": "analyst_actions",
      "category_label": "Upgrades & downgrades",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "kind": "state",
      "kind_label": "State",
      "summary": "At least one analyst initiated coverage in the last 7 days.",
      "definition": "EXISTS (SELECT 1 FROM analyst_events WHERE ticker = t.ticker AND action = 'initiates_coverage_on' AND timestamp >= NOW() - INTERVAL '7 days')",
      "cadence": "fifteen_min",
      "cadence_label": "Every 15 min",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "recent_target_lower",
      "category": "analyst_actions",
      "category_label": "Upgrades & downgrades",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "kind": "state",
      "kind_label": "State",
      "summary": "At least one analyst lowered their price target in the last 7 days.",
      "definition": "EXISTS (SELECT 1 FROM analyst_events WHERE ticker = t.ticker AND price_target_action = 'lowers' AND timestamp >= NOW() - INTERVAL '7 days')",
      "cadence": "fifteen_min",
      "cadence_label": "Every 15 min",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "recent_target_raise",
      "category": "analyst_actions",
      "category_label": "Upgrades & downgrades",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "kind": "state",
      "kind_label": "State",
      "summary": "At least one analyst raised their price target in the last 7 days.",
      "definition": "EXISTS (SELECT 1 FROM analyst_events WHERE ticker = t.ticker AND price_target_action = 'raises' AND timestamp >= NOW() - INTERVAL '7 days')",
      "cadence": "fifteen_min",
      "cadence_label": "Every 15 min",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "recent_upgrade",
      "category": "analyst_actions",
      "category_label": "Upgrades & downgrades",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "kind": "state",
      "kind_label": "State",
      "summary": "At least one analyst upgraded the ticker in the last 7 days.",
      "definition": "EXISTS (SELECT 1 FROM analyst_events WHERE ticker = t.ticker AND action = 'upgrades' AND timestamp >= NOW() - INTERVAL '7 days')",
      "cadence": "fifteen_min",
      "cadence_label": "Every 15 min",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "recently_ipoed",
      "category": "ipos",
      "category_label": "IPOs",
      "group": "events",
      "group_label": "Events",
      "kind": "state",
      "kind_label": "State",
      "summary": "The company listed within the last 90 days.",
      "definition": "list_date >= today − 90d",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "recently_reported_earnings",
      "category": "earnings",
      "category_label": "Earnings",
      "group": "events",
      "group_label": "Events",
      "kind": "state",
      "kind_label": "State",
      "summary": "Reported earnings within the last 5 days.",
      "definition": "EXISTS(ticker_earnings_history row with reported_date in [today - 5d, today - 1d]). Captures the post-earnings reaction window.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "repeated_test_of_high",
      "category": "ranges",
      "category_label": "Ranges & reversals",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "state",
      "kind_label": "State",
      "summary": "Tested today’s session high three or more times — failed-breakout setup.",
      "definition": "Close within 0.1% of the session high (close >= session_high * 0.999) on at least 3 minutes this session.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "repeated_test_of_low",
      "category": "ranges",
      "category_label": "Ranges & reversals",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "state",
      "kind_label": "State",
      "summary": "Tested today’s session low three or more times — failed-breakdown setup.",
      "definition": "Close within 0.1% of the session low (close <= session_low * 1.001) on at least 3 minutes this session.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "rsi_overbought",
      "category": "oscillators",
      "category_label": "Oscillators",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "state",
      "kind_label": "State",
      "summary": "RSI(14) is in overbought territory.",
      "definition": "rsi_14 > 70",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "rsi_oversold",
      "category": "oscillators",
      "category_label": "Oscillators",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "state",
      "kind_label": "State",
      "summary": "RSI(14) is in oversold territory.",
      "definition": "rsi_14 < 30",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "short_volume_spike",
      "category": "short_interest",
      "category_label": "Short interest",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "kind": "state",
      "kind_label": "State",
      "summary": "More than 60% of the day's volume was executed as short sales.",
      "definition": "short_volume_ratio > 0.60",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "sma_10_crossed_above_50_today",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "state",
      "kind_label": "State",
      "summary": "The 10-day SMA crossed above the 50-day SMA today — a short-term bullish cross.",
      "definition": "sma_10 crossed above sma_50 vs. the prior session",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "sma_10_crossed_below_50_today",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "state",
      "kind_label": "State",
      "summary": "The 10-day SMA crossed below the 50-day SMA today — a short-term bearish cross.",
      "definition": "sma_10 crossed below sma_50 vs. the prior session",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "small_cap",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "kind": "classification",
      "kind_label": "Classification",
      "summary": "Market cap between $300M and $2B.",
      "definition": "market_cap >= 300M AND market_cap < 2B.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "split_recent",
      "category": "capital_changes",
      "category_label": "Splits & share changes",
      "group": "events",
      "group_label": "Events",
      "kind": "state",
      "kind_label": "State",
      "summary": "A stock split occurred in the last 7 days or is scheduled within 14 days.",
      "definition": "split execution_date between today − 7d and today + 14d",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "sticky_breakout",
      "category": "ranges",
      "category_label": "Ranges & reversals",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "state",
      "kind_label": "State",
      "summary": "Latches on when price makes a 52-week high and stays on until the nightly reset — a persistent breakout tag.",
      "definition": "set on a 52-week-high breakout; reset each night",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "target_downside_above_10pct",
      "category": "price_targets",
      "category_label": "Price targets",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "kind": "state",
      "kind_label": "State",
      "summary": "Current price is more than 10% above the consensus target — significant implied downside.",
      "definition": "analyst_target_upside_pct < -10",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "target_upside_above_10pct",
      "category": "price_targets",
      "category_label": "Price targets",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "kind": "state",
      "kind_label": "State",
      "summary": "Consensus price target implies more than 10% upside from the current price.",
      "definition": "analyst_target_upside_pct > 10",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "target_upside_above_25pct",
      "category": "price_targets",
      "category_label": "Price targets",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "kind": "state",
      "kind_label": "State",
      "summary": "Consensus price target implies more than 25% upside from the current price.",
      "definition": "analyst_target_upside_pct > 25",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "tested_session_high_recent",
      "category": "session_structure",
      "category_label": "Session levels & position",
      "group": "price",
      "group_label": "Price",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price touched today’s session high within the last 5 minutes.",
      "definition": "max(close, last 5 min) >= session_high * 0.999",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "tested_session_low_recent",
      "category": "session_structure",
      "category_label": "Session levels & position",
      "group": "price",
      "group_label": "Price",
      "kind": "state",
      "kind_label": "State",
      "summary": "Price touched today’s session low within the last 5 minutes.",
      "definition": "min(close, last 5 min) <= session_low * 1.001",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "three_down_hours",
      "category": "intraday_momentum",
      "category_label": "Intraday momentum",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "state",
      "kind_label": "State",
      "summary": "Three consecutive lower hourly closes.",
      "definition": "close < close_1h_ago < close_2h_ago < close_3h_ago",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "three_up_hours",
      "category": "intraday_momentum",
      "category_label": "Intraday momentum",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "state",
      "kind_label": "State",
      "summary": "Three consecutive higher hourly closes.",
      "definition": "close > close_1h_ago > close_2h_ago > close_3h_ago",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "top_gainer",
      "category": "performance",
      "category_label": "Performance & change",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "state",
      "kind_label": "State",
      "summary": "Among the session's top 20 gainers.",
      "definition": "Ranks in the top 20 by change_1d_pct among active tickers with price above $1 and session volume above 100k shares.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "top_loser",
      "category": "performance",
      "category_label": "Performance & change",
      "group": "price_action",
      "group_label": "Price action",
      "kind": "state",
      "kind_label": "State",
      "summary": "Among the session's top 20 losers.",
      "definition": "Ranks in the bottom 20 by change_1d_pct among active tickers with price above $1 and session volume above 100k shares.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "trend_reversal_bearish_today",
      "category": "trend",
      "category_label": "Trend & direction",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Trend flipped from up to down today.",
      "definition": "Yesterday: sma_50 > sma_200. Today: macd_bearish AND rsi_14 < 50.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "trend_reversal_bullish_today",
      "category": "trend",
      "category_label": "Trend & direction",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Trend flipped from down to up today.",
      "definition": "Yesterday: sma_50 < sma_200. Today: macd_bullish AND rsi_14 > 50.",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "ultra_low_float",
      "category": "share_structure",
      "category_label": "Share structure & ownership",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "kind": "state",
      "kind_label": "State",
      "summary": "Float below 5M shares — extremely thin supply.",
      "definition": "float_shares < 5e6",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "value_stock",
      "category": "valuation",
      "category_label": "Valuation",
      "group": "fundamentals",
      "group_label": "Fundamentals",
      "kind": "classification",
      "kind_label": "Classification",
      "summary": "Trades at a value-style P/E.",
      "definition": "pe_ratio > 0 AND pe_ratio < 15.",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "volume_burst_3x",
      "category": "volume_activity",
      "category_label": "Relative & unusual volume",
      "group": "volume",
      "group_label": "Volume",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Current minute volume ≥ 3× recent average.",
      "definition": "volume >= 3 * avg(volume, 30 min prior)",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "volume_burst_5x",
      "category": "volume_activity",
      "category_label": "Relative & unusual volume",
      "group": "volume",
      "group_label": "Volume",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Current minute volume ≥ 5× recent average.",
      "definition": "volume >= 5 * avg(volume, 30 min prior)",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "continuous",
      "firing_label": "Continuous"
    },
    {
      "name": "vwap_cross_down",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Crossed below session VWAP this minute.",
      "definition": "close_prev_min >= vwap_session AND close < vwap_session",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "vwap_cross_up",
      "category": "moving_averages",
      "category_label": "Moving averages & VWAP",
      "group": "technicals",
      "group_label": "Technicals",
      "kind": "event",
      "kind_label": "Event",
      "summary": "Crossed above session VWAP this minute.",
      "definition": "close_prev_min <= vwap_session AND close > vwap_session",
      "cadence": "live_1m_market_hours",
      "cadence_label": "Every 1 min, 4 AM–8 PM ET weekdays",
      "firing": "edge_session",
      "firing_label": "Sticky for session"
    },
    {
      "name": "well_covered",
      "category": "consensus_ratings",
      "category_label": "Consensus ratings",
      "group": "analyst",
      "group_label": "Analyst ratings",
      "kind": "classification",
      "kind_label": "Classification",
      "summary": "Ten or more analyst firms cover the ticker.",
      "definition": "analyst_count_total >= 10",
      "cadence": "post_close_daily",
      "cadence_label": "Daily, post-close",
      "firing": "continuous",
      "firing_label": "Continuous"
    }
  ]
}