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)