API reference

Every public endpoint, generated from /openapi.json. Base URL https://parrot.markets/api/v1, no key. Formats, limits, caching and errors: API. MCP: POST https://parrot.markets/mcp (streamable HTTP, no key; how to add it: /mcp). Agent guide: /llms.txt. Each Try it is a real request; the first lines of its answer are shown below it, answered 2026-10-23 22:45 UTC.

Answers

One question, one call, for every hub. TSV by default (format=json or md), with an ETag; the same answers as the MCP tools.

GET /api/v1/upcoming

Occasions with listed mention markets in the next N days, a row each: date, time, entity, venues, listed words, top 3 words (key:rate:n)

ParameterTypeDefaultDescription
categorystringHub id (earnings, trump, fed, white-house, news, politics, sports, business, entertainment, podcasts, world); default all
daysinteger7
marketsbooleanfalseAdd px (mid price 0-1 of the listing venue; may be delayed). Off by default
allbooleanfalseAlso occasions without a market (scheduled appearances, the earnings calendar)
fieldsstringComma list of columns (unknown names are a 400 listing the allowed ones); 'full' gives every column (+ icon on upcoming and entity): date, time, hub, ent, name, app, ev, v, n_w, top3, kind, win, icon, evs
formattsv | json | mdtsv

Try it: /api/v1/upcoming 200 · TSV · 6,367 bytes

# upcoming 2026-10-23..2026-10-30 · 52 occasions · as_of 2026-10-23T22:44:36Z # brief?entity=<ent>&date=<date> (brief?event=<ev> where ev is set: several that day) · top3 word:p<p>:n (calibrated p; n 0 = prior) or word:r<rate>:… date time hub ent ev kind win v n_w top3 2026-10-23 18:30 news world-news-tonight tv_episode K 17 Trump#5:p0.73:63;Putin:p0.63:5;Russia:p0.62:6 2026-10-23 trump donald-trump rally P 23 Transgender#5:p0.77:6;Iran#5:p0.71:34;Mar-a-Lago:p0.69:1 2026-10-24 podcasts mrbeast podcast_episode by ..2026-10-24 P 11 Minecraft:p0.61:8;Hide:p0.53:4;Build:p0.52:8 2026-10-24 politics barack-obama rally K 24 Michelle:p0.59:3;Chicago:p0.58:2;Afford:p0.52:1 …

GET /api/v1/brief

One occasion, a row per listed word ranked by p: settlement history (n y rate l10), transcript history (tn th), p, and after the event cnt / res / t / clip; the rows that fit 3.2 KB, offset= / limit= page the rest

ParameterTypeDefaultDescription
eventstringEvent id (k:<KALSHI TICKER> or p:<polymarket slug>); its venue counterparts are merged in
appearancestringAppearance id or slug
entitystringEntity id (donald-trump, nvidia, the-last-word, role-fed-chair), a name or an alias; with date= the occasion nearest it, else the next open one
symbolstringEarnings stock symbol (alias of entity= for companies), e.g. NFLX
datestringDate YYYY-MM-DD (with entity / symbol)
marketsbooleanfalseAdd px (mid price 0-1 of the listing venue; may be delayed). Off by default
fieldsstringComma list of columns (unknown names are a 400 listing the allowed ones); 'full' gives every column (+ icon on upcoming and entity): w, key, thr, scope, v, n, y, rate, l10, tn, th, p, p_src, cnt, cnt_all, res, t, clip, agree, lower_bound, px, streak, last_y, ev, strike, ent
limitintegerRows (by p) from offset; 0 = every row. Default: as many as fit 3.2 KB; a '# rows ... more: offset=N' line says how many more there are
offsetinteger0First row (the more: offset= of the previous page)
formattsv | json | mdtsv

Try it: /api/v1/brief?entity=tesla 200 · TSV · 1,612 bytes

# Tesla (tesla) · earnings_call 2027-01-27 · 20 words · K k:KXEARNINGSMENTIONTSLA-27JAN27 · as_of 2026-10-23T22:44:36Z # scope K company_reps+operator · n/y settled · tn/th last 8 earnings call transcripts 2025-01-29..2026-10-21 · same on every row: v K, p_src blend ·… # rules K k:KXEARNINGSMENTIONTSLA-27JAN27 ({word} = w of K rows): If {word} is said by any Tesla representative (including the operator of the call) … w key thr n y rate l10 tn th p Cybercab cybercab 1 2 2 1 YY 8 6 0.95 Regulator / Regulatory / Regulation regulation|regulator|regulatory 1 7 7 1 YYYYYYY 8 8 0.93 SpaceX / xAI spacex|xai 1 3 3 1 YYY 8 8 0.92 …

GET /api/v1/word

One word of one entity in one line: settlement history, transcript history, p, scope, next listing

ParameterTypeDefaultDescription
wordstringWord in Kalshi syntax: alternates separated by ' / ', optional threshold '(N+ times)' last, e.g. 'Tariff / Tariffs (3+ times)'; Polymarket's 'Quarter 15+ times' works too; a word key ('ai|artificial intelligence', 'trump#5') works too
keystringA word key instead of word= ('ai|artificial intelligence')
entitystringEntity id (donald-trump, nvidia, the-last-word, role-fed-chair), a name or an alias
symbolstringEarnings stock symbol (alias of entity= for companies), e.g. NFLX
marketsbooleanfalseAdd px (mid price 0-1 of the listing venue; may be delayed). Off by default
nextbooleanfalseAnswer the next open market that lists the word, even when it is a wider listing ('Russia / Ukraine' for Ukraine); default: the word's own key, with next / next_as naming that market
formattext | jsontext

