# Zortix for Muse (and any agent) — connector brief

Zortix indexes finance podcasts (Invest Like the Best, Odd Lots, All-In and
60+ more), extracts every attributed investment idea, scores how deeply it
was argued (1 to 5), and gives each one a timestamp back to the tape. With a
connector key, an agent acts for one Zortix account: its daily digest of
followed shows, search across the corpus, follows, saved ideas, and Ask
Zortix questions with citations.

Zortix is a descriptive record of what was said on podcasts. It is research
and education, attributed to third-party shows. It is not investment advice
and never a rating, forecast or recommendation.

## Connect

- MCP (Streamable HTTP): `https://api.zortix.app/v1/mcp`
- REST: `https://api.zortix.app/v1/agent/…`
- OpenAPI: `https://api.zortix.app/v1/agent/openapi.json`
- Health: `https://api.zortix.app/v1/mcp/health`
- Auth: `Authorization: Bearer <key>` (or `x-zortix-api-key: <key>`)
- Keys: the user creates one at `https://web.zortix.app/settings/connectors`
  (Settings → Connectors). Keys start with `zk_live_`, are shown once, and
  can be revoked there. A key also ends on its own a year after it was
  created, or after ninety days without a call; the next call then answers
  `401` with `reason: expired`, and the fix is a new key from the same
  page. Store the key in the agent's credential vault as `ZORTIX_API_KEY`;
  never paste it into a chat thread after setup.

Install prompt (Muse):

```
Build a custom connector for Zortix.
Read https://www.zortix.app/connectors/muse.md first.
MCP: https://api.zortix.app/v1/mcp
OpenAPI: https://api.zortix.app/v1/agent/openapi.json
Auth: Authorization Bearer with the secret ZORTIX_API_KEY.
After connecting, fetch today's digest for my account and summarise the depth 4+ ideas with citations.
```

## The calls that matter

| Job | MCP tool | REST |
|---|---|---|
| Morning brief for followed shows | `zortix_get_daily_digest` | `GET /v1/agent/digest` |
| Search ideas by ticker, show, theme, depth, date | `zortix_search_ideas` | `GET /v1/agent/ideas` |
| The full argument behind one card | `zortix_get_idea` | `GET /v1/agent/ideas/{id}` |
| Mentions of a ticker over a window | `zortix_list_ticker_mentions` | `GET /v1/agent/tickers/{symbol}/mentions` |
| How a show's view of a name moved over time | `thesis_history` | `GET /v1/agent/thesis-history` |
| Resolve or discover shows | `zortix_list_shows` | `GET /v1/agent/shows` |
| Follow / unfollow a show or ticker | `zortix_follow` | `POST` / `DELETE /v1/agent/follows/…` |
| Save / unsave an idea | `zortix_save_idea` | `POST` / `DELETE /v1/agent/saves` |
| Ask a research question, with citations | `zortix_ask` | `POST /v1/agent/ask` |
| Plan, remaining quotas, key scopes | `zortix_get_profile` | `GET /v1/agent/me` |

Every idea card carries: `id`, `headline`, `thesis`, `discussionDepth`
(1–5), `stance` (BULLISH / BEARISH / BALANCED / MIXED), `tickers`, `show`
(`id`, `slug`, `name`), `episode` (`id`, `title`, `publishedAt`),
`timestampSeconds` (integer or null, never guessed), `url` (permalink to the
idea with the source moment). Every response carries `attribution`.

## Three recipes

**Morning briefing for my followed shows.** One call:
`zortix_get_daily_digest`. Report the depth 4+ cards: headline, show,
episode date, stance word, and the permalink. If `personalized` is false
and the hint says the account follows nothing, offer `zortix_list_shows`
with `recommended=true` and follow only what the user picks.

**What has Odd Lots said about private credit in 2026?**
`zortix_ask` with the question as asked. Quote from the citations, naming
show and episode each time; when `coverage` is `low`, say so. For a list
instead of a synthesis, `zortix_search_ideas` with `showId: "odd-lots"`,
`query: "private credit"`, `from: "2026-01-01"`.

**Watch NVDA and tell me when a deep idea lands.** Daily (a Grokbot
routine or a Muse schedule): `zortix_list_ticker_mentions` with
`ticker: "NVDA"`, `minDepth: 4`, `from: <yesterday>`. Report new cards
only; never open full ideas unless the user asks.

## Quotas

| Action | Free | Premium |
|---|---|---|
| Digest, search, mentions, shows, follows list, profile | unlimited | unlimited |
| Full idea reads | 3 distinct per UTC day | unlimited |
| Ask Zortix questions | 3 per UTC day | unlimited |
| Followed shows / tickers | 15 / 10 | unlimited |
| Saved ideas | 10 | unlimited |
| Source moment (transcript quote + audio pointer) | — | included |
| `thesis_history`: the earlier statements of a thesis | latest statement only | included |
| `ticker_stance_timeline`: a show's stance-change events | weekly counts only | included |

A plan limit answers HTTP 402 with `error` set to one of `idea_read_limit`,
`ask_limit`, `follow_limit`, `save_limit`, `premium_required`, a
one-sentence `message`, an `upgradeUrl`, and `resetsAt` for day-scoped
limits. Tell the user the sentence and hand them the link; the agent never
runs a payment.

`thesis_history` and `ticker_stance_timeline` are the Premium lines that
are not a 402. Without Premium, `thesis_history` answers 200 with each
thesis's latest statement, `historyLocked: true` on a thesis whose earlier
statements were withheld, and a `historyLock`; `ticker_stance_timeline`
answers 200 with the weekly counts, no stance-change events, and a
`stanceChangesLock`. Each lock carries the same kind of sentence and
`upgradeUrl`.

Other errors: `401 unauthorized` (missing, revoked or expired key →
Settings → Connectors; an expired key carries `reason: expired` once, and
needs a new key, not a retry), `403 forbidden_scope` (the key lacks a scope; the response
names it) — both carry `helpUrl`, the fix-it article at
`https://web.zortix.app/help/connectors`, as does every 402 — `404 not_found`, `422 invalid_request`, `429 rate_limited` with
`Retry-After`. Rate limits: 120 requests per minute per key, 600 per hour
per account, 10 Ask questions per minute.

## Hard rules

- Present nothing as investment advice. Zortix summarises what named shows
  said; the agent reports that speech, attributed.
- Cite show + episode + air date with every statement, and the timestamp
  when the card has one. A null timestamp stays null.
- Cite Zortix (zortix.app) as the index and include the permalink.
- Never scrape `web.zortix.app`; everything on it is available here.
- Writes (`zortix_follow`, `zortix_save_idea`) only when the user asked.
- Do not paste the key into the conversation after setup.

Attribution rule carried on every response: *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.*

Support: hello@zortix.app · Docs: https://web.zortix.app/developers
