---
title: "Discover Newsletters"
method: GET
path: "/v1/discover/newsletters"
---

# Discover Newsletters

`GET /v1/discover/newsletters`

## Request

- Base URL: `https://api.storyflo.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.storyflo.com/v1/discover/newsletters`
- Auth: none declared

Public listing of claimed publishers with subscription counts +
most-recent article. Drives the /discover/newsletters listener-
acquisition page. Excludes publishers who haven't claimed (no
subscriptions enabled / no payout configured) so the directory
only surfaces real wired-up authors.

Optional ``vertical`` filter (tech | health | young_moms | yoga |
science | finance | news) restricts to publishers tagged with that
taxonomy slug. See app/vertical_classifier.py for the canonical
list.

2026-06-14 · architectural rewrite (closes #562). Reads from the
``mv_discover_newsletters_snapshot`` materialized view (migration
0153) — a single indexed SELECT replaces the four queries +
Python-side fan-out that took 50+s on cold cache. The MV is
refreshed every 5 minutes by the separate worker (separate PR);
stale data is fine because publisher claims are rare events.

SQLite path (tests/dev): the materialized view doesn't exist —
fall back to the legacy Python fan-out so tests keep working.

## Query parameters

- `limit` integer
- `vertical` string, nullable

## Response `200`

Successful Response

- object

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/storyflo/apis/storyflo-inference-router.md) · [All operations](https://skmtc.dev/storyflo/apis/storyflo-inference-router/llms.txt) · [OpenAPI document](https://skmtc.dev/storyflo/apis/storyflo-inference-router/revisions/c3a1a735ac7a?raw)