Try it: /api/v1/word?entity=nvidia&word=Taiwan 200 · text · 338 bytes

nvidia "Taiwan" · key taiwan · thr 1 · scope company_reps+operator · n 5 · y 1 · rate 0.2 · l10 nnnnY · streak Y1 · last_y 2026-08-26 · tn 8 · th 2 ·… …

GET /api/v1/quotes

Where a word was said: capped quotes (<= 25 words, match in «»), newest first, counted under the market's scope

ParameterTypeDefaultDescription
word requiredstringWord in Kalshi syntax: alternates separated by ' / ', optional threshold '(N+ times)' last, e.g. 'Tariff / Tariffs (3+ times)'; Polymarket's 'Quarter 15+ times' works too
entitystringEntity id (donald-trump, nvidia, the-last-word, role-fed-chair), a name or an alias
symbolstringEarnings stock symbol (alias of entity= for companies), e.g. NFLX
appearancestringOne appearance (id or slug)
callstringEarnings: report date YYYY-MM-DD (nearest call within 3 days) or 'last'
call_idinteger
limitinteger5Quote rows (at most 5 from sources that are not public domain / OPL; 0 = that maximum)
fieldsstringComma list of columns (unknown names are a 400 listing the allowed ones); 'full' gives every column (+ icon on upcoming and entity): app, date, spk, role, sec, t, q, counted, src, text_kind
formattsv | json | md | texttsv

Try it: /api/v1/quotes?symbol=NFLX&word=Advertising 200 · TSV · 1,624 bytes

# netflix · Advertising · scope company_reps+operator · 5 quotes from the 8 latest transcripts of any kind (2025-01-21..2026-10-20): counted under th… # quotes <= 25 words, <= 5 a response unless the source is public domain / OPL, never overlapping; t = media seconds · derived data CC BY 4.0 (credit… app date spk role sec t q counted src text_kind netflix:2026-10-20:earnings_call 2026-10-20 Spencer Wang company qa 1738.7 …us on to the topic of «advertising». We have several questions on «advert… netflix:2026-10-20:earnings_call 2026-10-20 Spencer Wang company qa 1751.5 …of Baird. He asks, "How is the «advertising» business progressing relativ… netflix:2026-07-16:earnings_call 2026-07-16 Greg Peters company prepared 281.6 …that our consumers and our «advertising» partners ascribe to our serv… netflix:2026-07-16:earnings_call 2026-07-16 Spencer Wang company qa 1339 …is monetization, and I'll begin with «advertising». The question is from St… …

GET /api/v1/clips

Timed clips of a word (yt:<video id>@<start>-<end>) from verified timelines, newest first

ParameterTypeDefaultDescription
word requiredstringWord in Kalshi syntax: alternates separated by ' / ', optional threshold '(N+ times)' last, e.g. 'Tariff / Tariffs (3+ times)'; Polymarket's 'Quarter 15+ times' works too
entitystringEntity id (donald-trump, nvidia, the-last-word, role-fed-chair), a name or an alias
symbolstringEarnings stock symbol (alias of entity= for companies), e.g. NFLX
appearancestringOne appearance (id or slug)
limitinteger10
fieldsstringComma list of columns: key, app, date, spk, t, clip, q
formattsv | json | mdtsv

Try it: /api/v1/clips?symbol=TSLA&word=Cybertruck&limit=3 200 · TSV · 729 bytes

# tesla · Cybertruck · scope company_reps+operator · 2 clips from 2 timed transcripts · as_of 2026-10-23T22:44:36Z # clip yt:<video id>@<start>-<end> (whole s; youtube-nocookie embed) | mp3:<source>@<a>-<b>; t = media s · derived data CC BY 4.0 (credit parrot.mark… key app date spk t clip q cybertruck tesla:2026-10-21:earnings_call 2026-10-21 Vaibhav Taneja 2088.3 mp3:11603@2082.3-2089.2 …drive?" They're not asking for 3/Y or «Cybertruck… cybertruck tesla:2026-07-22:earnings_call 2026-07-22 Elon Musk 158 mp3:9326@157.7-164.0 …The «Cybertruck» has started production, and we also have st… …

GET /api/v1/history

Settlement history: an entity's words (most settled first), or with word= every settled listing of one word

ParameterTypeDefaultDescription
entitystringEntity id (donald-trump, nvidia, the-last-word, role-fed-chair), a name or an alias
symbolstringEarnings stock symbol (alias of entity= for companies), e.g. NFLX
wordstringWord in Kalshi syntax: alternates separated by ' / ', optional threshold '(N+ times)' last, e.g. 'Tariff / Tariffs (3+ times)'; Polymarket's 'Quarter 15+ times' works too
qstringWithout word: keys containing this text
limitinteger25
offsetinteger0First row (the '# more: offset=' of the previous page)
formattsv | json | mdtsv

Try it: /api/v1/history?entity=donald-trump&word=Crypto 200 · TSV · 1,133 bytes

# donald-trump · Crypto (crypto) · settled n 8 y 2 rate 0.25 (one per occasion) · 8 listings newest first, rows 1-8 · as_of 2026-10-23T22:44:36Z # res void = the event did not qualify (not a NO; left out of n) · cnt = our transcript count under the market's rule; agree 1 / 0 = it matches / doe… date ev v w res cnt agree lower_bound 2025-03-03 k:KXDJTINVESTMENT-25MAR03 K Crypto yes 2024-09-04 p:what-will-trump-say-during-lex-friedman-interview P Crypto no 2024-09-04 p:what-will-trump-say-during-hannity-town-hall P Crypto no 2024-08-31 p:what-will-trump-say-in-august P Crypto yes 0 1 …

