All pages

Search companies and letters

GET /v1/search

Find companies by ticker or name, and the investor letters that match the same query. Use it when you aren't sure of a company's ticker. Any other parameter is refused.

Parameters

ParameterTypeDescription
querystring, 1 to 100 characters, requiredA ticker, a company name or a few words, such as NVDA or Nvidia. Spaces at either end don't count, and it can't contain a null character. A query of only $ or punctuation is refused.
limitinteger, 1 to 100, default 10How many results to return, from 1 to 100.
curl "https://api.bullpen.news/v1/search?query=nvidia&limit=2" \
  -H "Authorization: Bearer $BULLPEN_KEY"
import os, requests

r = requests.get(
    "https://api.bullpen.news/v1/search",
    params={"query": "nvidia", "limit": 2},
    headers={"Authorization": f"Bearer {os.environ['BULLPEN_KEY']}"},
)
r.raise_for_status()
print(r.json())
const r = await fetch('https://api.bullpen.news/v1/search?query=nvidia&limit=2', {
	headers: { Authorization: `Bearer ${process.env.BULLPEN_KEY}` }
});
if (!r.ok) throw new Error((await r.json()).detail);
console.log(await r.json());

What comes back

FieldTypeDescription
companiesarray of objectCompanies whose ticker or name matches, the closest match first.
companies[].tickerstring
companies[].namestring
companies[].mentionsintegerHow many stories, X posts and videos on bullpen.news name it.
companies[].bullpenUrlstringIts page on bullpen.news.
lettersarray of LetterInvestor letters that discuss a company with that ticker or say those words.
tickersmap of TickerEntryEach company the results name, by ticker.
HeaderSent withDescription
Request-Idevery answerThis request's id, such as req_ followed by 24 letters and digits. Quote it to support.
RateLimit-Policy200, 400, 429, 500, 503Your plan's quotas, per minute and per day (IETF draft-11). It may change to match the RFC.
RateLimit200, 400, 429, 500, 503What each window has left, and the seconds until it resets (IETF draft-11).
WWW-Authenticate401Bearer realm="bullpen.news"
Retry-After429, 503How many seconds to wait.

GET /v1/search?query=nvidia&limit=2

