# Pricing — הפודקאסט של מיכאל

> Free. No signup, no ads, no paywall.

## Onboarding

Onboarding הפודקאסט של מיכאל from an AI agent is **zero friction**: no signup, no contact-sales form, no API key handoff.

- **Free tier available** — every endpoint is free, perpetual, and unmetered beyond the per-IP rate limit. No paid tier exists.
- **Self-serve key generation** — dynamic OAuth client registration at `/oauth/register` (RFC 7591), or skip auth entirely and call any endpoint anonymously.
- **Sandbox / test environment** — production *is* the sandbox. All endpoints are read-only over static episode data, so no separate staging or test keys are needed. Hit the live URLs from day one.
- **Zero-auth access** — every read endpoint accepts unauthenticated calls. Optional OAuth 2.1 + PKCE S256 is available for clients that prefer to send a bearer token.

Try it in under 30 seconds: `curl https://podcast-a0k.pages.dev/api/search?q=ai`.

## Plans

Every access tier below is free. The differentiation is *audience and surface*, not price — agents looking for a structured tier breakdown find one here; humans find it equally simple.

| Plan              | Price        | Audience                                  | Rate limit       | Includes |
| ----------------- | ------------ | ----------------------------------------- | ---------------- | -------- |
| Listener          | $0           | Podcast-app subscribers                   | none             | MP3 audio, RSS feed, chapter markers, every episode in perpetuity. |
| Reader            | $0           | Humans reading on the web                 | none             | Everything in Listener + per-episode HTML/markdown (`/<id>.md`), homepage markdown (`/index.md`), in-page search. |
| Agent / API       | $0           | Programmatic clients                      | 60 req/min/IP    | Everything in Reader + JSON endpoints (`/api/search`, `/episodes.json`, `/search-index.json`, `/ask`), RFC 9598 rate-limit headers, structured `{error}` envelope. |
| MCP Native        | $0           | MCP-capable assistants                    | 60 req/min/IP    | Everything in Agent + native MCP server at `/mcp` (Streamable HTTP, JSON-RPC 2.0, batch of up to 50), tools `search_episodes` / `get_episode` / `get_latest_episode`, MCP Apps UI cards via `ui://` resources. |
| Agentic-commerce  | $0           | UCP / ACP-aware checkout agents (demo)    | 60 req/min/IP    | Demo `POST /checkout_sessions` (ACP) and `POST /checkout-sessions` (UCP) — canned zero-total sessions for protocol handshake; no transactions, no charges. |
| Tip jar           | Voluntary    | Listeners who want to support production  | none             | `POST /donate` returns HTTP 402 with x402 + MPP payment-discovery headers. USDC on Base Sepolia by default; address configurable in `podcast.yaml`. **The free read API never returns 402.** |
| Sponsor           | Voluntary    | GitHub Sponsors                           | —                | Listed at https://github.com/sponsors/mluggy. Show remains free regardless of sponsorship. |
| Higher rate-limit | Not offered  | Heavy programmatic clients                | —                | No paid tier; bring your own caching/proxy if you need more than 60 req/min/IP. |

## Feature comparison

Quick cross-tier reference. Every checked feature is free at the corresponding tier.

| Feature                                  | Listener | Reader | Agent / API | MCP Native |
| ---------------------------------------- | -------- | ------ | ----------- | ---------- |
| MP3 audio (with chapters)                | ✓        | ✓      | ✓           | ✓          |
| RSS subscription (`/rss.xml`)            | ✓        | ✓      | ✓           | ✓          |
| Transcripts (`/sNNeMM.txt`, SRT)         | —        | ✓      | ✓           | ✓          |
| Episode markdown (`/<id>.md`)            | —        | ✓      | ✓           | ✓          |
| Full-text search (`/api/search`)         | —        | ✓ web  | ✓ API       | ✓ tool     |
| Natural-language ask (`/ask`, NLWeb)     | —        | ✓ web  | ✓ JSON+SSE  | ✓          |
| MCP server (Streamable HTTP)             | —        | —      | —           | ✓          |
| Batch (JSON-RPC array, `POST /jobs/batch`) | —      | —      | ✓           | ✓          |
| Async job pattern (202 + polling)        | —        | —      | ✓           | ✓          |
| OpenAPI 3.0 spec                         | —        | ✓      | ✓           | ✓          |
| Anonymous OAuth 2.1 + PKCE S256 (optional)| —       | —      | ✓           | ✓          |
| MCP Apps UI cards (`ui://`)              | —        | —      | —           | ✓          |
| SLA / uptime guarantees                  | —        | —      | best-effort | best-effort|