Transcript search (FTS5 syntax) across every hub: a row per hit (app, date, entity, speaker, section, t, quote, src); group=call gives the earnings-only grouped JSON

ParameterTypeDefaultDescription
q requiredstringSQLite FTS5 query: words (ANDed), "exact phrase", prefix* (3+ characters), OR, NOT (needs a left side), NEAR(a b, 5)
categorystringHub id
entitystringEntity id (donald-trump, nvidia, the-last-word, role-fed-chair), a name or an alias
symbolstringStock symbol, e.g. TSLA; a comma / space separated list where noted (list allowed; group=call, or an alias of entity=)
fromstringDate YYYY-MM-DD
tostringDate YYYY-MM-DD
limitinteger10Transcripts (appearances / calls) per page
offsetinteger0
per_appinteger2Hits per transcript
groupstringcall: the earnings-only JSON grouped by call (the pre-v3 shape)
rolecompany | analyst | operatorgroup=call only
sectionprepared | qagroup=call only
speakerstringgroup=call only: speaker name substring
per_callinteger5group=call only: snippets per call (capped at 5)
plainbooleanfalsegroup=call only: «hit» text instead of HTML <mark>
snippet_charsinteger160group=call only (capped at 200)
formattsv | json | md | csvtsv
fieldsstringComma list of columns: app, date, ent, spk, sec, t, q, src, text_kind, hub, role (group=call: call_id, symbol, report_date, label, fiscal_year, fiscal_quarter, flags, hits, snippets)

Try it: /api/v1/search?q=tariff&limit=3 200 · TSV · 1,371 bytes

# q 'tariff' · 932 transcripts, 2433 hits · showing 3 from offset 0 · more: offset=3 · as_of 2026-10-23T22:44:36Z # quotes <= 25 words, <= 2 a transcript unless public domain / OPL, never overlapping · derived data CC BY 4.0 (credit parrot.markets) · not advice (… app date ent spk sec t q src text_kind donald-trump:2026-10-23:rally-florida 2026-10-23 donald-trump donald-trump 2135 …she wrote this article and she said «tariff» is his favorite word h… donald-trump:2026-10-23:rally-florida 2026-10-23 donald-trump donald-trump 2186.6 …«tariff» on you. both of you and amazing they stopped https://www… donald-trump:2026-10-22:rally-iowa 2026-10-22 donald-trump donald-trump 2847 …«tariff» is my favorite word. So what happened is I now make it my fif… procter-and-gamble:2026-10-22:earnings_call 2026-10-22 procter-and-gamble Andre Schulten qa …year. The last point I'll give you is we had the second… …

GET /api/v1/entity/{entity_id}

Entity card: kind, hub, tier, venues, next / last occasion, role holder, top 10 words (key n y rate l10 tn th)

ParameterTypeDefaultDescription
entity_id pathstringEntity id (donald-trump, nvidia, the-last-word, role-fed-chair), a name or an alias
fieldsstringfull: add the icon path
formattsv | json | mdtsv

Try it: /api/v1/entity/tesla 200 · TSV · 987 bytes

# ent tesla · name Tesla · kind company · hub earnings · sub - · tier T1 · v KP · symbol TSLA # next 2027-01-27 k:KXEARNINGSMENTIONTSLA-27JAN27 (20 words) # last text 2026-10-21 earnings_call # url https://parrot.markets/earnings/TSLA · as_of 2026-10-23T22:44:36Z # 117 words with settled history; top 10 by n · tn/th: last 8 earnings call transcripts 2025-01-29..2026-10-21 · derived data CC BY 4.0 (credit parro… w key n y rate l10 tn th Regulator / Regulatory / Regulation regulation|regulator|regulatory 7 7 1 YYYYYYY 8 8 …

GET /api/v1/entity

Entity card by ?id= (same as /api/v1/entity/{id})

ParameterTypeDefaultDescription
id requiredstringEntity id (donald-trump, nvidia, the-last-word, role-fed-chair), a name or an alias
fieldsstringfull: add the icon path
formattsv | json | mdtsv

Try it: /api/v1/entity?id=Tesla 200 · TSV · 987 bytes

# ent tesla · name Tesla · kind company · hub earnings · sub - · tier T1 · v KP · symbol TSLA # next 2027-01-27 k:KXEARNINGSMENTIONTSLA-27JAN27 (20 words) # last text 2026-10-21 earnings_call # url https://parrot.markets/earnings/TSLA · as_of 2026-10-23T22:44:36Z # 117 words with settled history; top 10 by n · tn/th: last 8 earnings call transcripts 2025-01-29..2026-10-21 · derived data CC BY 4.0 (credit parro… w key n y rate l10 tn th Regulator / Regulatory / Regulation regulation|regulator|regulatory 7 7 1 YYYYYYY 8 8 …

GET /api/v1/entities

Entities (speakers, shows, companies, leagues, roles) of a hub, a row each with the next open market date

ParameterTypeDefaultDescription
categorystringHub id; default all
qstringSubstring of the id or name
limitinteger200
offsetinteger0
formattsv | json | mdtsv

Try it: /api/v1/entities?category=fed&limit=5 200 · TSV · 517 bytes

# entities · hub fed · 13 total · showing 5 from offset 0 · as_of 2026-10-23T22:44:36Z · derived data CC BY 4.0 (credit parrot.markets) · not advice … ent name kind hub sub next austan-goolsbee Austan Goolsbee person fed governors christine-lagarde Christine Lagarde person fed other-central-banks christopher-waller Christopher Waller person fed governors fomc-press-conference FOMC press conference event_series fed fomc 2026-10-28 janet-yellen Janet Yellen person fed fed-chair …

GET /api/v1/appearances/{appearance_id}

One appearance: people, active source (text kind, rights, timeline), events

