DEV Community

Sebastian Casvean
Sebastian Casvean

Posted on Originally published at zenndra.com

Curate and Republish Medium Reading Lists (Courses, Digests, Apps)

Curate and Republish Medium Reading Lists (Courses, Digests, Apps)

Medium lists are underrated: ordered sequences, often better than search for onboarding. APIs return list metadata, member articles, and tag-level recommended_lists for discovery.

Tool outcome: Sync a list_id into your LMS or weekly email template automatically.


Use cases

  • Course builders — Week 1–4 reading paths with stable ordering.
  • Newsletters — “5 links from this list” block every Friday.
  • Community apps — Save and republish lists with attribution.

Flow

  1. Discover lists via /search/lists?query= or /recommended_lists/{tag}.
  2. Store list_id in config.
  3. Cron /list/{list_id}/articles → upsert articles table.
  4. Render on your domain or email; link to Medium originals.

Fetch list + articles

const API = 'https://api.zenndra.com';
const headers = { Authorization: `Bearer ${process.env.ZENNDRA_API_KEY}` };
const listId = 'YOUR_LIST_ID';

const meta = await fetch(`${API}/list/${listId}`, { headers }).then((r) => r.json());
const { articles } = await fetch(`${API}/list/${listId}/articles`, { headers }).then((r) => r.json());

console.log(meta.title, articles.map((a, i) => `${i + 1}. ${a.title}`));
Enter fullscreen mode Exit fullscreen mode

Preserve order from the API response—do not re-sort by date unless intentional.


Discover lists for a topic

const tag = 'javascript';
const recommended = await fetch(`${API}/recommended_lists/${encodeURIComponent(tag)}`, {
  headers,
}).then((r) => r.json());
// Surface in admin UI for editors to pick list_id
Enter fullscreen mode Exit fullscreen mode

Pair with syndication

Full-text on your site? Combine with embed guide per article_id. Lists-only product? Tease with title + link.


Keywords

medium reading list api, medium list articles, curated reading list, medium course reading list.


Further reading

Top comments (0)