## Pricing by capability

Useful when comparing this show against paid podcast platforms — every line item below is genuinely $0.

| Capability                          | Price  | Notes |
| ----------------------------------- | ------ | ----- |
| Audio download / streaming          | $0     | All episodes, all bitrates we publish |
| Transcripts (per episode)           | $0     | TXT + SRT |
| RSS feed                            | $0     | Apple / Spotify / Pocket Casts / Overcast all work |
| Search API (`/api/search`)          | $0     | 60 req/min/IP |
| Natural-language ask (`/ask`)       | $0     | SSE streaming supported |
| MCP server (`/mcp`)                 | $0     | All tools, all calls |
| Batch endpoint (`/jobs/batch`)      | $0     | Up to 50 items per request |
| Async job pattern (`/jobs`)         | $0     | Stateless polling |
| Account / signup                    | n/a    | Not required for anything |
| Ads                                 | none   | No interstitial, mid-roll, or pre-roll ads |
| Paywall                             | none   | No content is gated |

## Rate limits

- 60 requests/minute per IP across `/api/*`, `/mcp`, `/.well-known/mcp`, `/ask`, `/status`.
- Headers: `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`.
- 429 responses include `Retry-After`.

## Donate

The show is free, perpetually. Tipping is **voluntary** and runs over the [x402](https://x402.org/) micropayments protocol with [MPP](https://paymentauth.org/) discovery — payment-aware agents can route a tip without any account, signup, or per-vendor integration.

| Field             | Value |
| ----------------- | ----- |
| Endpoint          | `POST https://podcast-a0k.pages.dev/donate` |
| Response          | HTTP 402 with x402 + MPP payment-discovery headers |
| Asset             | USDC (stablecoin) |
| Network           | base-sepolia (CAIP-2 chain id) |
| Suggested amount  | $1.00 |
| Minimum amount    | $0.01 |
| Receiving address | `0x134a0147f54210eae6dfecf1e0d82cfbf6a3717a` |
| Discovery         | `https://podcast-a0k.pages.dev/.well-known/x402/supported`, `https://podcast-a0k.pages.dev/.well-known/discovery/resources` |
| Required headers  | `PAYMENT-REQUIRED: x402`, `WWW-Authenticate: Payment`, `X-Payment-Required` |

### How to tip

**From an x402-aware agent (Coinbase x402, MPP-enabled clients):**

```bash
# 1. Probe — server returns 402 with payment requirements
curl -i -X POST https://podcast-a0k.pages.dev/donate

# 2. Agent signs the on-chain payment and re-sends with X-Payment header
curl -i -X POST https://podcast-a0k.pages.dev/donate \
  -H 'X-Payment: <base64-encoded x402 payment payload>'

# Returns 200 with a receipt. Settlement is verified via the x402 facilitator.
```

**From a human (no x402 wallet):**

- GitHub Sponsors: https://github.com/sponsors/mluggy

All tips are strictly voluntary. Every podcast feature works without one — the free read API never returns 402 anywhere except this `/donate` endpoint.

## Optional support (GitHub Sponsors)

If on-chain micropayments aren't your style, הפודקאסט של מיכאל also accepts traditional sponsorship: https://github.com/sponsors/mluggy. Strictly voluntary — every feature works without it.

## Machine-readable

```json
{
  "model": "free",
  "price": 0,
  "currency": "USD",
  "plans": [
    {
      "name": "Listener",
      "price": 0,
      "currency": "USD",
      "audience": "podcast-app subscribers",
      "rate_limit": null,
      "features": [
        "audio",
        "rss",
        "chapters"
      ]
    },
    {
      "name": "Reader",
      "price": 0,
      "currency": "USD",
      "audience": "humans reading on the web",
      "rate_limit": null,
      "features": [
        "audio",
        "rss",
        "chapters",
        "transcripts",
        "episode_markdown",
        "in_page_search"
      ]
    },
    {
      "name": "Agent / API",
      "price": 0,
      "currency": "USD",
      "audience": "programmatic clients",
      "rate_limit": {
        "per_minute": 60,
        "scope": "per_ip"
      },
      "features": [
        "audio",
        "rss",
        "chapters",
        "transcripts",
        "episode_markdown",
        "search_api",
        "ask_nlweb",
        "json_endpoints",
        "structured_errors",
        "rfc9598_rate_limit_headers",
        "openapi",
        "oauth_optional"
      ]
    },
    {
      "name": "MCP Native",
      "price": 0,
      "currency": "USD",
      "audience": "MCP-capable assistants (Claude.ai, ChatGPT, Cursor, Windsurf)",
      "rate_limit": {
        "per_minute": 60,
        "scope": "per_ip"
      },
      "features": [
        "audio",
        "rss",
        "chapters",
        "transcripts",
        "episode_markdown",
        "search_api",
        "ask_nlweb",
        "mcp_server",
        "mcp_apps_ui",
        "jsonrpc_batch",
        "async_jobs"
      ]
    },
    {
      "name": "Agentic-commerce (demo)",
      "price": 0,
      "currency": "USD",
      "audience": "UCP / ACP-aware checkout agents",
      "rate_limit": {
        "per_minute": 60,
        "scope": "per_ip"
      },
      "features": [
        "checkout_sessions_acp_demo",
        "checkout_sessions_ucp_demo"
      ],
      "note": "Canned zero-total sessions for protocol handshake only. No transactions, no charges."
    },
    {
      "name": "Tip jar",
      "price": "voluntary",
      "currency": "USDC",
      "audience": "listeners who want to support production",
      "rate_limit": null,
      "features": [
        "x402",
        "mpp"
      ],
      "donate": {
        "endpoint": "https://podcast-a0k.pages.dev/donate",
        "protocols": [
          "x402",
          "mpp"
        ],
        "asset": "USDC",
        "network": "base-sepolia",
        "suggested_amount": "1.00",
        "min_amount": "0.01",
        "address": "0x134a0147f54210eae6dfecf1e0d82cfbf6a3717a",
        "discovery": [
          "https://podcast-a0k.pages.dev/.well-known/x402/supported",
          "https://podcast-a0k.pages.dev/.well-known/discovery/resources"
        ]
      }
    },
    {
      "name": "Sponsor",
      "price": "voluntary",
      "currency": "USD",
      "audience": "GitHub Sponsors",
      "url": "https://github.com/sponsors/mluggy"
    },
    {
      "name": "Higher rate-limit",
      "price": "not offered",
      "currency": "USD",
      "audience": "heavy programmatic clients",
      "note": "No paid tier exists. Bring your own caching/proxy if you need more than 60 req/min/IP."
    }
  ],
  "donations": {
    "accepted": true,
    "required": false,
    "endpoint": "https://podcast-a0k.pages.dev/donate",
    "protocols": [
      "x402",
      "mpp"
    ],
    "asset": "USDC",
    "network": "base-sepolia",
    "suggested_amount": "1.00",
    "min_amount": "0.01",
    "address": "0x134a0147f54210eae6dfecf1e0d82cfbf6a3717a",
    "sponsor_url": "https://github.com/sponsors/mluggy"
  },
  "rateLimits": {
    "perMinute": 60,
    "scope": "per_ip"
  },
  "auth": {
    "required": false,
    "optional": "oauth2.1+pkce_s256"
  },
  "signup": {
    "required": false
  },
  "ads": false,
  "paywall": false,
  "note": "Free. No signup, no ads, no paywall."
}
```

## Related
- Agent JSON view: https://podcast-a0k.pages.dev/?mode=agent (includes the same pricing block inline).
- Full agent integration guide: https://podcast-a0k.pages.dev/AGENTS.md