ParameterTypeDefaultDescription
appearance_id pathstringAppearance id or slug
formattsv | json | mdtsv

Try it: /api/v1/appearances/donald-trump:2026-11-01:posts_window 200 · TSV · 775 bytes

# app donald-trump:2026-11-01:posts_window · kind posts_window · date 2026-11-01 · ent donald-trump · status live · as_of 2026-10-23T22:44:36Z # title @realDonaldTrump posts, week ending 2026-11-01 · url https://parrot.markets/e/2026-11-01-donald-trump-posts-window # people donald-trump (speaker) # source posts · text_kind official · rights link_only · src https://truthsocial.com/@realDonaldTrump · timeline none · verified - · words - · Truth … # text pending: source listed, text not fetched yet · derived data CC BY 4.0 (credit parrot.markets) · not advice (parrot.markets/disclosure) ev v status kind scope n_w p:what-will-trump-post-this-week-october-26-november-1-20261101 P open word named 12 …

GET /api/v1/appearances/{appearance_id}/text

Full text of an appearance, only when its source is public domain or OPL (else 403 rights)

ParameterTypeDefaultDescription
appearance_id pathstringAppearance id or slug

Try it: /api/v1/appearances/prime-ministers-questions:2026-10-21:pmqs/text 200 · text · 41,836 bytes

# prime-ministers-questions:2026-10-21:pmqs · Prime Minister's Questions, 21 October 2026 · rights opl · Contains Parliamentary information licensed … [0] Clive Jones (Wokingham) (LD): Q1. If he will list his official engagements for Wednesday 21 October. [1] andy-burnham: Today we welcome the Sultan of Oman on the occasion of the state visit, which is an opportunity to recognise the deep and historic … [2] Clive Jones: Like you, Mr Speaker, I have recollections of Aberfan and being at primary school myself at that time. Too many patients are sufferi… [3] andy-burnham: I thank the hon. Gentleman for his question and recognise his sincerity and personal experience in this regard. We have a national … [4] Alex McIntyre (Gloucester) (Lab): Q4. When Ian and Emma bought their flat a few years ago, they were told there was a 10-year warranty on its con… [5] andy-burnham: I thank my hon. Friend for raising that question. I think we all feel for Emma, given the position she is in. I can give him an ass… …

GET /api/v1/changes

What changed since a time: entities, appearances, sources, events (strikes roll up), history; paged by a cursor

