Medium API scraper API
The Medium API returns author and article data as clean JSON.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
The primary user endpoint returns a user's id, username, name, bio and follower, following and post counts, and you can resolve a user_id, pull user_articles, user_top_articles, an article, its content and its HTML. It is built for content research and author intelligence that need Medium data without a scraper. One ReefAPI key, one shared credit pool, the standard envelope.
Real request and response JSON
Captured from the indexed primary action, user, on .
{
"method": "POST",
"url": "https://api.reefapi.com/medium/v1/user",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"user": "dhh"
}
}{
"ok": true,
"meta": {
"api": "medium",
"endpoint": "user",
"mode": "live",
"latency_ms": 2111.4,
"record_count": 1,
"bytes": 38389,
"cache_hit": false,
"method": "format_json_profile"
},
"data": {
"user": {
"user_id": "54bcbf647830",
"username": "dhh",
"name": "DHH",
"bio": "Creator of Ruby on Rails, Founder & CTO at Basecamp (formerly 37signals), NYT Best-selling author of REWORK and REMOTE, and Le Mans class-winning racing driver.",
"created_at": 1391048788962,
"twitter_screen_name": "dhh",
"is_writer_program_enrolled": true,
"posts_published_count": 191,
"followers_count": 124738,
"following_count": 100,
"author_tags": [
{
"slug": "startup",
"name": "Startup",
"post_count": 495076
},
{
"slug": "artificial-intelligence",
"name": "[redacted-name]",
"post_count": 489834
},
{
"slug": "entrepreneurship",
"name": "Entrepreneurship",
"post_count": 401173
}
],
"publication_ids": [
"668e14b18fb1"
]
}
}
}What the Medium API scraper API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| user | Public Medium user profile by username. | Ops teams call user to get public Medium user profile by username.. | user |
| user_id | Resolve username to Medium userId. | Developer tools call user_id to resolve username to Medium userId.. | user |
| user_articles | An author's published articles, newest first, with deep pagination. | Validation workflows call user_articles to get an author's published articles, newest first, with deep pagination.. | user, limit, cursor |
| user_top_articles | User articles sorted by clap count from profile references. | Data-quality teams call user_top_articles to get user articles sorted by clap count from profile references.. | user, limit |
| article | Article metadata by url or id. | Ops teams call article to get article metadata by url or id.. | url, id |
| article_content | Article plain-text body from bodyModel paragraphs. | Developer tools call article_content to get article plain-text body from bodyModel paragraphs.. | url, id |
| article_html | Article HTML body from bodyModel paragraphs. | Validation workflows call article_html to get article HTML body from bodyModel paragraphs.. | url, id |
| article_markdown | Article markdown body from bodyModel paragraphs. | Data-quality teams call article_markdown to get article markdown body from bodyModel paragraphs.. | url, id |
| article_responses | Public responses/comments for an article. | Ops teams call article_responses to get public responses/comments for an article.. | url, id, limit, cursor |
| publication | Publication/collection metadata by slug. | Developer tools call publication to get publication/collection metadata by slug.. | slug |
| publication_id | Resolve publication slug to collection id. | Validation workflows call publication_id to resolve publication slug to collection id.. | slug |
| publication_articles | A publication's articles, newest first, with deep pagination. | Data-quality teams call publication_articles to get a publication's articles, newest first, with deep pagination.. | slug, limit, cursor |
| tag | Latest posts for a topic tag (the tag/topic feed). | Ops teams call tag to get latest posts for a topic tag (the tag/topic feed).. | tag, limit |
| search_users | Look up an author by exact username. (Medium gates fuzzy people-search behind a logged-in JS app, so this resolves q as a username and returns that profile.) | Developer tools call search_users to look up an author by exact username. | q |
| search_publications | Look up a publication by exact slug. (Fuzzy publication search is login/JS-gated on Medium, so this resolves q as a publication slug and returns that publication.) | Validation workflows call search_publications to look up a publication by exact slug. | q |
| search_tags | Check whether a topic tag exists and is active on Medium (resolves q as a tag slug). | Data-quality teams call search_tags to check whether a topic tag exists and is active on Medium (resolves q as a tag slug).. | q |
| followers | An author's followers (paginated). Identify the author by 'user' or 'user_id'. | Ops teams call followers to get an author's followers (paginated). | user, user_id, limit, cursor |
| following | The authors a user follows (paginated). Identify the user by 'user' or 'user_id'. | Developer tools call following to get the authors a user follows (paginated). | user, user_id, limit, cursor |
| list | Reading list metadata and articles from public list page HTML. Provide the full list 'url', or 'id' together with 'user'. | Validation workflows call list to get reading list metadata and articles from public list page HTML. | id, url, user, username, slug, ... |
| search_articles | Search Medium articles by keyword — returns matching articles with title, URL and publication details from medium.com. | Data-quality teams call search_articles to search Medium articles by keyword. | q, limit, cursor |
Call user from your stack
curl -X POST https://api.reefapi.com/medium/v1/user \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"user":"dhh"}'import requests
r = requests.post(
"https://api.reefapi.com/medium/v1/user",
headers={"x-api-key": REEF_KEY},
json={
"user": "dhh"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/medium/v1/user", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"user": "dhh"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.medium.user with {"user":"dhh"}.Who uses this API and why
- Content research calls user_articles to study an author's output.
- Author-intelligence uses user and user_top_articles to profile a writer.
- RAG pipelines use article_content to ingest a post as clean text.
Questions developers ask before integrating
What is the Medium API scraper API?
Medium API scraper API is a ReefAPI endpoint group for medium api scraper It returns live JSON through POST requests under /medium/v1.
Is the Medium API scraper API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Medium API scraper calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Medium API scraper login or account?
No login to Medium API scraper is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Medium API scraper data?
The page example is captured from a live user call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Medium API scraper API use?
Medium API scraper actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call Medium API scraper from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call medium actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the Medium API scraper API a Medium API scraper scraper?
It is the managed alternative to a DIY Medium API scraper scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same medium api scraper back as clean JSON.
Why does my Medium API scraper scraper keep getting blocked?
Most Medium API scraper scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked or failed calls are free.