Medium API: List topic articles
Lists public Medium articles for a topic, newest first or popular this week, with author, publication, reading time, claps and membership status.
Unofficial. Not affiliated with or endorsed by Medium.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Sort optional
sort Article order, for example popular (this week).
latest
One of
latest,popular. Defaultlatest.- Topic, required
topic Topic to explore, for example artificial intelligence.
artificial intelligence
- Max Results optional
max_results Maximum articles to return, for example 10 (up to 25).
10
Whole number from 1 to 25. Default
10.
Input as JSON
{ "sort": "latest", "topic": "artificial intelligence", "max_results": 10}Output
{ "articles": [ { "link": "https://medium.com/@NIDAM_/how-to-use-ai-to-make-9k-each-month-9016df1849a2" , "claps": 0, "title": "How To Use AI To Make $9K Each Month", "author": "NIDA M.", "subtitle": "There are a feww ways to make AI make you income.", "member_only": true, "publication": null, "published_date": "2026-09-29", "reading_time_minutes": 2 }, { "link": "https://sumanthpoola.medium.com/it-was-2-am-our-payment-service-was-down-the-bug-was-one-line-883152c1b4d2" , "claps": 0, "title": "It Was 2 AM. Our Payment Service Was Down. The Bug Was One Line.", "author": "Sumanth | Java & AI", "subtitle": "Not one line of bad code. One line of misplaced faith in an annotation.", "member_only": true, "publication": null, "published_date": "2026-09-29", "reading_time_minutes": 4 }, { "link": "https://medium.com/@sudiptokanti/building-health-watcher-an-explainable-ai-system-for-wearable-event-detection-1b30b9b607d4" , "claps": 0, "title": "Building Health-Watcher: An Explainable AI System for Wearable Event Detection", "author": "Sudipto K Haldar", "subtitle": "How public sensor datasets, subject-level validation, interpretable models, persistence gates, model cards, and an operator-centered…", "member_only": false, "publication": null, "published_date": "2026-09-29", "reading_time_minutes": 13 } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"medium.com/list_topic_articles","input":{"sort":"latest","topic":"artificial intelligence","max_results":10}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "medium.com/list_topic_articles" , "input": { "sort": "latest", "topic": "artificial intelligence", "max_results": 10 }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "medium.com/list_topic_articles" , "input": { "sort": "latest", "topic": "artificial intelligence", "max_results": 10 } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run medium.com/list_topic_articles# with {"sort":"latest","topic":"artificial intelligence","max_results":10}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "topic" ], "properties": { "sort": { "enum": [ "latest", "popular" ], "type": "string", "default": "latest", "description": "Article order, for example popular (this week)." }, "topic": { "type": "string", "minLength": 1, "description": "Topic to explore, for example artificial intelligence." }, "max_results": { "type": "integer", "default": 10, "maximum": 25, "minimum": 1, "description": "Maximum articles to return, for example 10 (up to 25)." } }}Output schema
{ "type": "object", "required": [ "articles" ], "properties": { "articles": { "type": "array", "items": { "type": "object", "required": [ "title", "subtitle", "author", "publication", "published_date", "reading_time_minutes", "claps", "member_only", "link" ], "properties": { "link": { "type": "string" }, "claps": { "type": [ "integer", "null" ] }, "title": { "type": "string" }, "author": { "type": [ "string", "null" ] }, "subtitle": { "type": [ "string", "null" ] }, "member_only": { "type": "boolean" }, "publication": { "type": [ "string", "null" ] }, "published_date": { "type": [ "string", "null" ], "format": "date" }, "reading_time_minutes": { "type": [ "integer", "null" ] } } } } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
medium.com/list_topic_articles- Returns
- title, subtitle, author, publication, published date, reading time, claps, member-only flag, link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method medium.com/list_topic_articles with the inputs above.
Ask your agent
- Show me the 10 most popular Medium articles this week about machine learning, with claps and reading time
- What are the newest posts on Medium tagged productivity? Give me 15 with author and whether they're member-only
- Find the latest articles on rust programming, include publication name, published date and links
- I need 25 trending pieces this week on startups — titles, subtitles, authors and clap counts
- Pull 5 recent blog articles about mental health and tell me which ones are paywalled and how long they take to read
See more
All Medium methodsLists the latest public articles by a Medium writer or publication (by username, publication name or Medium link), with dates, reading times, claps, member-only labels and tags.
medium.com/list_author_articlesReads a public Medium article from its link, including publication-domain links: details, engagement counts, tags and the plain-text paragraphs. Member-only stories include only the publicly visible preview.
medium.com/read_articleFinds public Substack newsletters matching a topic, in Substack's search order. Subscriber counts are null when Substack does not display one.
substack.com/search_newslettersFinds an ESPN league or team by name and lists the latest headlines ESPN publishes for it, newest first.
espn.com/list_newsFinds the best-matching Britannica encyclopedia article for a topic and returns its introduction, quick facts, section headings, update date and main image.
britannica.com/get_articleLists the newest Snopes fact checks overall or in a topic, with each claim, rating, author, publication date, image and article link. Topics follow Snopes article categories; less active topics may have fewer recent checks.
snopes.com/list_latest_fact_checksFinds public Reddit posts by topic, optionally in one community, for a time window and sort order. Returns up to 100 posts in Reddit search order with score, comment count, text and link.
reddit.com/search_postsLists a SoundCloud artist's public tracks in latest or SoundCloud popular order, with profile and track details. SoundCloud's popular list may contain fewer than 100 tracks (currently at most 30).
soundcloud.com/list_artist_tracks