# Social Fetch API - Medium endpoints # Base URL: https://api.socialfetch.dev # Auth: x-api-key header (sfk_...) # Full catalog: https://www.socialfetch.dev/llms-endpoints.txt | JSON: https://www.socialfetch.dev/llms.json # Docs hub: https://www.socialfetch.dev/docs/api | OpenAPI: https://www.socialfetch.dev/openapi.json 6 documented Medium operations. Do not invent paths - only the routes below (and their linked markdown pages) are supported. ## GET /v1/medium/tags/{tag}/posts List Medium tag posts Credit cost: 1 credit. Failed requests are free. Auth: API key or x402 payment (no key needed for payment) Docs: https://www.socialfetch.dev/docs/api/v1/medium/tags/tag/posts/get.mdx SDK: client.medium.listTagPosts({ tag: "javascript" }) Parameters: - tag (required, string) - Tag slug, e.g. `javascript`. Non-Latin tags are supported. An unused tag is still found, with no posts. Outcome field: `data.lookupStatus` in `found`, `not_found` curl "https://api.socialfetch.dev/v1/medium/tags/javascript/posts" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/medium/authors/{username}/posts List Medium author posts Credit cost: 1 credit. Failed requests are free. Auth: API key or x402 payment (no key needed for payment) Docs: https://www.socialfetch.dev/docs/api/v1/medium/authors/username/posts/get.mdx SDK: client.medium.listAuthorPosts({ username: "ev" }) Parameters: - username (required, string) - Medium handle, with or without the leading `@`, e.g. `ev`. Outcome field: `data.lookupStatus` in `found`, `not_found` curl "https://api.socialfetch.dev/v1/medium/authors/ev/posts" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/medium/publications/{slug}/posts List Medium publication posts Credit cost: 1 credit. Failed requests are free. Auth: API key or x402 payment (no key needed for payment) Docs: https://www.socialfetch.dev/docs/api/v1/medium/publications/slug/posts/get.mdx SDK: client.medium.listPublicationPosts({ slug: "netflix-techblog", tag: "ios" }) Parameters: - slug (required, string) - Medium publication slug (`netflix-techblog`) or its own domain (`uxdesign.cc`). - domain (optional, string) - The publication's own domain (`uxdesign.cc`), when it runs on one. Overrides the slug. - tag (optional, string) - Only posts of the publication carrying this tag (medium.com publications only; not supported on a custom domain). Outcome field: `data.lookupStatus` in `found`, `not_found` curl "https://api.socialfetch.dev/v1/medium/publications/netflix-techblog/posts?tag=ios" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/medium/posts List Medium daily post URLs Credit cost: 1 credit. Failed requests are free. Auth: API key or x402 payment (no key needed for payment) Docs: https://www.socialfetch.dev/docs/api/v1/medium/posts/get.mdx SDK: client.medium.listSitemapPosts({ date: "2011-06-29", limit: 100 }) Parameters: - date (required, string) - UTC day from 1970 to 2100, `YYYY-MM-DD`, e.g. `2026-11-02`. - limit (optional, integer) - Rows per page, 1 to 500. Default: 100. - cursor (optional, string) - Cursor from `page.nextCursor` of the previous response. It only works with the same filters. Pagination: send query `cursor` from prior `data.page.nextCursor`; stop when `data.page.hasMore` is false. Outcome field: `data.lookupStatus` in `found`, `not_found` curl "https://api.socialfetch.dev/v1/medium/posts?date=2011-06-29" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/medium/discover/{kind} List Medium daily entity URLs Credit cost: 1 credit. Failed requests are free. Auth: API key or x402 payment (no key needed for payment) Docs: https://www.socialfetch.dev/docs/api/v1/medium/discover/kind/get.mdx SDK: client.medium.listSitemapEntities({ kind: "users", date: "2024-01-15" }) Parameters: - kind (required, string, enum: users | publications | tags | lists | catalogs | topics | removed-posts | removed-users) - Kind of entity sitemap: `users`, `publications`, `tags`, `lists`, `catalogs`, `topics`, `removed-posts` or `removed-users`. - date (required, string) - The day named by the sub-sitemap's file name (the index lists the available days). - limit (optional, integer) - Rows per page, 1 to 500. Default: 100. - cursor (optional, string) - Cursor from `page.nextCursor` of the previous response. It only works with the same filters. Pagination: send query `cursor` from prior `data.page.nextCursor`; stop when `data.page.hasMore` is false. Outcome field: `data.lookupStatus` in `found`, `not_found` curl "https://api.socialfetch.dev/v1/medium/discover/users?date=2024-01-15" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/medium/sitemap List available Medium sitemap files Credit cost: 2 credits. Failed requests are free. Auth: API key or x402 payment (no key needed for payment) Docs: https://www.socialfetch.dev/docs/api/v1/medium/sitemap/get.mdx SDK: client.medium.getSitemapIndex({ kind: "posts" }) Parameters: - kind (required, string, enum: posts | users | publications | tags | lists | catalogs | topics | removed-posts | removed-users | staticpaths) - Only files of this kind. `posts` has one file per day from 2000 through the most recent day with a file. - limit (optional, integer) - Rows per page, 1 to 500. Default: 100. - cursor (optional, string) - Cursor from `page.nextCursor` of the previous response. It only works with the same filters. Pagination: send query `cursor` from prior `data.page.nextCursor`; stop when `data.page.hasMore` is false. curl "https://api.socialfetch.dev/v1/medium/sitemap?kind=posts" \ -H "x-api-key: YOUR_API_KEY"