# Ticker Research — Finradar API > Version: 3.61.0 | Generated: 2026-06-20 | Content Hash: dab7c657 > Fetch this file at: https://uat.finradarapi.com/llms/ticker-research.txt ## Authentication All endpoints require an API key. Pass it via query parameter `?apiKey=YOUR_KEY` or header `X-API-Key: YOUR_KEY`. WebSocket endpoints accept the key in the `token` auth payload or query parameter. --- ## Ticker Research Per-ticker endpoints for company overview, institutional ownership, and historical fund trends. ### GET /api/v1/tickers/{ticker}/overview Company overview and financial data for a ticker. Includes sector, industry, market cap, income statement (TTM), balance sheet, cash flow, margins, and per-share data. Data sourced from Yahoo Finance via yahooquery and cached 24h. **Token cost:** 5 tokens per call **Response fields:** - `data.ticker` (string): Issuer ticker (canonical hyphen form, echoed back). - `data.name` (string): Company name from Yahoo Finance (typically Title Case — `Apple Inc.`). - `data.sector` (string (nullable)): Yahoo Finance sector classification (e.g. `Technology`, `Healthcare`, `Financial Services`). Null for unmapped tickers (recent IPOs, foreign issuers). - `data.industry` (string (nullable)): Yahoo Finance industry classification (more specific than sector). Null for unmapped tickers. - `data.market_cap` (number (nullable)): Market capitalization (USD). Computed as `last_close × shares_outstanding`. Use for size-based universe filters. Updates daily via Yahoo Finance refresh + 24h cache. - `data.enterprise_value` (number (nullable)): Enterprise value (USD). `market_cap + total_debt - total_cash`. Combine with EBITDA from this surface for EV/EBITDA multiple. - `data.float_shares` (number (nullable)): Public float (shares freely tradable). Useful for liquidity-aware position sizing — small-caps with float < 50M shares typically have wide bid-ask spreads. - `data.shares_outstanding` (number (nullable)): Total shares outstanding (point-in-time). Differs from `/financials/metrics` weighted-average value when issuer is actively buying back / issuing. - `data.first_trade_date` (string (nullable)): Human-readable first-trade date (e.g. `Dec 12, 1980`). Useful for filtering recent IPOs (within last 1 year). Null for very old tickers without recorded IPO date. - `data.short_pct_float` (number (nullable)): Short interest as fraction of float (decimal — `0.0072` = 0.72%). Updated bi-monthly per NYSE/NASDAQ publication cadence; may lag 2-3 weeks. Above 0.20 flags potential-squeeze names. - `data.short_ratio` (number (nullable)): Days-to-cover ratio: `short_interest / avg_daily_volume`. Above 5 days flags squeeze risk. - `data.revenue` (number (nullable)): TTM revenue (USD). Sourced from Yahoo Finance — typically agrees with [/financials/metrics](/docs/company-data/company-financials-xbrl/get-financials-metrics) TTM revenue within ±2% (Yahoo derives from same SEC XBRL filings + applies its own normalization). For audit-grade XBRL-direct numbers prefer `/financials/snapshot`. - `data.gross_profit` (number (nullable)): TTM gross profit (USD). Null for non-COGS business models (banks, insurers — interpret as 'not applicable to issuer's structure'). - `data.operating_income` (number (nullable)): TTM operating income / EBIT (USD). Negative for operating-loss companies. - `data.net_income` (number (nullable)): TTM net income attributable to common stockholders (USD). Negative for loss-makers. - `data.total_cash` (number (nullable)): Cash and short-term investments (USD). Point-in-time at most-recent fiscal-period end. - `data.total_debt` (number (nullable)): Total debt (short + long term) (USD). Combine with `total_cash` for net-debt computation. - `data.profit_margin` (number (nullable)): TTM net margin (decimal — `0.270` = 27.0%). `net_income / revenue`. Negative for loss-makers. - `data.gross_margin` (number (nullable)): TTM gross margin (decimal). `gross_profit / revenue`. - `data.operating_margin` (number (nullable)): TTM operating margin (decimal). `operating_income / revenue`. - `data.ebitda_margin` (number (nullable)): TTM EBITDA margin (decimal). `ebitda / revenue`. Useful for capital-intensity / scale-quality screens. - `data.eps_diluted_ttm` (number (nullable)): TTM diluted EPS (USD per share). NOT split-adjusted server-side — reflects as-filed EPS for the trailing 4 quarters; for split-adjusted historical view use external market-data sources. - `data.book_value_per_share` (number (nullable)): Book value per share (USD). `total_equity / shares_outstanding`. Negative for issuers with negative book equity (MMM, MCD, SBUX, etc. with aggressive buybacks). - `data.free_cash_flow_per_share` (number (nullable)): TTM Free Cash Flow per share (USD). `(operating_cash_flow + capex) / shares_outstanding`. Negative for FCF-burning companies. - `data.dividend_yield` (number (nullable)): Forward dividend yield (decimal — `0.0038` = 0.38%). Computed as `last_4q_dividends_per_share / last_close`. Null for non-dividend-paying issuers (most growth tech, biotech, recent IPOs). **Since:** v1.0.0 **Parameters:** - `ticker` (path, required): Ticker symbol (canonical hyphen form). Server normalizes `BRK.A`/`BRK/A`/`BRKA` → `BRK-A`. Multi-class issuers (GOOGL vs GOOG) preserve the requested class. Returns 404 on tickers with no Yahoo Finance coverage; cached 24h server-side. **Sample response:** ```json { "data": { "ticker": "AAPL", "name": "Apple Inc.", "sector": "Technology", "industry": "Consumer Electronics", "market_cap": 3984500000000, "enterprise_value": 4058044000000, "float_shares": 14820000000, "shares_outstanding": 14840000000, "first_trade_date": "Dec 12, 1980", "short_pct_float": 0.0072, "short_ratio": 1.38, "revenue": 401450000000, "gross_profit": 189890000000, "operating_income": 128190000000, "net_income": 105320000000, "total_cash": 28160000000, "total_debt": 101700000000, "profit_margin": 0.27, "gross_margin": 0.473, "operating_margin": 0.319, "ebitda_margin": 0.345, "eps_diluted_ttm": 7.1, "book_value_per_share": 3.84, "free_cash_flow_per_share": 7.13, "dividend_yield": 0.0038 } } ``` ### GET /api/v1/tickers/{ticker}/holders Top institutional holders across ALL 9,600+ 13F filers with quarter-over-quarter change. Queries form_13f_holdings directly (not just tracked funds). CUSIP successor chain expansion and amendment deduplication included. Returns status (New/Increased/Decreased/Unchanged/Closed) and change % vs previous quarter. **Token cost:** 5 tokens per call **Response fields:** - `data.ticker` (string): Ticker echoed back in canonical hyphen form. - `data.period` (string): ISO `YYYY-MM-DD` quarter-end date for the snapshot. Always 03-31 / 06-30 / 09-30 / 12-31. The 13F filing for this period was due 45 days later. Most-recent quarter may be partially populated during the 45-day filing window — see `/form-13f/filing-progress` for completeness gauge. - `data.prev_period` (string (nullable)): ISO `YYYY-MM-DD` quarter-end of the prior quarter (used as the baseline for QoQ `chg_*` and `status` fields). Null when `period` is the earliest covered quarter. - `data.holders[]` (array): Array of holder rows, sorted by `value DESC` (largest position first). Up to `limit` rows; total set has `total_count` rows. Empty array for tickers no fund has ever held (most pre-IPO and very-thinly-held names). - `data.holders[].cik` (string): Filer CIK in 10-char zero-padded form (e.g. `0001067983` for Berkshire Hathaway, `0001364742` for BlackRock, `0000884144` for Vanguard, `0001037389` for Renaissance Technologies). Use as join key against `/api/v1/form-13f/fund/{cik}` for the per-fund detail view. - `data.holders[].name` (string): Filer name as registered with SEC EDGAR (typically all-caps EDGAR convention). Use for human-readable holder labels. - `data.holders[].shares` (number): Share count for the position as of `period`. NOT split-adjusted server-side (preserves the as-filed view) — for split-adjusted historical aggregations use [GET /api/v1/tickers/{ticker}/fund-trends](/docs/company-data/ticker-research/get-tickers-ticker-fund-trends). - `data.holders[].value` (number): Position value (USD) at the period-end mark-to-market price. Post-Plan-51 holdings-quality value normalization (handles the pre-Q3-2022 thousands-vs-actual-dollars SEC reporting issue) — for historical filings the parser auto-detected and corrected the unit on a per-filing basis. Always presented in actual USD here. - `data.holders[].pct_of_portfolio` (number (nullable)): Position weight in the holder's total portfolio (decimal — `0.255` = 25.5%). Useful for ranking holders by conviction (a fund with 25% portfolio weight has higher relative conviction than one with 0.5%). Null for filers without a complete portfolio for the quarter (rare). - `data.holders[].chg_shares` (number (nullable)): QoQ share-count change vs `prev_period` (signed integer). Positive = added; negative = trimmed. Null when prior-quarter baseline is missing (new positions show null, not zero — disambiguates 'new buy' from 'held flat at zero'). - `data.holders[].chg_pct` (number (nullable)): QoQ percent change in shares (decimal — `-0.250` = -25%). Null for new positions (no prior baseline to divide by). For mass-comparison use `status` instead — handles the null-case cleanly. - `data.holders[].status` (string): QoQ status classification: `New` (no position in `prev_period`), `Increased` (added shares), `Decreased` (trimmed shares), `Unchanged` (held flat), `Closed` (had position in `prev_period`, zero in `period`). Use for status-filtered holder tables and smart-money-momentum dashboards. - `data.holders[].accession_number` (string (nullable)): SEC accession number for the 13F filing this row was extracted from (18-char dashed format like `0000950123-25-009876`). Useful for audit-trail UIs and EDGAR-link generation. Null for amendment-superseded rows where only the amendment's accession is preserved. - `data.holders[].filed_at` (string): ISO `YYYY-MM-DD` date the 13F was filed with SEC EDGAR. Always within 45 days of `period`. - `data.total_shares` (number): Aggregate institutional share count across ALL holders (not just the paginated subset). NOT split-adjusted — for split-adjusted historical totals use `/tickers/{ticker}/fund-trends`. - `data.total_value` (number): Aggregate institutional position USD value across all holders. Post-Plan-51 normalized. - `data.total_holders` (integer): Distinct holder CIK count for the ticker in `period`. Mega-caps (AAPL, MSFT) typically 4000-5000; small-caps 50-300; micro-caps 1-30. - `data.total_count` (integer): Total holder rows matching the `status` filter (= `total_holders` when `status=all`). Use for pagination math. - `data.offset` (integer): Echoed-back pagination offset. - `data.limit` (integer): Echoed-back page-size limit. **Since:** v1.0.0 **Parameters:** - `ticker` (path, required): Ticker symbol (canonical hyphen form). Server normalizes case + dot/slash variants. Multi-class issuers preserve the requested class. CUSIP successor chain is automatically expanded — for Alphabet (`GOOGL` / `GOOG`) returns positions across pre/post-2014-share-class-restructuring CUSIPs. - `limit` (query, optional, default: 100): Max funds per page (default 100, max 500). For typical UI tables 20-50; for full-list export 500 + paginated walks. - `offset` (query, optional, default: 0): Skip first N results for pagination (default 0). Use with `limit` to page through all holders. For tickers with 4000+ holders (mega-caps), 80+ paginated calls would be needed for full enumeration; use `POST /api/v1/form-13f/holdings` for bulk-export workflows. - `status` (query, optional, default: all): Filter by QoQ status: `all` (default), `new` (just-opened positions), `increased` (added shares), `decreased` (trimmed shares), `unchanged` (held flat), `closed` (just-exited positions). For smart-money-momentum dashboards use `new` + `increased`; for distribution dashboards use `decreased` + `closed`. - `period` (query, optional): Specific report period (ISO `YYYY-MM-DD` quarter-end format like `2025-09-30`). Defaults to latest available period (typically the quarter ending 45-90 days ago given the SEC 45-day filing deadline + ETL lag). - `quarters` (query, optional, default: 1): Number of quarters to return (default 1, max 20). When `>1`, response includes a `quarters[]` array with per-quarter holders and QoQ changes — useful for trend charts. When `1`, response is the flat single-period view shown in the sample. **Sample response:** ```json { "data": { "ticker": "AAPL", "period": "2025-09-30", "prev_period": "2025-06-30", "holders": [ { "cik": "0001067983", "name": "BERKSHIRE HATHAWAY INC", "shares": 300000000, "value": 78240000000, "pct_of_portfolio": 0.255, "chg_shares": -100000000, "chg_pct": -0.25, "status": "Decreased", "accession_number": "0000950123-25-009876", "filed_at": "2025-11-13" }, { "cik": "0001364742", "name": "BLACKROCK INC", "shares": 1100000000, "value": 286900000000, "pct_of_portfolio": 0.061, "chg_shares": 12000000, "chg_pct": 0.011, "status": "Increased", "accession_number": "0001086364-25-014321", "filed_at": "2025-11-12" }, { "cik": "0000884144", "name": "VANGUARD GROUP INC", "shares": 1380000000, "value": 359980000000, "pct_of_portfolio": 0.058, "chg_shares": 8500000, "chg_pct": 0.006, "status": "Increased", "accession_number": "0000884144-25-006543", "filed_at": "2025-11-14" } ], "total_shares": 8920000000, "total_value": 2326200000000, "total_holders": 4775, "total_count": 4775, "offset": 0, "limit": 100 } } ``` ### GET /api/v1/tickers/{ticker}/fund-trends Historical quarterly fund ownership trends aggregated from ALL 9,600+ 13F filers (form_13f_holdings). CUSIP successor chain expansion and amendment deduplication included. Split-adjusted share counts. Returns per-quarter totals for shares, value, fund count, and computed deltas (fund flow, share change %). **Token cost:** 10 tokens per call **Response fields:** - `ticker` (string): Ticker echoed back in canonical hyphen form (e.g. `BRK-A`). Useful for asserting your client passed the ticker you intended after server-side normalization. - `trends` (array): Array of quarterly aggregate rows, sorted by `period ASC` (oldest first — chart-friendly ordering). One row per quarter where ANY 13F filer held the ticker. Empty array for tickers no fund has ever held (most pre-IPO and very-thinly-held names). - `trends[].period` (string): ISO `YYYY-MM-DD` quarter-end date (always 03-31 / 06-30 / 09-30 / 12-31). The 13F filing for this period was due 45 days later. Most-recent quarter may be partially populated during the 45-day filing window — see `/form-13f/filing-progress` for completeness gauge. - `trends[].fund_count` (integer): Number of distinct 13F filers holding the ticker as of `period`. Counts unique CIKs (one per fund family) — Fidelity, Vanguard, BlackRock are 1 each despite running thousands of underlying funds. Mega-cap names typically have 3000-5000 filers; small-caps 50-300; micro-caps 1-30. - `trends[].total_shares` (number): Aggregate share count across all funds holding the ticker, SPLIT-ADJUSTED to most recent split via Sharadar's split-adjustment factor. So a pre-2020 4-for-1 AAPL split is normalized to current-shares basis, making cross-quarter trends visually clean. For as-filed (un-adjusted) shares use `POST /api/v1/form-13f/holdings`. - `trends[].total_value_usd` (number): Aggregate position USD value across all funds, post-Plan 51 holdings-quality correction (handles the thousands-vs-actual-dollars reporting issue). NOT mark-to-most-recent-price — uses the value as filed for that quarter (which is mark-to-quarter-end-price). For the price-adjusted view across quarters, multiply `total_shares` by your reference price. - `trends[].fund_change_pct` (number (nullable)): Quarter-over-quarter percent change in `fund_count`, using FAIR-COMPARISON logic (post-v3.9.0 fix): `fund_count_prev` only counts funds that filed in BOTH quarters, so the metric correctly captures incremental adoption rather than being polluted by funds that simply skipped a quarterly filing. Null on the first row (no prior baseline). - `trends[].shares_change_pct` (number (nullable)): Quarter-over-quarter percent change in `total_shares`, computed on split-adjusted shares so corporate actions don't manufacture artificial spikes. Positive = aggregate fund flow IN; negative = aggregate fund flow OUT. Null on the first row (no prior baseline). **Since:** v1.3.3 **Utility:** Quarterly time-series of institutional fund ownership for a ticker — drives the 'Fund Ownership' chart on every company-overview page. Aggregates ALL 9,600+ 13F filers (post-v3.3.0 rewrite — the legacy implementation was limited to 668 tracked funds). Includes CUSIP successor-chain expansion so M&A continuity is preserved across corporate actions (e.g. PFE/Wyeth merger, T/Time Warner spinoff, GOOGL share-class restructuring). Split-adjusted share counts so cross-quarter trends remain visually clean across 2-for-1 / 4-for-1 splits. The canonical answer to 'are funds buying or selling this name?' — pair with `/tickers/{ticker}/holders` for the current-quarter holder list at the same completeness level. Post-v3.7.1 fix uses fair-comparison QoQ (`fund_count_prev` only counts funds that filed in BOTH quarters), so AAPL Q4 2025 fund_change_pct now shows +11% instead of the misleading -98% the old logic produced. **Parameters:** - `ticker` (path, required): Stock ticker (case-insensitive). Server normalizes to canonical hyphen form (`BRK.A`/`BRK/A`/`BRKA` → `BRK-A`). Multi-class issuers preserve the requested class — `GOOGL` and `GOOG` return distinct trends. Returns 404 if the ticker has been delisted with no successor in our chain table; for canonical resolution see `/api/v1/cusip-successors`. - `limit` (query, optional, default: 20): Maximum quarters to return (oldest-first ordering; FinRadar coverage starts 2013-Q1). Defaults to 20 (~5 years of history). Capped at 40 (~10 years). For full history beyond 10 years use `POST /api/v1/form-13f/holdings` with date-range chunking. **Sample response:** ```json { "data": { "ticker": "AAPL", "security_name": "APPLE INC", "quarters": [ { "date": "2024-09-30", "total_shares": 1150000000, "total_value": 220000000000, "fund_count": 4400, "share_change": -20000000, "share_change_pct": -1.7, "fund_flow": -5000000000, "fund_count_change": -15 } ] } } ``` ### GET /api/v1/tickers/autocomplete Full ticker list for client-side typeahead search. Returns all tickers with company names, ordered alphabetically. Designed for preloading into client-side autocomplete widgets. **Token cost:** 1 token per call **Response fields:** - `tickers[]` (array): Array of matching ticker rows, sorted by `score DESC` (highest-conviction match first) when `q` is provided, alphabetically when `q` is empty. Empty array on no match. - `tickers[].symbol` (string): Canonical ticker (hyphen form for multi-class — `BRK-A` not `BRK.A`/`BRK/A`/`BRKA`). Multi-class issuers preserve their share-class suffix. Foreign-listing variants carry exchange suffixes (`.MX`, `.TO`, `.L`, etc.). - `tickers[].name` (string): Company name (Title Case). For multi-class issuers, parenthetical suffix disambiguates (`Berkshire Hathaway Inc. (Class A)` vs `Berkshire Hathaway Inc. (Class B)`). For foreign listings, the exchange is noted parenthetically. - `tickers[].exchange` (string (nullable)): Primary listing exchange code: `NYSE`, `NASDAQ`, `AMEX`, `OTC`, `BMV` (Mexico), `TSX` (Toronto), `LSE` (London), etc. Null for issuers without a clean primary-exchange mapping (rare; mostly OTC pink-sheet names). - `tickers[].score` (number): FinRadar ticker-scoring signal (range `[0, 100]`). Higher = more-prominent listing (high-volume primary, well-known issuer name, frequent news coverage). For multi-class issuers, the more-traded class scores higher (BRK-B > BRK-A on volume; AAPL primary > AAPL.MX foreign listing). Use for ranking ties in autocomplete dropdowns. Phase 47-era ticker_scoring service — re-computed nightly from volume + market_cap + cross-section signal density. - `tickers[].rank` (integer): 1-indexed rank within the response set. `rank=1` is the top match. Useful for UI rendering (showing 'Top match' badge on rank=1). - `meta.total` (integer): Total tickers returned in this response. May equal full-corpus match count if smaller than `limit`; otherwise capped at `limit`. - `meta.query` (string (nullable)): Echoed-back `q` parameter (or null when empty). **Since:** v1.0.0 **Utility:** Preload all tickers for instant client-side search. **Use case:** Building a ticker search bar that provides instant autocomplete without server round-trips on each keystroke. **Parameters:** - `q` (query, optional): Optional query prefix for server-side filtering. When provided, returns up to 50 tickers ranked by FinRadar's ticker-scoring signal (Phase 47-related — high-volume primary listings rank ahead of low-volume secondary listings; multi-class issuers like BRK-A vs BRK-B disambiguated by liquidity score). When omitted, returns the full enumeration for client-side preload. - `limit` (query, optional, default: 50): Max tickers returned when `q` is provided (capped at 50 server-side). Ignored when `q` is empty (full preload mode). **Sample response:** ```json { "tickers": [ { "symbol": "AAPL", "name": "Apple Inc.", "exchange": "NASDAQ", "score": 100, "rank": 1 }, { "symbol": "AAPL.MX", "name": "Apple Inc. (Mexico Listing)", "exchange": "BMV", "score": 12, "rank": 2 }, { "symbol": "APLE", "name": "Apple Hospitality REIT, Inc.", "exchange": "NYSE", "score": 38, "rank": 3 } ], "meta": { "total": 3, "query": "appl" } } ``` ### GET /api/v1/tickers/logos/domain/{symbol} Get the website domain for a stock ticker. Returns a Google S2 favicon URL (128px) derived from the company website. Useful for displaying company logos without maintaining a logo database. **Token cost:** 1 token per call **Response fields:** - `symbol` (string): Ticker echoed back in canonical hyphen form. - `domain` (string (nullable)): Company website domain (e.g. `apple.com`, `microsoft.com`, `nvidia.com`). Sourced from FinRadar's curated ticker→domain mapping (~7,500 entries) — primary mapping is hand-curated for the top-3000 tickers; fallback uses Yahoo Finance company-website field. Null for issuers without a discoverable corporate website (rare; mostly small-cap shell companies or pre-IPO ADRs). - `logo` (string (nullable)): Google S2 favicon URL at 128×128 resolution (`https://www.google.com/s2/favicons?domain={domain}&sz=128`). Free unauthenticated CDN; no rate limits for client-side `` rendering. Null when `domain` is null. For higher-resolution / brand-asset logos use external services (Clearbit, etc.) — Google S2 caps at 128px. - `cached` (boolean): Boolean: `true` when the response came from FinRadar's 24h server-side cache (most calls), `false` on the rare cache-miss path (refresh ~5-10ms slower). **Since:** v1.0.0 **Utility:** Get company logo/favicon by ticker symbol. **Use case:** Displaying company logos next to ticker symbols in a portfolio view or search results. **Parameters:** - `symbol` (path, required): Stock ticker (canonical hyphen form). Server normalizes case + dot/slash variants. Multi-class issuers preserve their share-class suffix (`BRK-A` and `BRK-B` both map to `berkshirehathaway.com`). Returns 404 for unknown symbols. **Sample response:** ```json { "symbol": "AAPL", "domain": "apple.com", "logo": "https://www.google.com/s2/favicons?domain=apple.com&sz=128", "cached": true } ``` ### GET /api/v1/tickers/logos/domains Batch lookup of website domains and logo URLs for multiple tickers. Returns a map of symbol → {domain, logo} for all found tickers. **Token cost:** 5 tokens per call **Response fields:** - `domains` (object): Map of `symbol` → `{ symbol, domain, logo }`. Empty object when no requested tickers are found. Order of keys matches the input `symbols` parameter (preserved server-side via ordered iteration). Missing tickers are NOT included in this map — see `meta.missing` for the explicit unfound list. - `domains.{symbol}` (object): Per-ticker logo entry. Always 3 sub-fields: `symbol` (canonical hyphen form), `domain` (company website e.g. `apple.com`), `logo` (Google S2 favicon URL at 128×128). For multi-class issuers, both BRK-A and BRK-B map to the same `berkshirehathaway.com` domain. - `domains.{symbol}.symbol` (string): Ticker in canonical hyphen form (echoed back per-row). - `domains.{symbol}.domain` (string (nullable)): Company website domain. May be a sibling domain (`abc.xyz` for GOOGL/Alphabet) when the parent corporate site differs from the consumer-facing brand. Null only for issuers in the curated map without a discoverable domain (rare). - `domains.{symbol}.logo` (string (nullable)): Google S2 favicon URL at 128×128 resolution. Null when `domain` is null. - `meta` (object): Response metadata: `{ requested: integer, found: integer, missing: array }`. Useful for batch-completeness gauges and client-side fallback rendering for unmapped tickers. - `meta.requested` (integer): Count of tickers in the input `symbols` parameter (after server-side normalization + dedup). - `meta.found` (integer): Count of tickers that returned a domain. `found ≤ requested`; the difference is in `missing[]`. - `meta.missing` (array): Array of canonical-form tickers that had no domain mapping (unknown tickers OR known tickers without curated domain). Use for client-side fallback rendering (e.g. show generic placeholder icon). **Since:** v1.0.0 **Utility:** Batch company logo lookup for portfolio or list views. **Use case:** Loading logos for all tickers in a watchlist or portfolio table in a single request instead of N individual calls. **Parameters:** - `symbols` (query, required): Comma-separated ticker symbols (canonical hyphen form). Server normalizes each. Max 200 per call. For larger universes (full-watchlist >200) chunk client-side. Unknown tickers are silently dropped from the response (NOT 404'd) so a single bad ticker doesn't fail the batch. **Sample response:** ```json { "domains": { "AAPL": { "symbol": "AAPL", "domain": "apple.com", "logo": "https://www.google.com/s2/favicons?domain=apple.com&sz=128" }, "MSFT": { "symbol": "MSFT", "domain": "microsoft.com", "logo": "https://www.google.com/s2/favicons?domain=microsoft.com&sz=128" }, "NVDA": { "symbol": "NVDA", "domain": "nvidia.com", "logo": "https://www.google.com/s2/favicons?domain=nvidia.com&sz=128" }, "GOOGL": { "symbol": "GOOGL", "domain": "abc.xyz", "logo": "https://www.google.com/s2/favicons?domain=abc.xyz&sz=128" } }, "meta": { "requested": 4, "found": 4, "missing": [] } } ```