# Medium API

> Medium returns public articles, article details, and engagement data as a workflow and API.

Medium lists a writer’s or publication’s latest public articles, using a username, publication name, or profile link as input. Medium lists public articles by topic in newest or popular-this-week order, using a topic and optionally a sort order. Medium reads an article’s publicly visible text and details from its link; member-only articles include only public previews.

- Page: https://fous.com/tools/medium
- Handle: `@medium`
- Category: [Social](https://fous.com/tools/category/social)
- Source website: https://medium.com
- Last verified: Sep 29, 2026

## Methods

### List author articles

Operation `list_author_articles`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

List the latest public articles by a Medium writer or publication, with dates, reading times, claps, member-only labels, and tags. Includes article details visible without signing in; member-only articles are not opened.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `author` | string | yes | `"@ev"` | Writer username with or without @, publication name, or Medium profile or publication link. Example: @ev or Towards Data Science. |
| `max_results` | integer | no | `10` | Maximum number of latest articles to return. Example: 10. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "author"
  ],
  "properties": {
    "author": {
      "type": "string",
      "description": "Writer username with or without @, publication name, or Medium profile or publication link. Example: @ev or Towards Data Science.",
      "examples": [
        "@ev",
        "https://medium.com/swlh",
        "ev"
      ]
    },
    "max_results": {
      "type": "integer",
      "default": 10,
      "maximum": 25,
      "minimum": 1,
      "description": "Maximum number of latest articles to return. Example: 10.",
      "x-fous-developer": true,
      "examples": [
        10,
        3,
        2
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "author": "@ev",
      "max_results": 10
    },
    {
      "author": "https://medium.com/swlh",
      "max_results": 3
    },
    {
      "author": "ev",
      "max_results": 2
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `link` | string | `"https://medium.com/@ev"` | Medium writer or publication page link. |
| `name` | string | `"Ev Williams"` | Medium writer or publication name. |
| `articles` | array |  | Latest articles, newest first. |
| `articles[].link` | string | `"https://ev.medium.com/making-social-social-again-0126fa5c6ce8"` |  |
| `articles[].tags` | array |  |  |
| `articles[].claps` | integer or null | `3542` |  |
| `articles[].title` | string | `"Making “Social” Social Again"` |  |
| `articles[].author` | string or null | `"Ev Williams"` |  |
| `articles[].subtitle` | string or null | `"Announcing Mozi"` |  |
| `articles[].member_only` | boolean or null | `false` |  |
| `articles[].published_date` | string or null | `"2024-12-12"` |  |
| `articles[].reading_time_minutes` | integer or null | `8` |  |

**Example input**

```json
{
  "author": "@ev",
  "max_results": 10
}
```

**Example output**

```json
{
  "link": "https://medium.com/@ev",
  "name": "Ev Williams",
  "articles": [
    {
      "link": "https://ev.medium.com/making-social-social-again-0126fa5c6ce8",
      "tags": [
        "Social",
        "Relationships",
        "Startupş"
      ],
      "claps": 3542,
      "title": "Making “Social” Social Again",
      "author": "Ev Williams",
      "subtitle": "Announcing Mozi",
      "member_only": false,
      "published_date": "2024-12-12",
      "reading_time_minutes": 8
    },
    {
      "link": "https://ev.medium.com/do-not-disturb-3622b4ddc3d8",
      "tags": [],
      "claps": 1782,
      "title": "Do not disturb",
      "author": "Ev Williams",
      "subtitle": "Can I assume when you’re in the zone\nYou’re not distracted by your phone\nShould I hold my texts\nAnd take time to reflect\nOr fire away…",
      "member_only": false,
      "published_date": "2023-12-09",
      "reading_time_minutes": 1
    },
    {
      "link": "https://ev.medium.com/how-you-can-help-the-amazon-rainforest-today-f394d68d4e7",
      "tags": [],
      "claps": 2848,
      "title": "How you can help the Amazon Rainforest–today",
      "author": "Ev Williams",
      "subtitle": "Last week, Brazil’s Congress shocked the world by suddenly fast-tracking and passing PL2903, the Marco Temporal bill. This bill paves the…",
      "member_only": false,
      "published_date": "2023-06-05",
      "reading_time_minutes": 2
    }
  ]
}
```

### List topic articles

Operation `list_topic_articles`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

List public Medium topic articles in newest or popular-this-week order, with author, publication, reading time and membership status. Popular reflects Medium’s weekly ranking.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `sort` | string | no | `"popular"` | Article order, for example popular (this week). |
| `topic` | string | yes | `"artificial intelligence"` | Topic to explore, for example artificial intelligence. |
| `max_results` | integer | no | `10` | Maximum articles to return, for example 10 (up to 25). |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "topic"
  ],
  "properties": {
    "sort": {
      "enum": [
        "latest",
        "popular"
      ],
      "type": "string",
      "default": "latest",
      "description": "Article order, for example popular (this week).",
      "examples": [
        "popular",
        "latest"
      ]
    },
    "topic": {
      "type": "string",
      "minLength": 1,
      "description": "Topic to explore, for example artificial intelligence.",
      "examples": [
        "artificial intelligence",
        "leadership",
        "zzznosuchtopicqqq"
      ]
    },
    "max_results": {
      "type": "integer",
      "default": 10,
      "maximum": 25,
      "minimum": 1,
      "description": "Maximum articles to return, for example 10 (up to 25).",
      "x-fous-developer": true,
      "examples": [
        10,
        25
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "topic": "artificial intelligence"
    },
    {
      "sort": "popular",
      "topic": "leadership",
      "max_results": 10
    },
    {
      "topic": "zzznosuchtopicqqq"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `articles` | array |  |  |
| `articles[].link` | string | `"https://medium.com/@NIDAM_/how-to-use-ai-to-make-9k-each-month-9016df1849a2"` |  |
| `articles[].claps` | integer or null | `0` |  |
| `articles[].title` | string | `"How To Use AI To Make $9K Each Month"` |  |
| `articles[].author` | string or null | `"NIDA M."` |  |
| `articles[].subtitle` | string or null | `"There are a feww ways to make AI make you income."` |  |
| `articles[].member_only` | boolean | `true` |  |
| `articles[].publication` | string or null |  |  |
| `articles[].published_date` | string or null | `"2026-09-29"` |  |
| `articles[].reading_time_minutes` | integer or null | `2` |  |

**Example input**

```json
{
  "topic": "artificial intelligence"
}
```

**Example output**

```json
{
  "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
    }
  ]
}
```

### Read article

Operation `read_article`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Read a public Medium article, including its details, engagement counts and plain-text paragraphs. Member-only stories include only the publicly visible preview; full text is not available without membership.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `article` | string | yes | `"https://medium.com/@tarasjseaks/why-i-only-write-for-medium-0b8c500134a1"` | Link to a Medium article, including a publication’s own domain, such as https://medium.com/@tarasjseaks/why-i-only-write-for-medium-0b8c500134a1. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "article"
  ],
  "properties": {
    "article": {
      "type": "string",
      "description": "Link to a Medium article, including a publication’s own domain, such as https://medium.com/@tarasjseaks/why-i-only-write-for-medium-0b8c500134a1.",
      "examples": [
        "https://medium.com/@tarasjseaks/why-i-only-write-for-medium-0b8c500134a1",
        "https://medium.com/ask-an-editor/yippee-your-medium-response-is-relevant-509fe1e041bb",
        "https://python.plainenglish.io/i-added-type-hints-everywhere-then-took-half-of-them-out-f2aed65d2717"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "article": "https://medium.com/@tarasjseaks/why-i-only-write-for-medium-0b8c500134a1"
    },
    {
      "article": "https://medium.com/ask-an-editor/yippee-your-medium-response-is-relevant-509fe1e041bb"
    },
    {
      "article": "https://python.plainenglish.io/i-added-type-hints-everywhere-then-took-half-of-them-out-f2aed65d2717"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `tags` | array |  | Article tags. |
| `claps` | integer | `29` | Number of claps. |
| `title` | string | `"Why I Only Write for Medium"` | Article title. |
| `author` | string | `"Taras J Seaks"` | Author name. |
| `subtitle` | string or null | `"And why this story is free to read"` | Article subtitle, if any. |
| `responses` | integer | `2` | Number of responses. |
| `paragraphs` | array |  | Publicly visible text in reading order, with headings as separate paragraphs. |
| `member_only` | boolean | `false` | Whether the article is member-only. |
| `publication` | string or null | `"Ask an Editor"` | Publication name, if the story is in one. |
| `article_link` | string | `"https://medium.com/@tarasjseaks/why-i-only-write-for-medium-0b8c500134a1"` | Article page link. |
| `published_date` | string | `"2024-03-20"` | Original publication date. |
| `main_image_link` | string or null | `"https://miro.medium.com/0*nwz5ReKI2u2dF-AV"` | Main image link, if any. |
| `full_text_available` | boolean | `true` | Whether the complete text is publicly available. |
| `reading_time_minutes` | integer | `6` | Reading time shown to readers, in minutes. |

**Example input**

```json
{
  "article": "https://medium.com/@tarasjseaks/why-i-only-write-for-medium-0b8c500134a1"
}
```

**Example output**

```json
{
  "tags": [
    "Writing",
    "Community",
    "Mission"
  ],
  "claps": 29,
  "title": "Why I Only Write for Medium",
  "author": "Taras J Seaks",
  "subtitle": "And why this story is free to read",
  "responses": 2,
  "paragraphs": [
    "Why I Only Write for Medium",
    "And why this story is free to read",
    "Writers don’t just write to write. In some cases, we do. But in most cases, it’s to share an important message. This is as true for novels as it is for self-development content and everything surround…"
  ],
  "member_only": false,
  "publication": null,
  "article_link": "https://medium.com/@tarasjseaks/why-i-only-write-for-medium-0b8c500134a1",
  "published_date": "2024-03-20",
  "main_image_link": "https://miro.medium.com/0*nwz5ReKI2u2dF-AV",
  "full_text_available": true,
  "reading_time_minutes": 6
}
```

## Quick start

Replace `YOUR_API_KEY` with a Fous API key. To create one, open Developers at the bottom of Fous Studio, turn on Developer mode, then go to API keys (https://app.fous.com/keys). Change the values in `input` to run the same tool on new data.

```bash
curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 180 \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@medium",
  "visibility": "public",
  "operation": "list_author_articles",
  "version": 1,
  "input": {
    "author": "@ev",
    "max_results": 10
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
import json
import urllib.error
import urllib.request

api_key = "YOUR_API_KEY"

body = json.loads("{\n  \"api\": \"@medium\",\n  \"visibility\": \"public\",\n  \"operation\": \"list_author_articles\",\n  \"version\": 1,\n  \"input\": {\n    \"author\": \"@ev\",\n    \"max_results\": 10\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=180) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
const apiKey = "YOUR_API_KEY";

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(180_000),
  body: JSON.stringify({
  "api": "@medium",
  "visibility": "public",
  "operation": "list_author_articles",
  "version": 1,
  "input": {
    "author": "@ev",
    "max_results": 10
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

## Use from an AI assistant

Connect this tool to Claude Code, Claude Desktop, Cursor, VS Code, Codex and any MCP client as its own MCP server. Each method is a typed tool whose arguments are the method’s input.

- Server URL: `https://api.fous.com/mcp/tools/medium`
- Authorization: `Authorization: Bearer <Fous API key>`

**Tools**

- `list_author_articles`: List author articles. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `list_topic_articles`: List topic articles. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `read_article`: Read article. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `fous_get_run`: the result of a run that was still going, by its `request_id`. Free.

Claude Code:

```bash
claude mcp add --scope user --transport http fous-medium https://api.fous.com/mcp/tools/medium --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"
```

To give the assistant every tool, connect `https://api.fous.com/mcp`: it finds one with `fous_search_tools` and runs it with `fous_run_tool`. Setup for other clients: https://fous.com/llms-full.txt.

## Use cases

- Track a writer’s latest articles and claps
- Explore popular weekly articles by topic
- Compare article reading times and publication dates
- Review visible article text and response counts
- Collect article titles, tags, and authors

## FAQ

### Can I run it with my own inputs?

Yes. Change the inputs in Studio and press Run, or send new inputs from your code, or ask a connected AI assistant.

### Can I call this Medium tool as an API?

Yes. Send a POST request to /v1/query with your Fous API key and the inputs, and get JSON back.

### How much does it cost?

Each completed run costs 1 credit. Failed runs without a completed receipt are free; completed work can remain charged if delivery is interrupted. With pay as you go, a credit costs 1¢. Monthly plans cost less per credit.

### Do I need a Medium account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from medium.com when you run it. Some results are reused for up to 24 hours, and results that use your account or key are never reused. It was last verified on Sep 29, 2026.

### Which articles has a writer published recently?

Use List author articles with a writer username, publication name, or profile link.

### What articles are popular this week on a topic?

Use List topic articles with the topic and popular (this week) sort.

### What does a public article say?

Use Read article with the article link to get publicly visible text and details.

## Related

- [The Guardian API](https://fous.com/tools/the-guardian.md): The Guardian provides news, sport, culture and opinion, ordered headlines, keyword-search results that may omit older or less prominent stories, and article details with available text; live blogs show the latest entries.
- [AP News API](https://fous.com/tools/ap-news.md): AP News provides reporting, up to 50 public-page headlines, searchable articles visible in its search, and full text when accessible.
- [Substack API](https://fous.com/tools/substack.md): Substack returns public newsletters and recent public post details or text; paid posts expose previews or metadata, and some custom-domain newsletters may be unavailable.
- [Threads API](https://fous.com/tools/threads.md): Threads provides public profiles and posts, including recent posts, engagement and replies; private or login-only content is excluded, and replies may be limited to 10.
- [NPR API](https://fous.com/tools/npr.md): NPR returns displayed section headlines, searchable articles with summaries and publication details, and available article text; date-filtered searches may miss older stories edited much later.
- [Daily Mail API](https://fous.com/tools/daily-mail.md): Daily Mail provides ordered section headlines with available bylines and times, searches up to 200 published articles excluding syndicated wire stories, and reads public article text and details, including latest live-blog entries shown.
- [CNN API](https://fous.com/tools/cnn.md): CNN provides section-page headlines and searchable public articles, plus article text; subscriber stories show only a brief public preview, and live blogs include entries.
- [Al Jazeera API](https://fous.com/tools/al-jazeera.md): Al Jazeera provides news and analysis, current section headlines and article details, plus keyword-searchable articles; searches and live blogs may show only leading matches or latest updates.
- [All Social tools](https://fous.com/tools/category/social)
