{"openapi":"3.1.2","info":{"title":"Bullpen.News API","version":"1","description":"Read what bullpen.news publishes: stories, X posts, videos and investor letters about listed companies, and its daily recap. Every endpoint is GET, and limit goes up to 100. New fields and enum values may appear; ignore the ones you don't use.","license":{"name":"bullpen.news terms","url":"https://bullpen.news/terms"}},"servers":[{"url":"https://api.bullpen.news"}],"security":[{"apiKey":[]}],"paths":{"/v1/search":{"get":{"operationId":"search","summary":"Search companies and letters","description":"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":[{"in":"query","name":"query","schema":{"type":"string","minLength":1,"maxLength":100,"description":"A ticker, a company name or a few words, such as NVDA or Nvidia."},"required":true,"description":"A 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."},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":100,"description":"How many results to return, from 1 to 100.","default":10},"description":"How many results to return, from 1 to 100."}],"responses":{"200":{"description":"The answer.","headers":{"Request-Id":{"required":true,"description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support.","schema":{"type":"string","description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support."}},"RateLimit-Policy":{"required":true,"description":"Your plan's quotas, per minute and per day (IETF draft-11). It may change to match the RFC.","schema":{"type":"string","description":"Your plan's quotas, per minute and per day (IETF draft-11). It may change to match the RFC."}},"RateLimit":{"required":true,"description":"What each window has left, and the seconds until it resets (IETF draft-11).","schema":{"type":"string","description":"What each window has left, and the seconds until it resets (IETF draft-11)."}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"},"examples":{"answer":{"summary":"GET /v1/search?query=nvidia&limit=2","value":{"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"}}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/v1/latest":{"get":{"operationId":"latest","summary":"Front page","description":"What bullpen.news shows on its front page now, or on a past day: stories and videos, X posts, and investor letters, each list in the page's order. sector narrows the stories and X posts by their topic tags; it doesn't narrow letters. mincap and maxcap narrow all three by the market cap of the companies they're about. Any other parameter is refused.","parameters":[{"in":"query","name":"day","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"A day as YYYY-MM-DD in New York time, for the front page as it stood. Leave it out for today's."},"description":"A day as YYYY-MM-DD in New York time, for the front page as it stood. Leave it out for today's. It must be a real date, and not after today."},{"in":"query","name":"sector","schema":{"type":"string","enum":["communication-services","consumer-discretionary","consumer-staples","energy","financials","healthcare","industrials","technology","materials","real-estate","utilities"],"description":"Only stories and X posts tagged with this sector or one of its industries: semiconductors are technology. Letters aren't narrowed."},"description":"Only stories and X posts tagged with this sector or one of its industries: semiconductors are technology. Letters aren't narrowed."},{"in":"query","name":"mincap","schema":{"type":"string","enum":["50m","300m","2b","10b"],"description":"Only results about a company with a market cap over this: 50m is $50 million, 2b is $2 billion."},"description":"Only results about a company with a market cap over this: 50m is $50 million, 2b is $2 billion. It must be below maxcap."},{"in":"query","name":"maxcap","schema":{"type":"string","enum":["1b","10b","100b","500b"],"description":"Only results about a company with a market cap under this: 1b is $1 billion."},"description":"Only results about a company with a market cap under this: 1b is $1 billion. It must be above mincap."},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":100,"description":"How many results to return, from 1 to 100.","default":10},"description":"How many results to return, from 1 to 100."},{"in":"query","name":"cursor","schema":{"type":"string","description":"One of the nextCursors a previous call returned, for that list's next page. Keep the other arguments the same."},"description":"One of the nextCursors a previous call returned, for that list's next page. Keep the other arguments the same."}],"responses":{"200":{"description":"The answer.","headers":{"Request-Id":{"required":true,"description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support.","schema":{"type":"string","description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support."}},"RateLimit-Policy":{"required":true,"description":"Your plan's quotas, per minute and per day (IETF draft-11). It may change to match the RFC.","schema":{"type":"string","description":"Your plan's quotas, per minute and per day (IETF draft-11). It may change to match the RFC."}},"RateLimit":{"required":true,"description":"What each window has left, and the seconds until it resets (IETF draft-11).","schema":{"type":"string","description":"What each window has left, and the seconds until it resets (IETF draft-11)."}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LatestResponse"},"examples":{"answer":{"summary":"GET /v1/latest?limit=1","value":{"stories":[{"id":"story:5301754","kind":"story","title":"When the liquidity does not add up","summary":"Arbor Realty Trust’s dividend suspension is presented as creating $60 million of liquidity, raising questions about its ability to meet 2027 debt maturities.","source":"John Hempton's Newsletter","published":"2026-10-31T05:50:32Z","wentLive":"2026-10-31T05:55:59Z","url":"https://johnhempton.substack.com/p/when-the-liquidity-does-not-add-up","companies":["ABR"]}],"xPosts":[{"id":"x:5344093","kind":"x_post","postId":"2116553324942032987","url":"https://x.com/i/web/status/2116553324942032987","published":"2026-10-31T15:30:10Z","wentLive":"2026-10-31T15:30:58Z","companies":["APP"]}],"letters":[{"id":"letter:1249","kind":"letter","title":"Aristotle Core Bond Fund Commentary","firm":"Aristotle Funds","period":"3Q26","published":"2026-09-30T12:00:00Z","wentLive":"2026-10-31T16:30:21Z","summary":"Aristotle Core Bond Fund increased investment-grade corporate and agency and non-agency mortgage-backed securities exposure while reducing government and agency holdings. The portfolio favored BBB issuers, securitized credit, higher-quality hyperscalers, global systemically important banks, utilities and select office REITs, while remaining cautious on consumer cyclicals, healthcare and retail.","url":"https://cdn.prod.website-files.com/642414d0e893bb832996f598/6ae514b69037df5e7f874c4a_Aristotle%20Core%20Bond%20Fund%20Commentary.pdf","companies":[]}],"tickers":{"ABR":{"name":"Arbor Realty Trust INC","sector":"Financials","marketCapUsd":2244160000,"bullpenUrl":"https://bullpen.news/ticker/ABR"},"APP":{"name":"AppLovin Corp","sector":"Technology","marketCapUsd":86870000000,"bullpenUrl":"https://bullpen.news/ticker/APP"}},"nextCursors":{"stories":"WyJsYXRlc3QiLCJzdG9yaWVzIiwiaU1PaHZSVEhIZnlLSjlBeCIsWzAsMV1d","xPosts":"WyJsYXRlc3QiLCJ4UG9zdHMiLCJpTU9odlJUSEhmeUtKOUF4IiwxXQ","letters":"WyJsYXRlc3QiLCJsZXR0ZXJzIiwiaU1PaHZSVEhIZnlLSjlBeCIsWzEsMV1d"}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/v1/companies/{ticker}":{"get":{"operationId":"company","summary":"Company","description":"Everything bullpen.news has on one company, by its ticker: its sector and market cap, the stories and X posts that mention it, and the investor letters that discuss it. days narrows the stories and X posts to the last N days, today included; it doesn't narrow letters. Any other parameter is refused.","parameters":[{"in":"path","name":"ticker","schema":{"description":"The company's stock ticker, such as NVDA.","type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9.-]{0,23}$"},"required":true,"description":"The company's stock ticker, such as NVDA."},{"in":"query","name":"days","schema":{"type":"integer","minimum":1,"maximum":365,"description":"Only stories and X posts from the last N days, today included, 1 to 365. 7 is this week. Letters aren't narrowed."},"description":"Only stories and X posts from the last N days, today included, 1 to 365. 7 is this week. Letters aren't narrowed."},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":100,"description":"How many results to return, from 1 to 100.","default":10},"description":"How many results to return, from 1 to 100."},{"in":"query","name":"cursor","schema":{"type":"string","description":"One of the nextCursors a previous call returned, for that list's next page. Keep the other arguments the same."},"description":"One of the nextCursors a previous call returned, for that list's next page. Keep the other arguments the same."}],"responses":{"200":{"description":"The answer.","headers":{"Request-Id":{"required":true,"description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support.","schema":{"type":"string","description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support."}},"RateLimit-Policy":{"required":true,"description":"Your plan's quotas, per minute and per day (IETF draft-11). It may change to match the RFC.","schema":{"type":"string","description":"Your plan's quotas, per minute and per day (IETF draft-11). It may change to match the RFC."}},"RateLimit":{"required":true,"description":"What each window has left, and the seconds until it resets (IETF draft-11).","schema":{"type":"string","description":"What each window has left, and the seconds until it resets (IETF draft-11)."}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyResponse"},"examples":{"answer":{"summary":"GET /v1/companies/NVDA?limit=1","value":{"company":{"ticker":"NVDA","name":"Nvidia CORP","sector":"Technology","marketCapUsd":5150000000000,"mentions":207,"bullpenUrl":"https://bullpen.news/ticker/NVDA"},"stories":[{"id":"story:5120111","kind":"story","title":"What I'm Watching In November: Midterm Madness, Nvidia, And Walmart","summary":"November markets hinge on U.S. midterms, CPI, payrolls and OPEC+, with Nvidia guidance and Walmart sales testing the AI trade and consumer demand.","source":"Seeking Alpha","author":"Passage Research","published":"2026-10-29T12:53:45Z","wentLive":"2026-10-29T13:06:07Z","url":"https://seekingalpha.com/article/4959231-what-im-watching-in-november-midterm-madness-nvidia-and-walmart?source=generic_rss","companies":["NVDA","WMT"]}],"xPosts":[{"id":"x:5332882","kind":"x_post","postId":"2116515542148493324","url":"https://x.com/i/web/status/2116515542148493324","published":"2026-10-31T13:00:02Z","wentLive":"2026-10-31T13:01:11Z","companies":["CBRS","NVDA","SMCI"]}],"letters":[{"id":"letter:10","kind":"letter","title":"Third Quarter 2025 Commentary","firm":"Palm Valley Capital","period":"Third Quarter 2025","published":"2025-10-01T12:00:00Z","wentLive":"2026-08-04T16:06:14Z","summary":"Palm Valley Capital Fund kept roughly three quarters of assets in cash equivalents while arguing that AI-led mega-cap valuations and small-cap multiples leave little margin for error. It added Teleflex, Robert Half, LKQ, and Avista, sold Seaboard after shares exceeded its valuation, and trimmed precious-metals trusts to manage their weightings.","url":"https://www.palmvalleycapital.com/_files/ugd/ef2f99_e6aa8ad43cf9478da541105baeb19e58.pdf","companies":["NVDA","AVA","DOX","FLO","IBX","INTC","LKQ","PHYS","PSLV","RHI","SEB","TFX"]}],"tickers":{"NVDA":{"name":"Nvidia CORP","sector":"Technology","marketCapUsd":5150000000000,"bullpenUrl":"https://bullpen.news/ticker/NVDA"},"WMT":{"name":"Walmart Inc.","sector":"Consumer Staples","marketCapUsd":979900000000,"bullpenUrl":"https://bullpen.news/ticker/WMT"},"CBRS":{"name":"Cerebras Systems Inc.","sector":"Technology","marketCapUsd":26740000000,"bullpenUrl":"https://bullpen.news/ticker/CBRS"},"SMCI":{"name":"Super Micro Computer, Inc.","sector":"Technology","marketCapUsd":21650000000,"bullpenUrl":"https://bullpen.news/ticker/SMCI"},"AVA":{"name":"Avista CORP","sector":"Utilities","marketCapUsd":3150000000,"bullpenUrl":"https://bullpen.news/ticker/AVA"},"DOX":{"name":"Amdocs LTD","sector":"Technology","marketCapUsd":6430000000,"bullpenUrl":"https://bullpen.news/ticker/DOX"},"FLO":{"name":"Flowers Foods INC","sector":"Consumer Staples","marketCapUsd":1310510000,"bullpenUrl":"https://bullpen.news/ticker/FLO"},"IBX":{"name":"Tradr 2X Long IBM Daily ETF","sector":null,"marketCapUsd":1000000,"bullpenUrl":"https://bullpen.news/ticker/IBX"},"INTC":{"name":"Intel CORP","sector":"Technology","marketCapUsd":349030000000,"bullpenUrl":"https://bullpen.news/ticker/INTC"},"LKQ":{"name":"Lkq CORP","sector":"Consumer Discretionary","marketCapUsd":4330000000,"bullpenUrl":"https://bullpen.news/ticker/LKQ"},"PHYS":{"name":"Sprott Physical Gold Trust","sector":"Financials","marketCapUsd":10525560000,"bullpenUrl":"https://bullpen.news/ticker/PHYS"},"PSLV":{"name":"Sprott Physical Silver Trust","sector":"Financials","marketCapUsd":8826050000,"bullpenUrl":"https://bullpen.news/ticker/PSLV"},"RHI":{"name":"Robert Half INC.","sector":"Industrials","marketCapUsd":4295100000,"bullpenUrl":"https://bullpen.news/ticker/RHI"},"SEB":{"name":"Seaboard CORP","sector":"Consumer Staples","marketCapUsd":3723980000,"bullpenUrl":"https://bullpen.news/ticker/SEB"},"TFX":{"name":"Teleflex INC","sector":"Healthcare","marketCapUsd":5889760000,"bullpenUrl":"https://bullpen.news/ticker/TFX"}},"nextCursors":{"stories":"WyJjb21wYW55Iiwic3RvcmllcyIsIkwxTnlfNmJIQktWOGlBUE4iLDFd","xPosts":"WyJjb21wYW55IiwieFBvc3RzIiwiTDFOeV82YkhCS1Y4aUFQTiIsMV0","letters":"WyJjb21wYW55IiwibGV0dGVycyIsIkwxTnlfNmJIQktWOGlBUE4iLDFd"}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/v1/letters":{"get":{"operationId":"letters","summary":"Investor letters","description":"Investor letters (fund and partnership letters) bullpen.news has read, newest first: all of them, only those that discuss a ticker, or only one firm's. Any other parameter is refused.","parameters":[{"in":"query","name":"ticker","schema":{"description":"Only letters that discuss this company, by its ticker.","type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9.-]{0,23}$"},"description":"Only letters that discuss this company, by its ticker."},{"in":"query","name":"firm","schema":{"type":"string","minLength":1,"maxLength":100,"description":"Only letters by this firm, by its name."},"description":"Only letters by this firm, by its name. Spaces at either end don't count, and it can't contain a null character."},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":100,"description":"How many results to return, from 1 to 100.","default":10},"description":"How many results to return, from 1 to 100."},{"in":"query","name":"cursor","schema":{"type":"string","description":"The nextCursor a previous call returned, for the next page. Keep the other arguments the same."},"description":"The nextCursor a previous call returned, for the next page. Keep the other arguments the same."}],"responses":{"200":{"description":"The answer.","headers":{"Request-Id":{"required":true,"description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support.","schema":{"type":"string","description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support."}},"RateLimit-Policy":{"required":true,"description":"Your plan's quotas, per minute and per day (IETF draft-11). It may change to match the RFC.","schema":{"type":"string","description":"Your plan's quotas, per minute and per day (IETF draft-11). It may change to match the RFC."}},"RateLimit":{"required":true,"description":"What each window has left, and the seconds until it resets (IETF draft-11).","schema":{"type":"string","description":"What each window has left, and the seconds until it resets (IETF draft-11)."}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LettersResponse"},"examples":{"answer":{"summary":"GET /v1/letters?limit=2","value":{"letters":[{"id":"letter:1249","kind":"letter","title":"Aristotle Core Bond Fund Commentary","firm":"Aristotle Funds","period":"3Q26","published":"2026-09-30T12:00:00Z","wentLive":"2026-10-31T16:30:21Z","summary":"Aristotle Core Bond Fund increased investment-grade corporate and agency and non-agency mortgage-backed securities exposure while reducing government and agency holdings. The portfolio favored BBB issuers, securitized credit, higher-quality hyperscalers, global systemically important banks, utilities and select office REITs, while remaining cautious on consumer cyclicals, healthcare and retail.","url":"https://cdn.prod.website-files.com/642414d0e893bb832996f598/6ae514b69037df5e7f874c4a_Aristotle%20Core%20Bond%20Fund%20Commentary.pdf","companies":[]},{"id":"letter:1248","kind":"letter","title":"Aristotle Short Duration Income Fund Commentary","firm":"Aristotle Funds","period":"third quarter 2026","published":"2026-09-30T12:00:00Z","wentLive":"2026-10-31T16:30:26Z","summary":"Aristotle Short Duration Income Fund reduced Treasury and bank-loan exposure while adding investment-grade corporates and non-agency mortgages to improve risk-adjusted yield. The portfolio favored BBB corporates, investment-grade CLO debt, senior ABS, banks, utilities, select office REITs and higher-quality hyperscalers, while remaining cautious on consumer cyclical, healthcare and retail-related credits.","url":"https://cdn.prod.website-files.com/642414d0e893bb832996f598/6ae5140065ede339eeb64fa7_Aristotle%20Short%20Duration%20Income%20Fund%20Commentary.pdf","companies":[]}],"tickers":{},"nextCursor":"WyJsZXR0ZXJzIiwibGV0dGVycyIsIlJCTnZvMVd6WjRvUlJxMFciLDJd"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/v1/recap":{"get":{"operationId":"recap","summary":"Daily recap","description":"The daily recap email for a day, in full: every story, X post, video and investor letter it listed, by section. Without day, the newest recap, ordinarily yesterday's. Any other parameter is refused.","parameters":[{"in":"query","name":"day","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"The recap for this day, as YYYY-MM-DD in New York time. Leave it out for the newest recap, ordinarily yesterday's."},"description":"The recap for this day, as YYYY-MM-DD in New York time. Leave it out for the newest recap, ordinarily yesterday's. It must be a real date, and not after today."},{"in":"query","name":"section","schema":{"type":"string","minLength":1,"maxLength":100,"description":"Only this section of the recap, by its name."},"description":"Only this section of the recap, by its name. Spaces at either end don't count, and it can't contain a null character."}],"responses":{"200":{"description":"The answer.","headers":{"Request-Id":{"required":true,"description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support.","schema":{"type":"string","description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support."}},"RateLimit-Policy":{"required":true,"description":"Your plan's quotas, per minute and per day (IETF draft-11). It may change to match the RFC.","schema":{"type":"string","description":"Your plan's quotas, per minute and per day (IETF draft-11). It may change to match the RFC."}},"RateLimit":{"required":true,"description":"What each window has left, and the seconds until it resets (IETF draft-11).","schema":{"type":"string","description":"What each window has left, and the seconds until it resets (IETF draft-11)."}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecapResponse"},"examples":{"answer":{"summary":"GET /v1/recap?day=2026-10-30&section=Materials","value":{"day":"2026-10-30","subject":"Bullpen.News, Friday October 30th: 92 stock ideas","headline":"92 stock ideas from 20 stories, 33 X posts and 8 investor letters.","bullpenUrl":"https://bullpen.news/recap/2026-10-30","sections":[{"name":"Materials","results":[{"id":"x:5274458","kind":"x_post","postId":"2116317834792034350","url":"https://x.com/i/web/status/2116317834792034350","published":"2026-10-30T23:54:25Z","wentLive":"2026-10-30T23:56:13Z","companies":["ELMT"]}]}],"tickers":{"ELMT":{"name":"Elmet Group Co.","sector":"Materials","marketCapUsd":688080000,"bullpenUrl":"https://bullpen.news/ticker/ELMT"}}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/v1/items/{id}":{"get":{"operationId":"item","summary":"Result detail","description":"Full detail for one result, by the id another endpoint returned: story:, x:, video: or letter:. A letter names every company it mentions, where lists name only the ones it is mainly about. Any other parameter is refused.","parameters":[{"in":"path","name":"id","schema":{"description":"The id of a result another tool returned, such as story:123.","type":"string","pattern":"^(story|x|video|letter):([1-9]\\d{0,9})$"},"required":true,"description":"The id of a result another endpoint returned, such as story:123. Its number is at most 2147483647."}],"responses":{"200":{"description":"The answer.","headers":{"Request-Id":{"required":true,"description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support.","schema":{"type":"string","description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support."}},"RateLimit-Policy":{"required":true,"description":"Your plan's quotas, per minute and per day (IETF draft-11). It may change to match the RFC.","schema":{"type":"string","description":"Your plan's quotas, per minute and per day (IETF draft-11). It may change to match the RFC."}},"RateLimit":{"required":true,"description":"What each window has left, and the seconds until it resets (IETF draft-11).","schema":{"type":"string","description":"What each window has left, and the seconds until it resets (IETF draft-11)."}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemResponse"},"examples":{"answer":{"summary":"GET /v1/items/story:5301754","value":{"result":{"id":"story:5301754","kind":"story","title":"When the liquidity does not add up","summary":"Arbor Realty Trust’s dividend suspension is presented as creating $60 million of liquidity, raising questions about its ability to meet 2027 debt maturities.","source":"John Hempton's Newsletter","published":"2026-10-31T05:50:32Z","wentLive":"2026-10-31T05:55:59Z","url":"https://johnhempton.substack.com/p/when-the-liquidity-does-not-add-up","companies":["ABR"]},"tickers":{"ABR":{"name":"Arbor Realty Trust INC","sector":"Financials","marketCapUsd":2244160000,"bullpenUrl":"https://bullpen.news/ticker/ABR"}}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/v1/firms":{"get":{"operationId":"firms","summary":"Firms","description":"Every firm with an investor letter on bullpen.news, by name, for the letters endpoint's firm. It takes no parameters, and refuses any.","parameters":[],"responses":{"200":{"description":"The answer.","headers":{"Request-Id":{"required":true,"description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support.","schema":{"type":"string","description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support."}},"RateLimit-Policy":{"required":true,"description":"Your plan's quotas, per minute and per day (IETF draft-11). It may change to match the RFC.","schema":{"type":"string","description":"Your plan's quotas, per minute and per day (IETF draft-11). It may change to match the RFC."}},"RateLimit":{"required":true,"description":"What each window has left, and the seconds until it resets (IETF draft-11).","schema":{"type":"string","description":"What each window has left, and the seconds until it resets (IETF draft-11)."}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FirmsResponse"},"examples":{"answer":{"summary":"GET /v1/firms","description":"The first 3 of 190 firms.","value":{"firms":[{"slug":"1-main-capital","name":"1 Main Capital"},{"slug":"1851-capital","name":"1851 Capital"},{"slug":"advisory-research","name":"Advisory Research"}]}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/v1/feed":{"get":{"operationId":"feed","summary":"Feed","description":"What went live on bullpen.news, oldest first: stories, X posts, videos and investor letters in one list. Poll it with the last nextCursor. It runs two minutes behind. Any other parameter is refused.","parameters":[{"in":"query","name":"since","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"A time in UTC, such as 2026-10-28T14:00:00Z, for the first call: what went live from then on."},"description":"A time in UTC, such as 2026-10-28T14:00:00Z, for the first call: what went live from then on. It must be from 1970 on. Send exactly one of since and cursor."},{"in":"query","name":"cursor","schema":{"type":"string","description":"The nextCursor the previous call returned, in place of since."},"description":"The nextCursor the previous call returned, in place of since. Send exactly one of since and cursor."},{"in":"query","name":"kind","schema":{"type":"string","enum":["story","x_post","video","letter"],"description":"Only results of this kind."},"description":"Only results of this kind."},{"in":"query","name":"ticker","schema":{"description":"Only results about this company, by its ticker: the stories, X posts, videos and letters its page lists.","type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9.-]{0,23}$"},"description":"Only results about this company, by its ticker: the stories, X posts, videos and letters its page lists."},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":100,"description":"How many results to return, from 1 to 100.","default":10},"description":"How many results to return, from 1 to 100."}],"responses":{"200":{"description":"The answer.","headers":{"Request-Id":{"required":true,"description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support.","schema":{"type":"string","description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support."}},"RateLimit-Policy":{"required":true,"description":"Your plan's quotas, per minute and per day (IETF draft-11). It may change to match the RFC.","schema":{"type":"string","description":"Your plan's quotas, per minute and per day (IETF draft-11). It may change to match the RFC."}},"RateLimit":{"required":true,"description":"What each window has left, and the seconds until it resets (IETF draft-11).","schema":{"type":"string","description":"What each window has left, and the seconds until it resets (IETF draft-11)."}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedResponse"},"examples":{"answer":{"summary":"GET /v1/feed?since=2026-10-30T18%3A00%3A00Z&limit=3","value":{"results":[{"id":"x:5248287","kind":"x_post","postId":"2116227609486856624","url":"https://x.com/i/web/status/2116227609486856624","published":"2026-10-30T17:55:54Z","wentLive":"2026-10-30T18:01:20Z","companies":["PPIH"]},{"id":"x:5248829","kind":"x_post","postId":"2116229734162174006","url":"https://x.com/i/web/status/2116229734162174006","published":"2026-10-30T18:04:20Z","wentLive":"2026-10-30T18:06:06Z","companies":["TFC"]},{"id":"x:5248828","kind":"x_post","postId":"2116229150726033736","url":"https://x.com/i/web/status/2116229150726033736","published":"2026-10-30T18:02:01Z","wentLive":"2026-10-30T18:06:06Z","companies":["QMCO"]}],"tickers":{"PPIH":{"name":"Perma-Pipe International Holdings, Inc.","sector":"Industrials","marketCapUsd":243400000,"bullpenUrl":"https://bullpen.news/ticker/PPIH"},"TFC":{"name":"Truist Financial CORP","sector":"Financials","marketCapUsd":59151140000,"bullpenUrl":"https://bullpen.news/ticker/TFC"},"QMCO":{"name":"Quantum CORP","sector":"Technology","marketCapUsd":798050000,"bullpenUrl":"https://bullpen.news/ticker/QMCO"}},"nextCursor":"WyJmZWVkIiwiZmVlZCIsIlJCTnZvMVd6WjRvUlJxMFciLFsxNzkzMzgzNTY2NjU2LCJpdGVtIiw1MjQ4ODI4XV0"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Unavailable"}}}}},"components":{"schemas":{"Story":{"type":"object","properties":{"id":{"type":"string","description":"Its id, such as story:123."},"kind":{"type":"string","const":"story"},"title":{"type":"string"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Our summary. Null until we have written one."},"source":{"type":"string","description":"The publication."},"author":{"description":"The writer, when the publication names one.","type":"string"},"published":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:Z))$","description":"When it was published, in UTC."},"wentLive":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:Z))$"},{"type":"null"}],"description":"When it went live on bullpen.news, in UTC."},"url":{"type":"string","description":"The story at its publisher."},"companies":{"type":"array","items":{"type":"string"},"description":"The companies it is about, by ticker. tickers says what each one is."}},"required":["id","kind","title","summary","source","published","wentLive","url","companies"]},"XPost":{"type":"object","properties":{"id":{"type":"string","description":"Its id, such as x:456."},"kind":{"type":"string","const":"x_post"},"postId":{"type":"string","description":"The post's id on X."},"url":{"type":"string","description":"The post on X."},"published":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:Z))$","description":"When it was published, in UTC."},"wentLive":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:Z))$"},{"type":"null"}],"description":"When it went live on bullpen.news, in UTC."},"companies":{"type":"array","items":{"type":"string"},"description":"The companies it is about, by ticker. tickers says what each one is."}},"required":["id","kind","postId","url","published","wentLive","companies"]},"Video":{"type":"object","properties":{"id":{"type":"string","description":"Its id, such as video:789."},"kind":{"type":"string","const":"video"},"url":{"type":"string","description":"The video on YouTube."},"published":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:Z))$","description":"When it was published, in UTC."},"wentLive":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:Z))$"},{"type":"null"}],"description":"When it went live on bullpen.news, in UTC."},"companies":{"type":"array","items":{"type":"string"},"description":"The companies it is about, by ticker. tickers says what each one is."}},"required":["id","kind","url","published","wentLive","companies"]},"Letter":{"type":"object","properties":{"id":{"type":"string","description":"Its id, such as letter:532."},"kind":{"type":"string","const":"letter"},"title":{"type":"string"},"firm":{"type":"string","description":"The firm that wrote it."},"period":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The period it covers, such as Q2 2026."},"published":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:Z))$","description":"When it was published, in UTC."},"wentLive":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:Z))$"},{"type":"null"}],"description":"When it went live on bullpen.news, in UTC."},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Our summary. Null until we have written one."},"url":{"type":"string","description":"The letter itself."},"companies":{"type":"array","items":{"type":"string"},"description":"The companies it is about, by ticker. tickers says what each one is."}},"required":["id","kind","title","firm","period","published","wentLive","summary","url","companies"]},"TickerEntry":{"type":"object","properties":{"name":{"type":"string"},"sector":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Its GICS sector, such as Technology. Null when we don't know it."},"marketCapUsd":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Its market cap in whole US dollars. Null when we don't know it."},"bullpenUrl":{"type":"string","description":"Its page on bullpen.news."}},"required":["name","sector","marketCapUsd","bullpenUrl"]},"Tickers":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/TickerEntry"},"description":"Each company the results name, by ticker."},"Problem":{"type":"object","properties":{"type":{"type":"string","description":"The docs' anchor for the code, such as https://bullpen.news/docs/errors#minute."},"title":{"type":"string","description":"Fixed for each code."},"status":{"type":"integer","minimum":400,"maximum":599,"description":"The HTTP status."},"detail":{"type":"string","description":"What went wrong, for people."},"code":{"type":"string","enum":["key_in_url","unauthorized","invalid_request","revoked","off","invite","disabled","terms","no_plan","ended","unpaid","tool","ceiling","minute","day","invalid_cursor","not_found","unavailable","internal","method_not_allowed","gone"],"description":"What went wrong, for programs. New codes may be added."},"retryAfterSeconds":{"description":"How long to wait, on a 429 and on a 503 other than off.","type":"integer","minimum":0,"maximum":9007199254740991},"plan":{"description":"Your plan, on minute and day.","type":"string","enum":["individual","corporate"]},"errors":{"description":"On invalid_request: each bad parameter. detail is the first one's.","type":"array","items":{"type":"object","properties":{"parameter":{"type":"string"},"detail":{"type":"string"}},"required":["parameter","detail"]}},"requestId":{"type":"string","description":"The Request-Id header's value."}},"required":["type","title","status","detail","code","requestId"]},"SearchResponse":{"type":"object","properties":{"companies":{"type":"array","items":{"type":"object","properties":{"ticker":{"type":"string"},"name":{"type":"string"},"mentions":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"How many stories, X posts and videos on bullpen.news name it."},"bullpenUrl":{"type":"string","description":"Its page on bullpen.news."}},"required":["ticker","name","mentions","bullpenUrl"]},"description":"Companies whose ticker or name matches, the closest match first."},"letters":{"type":"array","items":{"$ref":"#/components/schemas/Letter"},"description":"Investor letters that discuss a company with that ticker or say those words."},"tickers":{"$ref":"#/components/schemas/Tickers"}},"required":["companies","letters","tickers"]},"LatestResponse":{"type":"object","properties":{"stories":{"description":"The front page's stories and videos in its order: the top of the page, then the feed under it. Never X posts. Left out when the call pages another list.","type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/Story"},{"$ref":"#/components/schemas/Video"}],"type":"object","discriminator":{"propertyName":"kind","mapping":{"story":"#/components/schemas/Story","video":"#/components/schemas/Video"}}}},"xPosts":{"description":"The front page's X posts, newest first. Left out when the call pages another list.","type":"array","items":{"$ref":"#/components/schemas/XPost"}},"letters":{"description":"The front page's investor letters, newest first. The market-cap range narrows them; sector doesn't. Left out when the call pages another list.","type":"array","items":{"$ref":"#/components/schemas/Letter"}},"tickers":{"$ref":"#/components/schemas/Tickers"},"nextCursors":{"type":"object","properties":{"stories":{"type":"string"},"xPosts":{"type":"string"},"letters":{"type":"string"}},"description":"Each list's cursor for its next page: pass one as cursor. A list on its last page has none."}},"required":["tickers","nextCursors"]},"CompanyResponse":{"type":"object","properties":{"company":{"description":"The company. Left out when the call pages a list.","type":"object","properties":{"ticker":{"type":"string","description":"Its ticker now. A ticker it used to trade under finds it too."},"name":{"type":"string"},"sector":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Its GICS sector, such as Technology. Null when we don't know it."},"marketCapUsd":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Its market cap in whole US dollars. Null when we don't know it or it no longer trades."},"mentions":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"How many stories, X posts and videos on bullpen.news name it."},"bullpenUrl":{"type":"string","description":"Its page on bullpen.news."}},"required":["ticker","name","sector","marketCapUsd","mentions","bullpenUrl"]},"stories":{"description":"Stories and videos about it, as its page on bullpen.news lists them: newest first, by day. Never X posts. Left out when the call pages another list.","type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/Story"},{"$ref":"#/components/schemas/Video"}],"type":"object","discriminator":{"propertyName":"kind","mapping":{"story":"#/components/schemas/Story","video":"#/components/schemas/Video"}}}},"xPosts":{"description":"X posts about it, as its page lists them: newest first, by day. Left out when the call pages another list.","type":"array","items":{"$ref":"#/components/schemas/XPost"}},"letters":{"description":"Investor letters that discuss it, as its page lists them: the letters most about it first, then newest first. days doesn't narrow them. Left out when the call pages another list.","type":"array","items":{"$ref":"#/components/schemas/Letter"}},"tickers":{"$ref":"#/components/schemas/Tickers"},"nextCursors":{"type":"object","properties":{"stories":{"type":"string"},"xPosts":{"type":"string"},"letters":{"type":"string"}},"description":"Each list's cursor for its next page: pass one as cursor. A list on its last page has none."}},"required":["tickers","nextCursors"]},"LettersResponse":{"type":"object","properties":{"letters":{"type":"array","items":{"$ref":"#/components/schemas/Letter"},"description":"Newest first."},"tickers":{"$ref":"#/components/schemas/Tickers"},"nextCursor":{"description":"Pass it as cursor for the next page. Left out on the last page.","type":"string"}},"required":["letters","tickers"]},"RecapResponse":{"type":"object","properties":{"day":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"The day the recap covers, YYYY-MM-DD in New York time. Without a day in the call, the newest recap."},"subject":{"type":"string","description":"The email's subject line."},"headline":{"type":"string","description":"The email's preview line, shown under the subject in an inbox."},"bullpenUrl":{"type":"string","description":"The recap on bullpen.news."},"sections":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The section as the email headed it, such as Technology and AI."},"results":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/Story"},{"$ref":"#/components/schemas/XPost"},{"$ref":"#/components/schemas/Video"},{"$ref":"#/components/schemas/Letter"}],"type":"object","discriminator":{"propertyName":"kind","mapping":{"story":"#/components/schemas/Story","x_post":"#/components/schemas/XPost","video":"#/components/schemas/Video","letter":"#/components/schemas/Letter"}}},"description":"Its stories, X posts, videos and investor letters, in the order the email listed them."}},"required":["name","results"]},"description":"The email's sections in its order, or only the one asked for. Anything taken off bullpen.news since it was sent is left out."},"tickers":{"$ref":"#/components/schemas/Tickers"}},"required":["day","subject","headline","bullpenUrl","sections","tickers"]},"ItemResponse":{"type":"object","properties":{"result":{"oneOf":[{"$ref":"#/components/schemas/Story"},{"$ref":"#/components/schemas/XPost"},{"$ref":"#/components/schemas/Video"},{"$ref":"#/components/schemas/Letter"}],"type":"object","discriminator":{"propertyName":"kind","mapping":{"story":"#/components/schemas/Story","x_post":"#/components/schemas/XPost","video":"#/components/schemas/Video","letter":"#/components/schemas/Letter"}}},"tickers":{"$ref":"#/components/schemas/Tickers"}},"required":["result","tickers"]},"FirmsResponse":{"type":"object","properties":{"firms":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string","description":"The firm's slug on bullpen.news."},"name":{"type":"string","description":"The firm's name, as letters' firm gives it."}},"required":["slug","name"]},"description":"Every firm with a letter on bullpen.news, by name."}},"required":["firms"]},"FeedResponse":{"type":"object","properties":{"results":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/Story"},{"$ref":"#/components/schemas/XPost"},{"$ref":"#/components/schemas/Video"},{"$ref":"#/components/schemas/Letter"}],"type":"object","discriminator":{"propertyName":"kind","mapping":{"story":"#/components/schemas/Story","x_post":"#/components/schemas/XPost","video":"#/components/schemas/Video","letter":"#/components/schemas/Letter"}}},"description":"What went live, oldest first. Two minutes behind, and short when some are left out."},"tickers":{"$ref":"#/components/schemas/Tickers"},"nextCursor":{"type":"string","description":"Pass it as cursor for what goes live next. Always sent, even on an empty page."}},"required":["results","tickers","nextCursor"]}},"responses":{"BadRequest":{"description":"A 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).","headers":{"Request-Id":{"required":true,"description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support.","schema":{"type":"string","description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support."}},"RateLimit-Policy":{"description":"Your plan's quotas, when the call was counted.","schema":{"description":"Your plan's quotas, when the call was counted.","type":"string"}},"RateLimit":{"description":"What each window has left, when the call was counted.","schema":{"description":"What each window has left, when the call was counted.","type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"Unauthorized":{"description":"No valid key (unauthorized), or a revoked one (revoked).","headers":{"Request-Id":{"required":true,"description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support.","schema":{"type":"string","description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support."}},"WWW-Authenticate":{"required":true,"description":"Bearer realm=\"bullpen.news\"","schema":{"type":"string","description":"Bearer realm=\"bullpen.news\""}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"Forbidden":{"description":"Your account can't use this endpoint now: invite, disabled, terms, no_plan, ended, unpaid or tool.","headers":{"Request-Id":{"required":true,"description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support.","schema":{"type":"string","description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support."}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"TooManyRequests":{"description":"Your plan's minute or day limit is reached (minute, day).","headers":{"Request-Id":{"required":true,"description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support.","schema":{"type":"string","description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support."}},"RateLimit-Policy":{"required":true,"description":"Your plan's quotas, per minute and per day (IETF draft-11). It may change to match the RFC.","schema":{"type":"string","description":"Your plan's quotas, per minute and per day (IETF draft-11). It may change to match the RFC."}},"RateLimit":{"required":true,"description":"What each window has left, and the seconds until it resets (IETF draft-11).","schema":{"type":"string","description":"What each window has left, and the seconds until it resets (IETF draft-11)."}},"Retry-After":{"required":true,"description":"How many seconds to wait.","schema":{"type":"string","description":"How many seconds to wait."}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"InternalError":{"description":"Something went wrong on bullpen.news (internal).","headers":{"Request-Id":{"required":true,"description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support.","schema":{"type":"string","description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support."}},"RateLimit-Policy":{"description":"Your plan's quotas, when the call was counted.","schema":{"description":"Your plan's quotas, when the call was counted.","type":"string"}},"RateLimit":{"description":"What each window has left, when the call was counted.","schema":{"description":"What each window has left, when the call was counted.","type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"Unavailable":{"description":"The API is paused (off), busy (ceiling) or having trouble (unavailable). Retry-After comes with all but off.","headers":{"Request-Id":{"required":true,"description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support.","schema":{"type":"string","description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support."}},"Retry-After":{"schema":{"type":"string","description":"How many seconds to wait."}},"RateLimit-Policy":{"description":"Your plan's quotas, when the call was counted.","schema":{"description":"Your plan's quotas, when the call was counted.","type":"string"}},"RateLimit":{"description":"What each window has left, when the call was counted.","schema":{"description":"What each window has left, when the call was counted.","type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"NotFound":{"description":"Nothing by that ticker, firm, id or day (not_found).","headers":{"Request-Id":{"required":true,"description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support.","schema":{"type":"string","description":"This request's id, such as req_ followed by 24 letters and digits. Quote it to support."}},"RateLimit-Policy":{"description":"Your plan's quotas, when the call was counted.","schema":{"description":"Your plan's quotas, when the call was counted.","type":"string"}},"RateLimit":{"description":"What each window has left, when the call was counted.","schema":{"description":"What each window has left, when the call was counted.","type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"Your bullpen.news API key, from bullpen.news/account, sent as Authorization: Bearer bullpen_…"}}}}