{"openapi":"3.1.0","info":{"title":"Orca API","description":"Impersonal market-research data from the Orca engine: rankings, signals, per-ticker scores, rotation, attention trends, and daily briefs. All content is computed once against broadcast model state and served identically to every caller.","version":"1.1.0"},"paths":{"/v1/health":{"get":{"tags":["meta"],"summary":"Health","operationId":"health_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}}}}},"/v1/rankings":{"get":{"tags":["rankings"],"summary":"Rankings","description":"Latest ranked candidate batch for a lane (daily | turtle | mr).\n\n`limit`/`offset` page the batch; omitting `limit` returns all of it, which\nis the historical behaviour and what the web table reads.\n`include_assessment=false` drops the per-row technical blob (see\n`_sanitize`), which is most of the response's size.","operationId":"rankings_v1_rankings_get","parameters":[{"name":"lane","in":"query","required":false,"schema":{"type":"string","default":"daily","title":"Lane"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"include_assessment","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Assessment"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RankingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/lanes":{"get":{"tags":["rankings"],"summary":"Lanes","description":"The lanes this API serves and whether each currently has a batch.","operationId":"lanes_v1_lanes_get","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Lanes V1 Lanes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/lanes/{lane}":{"get":{"tags":["rankings"],"summary":"Lane","description":"Alias of /rankings?lane=… with a path parameter.","operationId":"lane_v1_lanes__lane__get","parameters":[{"name":"lane","in":"path","required":true,"schema":{"type":"string","title":"Lane"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RankingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/signals":{"get":{"tags":["signals"],"summary":"Signals","description":"The latest aggregator batch for one lane (equity | crypto | commodity):\nwhich tickers cleared the pipeline, blended agg_score, confirming sources.","operationId":"signals_v1_signals_get","parameters":[{"name":"lane","in":"query","required":false,"schema":{"type":"string","default":"equity","title":"Lane"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":60,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignalsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/signals/consensus":{"get":{"tags":["signals"],"summary":"Consensus","description":"Per-source consensus snapshots (insiders, politicians, earnings beats,\ncatalysts, on-chain, 13F, AI news-beneficiary reads). Optionally one\nsource, addressed by its public slug (see ``GET /signals`` sources).\n\n`limit` caps rows PER SOURCE, not across the response — the sources are\nindependent snapshots and one of them being long (13F holdings runs to\n~1700 rows) should not silently starve the other six. Omitted means\nuncapped, the historical behaviour, which is what the web section reads.","operationId":"consensus_v1_signals_consensus_get","parameters":[{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsensusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tickers":{"get":{"tags":["tickers"],"summary":"Ticker List","description":"Every ticker with a current score — symbol + last-scored date, no\ndetail. Purpose-built for the public sitemap's ticker enumeration\n(Phase 2.1); free tier, same for every caller.","operationId":"ticker_list_v1_tickers_get","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TickerListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tickers/{symbol}":{"get":{"tags":["tickers"],"summary":"Ticker","description":"Per-ticker research view — the full fan-out (score, lanes, per-source\nsignals, virality, consensus, cluster rotation, Monte Carlo sims, forward\nreturns). Free tier, same payload for every caller.","operationId":"ticker_v1_tickers__symbol__get","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TickerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tickers/{symbol}/price":{"get":{"tags":["tickers"],"summary":"Ticker Price","description":"Live OHLC close-price history for the chart. Public market data, same\nfor every tier. `period` is one of 1M/6M/YTD/1Y/5Y/MAX, defaulting to 1Y\nfor an unrecognized value rather than erroring.\n\n`max_points` evenly samples the series down to that many bars (the chart\nreads it unset and gets every bar, as before).","operationId":"ticker_price_v1_tickers__symbol__price_get","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}},{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"1Y","title":"Period"}},{"name":"max_points","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Points"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tickers/{symbol}/overview":{"get":{"tags":["tickers"],"summary":"Ticker Overview","description":"Company overview/fundamentals (name, sector, description, market cap,\nvaluation ratios) for the ticker page's about-this-company section.\nPublic market data, same for every tier. 404 when the backend has\nnothing for the symbol (e.g. an unrecognized or delisted ticker).","operationId":"ticker_overview_v1_tickers__symbol__overview_get","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TickerOverview"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tickers/{symbol}/analyst":{"get":{"tags":["tickers"],"summary":"Ticker Analyst","description":"Today's cached AI ticker-analyst read (lean/conviction/thesis/evidence/\ninvalidation). Pure cache read — never triggers a model call, never bills.\nFree tier. 404 when no read has been generated today.","operationId":"ticker_analyst_v1_tickers__symbol__analyst_get","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TickerAnalystBrief"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tickers/{symbol}/articles":{"get":{"tags":["tickers"],"summary":"Ticker Articles","description":"A ticker's published article history, newest first — the ticker page's\n'Coverage' cross-reference. Empty list (not 404) when there's none yet;\nthat's the common case, not an error.","operationId":"ticker_articles_v1_tickers__symbol__articles_get","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArticlesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/rotation":{"get":{"tags":["rotation"],"summary":"Rotation","description":"The persisted rotation series: latest per-cluster quadrant/rank rows\n(with deltas), rank trajectories, and quadrant-crossing events.\n\n``include_trajectory=false`` and ``events_limit`` trim the two blocks that\ncarry 80% of the bytes; both default to the full payload, so the web view\nand every existing caller are untouched.","operationId":"rotation_v1_rotation_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":45,"title":"Days"}},{"name":"include_trajectory","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Trajectory"}},{"name":"events_limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Events Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RotationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/rotation/laggards":{"get":{"tags":["rotation"],"summary":"Laggards","description":"Members trailing a firing cluster's leader — catch-up candidates,\nwidest gap first.","operationId":"laggards_v1_rotation_laggards_get","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ClusterLaggardRow"},"title":"Response Laggards V1 Rotation Laggards Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/rotation/discovered":{"get":{"tags":["rotation"],"summary":"Discovered","description":"Latest unsupervised cluster-discovery cohorts (dynamic formations the\nstructural taxonomy misses).","operationId":"discovered_v1_rotation_discovered_get","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DiscoveredClusterRow"},"title":"Response Discovered V1 Rotation Discovered Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/rotation/members":{"get":{"tags":["rotation"],"summary":"Members","description":"Structural cluster membership (what's inside each rotation row).","operationId":"members_v1_rotation_members_get","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ClusterMembersEntry"},"title":"Response Members V1 Rotation Members Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/trends":{"get":{"tags":["trends"],"summary":"Trends","description":"The attention leaderboard: latest virality snapshot, VScore desc, with\nthe full decomposition (intensity/breadth/slope/vramp/sources).","operationId":"trends_v1_trends_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":40,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/trends/sources":{"get":{"tags":["trends"],"summary":"Trend Sources","description":"Per-source reach in the latest heat batch — which sources are loud today.","operationId":"trend_sources_v1_trends_sources_get","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SourceBreadthRow"},"title":"Response Trend Sources V1 Trends Sources Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/trends/heat":{"get":{"tags":["trends"],"summary":"Trend Heat","description":"Latest per-(ticker, source) attention contributions (the heat matrix).","operationId":"trend_heat_v1_trends_heat_get","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SourceHeatRow"},"title":"Response Trend Heat V1 Trends Heat Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/trends/search":{"get":{"tags":["trends"],"summary":"Trends Search","description":"Rising/Breakout consumer search queries from the latest internet-search day.","operationId":"trends_search_v1_trends_search_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SearchTrendRow"},"title":"Response Trends Search V1 Trends Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/trends/video":{"get":{"tags":["trends"],"summary":"Trends Video","description":"Rising video-view velocity, ticker-resolved videos only.","operationId":"trends_video_v1_trends_video_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":15,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VideoTrendRow"},"title":"Response Trends Video V1 Trends Video Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/briefs/market":{"get":{"tags":["briefs"],"summary":"Market Brief","description":"The daily market brief — a generic engine-wide read with NO\nrecommendations (descriptive only). Latest by default; ?date=YYYY-MM-DD\nfor a specific day.","operationId":"market_brief_v1_briefs_market_get","parameters":[{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketBriefResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/briefs/analyst":{"get":{"tags":["briefs"],"summary":"Analyst Brief","description":"The portfolio-analyst brief with its per-ticker views — the broadcast\nopinion layer (identical for every subscriber), minus the held-book\nsection (see _strip_held_book: that section is the founder's live\npaper-account positions, not broadcast content).","operationId":"analyst_brief_v1_briefs_analyst_get","parameters":[{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalystBriefResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/search":{"get":{"tags":["search"],"summary":"Search","description":"Resolve free text (ticker or company name) to known Orca symbols,\nbest match first. Pure resolution — never accrues signal, so Pro API\nconsumers browsing don't drive virality. See POST /search/hit for that\n(internal-only, not reachable with a provisioned customer key).","operationId":"search_v1_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":8,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SearchMatch"},"title":"Response Search V1 Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/portfolios":{"get":{"tags":["portfolios"],"summary":"Portfolios","description":"The full shelf of model portfolios as merchandising cards, served to every\ntier (it is the funnel). Draft books are never shown; ``?include_retired=true``\nalso returns archived books whose track record is frozen.\n\nEach card carries ``openable`` (whether *this* caller's tier can open the\nbook) and ``delayed`` (whether this caller would see it on a delay), so a\nclient can render the whole shelf with lock/delay badges.","operationId":"portfolios_v1_portfolios_get","parameters":[{"name":"include_retired","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Retired"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioShelf"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/portfolios/{slug}":{"get":{"tags":["portfolios"],"summary":"Portfolio","description":"One book's full detail: registry row, today's holdings + overlay legs, a\nrecent-events window, the NAV series and windowed returns.\n\n``events`` is the public projection of the diff log, not the log: the most\nrecent ``_PUBLIC_EVENT_LIMIT`` rows, trimmed to ``_PUBLIC_EVENT_KEYS`` with\neach ``reason`` rewritten into the fixed public vocabulary. See the block\ncomment above — the stored reasons name the selection mechanism and quote\nits cut-points, which is the same disclosure ``_public_construction`` exists\nto prevent.\n\nGating: the caller's tier must meet the book's ``tier`` (403 otherwise, so a\nfree caller sees only the free book). The snapshot actually served is then\nclamped by whichever is more restrictive of the caller's ``access_level``\n(draft/prime/published — see ``model_portfolio_snapshot_status``, standard\ntier and up treated as prime — see ``_effective_as_of``) and its\n``publish_delay_min`` free-tier lever; ``asof`` is the snapshot actually\nserved under that clamp. ``delayed_to`` echoes that clamp date only for a\ncaller the free-tier lever actually applies to (``_is_delayed``) — a paying\nsubscriber gets ``None`` even though the draft gate did clamp them, because\nwaiting for a snapshot to be confirmed is the schedule, not a delay.","operationId":"portfolio_v1_portfolios__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioBook"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/articles":{"get":{"tags":["articles"],"summary":"Articles","description":"One page of the public articles feed, newest first. Free tier, same\npayload for every caller — this is published, unauthenticated-in-spirit\ncontent; the API key requirement is the same infra-level seam every\nendpoint uses, not a tier gate on this content.\n\nPaged rather than a bare ``limit``: the feed is append-only and the archive\nis the point of the publisher lane, so without ``offset`` every article past\nthe newest ``limit`` becomes unreachable — and unreachable to a crawler too,\nsince the sitemap walks this same endpoint. ``total`` is returned so a\nclient can render a pager without probing for the end.","operationId":"articles_v1_articles_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArticlesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/articles/{slug}":{"get":{"tags":["articles"],"summary":"Article","description":"One published article's full body. 404 for an unknown or unpublished\nslug — drafts are never served here.","operationId":"article_v1_articles__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArticleDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AnalystBriefResponse":{"properties":{"brief":{"additionalProperties":true,"type":"object","title":"Brief"},"views":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Views"}},"type":"object","required":["brief","views"],"title":"AnalystBriefResponse"},"ArticleDetail":{"properties":{"slug":{"type":"string","title":"Slug"},"ticker":{"type":"string","title":"Ticker"},"headline":{"type":"string","title":"Headline"},"dek":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dek"},"body_md":{"type":"string","title":"Body Md"},"trigger_type":{"type":"string","title":"Trigger Type"},"published_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published At"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["slug","ticker","headline","body_md","trigger_type"],"title":"ArticleDetail"},"ArticleSummary":{"properties":{"slug":{"type":"string","title":"Slug"},"ticker":{"type":"string","title":"Ticker"},"headline":{"type":"string","title":"Headline"},"dek":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dek"},"trigger_type":{"type":"string","title":"Trigger Type"},"published_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published At"}},"type":"object","required":["slug","ticker","headline","trigger_type"],"title":"ArticleSummary"},"ArticlesResponse":{"properties":{"count":{"type":"integer","title":"Count"},"articles":{"items":{"$ref":"#/components/schemas/ArticleSummary"},"type":"array","title":"Articles"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total"},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit"},"offset":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset"}},"type":"object","required":["count","articles"],"title":"ArticlesResponse"},"BookEvent":{"properties":{"event_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Date"},"action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"},"ticker":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ticker"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"side":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Side"},"delta_weight_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Delta Weight Pct"},"instrument_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instrument Type"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","title":"BookEvent","description":"One row of the public event feed — the projection of the diff log, not\nthe log. ``reason`` has already been rewritten into the fixed public\nvocabulary by ``_public_reason``; the stored text never reaches here, and\n``source_metric`` (the number behind it) is undeclared on purpose."},"CaptradesConsensusRow":{"properties":{"ticker":{"type":"string","title":"Ticker"},"company":{"type":"string","title":"Company"},"buyers":{"type":"integer","title":"Buyers"},"sellers":{"type":"integer","title":"Sellers"},"net_politicians":{"type":"integer","title":"Net Politicians"},"buy_usd":{"type":"number","title":"Buy Usd"},"sell_usd":{"type":"number","title":"Sell Usd"},"net_usd":{"type":"number","title":"Net Usd"},"trades":{"type":"integer","title":"Trades"},"run_at":{"type":"string","title":"Run At"}},"type":"object","required":["ticker","company","buyers","sellers","net_politicians","buy_usd","sell_usd","net_usd","trades","run_at"],"title":"CaptradesConsensusRow"},"CatalystConsensusRow":{"properties":{"feed":{"type":"string","title":"Feed"},"category":{"type":"string","title":"Category"},"event":{"type":"string","title":"Event"},"event_date":{"type":"string","title":"Event Date"},"ticker":{"type":"string","title":"Ticker"},"entity":{"type":"string","title":"Entity"},"exchange":{"type":"string","title":"Exchange"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence"},"note":{"type":"string","title":"Note"},"run_at":{"type":"string","title":"Run At"}},"type":"object","required":["feed","category","event","event_date","ticker","entity","exchange","note","run_at"],"title":"CatalystConsensusRow"},"ClusterLaggardRow":{"properties":{"cluster_name":{"type":"string","title":"Cluster Name"},"ticker":{"type":"string","title":"Ticker"},"leader":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Leader"},"leader_move_10d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Leader Move 10D"},"leader_catalyst":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Leader Catalyst"},"cluster_move_10d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cluster Move 10D"},"gap_10d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Gap 10D"},"lag_z":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lag Z"},"participation":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Participation"},"also_surfaced":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Also Surfaced"},"snapshot_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Date"}},"type":"object","required":["cluster_name","ticker"],"title":"ClusterLaggardRow"},"ClusterMembersEntry":{"properties":{"members":{"items":{"type":"string"},"type":"array","title":"Members","default":[]},"leads":{"items":{"type":"string"},"type":"array","title":"Leads","default":[]},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","title":"ClusterMembersEntry"},"ClusterMomentumRow":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"recorded_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recorded At"},"snapshot_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Date"},"asof":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asof"},"cluster_name":{"type":"string","title":"Cluster Name"},"n_members":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"N Members"},"mom_5d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mom 5D"},"mom_20d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mom 20D"},"mom_60d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mom 60D"},"rs_ratio":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rs Ratio"},"rs_mom":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rs Mom"},"quadrant":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quadrant"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"},"rank_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rank Pct"},"breadth":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Breadth"},"cohesion":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cohesion"},"rank_prev":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank Prev"},"quadrant_prev":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quadrant Prev"},"rank_delta":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank Delta"}},"type":"object","required":["cluster_name"],"title":"ClusterMomentumRow"},"ClusterRotationEvent":{"properties":{"date":{"type":"string","title":"Date"},"cluster":{"type":"string","title":"Cluster"},"from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From"},"to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To"},"flow":{"type":"string","title":"Flow"}},"type":"object","required":["date","cluster","flow"],"title":"ClusterRotationEvent"},"ClusterTrajectory":{"properties":{"cluster":{"type":"string","title":"Cluster"},"series":{"items":{"$ref":"#/components/schemas/ClusterTrajectoryPoint"},"type":"array","title":"Series"}},"type":"object","required":["cluster","series"],"title":"ClusterTrajectory"},"ClusterTrajectoryPoint":{"properties":{"date":{"type":"string","title":"Date"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"}},"type":"object","required":["date"],"title":"ClusterTrajectoryPoint"},"ConsensusResponse":{"properties":{"insider-activity":{"anyOf":[{"items":{"$ref":"#/components/schemas/Form4ConsensusRow"},"type":"array"},{"type":"null"}],"title":"Insider-Activity"},"congressional-trading":{"anyOf":[{"items":{"$ref":"#/components/schemas/CaptradesConsensusRow"},"type":"array"},{"type":"null"}],"title":"Congressional-Trading"},"earnings-surprise":{"anyOf":[{"items":{"$ref":"#/components/schemas/EarningsConsensusRow"},"type":"array"},{"type":"null"}],"title":"Earnings-Surprise"},"event-calendar":{"anyOf":[{"items":{"$ref":"#/components/schemas/CatalystConsensusRow"},"type":"array"},{"type":"null"}],"title":"Event-Calendar"},"onchain-flows":{"anyOf":[{"items":{"$ref":"#/components/schemas/OnchainConsensusRow"},"type":"array"},{"type":"null"}],"title":"Onchain-Flows"},"institutional-holdings":{"anyOf":[{"items":{"$ref":"#/components/schemas/DataromaConsensusRow"},"type":"array"},{"type":"null"}],"title":"Institutional-Holdings"},"ai-news-analysis":{"anyOf":[{"items":{"$ref":"#/components/schemas/NewsBeneficiaryConsensusRow"},"type":"array"},{"type":"null"}],"title":"Ai-News-Analysis"}},"type":"object","title":"ConsensusResponse"},"Contract":{"properties":{"underlying":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Underlying"},"expiry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiry"},"strike":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Strike"},"right":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Right"},"multiplier":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Multiplier"},"premium":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Premium"},"dte":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Dte"},"contract":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contract"}},"type":"object","title":"Contract","description":"The option contract an overlay leg is written on: its identity\n(expiry/strike/right, per ``_contract_id`` in strategy/model_portfolios.py)\nplus what a reader needs to price it.\n\nDeliberately absent: ``delta`` and ``implied_vol`` — the leg already\npublishes ``assignment_prob``, which IS |delta| — and ``iv_rank`` / ``vrp``\n/ ``timing_mult``, the overlay's timing provenance, which is selection\nmechanism (strategy/premium_overlay.py::contract_spec)."},"DataromaConsensusRow":{"properties":{"ticker":{"type":"string","title":"Ticker"},"company":{"type":"string","title":"Company"},"buyers":{"type":"integer","title":"Buyers"},"sellers":{"type":"integer","title":"Sellers"},"holders":{"type":"integer","title":"Holders"},"buy_usd":{"type":"number","title":"Buy Usd"},"sell_usd":{"type":"number","title":"Sell Usd"},"net_usd":{"type":"number","title":"Net Usd"},"net_managers":{"type":"integer","title":"Net Managers"},"run_at":{"type":"string","title":"Run At"}},"type":"object","required":["ticker","company","buyers","sellers","holders","buy_usd","sell_usd","net_usd","net_managers","run_at"],"title":"DataromaConsensusRow"},"DiscoveredClusterRow":{"properties":{"snapshot_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Date"},"cluster_uid":{"type":"string","title":"Cluster Uid"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"label_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label Source"},"structural_match":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Structural Match"},"is_new":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is New"},"size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size"},"cohesion":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cohesion"},"members":{"items":{"type":"string"},"type":"array","title":"Members","default":[]}},"type":"object","required":["cluster_uid"],"title":"DiscoveredClusterRow"},"DistributionSummary":{"properties":{"policy":{"type":"string","title":"Policy"},"since":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Since"},"covered_12m":{"type":"boolean","title":"Covered 12M","default":false},"distributions_to_date_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Distributions To Date Pct"},"trailing_12m_yield_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Trailing 12M Yield Pct"},"sustain_gap_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Sustain Gap Pct"},"return_of_capital_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Return Of Capital Pct"}},"type":"object","required":["policy"],"title":"DistributionSummary","description":"The book's distribution record (docs/distribution_layer.md §5). ``None``\non ``PortfolioMetrics.distribution`` means not a distributing book at all;\npresent with ``since`` and ``distributions_to_date_pct`` None means it IS\ndistributing but no session has crossed the seam yet — a real state, and it\nrenders differently. Nothing here is annualised. Any surface rendering a\ndistribution or yield figure must render ``sustain_gap_pct`` and\n``return_of_capital_pct`` beside it (spec §11, D3)."},"EarningsConsensusRow":{"properties":{"ticker":{"type":"string","title":"Ticker"},"company":{"type":"string","title":"Company"},"report_date":{"type":"string","title":"Report Date"},"report_time":{"type":"string","title":"Report Time"},"eps_actual":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Eps Actual"},"eps_estimate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Eps Estimate"},"surprise_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Surprise Pct"},"market_cap":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Market Cap"},"num_estimates":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Num Estimates"},"fiscal_period":{"type":"string","title":"Fiscal Period"},"run_at":{"type":"string","title":"Run At"}},"type":"object","required":["ticker","company","report_date","report_time","fiscal_period","run_at"],"title":"EarningsConsensusRow"},"Form4ConsensusRow":{"properties":{"ticker":{"type":"string","title":"Ticker"},"company":{"type":"string","title":"Company"},"insiders":{"type":"integer","title":"Insiders"},"best_role":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Best Role"},"top_title":{"type":"string","title":"Top Title"},"total_value":{"type":"number","title":"Total Value"},"buys":{"type":"integer","title":"Buys"},"run_at":{"type":"string","title":"Run At"}},"type":"object","required":["ticker","company","insiders","top_title","total_value","buys","run_at"],"title":"Form4ConsensusRow"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"Health":{"properties":{"status":{"type":"string","title":"Status"},"backend":{"type":"string","title":"Backend"},"version":{"type":"string","title":"Version"}},"type":"object","required":["status","backend","version"],"title":"Health"},"Holding":{"properties":{"ticker":{"type":"string","title":"Ticker"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"sector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"},"cluster":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cluster"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"},"weight_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Weight Pct"},"side":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Side"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"entry_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entry Date"},"select_metric":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Select Metric"},"sel_metric_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sel Metric Kind"},"instrument_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instrument Type"},"assigned":{"type":"boolean","title":"Assigned","default":false},"effective_basis":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Effective Basis"}},"type":"object","required":["ticker"],"title":"Holding","description":"One equity (or cash) position in today's snapshot.\n\n``weight_pct`` is the only position quantity that exists — no shares, no\ndollars, by construction of the tables themselves (the FIREWALL note on the\nmodel_portfolio_* DDL in data/db.py). ``side`` is 'long' (NULL = long) or\n'short', and ``weight_pct`` stays POSITIVE either way.\n\nDeliberately absent, all of which the ``list[dict]`` this replaced shipped:\n``rationale`` — engine text that names the selection mechanism and quotes\nits live cut-points (\"invest composite 72 (BUY); tech 68 / fund 55\",\n\"Donchian breakdown below the 200-SMA; 2N buy-stop $41.80\"), i.e. exactly\nthe disclosure ``_public_events`` rewrites event reasons to prevent, one\ntable over; ``metrics`` — the per-name selection metrics JSON, whose\npublishable aggregate is ``PortfolioMetrics`` below; ``stop_price`` and\n``target_price`` — the exit rule's live cut-points; and the row's internal\nidentity (``id`` / ``portfolio_id`` / ``run_id`` / ``recorded_at``).\n\n``assigned`` / ``effective_basis`` are the one allowlisted lift OUT of that\ndropped ``metrics`` block (data/reads.py::_assigned_view), and they are not an\nexception to the rule above: an assignment is an OUTCOME the event feed\nalready publishes in full, not a selection decision. Without them the single\nrow in the book that the picker did NOT choose arrives indistinguishable from\none it did — a new ticker with ``select_metric: null`` and no basis — which is\nthe whole of docs/subscriber_followability.md §5."},"MarketBriefResponse":{"properties":{"brief":{"additionalProperties":true,"type":"object","title":"Brief"},"notes":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Notes"}},"type":"object","required":["brief","notes"],"title":"MarketBriefResponse"},"NavPoint":{"properties":{"nav_date":{"type":"string","title":"Nav Date"},"nav":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Nav"},"daily_return_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Daily Return Pct"},"cum_return_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cum Return Pct"},"drawdown_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Drawdown Pct"},"benchmark_ret_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Benchmark Ret Pct"},"n_holdings":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"N Holdings"},"turnover_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Turnover Pct"},"distribution_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Distribution Pct"},"capital_nav":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Capital Nav"},"cum_distribution_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cum Distribution Pct"}},"type":"object","required":["nav_date"],"title":"NavPoint","description":"One session on the track record. ``nav`` is TOTAL return indexed to 100\nat inception and is never restated; ``capital_nav`` is the parallel curve a\nholder sees if they take the distributions out (docs/distribution_layer.md).\n``distribution_pct`` NULL means the book does not distribute at all — 0.0\nmeans it does and nothing settled this session."},"NavWindow":{"properties":{"label":{"type":"string","title":"Label"},"return_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Return Pct"},"from_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Date"},"covered":{"type":"boolean","title":"Covered","default":false},"capital_return_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Capital Return Pct"},"distribution_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Distribution Pct"}},"type":"object","required":["label"],"title":"NavWindow","description":"MTD / 3M / 6M / 12M / ITD total return. ``covered`` False (with\n``return_pct`` None) means the record does not yet reach back past that\nwindow's cutoff — render it as unavailable, never as the ITD number."},"NewsBeneficiaryConsensusRow":{"properties":{"ticker":{"type":"string","title":"Ticker"},"company":{"type":"string","title":"Company"},"direction":{"type":"string","title":"Direction"},"order_hops":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order Hops"},"mechanism":{"type":"string","title":"Mechanism"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence"},"obviousness":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Obviousness"},"horizon":{"type":"string","title":"Horizon"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"validated":{"type":"integer","title":"Validated"},"headline":{"type":"string","title":"Headline"},"source":{"type":"string","title":"Source"},"url":{"type":"string","title":"Url"},"run_at":{"type":"string","title":"Run At"},"snapshot_date":{"type":"string","title":"Snapshot Date"}},"type":"object","required":["ticker","company","direction","mechanism","horizon","validated","headline","source","url","run_at","snapshot_date"],"title":"NewsBeneficiaryConsensusRow"},"OnchainConsensusRow":{"properties":{"symbol":{"type":"string","title":"Symbol"},"wallets":{"type":"integer","title":"Wallets"},"best_tier":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Best Tier"},"top_label":{"type":"string","title":"Top Label"},"total_value":{"type":"number","title":"Total Value"},"transfers":{"type":"integer","title":"Transfers"},"chains":{"type":"string","title":"Chains"},"run_at":{"type":"string","title":"Run At"}},"type":"object","required":["symbol","wallets","top_label","total_value","transfers","chains","run_at"],"title":"OnchainConsensusRow"},"OverlayLeg":{"properties":{"ticker":{"type":"string","title":"Ticker"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"instrument_type":{"type":"string","title":"Instrument Type"},"instrument":{"$ref":"#/components/schemas/Contract","default":{}},"position_group":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Position Group"},"notional_weight_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Notional Weight Pct"},"premium_yield_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Premium Yield Pct"},"assignment_prob":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Assignment Prob"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"}},"type":"object","required":["ticker","instrument_type"],"title":"OverlayLeg","description":"One written CSP / covered-call leg currently open against the core.\n\nA leg carries the SAME ticker as the underlying it is written against and\nis sized by NOTIONAL, not book weight — the two must never be summed, which\nis why the read layer splits them out of ``holdings`` by ``instrument_type``.\n\n``premium_yield_pct`` and ``assignment_prob`` are 0-1 FRACTIONS, unlike\nevery other ``_pct`` field in this API (strategy/premium_overlay.py's\n``annual_yield`` / ``abs(delta)``) — clients must format them accordingly."},"PortfolioBook":{"properties":{"slug":{"type":"string","title":"Slug"},"delayed_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delayed To"},"book":{"$ref":"#/components/schemas/PortfolioRegistry"},"asof":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asof"},"holdings":{"items":{"$ref":"#/components/schemas/Holding"},"type":"array","title":"Holdings","default":[]},"overlay":{"items":{"$ref":"#/components/schemas/OverlayLeg"},"type":"array","title":"Overlay","default":[]},"events":{"items":{"$ref":"#/components/schemas/BookEvent"},"type":"array","title":"Events","default":[]},"nav":{"items":{"$ref":"#/components/schemas/NavPoint"},"type":"array","title":"Nav","default":[]},"windows":{"items":{"$ref":"#/components/schemas/NavWindow"},"type":"array","title":"Windows","default":[]},"metrics":{"$ref":"#/components/schemas/PortfolioMetrics","default":{"n_holdings":0,"n_overlay":0}}},"type":"object","required":["slug","book"],"title":"PortfolioBook"},"PortfolioMetrics":{"properties":{"n_holdings":{"type":"integer","title":"N Holdings","default":0},"n_overlay":{"type":"integer","title":"N Overlay","default":0},"sleeve_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sleeve State"},"total_weight_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Weight Pct"},"weighted_select_metric":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Weighted Select Metric"},"sel_metric_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sel Metric Kind"},"overlay_annual_yield":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Overlay Annual Yield"},"weighted_income_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Weighted Income Rate"},"weighted_sustainable_yield":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Weighted Sustainable Yield"},"weighted_reinvest_required":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Weighted Reinvest Required"},"income_coverage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Income Coverage"},"total_income_yield":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Income Yield"},"distribution":{"anyOf":[{"$ref":"#/components/schemas/DistributionSummary"},{"type":"null"}]}},"type":"object","title":"PortfolioMetrics","description":"Book-level aggregates over today's snapshot (data/reads.py's\n``_book_metrics``). The income figures are weight-weighted over the book's\nTOTAL weight, so an unmeasured name drags the average down rather than being\nassumed to yield like its peers."},"PortfolioRegistry":{"properties":{"slug":{"type":"string","title":"Slug"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"objective":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Objective"},"risk_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Risk Tier"},"mechanism_blurb":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mechanism Blurb"},"asset_class":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Class"},"benchmark":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Benchmark"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"inception_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inception Date"},"construction":{"$ref":"#/components/schemas/PublicConstruction","default":{}}},"type":"object","required":["slug"],"title":"PortfolioRegistry","description":"The book's registry row as its detail page sees it: the same\nmerchandising identity as ``ShelfCard``, plus the parsed construction and\nminus the per-caller flags (the detail endpoint's own gate already answered\nthose)."},"PortfolioShelf":{"properties":{"count":{"type":"integer","title":"Count"},"tier":{"type":"string","title":"Tier"},"portfolios":{"items":{"$ref":"#/components/schemas/ShelfCard"},"type":"array","title":"Portfolios"}},"type":"object","required":["count","tier","portfolios"],"title":"PortfolioShelf"},"PriceHistoryResponse":{"properties":{"ticker":{"type":"string","title":"Ticker"},"period":{"type":"string","title":"Period"},"points":{"items":{"$ref":"#/components/schemas/PricePoint"},"type":"array","title":"Points"},"last_close":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Last Close"},"change_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Change Pct"},"range_low":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Range Low"},"range_high":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Range High"}},"type":"object","required":["ticker","period","points"],"title":"PriceHistoryResponse"},"PricePoint":{"properties":{"date":{"type":"string","title":"Date"},"close":{"type":"number","title":"Close"}},"type":"object","required":["date","close"],"title":"PricePoint"},"PublicConstruction":{"properties":{"holdings_min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Holdings Min"},"holdings_max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Holdings Max"},"turnover_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Turnover Tier"},"exit_rule":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exit Rule"},"distribution_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Distribution Policy"}},"type":"object","title":"PublicConstruction","description":"The book's construction rules, trimmed to what is safe to publish — the\nsame set ``_PUBLIC_CONSTRUCTION_KEYS`` names in api/routers/portfolios.py,\nwhich stays the enforcing copy (it runs before this model is built)."},"RankedCandidate":{"properties":{"ticker":{"type":"string","title":"Ticker"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"sector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"signal_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Signal Count"},"sources":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sources"},"vscore":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vscore"},"vramp":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vramp"},"recorded_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recorded At"},"agg_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Agg Score"},"composite":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Composite"},"scorer_signal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scorer Signal"},"tech_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tech Score"},"fund_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fund Score"},"conviction":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Conviction"},"cycle_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cycle Score"},"cycle_zone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cycle Zone"},"alignment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alignment"},"readiness":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Readiness"},"readiness_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Readiness Label"},"exit_proximity":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Exit Proximity"},"assessment":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Assessment"},"signal_confirmed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Signal Confirmed"},"n":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"N"},"systems_triggered":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Systems Triggered"},"breakout_sys1":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Breakout Sys1"},"breakout_sys2":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Breakout Sys2"},"donchian_20h":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Donchian 20H"},"donchian_55h":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Donchian 55H"},"donchian_10l":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Donchian 10L"},"donchian_20l":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Donchian 20L"},"dist_to_breakout_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Dist To Breakout Pct"},"breakout_confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Breakout Confidence"},"hurst":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Hurst"},"efficiency_ratio":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Efficiency Ratio"},"bb_squeeze_pctile":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bb Squeeze Pctile"},"initial_stop":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Initial Stop"},"rsi2":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rsi2"},"adx":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Adx"},"atr":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Atr"},"sma200":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Sma200"},"sma5":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Sma5"},"trend_ok":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Trend Ok"},"regime_choppy":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Regime Choppy"},"catastrophe_stop":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Catastrophe Stop"},"exit_rsi_level":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Exit Rsi Level"},"exit_sma5":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Exit Sma5"},"time_stop_bars":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Time Stop Bars"}},"type":"object","required":["ticker"],"title":"RankedCandidate"},"RankingsResponse":{"properties":{"lane":{"type":"string","title":"Lane"},"asof_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asof Hint"},"truncated":{"type":"boolean","title":"Truncated","default":false},"count":{"type":"integer","title":"Count"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total"},"candidates":{"items":{"$ref":"#/components/schemas/RankedCandidate"},"type":"array","title":"Candidates"}},"type":"object","required":["lane","count","candidates"],"title":"RankingsResponse"},"RotationResponse":{"properties":{"latest":{"items":{"$ref":"#/components/schemas/ClusterMomentumRow"},"type":"array","title":"Latest"},"asof":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asof"},"prior_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prior Date"},"trajectory":{"items":{"$ref":"#/components/schemas/ClusterTrajectory"},"type":"array","title":"Trajectory"},"events":{"items":{"$ref":"#/components/schemas/ClusterRotationEvent"},"type":"array","title":"Events"},"snapshots":{"items":{"type":"string"},"type":"array","title":"Snapshots"}},"type":"object","required":["latest","trajectory","events","snapshots"],"title":"RotationResponse"},"SearchMatch":{"properties":{"ticker":{"type":"string","title":"Ticker"},"name":{"type":"string","title":"Name","default":""}},"type":"object","required":["ticker"],"title":"SearchMatch"},"SearchTrendRow":{"properties":{"query":{"type":"string","title":"Query"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value"},"section":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Section"},"day":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Day"}},"type":"object","required":["query"],"title":"SearchTrendRow"},"ShelfCard":{"properties":{"slug":{"type":"string","title":"Slug"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"objective":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Objective"},"risk_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Risk Tier"},"mechanism_blurb":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mechanism Blurb"},"asset_class":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Class"},"benchmark":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Benchmark"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"inception_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inception Date"},"last_update":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Update"},"n_holdings":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"N Holdings"},"nav":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Nav"},"cum_return_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cum Return Pct"},"cagr_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cagr Pct"},"drawdown_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Drawdown Pct"},"openable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Openable"},"delayed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Delayed"}},"type":"object","required":["slug"],"title":"ShelfCard","description":"One merchandising card on the shelf.\n\n``openable``/``delayed`` are computed per caller by the router, not stored.\n``last_update``/``n_holdings`` arrive already collapsed to the pair this\ncaller's access level entitles them to (``_public_card``) — the internal\n``last_published_update``/``n_published_holdings`` pair is undeclared here\nand so cannot ship even if that collapse were ever skipped.\n\nDeliberately absent: ``source_lane`` and ``scoring_mode`` (internal lane\nprovenance — they name the engine that picks the book), the numeric ``id``,\nand the gate configuration (``publish_delay_min``, ``draft_gate_enabled``,\n``consumer_delay_min``), which is policy input rather than reader-facing\ncontent — a reader sees its *effect*, as ``delayed``."},"SignalRow":{"properties":{"ticker":{"type":"string","title":"Ticker"},"agg_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Agg Score"},"signal_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Signal Count"},"sources":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sources"}},"type":"object","required":["ticker"],"title":"SignalRow"},"SignalsResponse":{"properties":{"lane":{"type":"string","title":"Lane"},"truncated":{"type":"boolean","title":"Truncated","default":false},"count":{"type":"integer","title":"Count"},"signals":{"items":{"$ref":"#/components/schemas/SignalRow"},"type":"array","title":"Signals"}},"type":"object","required":["lane","count","signals"],"title":"SignalsResponse"},"SourceBreadthRow":{"properties":{"source":{"type":"string","title":"Source"},"tickers":{"type":"integer","title":"Tickers"},"avg_intensity":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Intensity"},"max_intensity":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Intensity"}},"type":"object","required":["source","tickers"],"title":"SourceBreadthRow"},"SourceHeatRow":{"properties":{"ticker":{"type":"string","title":"Ticker"},"source":{"type":"string","title":"Source"},"intensity":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Intensity"},"days_active":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Days Active"},"recent_age":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Recent Age"},"last_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Last Score"}},"type":"object","required":["ticker","source"],"title":"SourceHeatRow"},"TickerAnalystBrief":{"properties":{"ticker":{"type":"string","title":"Ticker"},"analysis_date":{"type":"string","title":"Analysis Date"},"lean":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lean"},"conviction":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Conviction"},"thesis":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thesis"},"evidence_for":{"items":{"type":"string"},"type":"array","title":"Evidence For","default":[]},"evidence_against":{"items":{"type":"string"},"type":"array","title":"Evidence Against","default":[]},"invalidation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invalidation"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"cost_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cost Usd"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"cached":{"type":"boolean","title":"Cached","default":true}},"type":"object","required":["ticker","analysis_date"],"title":"TickerAnalystBrief"},"TickerListResponse":{"properties":{"count":{"type":"integer","title":"Count"},"tickers":{"items":{"$ref":"#/components/schemas/TickerListRow"},"type":"array","title":"Tickers"}},"type":"object","required":["count","tickers"],"title":"TickerListResponse"},"TickerListRow":{"properties":{"ticker":{"type":"string","title":"Ticker"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["ticker"],"title":"TickerListRow"},"TickerOverview":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"sector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"wikidata_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wikidata Id"},"wikipedia_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wikipedia Url"},"market_cap":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Market Cap"},"trailing_pe":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Trailing Pe"},"forward_pe":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Forward Pe"},"peg_ratio":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Peg Ratio"},"dividend_yield":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Dividend Yield"},"beta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Beta"},"fifty_two_week_high":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fifty Two Week High"},"fifty_two_week_low":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fifty Two Week Low"},"return_on_equity":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Return On Equity"},"profit_margins":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Profit Margins"},"revenue_growth":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Revenue Growth"},"earnings_growth":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Earnings Growth"}},"type":"object","title":"TickerOverview"},"TickerResponse":{"properties":{"ticker":{"type":"string","title":"Ticker"},"score":{"anyOf":[{"$ref":"#/components/schemas/TickerScoreRow"},{"type":"null"}]},"detail":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Detail"},"truncated":{"type":"boolean","title":"Truncated"}},"type":"object","required":["ticker","truncated"],"title":"TickerResponse"},"TickerScoreRow":{"properties":{"composite":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Composite"},"signal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal"},"tech_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tech Score"},"fund_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fund Score"},"hurst":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Hurst"},"regime":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Regime"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"run_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Run At"},"script":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Script"}},"type":"object","title":"TickerScoreRow"},"TrendRow":{"properties":{"ticker":{"type":"string","title":"Ticker"},"viral_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Viral Score"},"intensity":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Intensity"},"breadth":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Breadth"},"slope":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Slope"},"vramp":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vramp"},"distinct_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Distinct Days"},"distinct_sources":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Distinct Sources"},"source_list":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source List"}},"type":"object","required":["ticker"],"title":"TrendRow"},"TrendsResponse":{"properties":{"asof":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asof"},"truncated":{"type":"boolean","title":"Truncated","default":false},"count":{"type":"integer","title":"Count"},"leaders":{"items":{"$ref":"#/components/schemas/TrendRow"},"type":"array","title":"Leaders"}},"type":"object","required":["count","leaders"],"title":"TrendsResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VideoTrendRow":{"properties":{"title":{"type":"string","title":"Title"},"channel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"views":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Views"},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published Date"},"age_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Age Hours"},"velocity_vph":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Velocity Vph"},"velocity_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Velocity Score"},"ticker":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ticker"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"}},"type":"object","required":["title"],"title":"VideoTrendRow"}}}}