---
title: "Identifier-driven fan-out search across every collection indexed by ticker, bioguide_id, CIK, UEI, company name or CUSIP. Congressional-trade and annual financial disclosure results come from STOCK Act and Form 278 filings. The same filings are published free as news at https://keyvex.com/disclosures under 5 U.S.C. § 13107(c)."
method: GET
path: "/v1/unified-search"
---

# Identifier-driven fan-out search across every collection indexed by ticker, bioguide_id, CIK, UEI, company name or CUSIP. Congressional-trade and annual financial disclosure results come from STOCK Act and Form 278 filings. The same filings are published free as news at https://keyvex.com/disclosures under 5 U.S.C. § 13107(c).

`GET /v1/unified-search`

## Request

- Base URL: `https://api.keyvex.com`
- URL: `https://api.keyvex.com/v1/unified-search`
- Auth: API key in header `x-api-key`

Identifier-driven cross-collection fan-out search. Pass one or more entity identifiers — ticker, bioguide_id, company_cik, recipient_uei, company_name, or cusip — and this tool queries every collection where that field is indexed, returning results grouped by source in one envelope.  Congressional-trade and annual financial disclosure results come from STOCK Act and Form 278 filings. The same filings are published free as news at https://keyvex.com/disclosures under 5 U.S.C. § 13107(c).  Use this for high-level 'tell me everything about X' questions before drilling into specific source tools. Replaces 6-10 sequential tool calls with a single fan-out.  Identifier coverage:   - ticker → 13 collections (company_profile, insider_trades,     institutional_holdings, congressional_trades, planned_insider_sales,     initial_ownership_baselines, activist_ownership, material_events,     proxy_filings, xbrl_fundamentals, tender_offers, registration_statements,     nport_holdings)   - bioguide_id → 2 collections (congressional_trades, annual_financial_disclosures).     In both, a record's party is the party the member held on the date of the record (a trade's transaction date, a disclosure's filing date); for a date outside the member's terms in office, the party of their nearest term (the last one before that date, or the first one after it).   - company_cik → 11 collections (company_profile, insider_trades,     planned_insider_sales, initial_ownership_baselines, activist_ownership,     material_events, proxy_filings, xbrl_fundamentals, private_placements,     registration_statements, nport_filings)   - recipient_uei → 1 collection (federal_contracts)   - company_name → 5 name-keyed collections (federal_contracts,     enforcement_actions, consumer_complaints, product_recalls,     fda_approvals) AND auto-     resolves to ticker + company_cik via EDGAR's catalog, cascading into     every ticker/CIK adapter above. The unlock for 'tell me everything about     Wells Fargo' hitting up to 20 collections in one call. (lobbying_filings is     excluded from the fan-out — its 51K-record substring scan is too slow     for parallel federation; call get_lobbying_filings directly instead.)     enforcement_actions here returns ENFORCEMENT only, as get_enforcement_actions does by default; call     get_enforcement_actions with category="all" for the agencies' general news too. When a regulator's     site refuses KeyVex (CFTC since 2026-10-07), the freshness block says which records are missing.   - cusip → 4 collections (institutional_holdings, activist_ownership,     nport_holdings, treasury_auctions)  Multiple identifiers can be combined to narrow each source's query (e.g., ticker + bioguide_id will filter congressional_trades by both).  Name resolution: when only company_name is supplied, the resolved ticker and CIK come from EDGAR's company_tickers_exchange.json (US-listed names only). Foreign-only or private companies won't resolve to a ticker, but name-keyed collections (CFPB, lobbying, etc.) still receive the substring filter directly.  Performance note: company_name fan-out includes substring-filtered collections (lobbying_filings 51K+, federal_contracts) which scan a 5K- record window per source. The full cascade can take 10-40s depending on Firestore region. When latency matters more than coverage, pass `sources` to whitelist only the ticker/CIK-keyed adapters (typically <1s total).  Per-source result count is capped via per_source_limit (default 5, max 50). One slow or failing source returns an error block instead of blocking the rest — check sources_queried vs sources_with_results to see what landed.  When you need full result counts and richer filters on one specific collection, call that collection's dedicated tool directly afterward.

## Query parameters

- `ticker` string
- `bioguide_id` string
- `company_cik` string
- `recipient_uei` string
- `company_name` string
- `cusip` string
- `since` string
- `until` string
- `per_source_limit` integer
- `limit` integer
- `sources` string

## Response `200`

JSON envelope: { results: [...], count, has_more }.

## Other responses

- `400`: Invalid parameter.
- `401`: Missing or invalid API key.
- `402`: This tool requires a higher plan (upgrade_required). Retrying will not help.
- `429`: Tier rate/quota limit reached (rate_limited). Retry-After points at the reset.

---

[API](https://skmtc.dev/keyvex/apis/keyvex-api.md) · [All operations](https://skmtc.dev/keyvex/apis/keyvex-api/llms.txt) · [OpenAPI document](https://skmtc.dev/keyvex/apis/keyvex-api/revisions/01c0210c19cd?raw)