{
  "companies": [
    {
      "ticker": "NVDA",
      "name": "Nvidia CORP",
      "mentions": 207,
      "bullpenUrl": "https://bullpen.news/ticker/NVDA"
    }
  ],
  "letters": [
    {
      "id": "letter:1227",
      "kind": "letter",
      "title": "Aristotle Multi-Asset Balanced Income Fund Commentary",
      "firm": "Aristotle Funds",
      "period": "third quarter of 2026",
      "published": "2026-09-30T12:00:00Z",
      "wentLive": "2026-10-30T16:30:50Z",
      "summary": "Aristotle Multi-Asset Balanced Income Fund retained an overweight to equities and AI-related themes, favoring emerging-market and Japanese stocks while keeping underweights in investment-grade and core bonds. The portfolio sees AI capital spending supporting growth but flags debt-funded datacenter investment, rising yields and an AI investment bubble as principal risks.",
      "url": "https://cdn.prod.website-files.com/642414d0e893bb832996f598/6ae4c42dbf99f2b717e39d50_Aristotle%20Multi-Asset%20Balanced%20Income%20Fund%20Commentary.pdf",
      "companies": []
    },
    {
      "id": "letter:1220",
      "kind": "letter",
      "title": "Quarterly Investor Letter Q3 2026",
      "firm": "O'Keefe Stevens Advisory",
      "period": "Q3 2026",
      "published": "2026-10-30T02:31:00Z",
      "wentLive": "2026-10-30T02:31:00Z",
      "summary": "O'Keefe Stevens bought Octave Intelligence following its Hexagon spin-off, arguing forced selling, fragmented listings and underappreciated cross-selling created an attractive entry point. The firm sold M&T Bank at fair value, retained Corning through AI-infrastructure volatility, and continues to hold Perrigo despite leverage and management uncertainty.",
      "url": "https://okeefestevens.com/quarterly-investor-letter-q3-2026/",
      "companies": [
        "OCTV",
        "AMZN",
        "CALY",
        "GLW",
        "GOOGL",
        "HXGBY",
        "META",
        "MSFT",
        "MTB",
        "NVDA",
        "PRGO",
        "SPHR",
        "WY"
      ]
    }
  ],
  "tickers": {
    "NVDA": {
      "name": "Nvidia CORP",
      "sector": "Technology",
      "marketCapUsd": 5150000000000,
      "bullpenUrl": "https://bullpen.news/ticker/NVDA"
    },
    "OCTV": {
      "name": "Octave Intelligence plc",
      "sector": "Technology",
      "marketCapUsd": 5780000000,
      "bullpenUrl": "https://bullpen.news/ticker/OCTV"
    },
    "AMZN": {
      "name": "Amazon Com INC",
      "sector": "Consumer Discretionary",
      "marketCapUsd": 2590000000000,
      "bullpenUrl": "https://bullpen.news/ticker/AMZN"
    },
    "CALY": {
      "name": "Callaway Golf Co",
      "sector": "Consumer Discretionary",
      "marketCapUsd": 2690000000,
      "bullpenUrl": "https://bullpen.news/ticker/CALY"
    },
    "GLW": {
      "name": "Corning INC",
      "sector": "Technology",
      "marketCapUsd": 110950000000,
      "bullpenUrl": "https://bullpen.news/ticker/GLW"
    },
    "GOOGL": {
      "name": "Alphabet Inc.",
      "sector": "Communication Services",
      "marketCapUsd": 3970000000000,
      "bullpenUrl": "https://bullpen.news/ticker/GOOGL"
    },
    "HXGBY": {
      "name": "Hexagon AB ADR",
      "sector": "Technology",
      "marketCapUsd": 28680000000,
      "bullpenUrl": "https://bullpen.news/ticker/HXGBY"
    },
    "META": {
      "name": "Meta Platforms, Inc.",
      "sector": "Communication Services",
      "marketCapUsd": 1614251020000,
      "bullpenUrl": "https://bullpen.news/ticker/META"
    },
    "MSFT": {
      "name": "Microsoft CORP",
      "sector": "Technology",
      "marketCapUsd": 3880000000000,
      "bullpenUrl": "https://bullpen.news/ticker/MSFT"
    },
    "MTB": {
      "name": "M&t Bank CORP",
      "sector": "Financials",
      "marketCapUsd": 31720000000,
      "bullpenUrl": "https://bullpen.news/ticker/MTB"
    },
    "PRGO": {
      "name": "PERRIGO Co plc",
      "sector": "Healthcare",
      "marketCapUsd": 2190000000,
      "bullpenUrl": "https://bullpen.news/ticker/PRGO"
    },
    "SPHR": {
      "name": "Sphere Entertainment Co.",
      "sector": "Communication Services",
      "marketCapUsd": 3910000000,
      "bullpenUrl": "https://bullpen.news/ticker/SPHR"
    },
    "WY": {
      "name": "Weyerhaeuser CO",
      "sector": "Real Estate",
      "marketCapUsd": 14670000000,
      "bullpenUrl": "https://bullpen.news/ticker/WY"
    }
  }
}

Status codes

StatusMeaningCodes
200The answer.
400A parameter is invalid or unknown (invalid_request), a key is in the URL (key_in_url), or a cursor is not this call's (invalid_cursor).key_in_url, invalid_request, invalid_cursor
401No valid key (unauthorized), or a revoked one (revoked).unauthorized, revoked
403Your account can't use this endpoint now: invite, disabled, terms, no_plan, ended, unpaid or tool.no_plan, ended, unpaid, terms, disabled, invite, tool
429Your plan's minute or day limit is reached (minute, day).minute, day
500Something went wrong on bullpen.news (internal).internal
503The API is paused (off), busy (ceiling) or having trouble (unavailable). Retry-After comes with all but off.ceiling, off, unavailable

Fresh: Up to a minute old.
History: Every company and letter we hold.
Cost: One call.