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)
| Parameter | Type | Default | Description |
|---|---|---|---|
category | string | Hub id (earnings, trump, fed, white-house, news, politics, sports, business, entertainment, podcasts, world); default all | |
days | integer | 7 | |
markets | boolean | false | Add px (mid price 0-1 of the listing venue; may be delayed). Off by default |
all | boolean | false | Also occasions without a market (scheduled appearances, the earnings calendar) |
fields | string | Comma 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 | |
format | tsv | json | md | tsv |
Try it: /api/v1/upcoming
# 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
| Parameter | Type | Default | Description |
|---|---|---|---|
event | string | Event id (k:<KALSHI TICKER> or p:<polymarket slug>); its venue counterparts are merged in | |
appearance | string | Appearance id or slug | |
entity | string | Entity 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 | |
symbol | string | Earnings stock symbol (alias of entity= for companies), e.g. NFLX | |
date | string | Date YYYY-MM-DD (with entity / symbol) | |
markets | boolean | false | Add px (mid price 0-1 of the listing venue; may be delayed). Off by default |
fields | string | Comma 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 | |
limit | integer | Rows (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 | |
offset | integer | 0 | First row (the more: offset= of the previous page) |
format | tsv | json | md | tsv |
Try it: /api/v1/brief?entity=tesla
# 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
| Parameter | Type | Default | Description |
|---|---|---|---|
word | string | Word 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 | |
key | string | A word key instead of word= ('ai|artificial intelligence') | |
entity | string | Entity id (donald-trump, nvidia, the-last-word, role-fed-chair), a name or an alias | |
symbol | string | Earnings stock symbol (alias of entity= for companies), e.g. NFLX | |
markets | boolean | false | Add px (mid price 0-1 of the listing venue; may be delayed). Off by default |
next | boolean | false | Answer 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 |
format | text | json | text |
GET /api/v1/quotes
Where a word was said: capped quotes (<= 25 words, match in «»), newest first, counted under the market's scope
| Parameter | Type | Default | Description |
|---|---|---|---|
word required | string | Word in Kalshi syntax: alternates separated by ' / ', optional threshold '(N+ times)' last, e.g. 'Tariff / Tariffs (3+ times)'; Polymarket's 'Quarter 15+ times' works too | |
entity | string | Entity id (donald-trump, nvidia, the-last-word, role-fed-chair), a name or an alias | |
symbol | string | Earnings stock symbol (alias of entity= for companies), e.g. NFLX | |
appearance | string | One appearance (id or slug) | |
call | string | Earnings: report date YYYY-MM-DD (nearest call within 3 days) or 'last' | |
call_id | integer | ||
limit | integer | 5 | Quote rows (at most 5 from sources that are not public domain / OPL; 0 = that maximum) |
fields | string | Comma 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 | |
format | tsv | json | md | text | tsv |
GET /api/v1/clips
Timed clips of a word (yt:<video id>@<start>-<end>) from verified timelines, newest first
| Parameter | Type | Default | Description |
|---|---|---|---|
word required | string | Word in Kalshi syntax: alternates separated by ' / ', optional threshold '(N+ times)' last, e.g. 'Tariff / Tariffs (3+ times)'; Polymarket's 'Quarter 15+ times' works too | |
entity | string | Entity id (donald-trump, nvidia, the-last-word, role-fed-chair), a name or an alias | |
symbol | string | Earnings stock symbol (alias of entity= for companies), e.g. NFLX | |
appearance | string | One appearance (id or slug) | |
limit | integer | 10 | |
fields | string | Comma list of columns: key, app, date, spk, t, clip, q | |
format | tsv | json | md | tsv |
GET /api/v1/history
Settlement history: an entity's words (most settled first), or with word= every settled listing of one word
| Parameter | Type | Default | Description |
|---|---|---|---|
entity | string | Entity id (donald-trump, nvidia, the-last-word, role-fed-chair), a name or an alias | |
symbol | string | Earnings stock symbol (alias of entity= for companies), e.g. NFLX | |
word | string | Word in Kalshi syntax: alternates separated by ' / ', optional threshold '(N+ times)' last, e.g. 'Tariff / Tariffs (3+ times)'; Polymarket's 'Quarter 15+ times' works too | |
q | string | Without word: keys containing this text | |
limit | integer | 25 | |
offset | integer | 0 | First row (the '# more: offset=' of the previous page) |
format | tsv | json | md | tsv |
GET /api/v1/search
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
| Parameter | Type | Default | Description |
|---|---|---|---|
q required | string | SQLite FTS5 query: words (ANDed), "exact phrase", prefix* (3+ characters), OR, NOT (needs a left side), NEAR(a b, 5) | |
category | string | Hub id | |
entity | string | Entity id (donald-trump, nvidia, the-last-word, role-fed-chair), a name or an alias | |
symbol | string | Stock symbol, e.g. TSLA; a comma / space separated list where noted (list allowed; group=call, or an alias of entity=) | |
from | string | Date YYYY-MM-DD | |
to | string | Date YYYY-MM-DD | |
limit | integer | 10 | Transcripts (appearances / calls) per page |
offset | integer | 0 | |
per_app | integer | 2 | Hits per transcript |
group | string | call: the earnings-only JSON grouped by call (the pre-v3 shape) | |
role | company | analyst | operator | group=call only | |
section | prepared | qa | group=call only | |
speaker | string | group=call only: speaker name substring | |
per_call | integer | 5 | group=call only: snippets per call (capped at 5) |
plain | boolean | false | group=call only: «hit» text instead of HTML <mark> |
snippet_chars | integer | 160 | group=call only (capped at 200) |
format | tsv | json | md | csv | tsv | |
fields | string | Comma 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
# 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)
| Parameter | Type | Default | Description |
|---|---|---|---|
entity_id path | string | Entity id (donald-trump, nvidia, the-last-word, role-fed-chair), a name or an alias | |
fields | string | full: add the icon path | |
format | tsv | json | md | tsv |
Try it: /api/v1/entity/tesla
# 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})
| Parameter | Type | Default | Description |
|---|---|---|---|
id required | string | Entity id (donald-trump, nvidia, the-last-word, role-fed-chair), a name or an alias | |
fields | string | full: add the icon path | |
format | tsv | json | md | tsv |
Try it: /api/v1/entity?id=Tesla
# 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
| Parameter | Type | Default | Description |
|---|---|---|---|
category | string | Hub id; default all | |
q | string | Substring of the id or name | |
limit | integer | 200 | |
offset | integer | 0 | |
format | tsv | json | md | tsv |
GET /api/v1/appearances/{appearance_id}
One appearance: people, active source (text kind, rights, timeline), events
| Parameter | Type | Default | Description |
|---|---|---|---|
appearance_id path | string | Appearance id or slug | |
format | tsv | json | md | tsv |
Try it: /api/v1/appearances/donald-trump:2026-11-01:posts_window
# 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)
| Parameter | Type | Default | Description |
|---|---|---|---|
appearance_id path | string | Appearance id or slug |
Try it: /api/v1/appearances/prime-ministers-questions:2026-10-21:pmqs/text
# 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
| Parameter | Type | Default | Description |
|---|---|---|---|
since required | string | ISO time (e.g. a previous response's as_of) or the `next` cursor of the previous page | |
limit | integer | 50 | |
types | string | Comma list of entity, appearance, source, event, strike, history | |
format | tsv | json | md | tsv |
GET /api/v1/windows
Window markets, a row each: window, scope, known appearances, with text, own posts, listed words
| Parameter | Type | Default | Description |
|---|---|---|---|
entity | string | ||
status | open | all | open | |
limit | integer | 50 | |
format | tsv | json | md | tsv |
Try it: /api/v1/windows?limit=5
# 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
| Parameter | Type | Default | Description |
|---|---|---|---|
event required | string | Event id (k:... / p:...) | |
part | words | apps | words | |
format | tsv | json | md | tsv |
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)
| Parameter | Type | Default | Description |
|---|---|---|---|
q | string |
Try it: /api/v1/companies?q=TSLA
{"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
| Parameter | Type | Default | Description |
|---|---|---|---|
symbol path | string |
Try it: /api/v1/companies/TSLA
{"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
| Parameter | Type | Default | Description |
|---|---|---|---|
symbol | string | Stock symbol, e.g. TSLA; a comma / space separated list where noted | |
from | string | Date YYYY-MM-DD | |
to | string | Date YYYY-MM-DD | |
limit | integer | 50 | |
offset | integer | 0 |
GET /api/v1/calls/{call_id}
One call: speakers, paragraph structure (text withheld: internal rights), events; q marks a word (offsets + capped quotes)
| Parameter | Type | Default | Description |
|---|---|---|---|
call_id path | integer | ||
q | string | Word 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) | |
operator | boolean | Count the operator's speech too (Kalshi rules that mention the operator); alias include_operator | |
analyst | boolean | Count analysts' speech too (Polymarket's 'anyone' rule); alias include_analyst | |
include_operator | boolean | ||
include_analyst | boolean |
Try it: /api/v1/calls/10500
{"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
| Parameter | Type | Default | Description |
|---|---|---|---|
symbol required | string | Stock symbol, e.g. TSLA; a comma / space separated list where noted | |
word required | string | Word in Kalshi syntax: alternates separated by ' / ', optional threshold '(N+ times)' last, e.g. 'Tariff / Tariffs (3+ times)'; Polymarket's 'Quarter 15+ times' works too | |
n | integer | 8 | Number of calls; 0 = all |
before | string | Date YYYY-MM-DD; only calls before it (default: through today) | |
operator | boolean | Count the operator's speech too (Kalshi rules that mention the operator); alias include_operator | |
analyst | boolean | Count analysts' speech too (Polymarket's 'anyone' rule); alias include_analyst | |
include_operator | boolean | ||
include_analyst | boolean |
GET /api/v1/occurrences
Every match of a word in one call
| Parameter | Type | Default | Description |
|---|---|---|---|
call_id required | integer | ||
word required | string | Word in Kalshi syntax: alternates separated by ' / ', optional threshold '(N+ times)' last, e.g. 'Tariff / Tariffs (3+ times)'; Polymarket's 'Quarter 15+ times' works too | |
operator | boolean | Count the operator's speech too (Kalshi rules that mention the operator); alias include_operator | |
analyst | boolean | Count analysts' speech too (Polymarket's 'anyone' rule); alias include_analyst | |
include_operator | boolean | ||
include_analyst | boolean | ||
limit | integer | ||
offset | integer | 0 | |
plain | boolean | false | Snippets as plain text with «hit» markers instead of HTML |
Try it: /api/v1/occurrences?call_id=10500&word=Cybertruck&limit=3
{"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, "Can we get into an FSD drive?" They're not …GET /api/v1/trend
A word's count and rate in every call of a company
| Parameter | Type | Default | Description |
|---|---|---|---|
symbol required | string | Stock symbol, e.g. TSLA; a comma / space separated list where noted | |
word required | string | Word in Kalshi syntax: alternates separated by ' / ', optional threshold '(N+ times)' last, e.g. 'Tariff / Tariffs (3+ times)'; Polymarket's 'Quarter 15+ times' works too | |
operator | boolean | Count the operator's speech too (Kalshi rules that mention the operator); alias include_operator | |
analyst | boolean | Count analysts' speech too (Polymarket's 'anyone' rule); alias include_analyst | |
include_operator | boolean | ||
include_analyst | boolean |
GET /api/v1/compare
Terms gained / lost / new in call b vs call a (company speech)
| Parameter | Type | Default | Description |
|---|---|---|---|
a | integer | Base call id | |
b | integer | Call id compared against a | |
symbol | string | Instead of a / b: the symbol's previous vs latest call | |
top | integer | 40 |
GET /api/v1/events
Mention-market events (earnings JSON shape; next_strikes_preview = word:p)
| Parameter | Type | Default | Description |
|---|---|---|---|
venue | kalshi | polymarket | all | all | |
status | open | closed | settled | all | open | |
symbol | string | Stock symbol, e.g. TSLA; a comma / space separated list where noted (list allowed) | |
from | string | Date YYYY-MM-DD; call date on or after | |
to | string | Date YYYY-MM-DD; call date on or before | |
limit | integer | 200 | |
offset | integer | 0 | |
preview_n | integer | 6 | Strikes in next_strikes_preview (open events; 0 = none) |
format | json | tsv | csv | json | tsv / csv: one line per event |
fields | string | Comma 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 | |
markets | boolean | false | Add venue prices (bid, ask, last, mid; may be delayed). Off by default (D7) |
GET /api/v1/events/{event_id}
One event: strikes with history stats, published p (p_src), results; prices with markets=1
| Parameter | Type | Default | Description |
|---|---|---|---|
event_id path | string | ||
compact | boolean | false | Drop internal keys, raw price subkeys and empty values |
markets | boolean | false | Add 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
| Parameter | Type | Default | Description |
|---|---|---|---|
strike_id path | string |
GET /api/v1/calendar
Tracked companies' calls in the next N days
| Parameter | Type | Default | Description |
|---|---|---|---|
days | integer | 14 |
Try it: /api/v1/calendar?days=7
GET /api/v1/qa
Settlement agreement: transcript count vs market result
| Parameter | Type | Default | Description |
|---|---|---|---|
symbol | string | ||
venue | kalshi | polymarket | ||
mismatch_only | boolean | false | |
limit | integer | 500 | |
offset | integer | 0 |
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)
| Parameter | Type | Default | Description |
|---|---|---|---|
format | string | tsv | |
fields | string |
Try it: /api/v1/sports
# 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)
| Parameter | Type | Default | Description |
|---|---|---|---|
format | string | tsv | |
markets | integer | 0 | |
fields | string |
Try it: /api/v1/sports/live
# 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
| Parameter | Type | Default | Description |
|---|---|---|---|
format | string | tsv | |
fields | string |
Try it: /api/v1/sports/ufc/lengths
# 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 14GET /api/v1/sports/games
Games by league, date window (ET) and whether they listed markets
| Parameter | Type | Default | Description |
|---|---|---|---|
league | string | ||
start | string | ||
end | string | ||
listed | integer | ||
limit | integer | 50 | |
format | string | tsv | |
fields | string |
GET /api/v1/sports/games/{app_id}
One game: facts, linked market events and each listed word with league history and result
| Parameter | Type | Default | Description |
|---|---|---|---|
app_id path | string | ||
markets | integer | 0 | |
format | string | tsv | |
limit | integer | ||
fields | string |
Try it: /api/v1/sports/games/nfl:2026-10-18:game-dal-gb?limit=5
# 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
| Parameter | Type | Default | Description |
|---|---|---|---|
league path | string | ||
sort | string | listed | |
limit | integer | 100 | |
format | string | tsv | |
fields | string |
Try it: /api/v1/sports/nfl/words?limit=5
# 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
| Parameter | Type | Default | Description |
|---|---|---|---|
league path | string | ||
team_id path | string | ||
format | string | tsv | |
fields | string |
GET /api/v1/sports/{league}/networks/{network}
Word YES rates in one network's games of a league, with the league rate beside each
| Parameter | Type | Default | Description |
|---|---|---|---|
league path | string | ||
network path | string | ||
format | string | tsv | |
fields | string |
Try it: /api/v1/sports/nfl/networks/NBC
# 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
| Parameter | Type | Default | Description |
|---|---|---|---|
detail | boolean | false | Add each job's last summary and the gap lists (earnings events without a symbol, capped; companies without transcripts) |
Try it: /api/v1/status
{"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)
| Parameter | Type | Default | Description |
|---|---|---|---|
probe | boolean | false |
Try it: /api/v1/status/health
{"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 …