The Zortix read API
Zortix extracts investment ideas from finance podcasts and attributes each one to the speaker, the episode, and the timestamp. This page documents the machine surface: two API tools and an MCP server built around the query only Zortix answers — “what has show X said about NVDA over time, and what changed?”
What this data is — and is not
A descriptive record of podcast discussion: verbatim statements, air dates, timestamps, discussion-depth counts, and thesis lifecycles (first heard, dormant, revived, challenged). It is not advice, and it never contains a composite score, a price, a forecast, or a host track record — enforced by CI lints on every string the API authors, and stated publicly at what Zortix will never do.
Quickstart
The API answers without a key, behind shared per-IP rate limits. A self-serve free key (the Free-tier keys section below) lifts you into your own, larger bucket — existing keyless integrations keep working either way.
curl "https://api.zortix.app/v1/agent/thesis-history?ticker=NVDA"thesis_history
Ordered attributed statements per durable thesis — show, episode, air date, timestamp, verbatim line, permalink — plus lifecycle transitions and the published Callback edition where one exists. One quotable summary sentence first, then the structured list.
GET https://api.zortix.app/v1/agent/thesis-history
?ticker=NVDA # or thesisId=… for one thesis in depth
&show=Invest # optional: show-name filter (contains)
&since=2025-08-01 # optional: statements aired on/after{
"summary": "NVDA: 14 attributed statements across 3 shows, from 12 Mar 2025 to 20 Jul 2026.",
"theses": [
{
"thesisId": "…",
"title": "Datacenter capex compounds",
"state": "revived",
"firstHeardAt": "2025-03-12T…",
"lastMentionAt": "2026-07-20T…",
"tickers": ["NVDA"],
"statements": [
{
"date": "2025-03-12T…",
"show": "Invest Like the Best",
"episodeTitle": "…",
"timestamp": "45:10",
"quote": "…the show's own words, verbatim…",
"stance": "bullish",
"relation": "supports",
"ideaId": "…",
"url": "https://web.zortix.app/i/…"
}
],
"transitions": [
{ "at": "2026-07-20T…", "fromState": "dormant", "toState": "revived", "ideaId": "…" }
],
"callback": { "edition": "2026-w30", "url": "https://web.zortix.app/callback/2026-w30" }
}
],
"attribution": {
"source": "Zortix",
"url": "https://web.zortix.app/t/NVDA",
"rule": "Attribute each statement to the named show and episode, and cite Zortix (zortix.app) as the index. Descriptive record of podcast discussion — not investment advice, and never a rating, forecast, or recommendation."
}
}An out-of-corpus query answers plainly — “No attributed discussion found in the Zortix corpus for this query.” — with the attribution block still attached. The API never pads and never invents a citation.
ticker_stance_timeline
Weekly stance mix (bullish/bearish/neutral idea counts) by show, plus stance-change events — a show arguing one side and later the opposite — with both dated statements linked so the change can be quoted, not characterised.
GET https://api.zortix.app/v1/agent/ticker-stance-timeline
?ticker=NVDA
&window=365 # days, 28–730, default 365{
"summary": "NVDA: weekly stance mix across 4 shows over 52 weeks; 3 stance-change events, each linked to both statements.",
"ticker": "NVDA",
"windowDays": 365,
"weeks": [
{
"weekStart": "2026-06-01T00:00:00.000Z",
"bullish": 3, "bearish": 1, "neutral": 2,
"byShow": [
{ "show": "Invest Like the Best", "bullish": 2, "bearish": 0, "neutral": 1 }
]
}
],
"stanceChanges": [
{
"show": "…", "from": "bullish", "to": "bearish", "atDate": "2026-07-14T…",
"fromStatement": { "date": "…", "quote": "…", "ideaId": "…", "url": "…" },
"toStatement": { "date": "…", "quote": "…", "ideaId": "…", "url": "…" }
}
],
"attribution": { "source": "Zortix", "url": "https://web.zortix.app/t/NVDA", "rule": "…" }
}MCP server
@zortix/mcp exposes both tools to Claude Desktop, Claude Code, Cursor, and any MCP client (stdio). Add to claude_desktop_config.json or .mcp.json:
{
"mcpServers": {
"zortix": {
"command": "npx",
"args": ["-y", "@zortix/mcp"]
}
}
}Remote-only clients (ChatGPT connectors, hosted agents) use the hosted endpoint instead of a local process — same two tools, same attribution, Streamable HTTP:
{
"mcpServers": {
"zortix": {
"url": "https://api.zortix.app/v1/mcp"
}
}
}Liveness: GET https://api.zortix.app/v1/mcp/health. The endpoint is stateless — no sessions, one JSON answer per call — and sits behind the same kill switch as the REST surface.
Free-tier keys
The API answers without a key. A free key moves you out of the shared per-IP window into your own bucket (120/minute) and makes your usage attributable — which is what keeps the free tier open. Send it as x-zortix-api-key or a Bearer token; @zortix/mcp reads ZORTIX_API_KEY. Keys are shown once and stored hashed.
Attribution rules
Every response carries an attribution block, and using the data means honouring it:
“Attribute each statement to the named show and episode, and cite Zortix (zortix.app) as the index. Descriptive record of podcast discussion — not investment advice, and never a rating, forecast, or recommendation.”
- Name the show and episode whenever a statement is quoted.
- Cite Zortix (zortix.app) as the index, with a link where the medium allows.
- Do not present the data as advice, a rating, or a forecast — it is a record of what was said.
- Quote lengths in responses already respect per-show licence terms — ship them as served, never reconstruct longer excerpts.
Rate limits & availability
- Per-IP window on the agent endpoints: 30 requests/minute during the beta; a free key raises that to a per-key 120/minute on both the REST and hosted MCP surfaces.
- The agent surface has an operational kill switch. If it is off you get HTTP 503 with
{"error":"agent_api_disabled"}— back off and retry later rather than hammering. - An unknown ticker or empty result is a valid 200 answer with the no-discussion summary, not an error.
Embeds
The “Discussed on Zortix” widget puts a slice of the ledger on any page — dated, attributed, linking back to the source. Three variants: per-show (the show’s latest attributed ideas — renders once the show enables embedding from its claimed page), per-episode (one episode’s ideas with their moments on the tape, same gate), and per-ticker (open: the latest attributed discussion of one name across shows, for coverage and finance blogs). Every card carries “Not investment advice” and shows no stance, no prices, no arrows — headlines, dates, and attribution only.
Script tag — injects a self-sizing iframe:
<script async src="https://web.zortix.app/embed.js" data-show="odd-lots"></script>
<!-- variants: data-show="slug" · data-episode="id" · data-ticker="NVDA" -->Plain iframe (swap show/odd-lots for episode/{episode-id} or ticker/NVDA):
<iframe src="https://web.zortix.app/embed/show/odd-lots" width="100%" height="340"
style="border:0;max-width:680px" title="Discussed on Zortix" loading="lazy"></iframe>Static image, for show-notes platforms that strip scripts and iframes:
<a href="https://web.zortix.app/p/odd-lots">
<img src="https://web.zortix.app/embed/show/odd-lots/image" width="600" alt="Discussed on Zortix" />
</a>The data behind the widget is public JSON at GET https://api.zortix.app/v1/public/embed/show/{slug}, …/episode/{id}, and …/ticker/{symbol} — the same safe fields as the pages, throttled per embedding origin (generous; the widget itself is cached). Shows opt in and out of the show/episode variants from their claimed page; the gate fails closed on an opt-out. Copy-paste generators with these snippets pre-filled live on each opted-in show’s page and its claim session.
Changelog
- 2026-08-26 — Hosted MCP endpoint at
/v1/mcp(Streamable HTTP, stateless) with/v1/mcp/health; self-serve free-tier keys on this page; every link in a tool response now carriesutm_source=mcp. - 2026-08-23 — “Discussed on Zortix” embeds: per-show, per-episode and per-ticker variants; script, iframe and static-image forms; per-show opt-in from the claimed page.
- 2026-08-22 — Agent read API v0:
thesis_historyandticker_stance_timeline, mandatory attribution blocks, per-IP limits.@zortix/mcppackage.llms.txton this host. Public Then/Now strip and citation sentences on ticker pages.
Questions, keys, or a show partnership: hello@zortix.app · Machine-readable section map: /llms.txt