ParameterTypeDefaultDescription
since requiredstringISO time (e.g. a previous response's as_of) or the `next` cursor of the previous page
limitinteger50
typesstringComma list of entity, appearance, source, event, strike, history
formattsv | json | mdtsv

Try it: /api/v1/changes?since=2026-10-22&limit=5 200 · TSV · 743 bytes

# changes since 2026-10-22T00:00:00Z · 5 rows (rolling up 35 row changes on this page) · more: since=2026-10-22T00:22:26Z|source|tbpn:2026-10-21:podc… ts type id op 2026-10-22T00:08:16Z event p:what-will-andy-burnham-say-at-the-next-prime-ministers-questions-event-20261028 upd 2026-10-22T00:08:16Z event p:what-will-be-said-on-the-first-joe-rogan-experience-episode-of-the-week-october-26 upd 2026-10-22T00:13:20Z event k:KXEARNINGSMENTIONWGO-26DEC18 upd 2026-10-22T00:22:26Z appearance tbpn:2026-10-21:podcast_episode upd 2026-10-22T00:22:26Z source tbpn:2026-10-21:podcast_episode add …

GET /api/v1/windows

Window markets, a row each: window, scope, known appearances, with text, own posts, listed words

ParameterTypeDefaultDescription
entitystring
statusopen | allopen
limitinteger50
formattsv | json | mdtsv

Try it: /api/v1/windows?limit=5 200 · TSV · 969 bytes

# window markets · 5 rows · spoken vs spoken+posts per word: /api/v1/window?event=<ev> · derived data CC BY 4.0 (credit parrot.markets) · not advice … ev v ent fmt start end status scope known text posts n_w k:KXTRUMPSAYNICKNAME-27JAN01 K donald-trump window_month 2026-10-01T14:00:00Z 2027-01-01T05:00:00Z open window_spoken_written 30 5 509 23 p:what-will-trump-post-this-week-october-26-november-1-20261101 P donald-trump posts_window 2026-10-26T04:00:00Z 2026-11-02T04:59:00Z open posts_text… p:what-will-trump-say-this-week-october-26-november-1-20261101 P donald-trump window_week 2026-10-26T04:00:00Z 2026-11-02T04:59:00Z open window_spoke… k:KXTRUMPSAYCOMPANY-26NOV01 K donald-trump window_month 2026-10-01T14:00:00Z 2026-11-01T04:00:00Z open window_spoken_written 30 5 509 50 k:KXTRUMPSAYCOUNTRY-26NOV01 K donald-trump window_month 2026-10-01T14:00:00Z 2026-11-01T04:00:00Z open window_spoken_written 30 5 509 42 …

GET /api/v1/window

One window market (this week / this month / posts): per word the spoken count, the posts count and both, the market's own count; part=apps lists the window's appearances with coverage

ParameterTypeDefaultDescription
event requiredstringEvent id (k:... / p:...)
partwords | appswords
formattsv | json | mdtsv

Try it: /api/v1/window?event=k:KXTRUMPSAYNICKNAME-27JAN01 200 · TSV · 1,081 bytes

# window k:KXTRUMPSAYNICKNAME-27JAN01 · donald-trump · 2026-10-01T14:00:00Z → 2027-01-01T05:00:00Z · counts spoken + his own written posts # coverage 5 of 30 known appearances transcribed · posts 509 own (115 reposts excluded) · as_of 2026-10-23T21:58:49Z · derived data CC BY 4.0 (credit… w thr res spoken posts spoken_posts cnt lower_bound Barack Hussein Obama 1 yes 14 2 16 16 0 Biden Crime Family 1 0 0 0 0 1 Comrade Kamala 1 0 0 0 0 1 Crazy Bernie 1 1 0 1 1 0 …

Earnings (legacy)

The earnings-era JSON endpoints, kept for existing clients. Earnings transcript text is not served: counts and quotes of at most 25 words.

GET /api/v1/companies

Tracked companies (filter q by symbol / name)

ParameterTypeDefaultDescription
qstring

Try it: /api/v1/companies?q=TSLA 200 · JSON · 274 bytes

{"companies":[{"symbol":"TSLA","name":"Tesla, Inc.","aliases":["TSLA","Tesla","Tesla, Inc."],"n_calls":62,"first_call":"2011-08-03","last_call":"2026-10-21","kalshi_series":["KXEARNINGSMENTIONTSLA"],"n_events":13,"open_events":1,"next_call_date":"2027-01-27","in_hf":true}]}

GET /api/v1/companies/{symbol}

One company: calls, events, speakers, next call date

ParameterTypeDefaultDescription
symbol pathstring

Try it: /api/v1/companies/TSLA 200 · JSON · 44,438 bytes

{"symbol":"TSLA","name":"Tesla, Inc.","aliases":["TSLA","Tesla","Tesla, Inc."],"kalshi_series":["KXEARNINGSMENTIONTSLA"],"in_hf":true,"n_calls":62,"calls":[{"id":10500,"symbol":"TSLA","report_date":"2026-10-21","fiscal_year":2026,"fiscal_quarter":3,"n_paragraphs":120,"n_words":8205,"company_words":7097,"flags":[],"n_events":2},{"id":9326,"symbol":"TSLA","report_date":"2026-07-22","fiscal_year":2026,"fiscal_quarter":2 …

GET /api/v1/calls

Calls, newest first

ParameterTypeDefaultDescription
symbolstringStock symbol, e.g. TSLA; a comma / space separated list where noted
fromstringDate YYYY-MM-DD
tostringDate YYYY-MM-DD
limitinteger50
offsetinteger0

Try it: /api/v1/calls?symbol=TSLA&limit=3 200 · JSON · 538 bytes

{"total":62,"calls":[{"id":10500,"symbol":"TSLA","report_date":"2026-10-21","fiscal_year":2026,"fiscal_quarter":3,"n_paragraphs":120,"n_words":8205,"company_words":7097,"flags":[],"n_events":2},{"id":9326,"symbol":"TSLA","report_date":"2026-07-22","fiscal_year":2026,"fiscal_quarter":2,"n_paragraphs":109,"n_words":8432,"company_words":7400,"flags":[],"n_events":2},{"id":9325,"symbol":"TSLA","report_date":"2026-04-22", …

GET /api/v1/calls/{call_id}

One call: speakers, paragraph structure (text withheld: internal rights), events; q marks a word (offsets + capped quotes)

ParameterTypeDefaultDescription
call_id pathinteger
qstringWord in Kalshi syntax: alternates separated by ' / ', optional threshold '(N+ times)' last, e.g. 'Tariff / Tariffs (3+ times)'; Polymarket's 'Quarter 15+ times' works too (marks it)
operatorbooleanCount the operator's speech too (Kalshi rules that mention the operator); alias include_operator
analystbooleanCount analysts' speech too (Polymarket's 'anyone' rule); alias include_analyst
include_operatorboolean
include_analystboolean

Try it: /api/v1/calls/10500 200 · JSON · 14,488 bytes

{"call":{"id":10500,"symbol":"TSLA","report_date":"2026-10-21","fiscal_year":2026,"fiscal_quarter":3,"n_paragraphs":120,"n_words":8205,"company_words":7097,"flags":[],"n_events":2,"qa_start_idx":20,"analyst_words":1108,"operator_words":0,"n_versions":1,"speakers":[{"name":"Elon Musk","role":"company","n_paragraphs":39,"n_words":2724},{"name":"Vaibhav Taneja","role":"company","n_paragraphs":28,"n_words":2093},{"name": …

GET /api/v1/count

A word's per-call counts over a company's last n calls

ParameterTypeDefaultDescription
symbol requiredstringStock symbol, e.g. TSLA; a comma / space separated list where noted
word requiredstringWord in Kalshi syntax: alternates separated by ' / ', optional threshold '(N+ times)' last, e.g. 'Tariff / Tariffs (3+ times)'; Polymarket's 'Quarter 15+ times' works too
ninteger8Number of calls; 0 = all
beforestringDate YYYY-MM-DD; only calls before it (default: through today)
operatorbooleanCount the operator's speech too (Kalshi rules that mention the operator); alias include_operator
analystbooleanCount analysts' speech too (Polymarket's 'anyone' rule); alias include_analyst
include_operatorboolean
include_analystboolean

Try it: /api/v1/count?symbol=TSLA&word=Cybertruck 200 · JSON · 1,641 bytes

{"symbol":"TSLA","word":"Cybertruck","alts":["Cybertruck"],"spelling_aliases":[],"threshold":1,"include_operator":false,"include_analyst":false,"before":"2026-10-24","calls":[{"id":9320,"report_date":"2025-01-29","fiscal_year":2024,"fiscal_quarter":4,"count":0,"prepared":0,"qa":0,"analyst":0,"operator":0,"hit":false,"flags":[]},{"id":9321,"report_date":"2025-04-22","fiscal_year":2025,"fiscal_quarter":1,"count":3,"pre …

GET /api/v1/occurrences

Every match of a word in one call

ParameterTypeDefaultDescription
call_id requiredinteger
word requiredstringWord in Kalshi syntax: alternates separated by ' / ', optional threshold '(N+ times)' last, e.g. 'Tariff / Tariffs (3+ times)'; Polymarket's 'Quarter 15+ times' works too
operatorbooleanCount the operator's speech too (Kalshi rules that mention the operator); alias include_operator
analystbooleanCount analysts' speech too (Polymarket's 'anyone' rule); alias include_analyst
include_operatorboolean
include_analystboolean
limitinteger
offsetinteger0
plainbooleanfalseSnippets as plain text with «hit» markers instead of HTML

Try it: /api/v1/occurrences?call_id=10500&word=Cybertruck&limit=3 200 · JSON · 539 bytes

{"call_id":10500,"word":"Cybertruck","alts":["Cybertruck"],"spelling_aliases":[],"threshold":1,"include_operator":false,"include_analyst":false,"total":1,"counted_total":1,"hit":true,"flags":[],"warnings":[],"offset":0,"occurrences":[{"idx":57,"speaker":"Vaibhav Taneja","role":"company","section":"qa","counted":true,"start":null,"end":null,"snippet":"…saying, &quot;Can we get into an FSD drive?&quot; They&#x27;re not …

GET /api/v1/trend

A word's count and rate in every call of a company

ParameterTypeDefaultDescription
symbol requiredstringStock symbol, e.g. TSLA; a comma / space separated list where noted
word requiredstringWord in Kalshi syntax: alternates separated by ' / ', optional threshold '(N+ times)' last, e.g. 'Tariff / Tariffs (3+ times)'; Polymarket's 'Quarter 15+ times' works too
operatorbooleanCount the operator's speech too (Kalshi rules that mention the operator); alias include_operator
analystbooleanCount analysts' speech too (Polymarket's 'anyone' rule); alias include_analyst
include_operatorboolean
include_analystboolean

Try it: /api/v1/trend?symbol=TSLA&word=Cybertruck 200 · JSON · 7,393 bytes

{"symbol":"TSLA","word":"Cybertruck","alts":["Cybertruck"],"threshold":1,"include_operator":false,"include_analyst":false,"points":[{"call_id":9266,"report_date":"2011-08-03","fiscal_year":2011,"fiscal_quarter":2,"count":0,"per10k":0.0,"hit":false},{"call_id":9267,"report_date":"2011-11-03","fiscal_year":2011,"fiscal_quarter":3,"count":0,"per10k":0.0,"hit":false},{"call_id":9268,"report_date":"2012-02-16","fiscal_yea …

GET /api/v1/compare

Terms gained / lost / new in call b vs call a (company speech)

ParameterTypeDefaultDescription
aintegerBase call id
bintegerCall id compared against a
symbolstringInstead of a / b: the symbol's previous vs latest call
topinteger40

Try it: /api/v1/compare?symbol=TSLA&top=5 200 · JSON · 1,510 bytes

{"a":{"id":9326,"symbol":"TSLA","report_date":"2026-07-22","fiscal_year":2026,"fiscal_quarter":2,"n_paragraphs":109,"n_words":8432,"company_words":7400,"flags":[],"n_events":2},"b":{"id":10500,"symbol":"TSLA","report_date":"2026-10-21","fiscal_year":2026,"fiscal_quarter":3,"n_paragraphs":120,"n_words":8205,"company_words":7097,"flags":[],"n_events":2},"gained":[{"term":"hard","a":3,"b":13,"a_per10k":4.0,"b_per10k":18 …

GET /api/v1/events

Mention-market events (earnings JSON shape; next_strikes_preview = word:p)

ParameterTypeDefaultDescription
venuekalshi | polymarket | allall
statusopen | closed | settled | allopen
symbolstringStock symbol, e.g. TSLA; a comma / space separated list where noted (list allowed)
fromstringDate YYYY-MM-DD; call date on or after
tostringDate YYYY-MM-DD; call date on or before
limitinteger200
offsetinteger0
preview_ninteger6Strikes in next_strikes_preview (open events; 0 = none)
formatjson | tsv | csvjsontsv / csv: one line per event
fieldsstringComma list of columns (tsv / csv / json rows): id, venue, ticker, series, symbol, company, title, call_date, call_type, status, close_time, url, n_strikes, volume, call_id, counterpart_id, session, call_date_source, venue_call_date, close_is_placeholder, n_yes, n_no, qa, next_strikes_preview
marketsbooleanfalseAdd venue prices (bid, ask, last, mid; may be delayed). Off by default (D7)

Try it: /api/v1/events?symbol=TSLA&limit=2 200 · JSON · 1,398 bytes

GET /api/v1/events/{event_id}

One event: strikes with history stats, published p (p_src), results; prices with markets=1

ParameterTypeDefaultDescription
event_id pathstring
compactbooleanfalseDrop internal keys, raw price subkeys and empty values
marketsbooleanfalseAdd venue prices (bid, ask, last, mid; may be delayed). Off by default (D7)

GET /api/v1/strikes/{strike_id}/prices

Market endpoint: price snapshots of one strike

ParameterTypeDefaultDescription
strike_id pathstring

GET /api/v1/calendar

Tracked companies' calls in the next N days

ParameterTypeDefaultDescription
daysinteger14

Try it: /api/v1/calendar?days=7 200 · JSON · 20,087 bytes

GET /api/v1/qa

Settlement agreement: transcript count vs market result

ParameterTypeDefaultDescription
symbolstring
venuekalshi | polymarket
mismatch_onlybooleanfalse
limitinteger500
offsetinteger0

Try it: /api/v1/qa?mismatch_only=1&limit=3 200 · JSON · 9,637 bytes

{"overall":{"n":8512,"agree":8442,"rate":0.9918},"by_venue":{"kalshi":{"n":6353,"agree":6304,"rate":0.9923},"polymarket":{"n":2159,"agree":2138,"rate":0.9903}},"by_symbol":[{"symbol":"RYAAY","n":13,"agree":10,"rate":0.7692},{"symbol":"INTU","n":14,"agree":12,"rate":0.8571},{"symbol":"MU","n":87,"agree":76,"rate":0.8736},{"symbol":"TSM","n":27,"agree":25,"rate":0.9259},{"symbol":"CALM","n":14,"agree":13,"rate":0.9286} …

Sports

Sports broadcasts: leagues, games and word boards (settlement history only).

GET /api/v1/sports

Sports hub: per-league status, counts and next game, plus the live strip (history only)

ParameterTypeDefaultDescription
formatstringtsv
fieldsstring

Try it: /api/v1/sports 200 · TSV · 1,396 bytes

# sports · state live = a market is open · History only on Kalshi: sports mention markets paused 31 Jul 2026 (https://www.stlpr.org/npr/2026-08-13/fe… # as_of 2026-10-23T22:44:36Z · derived data CC BY 4.0 (credit parrot.markets) · not advice (parrot.markets/disclosure) ent name state v events strikes first last next nfl NFL live KP 126 2610 2025-02-09 2026-10-18 nba NBA history KP 352 6530 2025-06-05 2026-06-23 mlb MLB history K 188 3531 2025-10-21 2026-08-01 fifa-world-cup FIFA World Cup history KP 167 4500 2025-12-05 2026-07-19 …

GET /api/v1/sports/live

Games with open or unresolved sports markets (upcoming, live or awaiting resolution)

ParameterTypeDefaultDescription
formatstringtsv
marketsinteger0
fieldsstring

Try it: /api/v1/sports/live 200 · TSV · 1,109 bytes

# sports live strip · states: live, upcoming (listed), pending (game over, unresolved), likely (national window, not listed yet) · top3 key:p<p>:n (c… # as_of 2026-10-23T22:44:36Z · derived data CC BY 4.0 (credit parrot.markets) · not advice (parrot.markets/disclosure) date time ent app away home net booth state ev v n_w top3 2026-10-11 16:25 nfl nfl:2026-10-11:game-sf-sea SF SEA Fox pending p:what-will-the-announcers-say-during-the-49ers-vs-seahawks-game-20261011 P 15 sa… 2026-10-15 20:15 nfl nfl:2026-10-15:game-sea-den SEA DEN Prime Video Al Michaels, Kirk Herbstreit pending p:what-will-the-announcers-say-during-the-s… 2026-10-18 20:20 nfl nfl:2026-10-18:game-dal-gb DAL GB NBC Mike Tirico, Cris Collinsworth pending p:what-will-the-announcers-say-during-the-cowboys-v… …

GET /api/v1/sports/ufc/lengths

UFC: YES share of settled bout words by how long the fight lasted

ParameterTypeDefaultDescription
formatstringtsv
fieldsstring

Try it: /api/v1/sports/ufc/lengths 200 · TSV · 407 bytes

# UFC bouts: YES share of settled strikes by fight length (ESPN final round + clock) # as_of 2026-10-23T22:44:36Z · derived data CC BY 4.0 (credit parrot.markets) · not advice (parrot.markets/disclosure) bin bouts strikes yes rate dec_y dec_n blood_y blood_n <=5 min (R1) 26 421 45 0.11 3 25 1 26 5-10 min 12 199 41 0.21 2 12 5 12 10-15 min 35 550 158 0.29 25 35 11 35 15-25 min 14 237 102 0.43 8 11 8 14

GET /api/v1/sports/games

Games by league, date window (ET) and whether they listed markets

ParameterTypeDefaultDescription
leaguestring
startstring
endstring
listedinteger
limitinteger50
formatstringtsv
fieldsstring

Try it: /api/v1/sports/games?league=nfl&listed=1&limit=3 200 · TSV · 728 bytes

# sports games · ent = league · away / home = fighter a / b for fights # as_of 2026-10-23T22:44:36Z · derived data CC BY 4.0 (credit parrot.markets) · not advice (parrot.markets/disclosure) date time ent app away home net booth venue surface status score periods ev 2025-09-28 20:20 nfl nfl:2025-09-28:game-gb-dal GB DAL NBC Mike Tirico, Cris Collinsworth AT&T Stadium turf final 40-40 5 k:KXSNFMENTION-25SEP28 2025-09-29 19:15 nfl nfl:2025-09-29:game-nyj-mia NYJ MIA ESPN Hard Rock Stadium grass final 21-27 4 p:what-will-the-announcers-say-during-jets-vs-do… 2025-09-29 20:15 nfl nfl:2025-09-29:game-cin-den CIN DEN ABC Joe Buck, Troy Aikman Empower Field at Mile High grass final 3-28 4 k:KXNFLMENTION-25SEP… …

GET /api/v1/sports/games/{app_id}

One game: facts, linked market events and each listed word with league history and result

ParameterTypeDefaultDescription
app_id pathstring
marketsinteger0
formatstringtsv
limitinteger
fieldsstring

Try it: /api/v1/sports/games/nfl:2026-10-18:game-dal-gb?limit=5 200 · TSV · 1,163 bytes

# sports game · app nfl:2026-10-18:game-dal-gb · ent nfl · away DAL · home GB · kickoff 2026-10-19T00:20:00Z · state done · network NBC · venue Lambe… # markets P p:what-will-the-announcers-say-during-the-cowboys-vs-packers-game-20261018 open pbp_or_color # history: league word history before this game, one per game; n_tm / n_net = games of either team / same network, shown when n>=5 # more 10 words not shown (limit=15 lists all) # as_of 2026-10-23T22:44:36Z · derived data CC BY 4.0 (credit parrot.markets) · not advice (parrot.markets/disclosure) w key thr scope v n y rate l10 n_tm rate_tm n_net rate_net p p_src res Safety safety 1 pbp_or_color P 114 112 0.98 YYYYYYYYYY 21 1 24 1 0.96 hist yes …

GET /api/v1/sports/{league}/words

A league's word board: games that listed each word, settled YES rate, last 10 and p

ParameterTypeDefaultDescription
league pathstring
sortstringlisted
limitinteger100
formatstringtsv
fieldsstring

Try it: /api/v1/sports/nfl/words?limit=5 200 · TSV · 770 bytes

# sports words · ent nfl · state live · History only on Kalshi: sports mention markets paused 31 Jul 2026 # listed = games that listed the word; n / y / rate / l10 count one settled observation per game; p = calibrated p for the next listing, p_src its so… # as_of 2026-10-23T22:44:36Z · derived data CC BY 4.0 (credit parrot.markets) · not advice (parrot.markets/disclosure) key w listed n y rate l10 last_y p p_src late hit Late Hit 115 115 13 0.11 nnnnnnnnnY 2026-10-18 0.19 hist safety Safety 115 115 113 0.98 YYYYYYYYYY 2026-10-18 0.97 hist one handed One Handed 115 114 21 0.18 nnnnnYnnnn 2026-10-05 0.15 hist …

GET /api/v1/sports/{league}/teams/{team_id}

A team: words whose YES rate in its games differs most from the league, and its games

ParameterTypeDefaultDescription
league pathstring
team_id pathstring
formatstringtsv
fieldsstring

Try it: /api/v1/sports/nfl/teams/green-bay-packers 200 · TSV · 882 bytes

# sports team · ent nfl · team green-bay-packers · Green Bay Packers · splits shown when n>=5 · lg_n / lg_rate = the whole league, diff = rate - lg_r… # as_of 2026-10-23T22:44:36Z · derived data CC BY 4.0 (credit parrot.markets) · not advice (parrot.markets/disclosure) key w n y rate l10 lg_n lg_rate diff pro bowl|pro bowler Pro Bowl / Pro Bowler 6 3 0.5 nnnYYY 58 0.79 -0.29 contract Contract 6 1 0.17 nnnYnn 61 0.43 -0.26 next gen stat Next Gen Stat 6 4 0.67 YnYYnY 57 0.42 0.25 tush push Tush Push 5 1 0.2 nnnYn 58 0.34 -0.14 …

GET /api/v1/sports/{league}/networks/{network}

Word YES rates in one network's games of a league, with the league rate beside each

ParameterTypeDefaultDescription
league pathstring
network pathstring
formatstringtsv
fieldsstring

Try it: /api/v1/sports/nfl/networks/NBC 200 · TSV · 1,935 bytes

# sports network · ent nfl · net NBC · splits shown when n>=5 · lg_n / lg_rate = the whole league, diff = rate - lg_rate # as_of 2026-10-23T22:44:36Z · derived data CC BY 4.0 (credit parrot.markets) · not advice (parrot.markets/disclosure) key w n y rate l10 lg_n lg_rate diff next gen stat Next Gen Stat 8 8 1 YYYYYYYY 57 0.42 0.58 offside Offside / Offsides 6 6 1 YYYYYY 20 0.7 0.3 fumble|fumbled Fumble / Fumbles / Fumbled 8 5 0.62 YYnnYnYY 24 0.88 -0.25 pylon Pylon 11 5 0.45 YnnYYnnnYn 37 0.22 0.24 …

Status

Data freshness and service health.

GET /api/v1/status

Data freshness, counts, each job's last run, QA rates and gap counts (compact); detail=1 adds job summaries and the gap lists

ParameterTypeDefaultDescription
detailbooleanfalseAdd each job's last summary and the gap lists (earnings events without a symbol, capped; companies without transcripts)

Try it: /api/v1/status 200 · JSON · 2,303 bytes

{"hf":{"sha":"2afd3723f8e92449618c617e4ed7d89e85ab0e18","last_modified":"2026-10-23T05:49:25.000Z","last_check":"2026-10-23T22:43:23Z","last_ingest":"2026-10-23T06:37:47Z"},"counts":{"companies":187,"calls":10507,"paragraphs":807079,"events":5500,"strikes":97161,"open_events":202,"entities":1149,"appearances":12834,"sources":11628,"segments":157244,"word_history":67987,"posts":12641},"jobs":[{"job":"backup","ok":true …

GET /api/v1/status/health

Compact health: green / amber / red, freshness per category, 5xx rate, Mac worker (<= 2 KB; ?probe=1 answers 503 when red)

ParameterTypeDefaultDescription
probebooleanfalse

Try it: /api/v1/status/health 200 · JSON · 1,107 bytes

{"status":"green","at":"2026-10-23T22:44:58Z","checks":{"kalshi":"ok","pm":"ok","jobs":"ok","link":"ok","history":"ok","qa":"ok","errors":"ok","worker":"ok","text":"ok","backup":"ok","import":"ok"},"up":1,"why":[],"cat":{"business":["Delayed","2026-10-20T23:45",2,14],"earnings":["Up to date","2026-10-23T06:38",0,147],"entertainment":["No data yet","",0,1],"fed":["Up to date","2026-10-21T02:15",0,2],"news":["Up to dat …

Plain text for agents.