Medium Entity Sitemap API
Users, publications, tags, lists and removed records, one day at a time, with ids parsed from each URL.
GET /v1/medium/discover/{kind}1 credit Failed requests are free
About this endpoint
GET /v1/medium/discover/{kind} lists an entity sitemap for one UTC day. kind is one of users, publications, tags, lists, catalogs, topics, removed-posts or removed-users; date is required. data.entries holds the same sitemap fields as the post route, with the id that fits the kind filled in: username for users and lists, slug for publications, tag for tags, and postId plus the author handle or publication slug for removed posts. removed is true for the removed lists. catalogs is the list-catalog sitemap, with list URLs that may not appear in lists.
data.page carries limit, returned, total, hasMore and nextCursor. The cursor is valid only for the same filters, and a cursor from another day or kind is refused. Each page is its own request. A cursor past the last row returns an empty page with page.hasMore: false. Set limit from 1 to 500; the default is 100.
A missing day is lookupStatus: not_found with entries: []. A temporary failure returns an error, never not_found.
Medium Entity Sitemap API FAQ
Which kinds can I request?
users, publications, tags, lists, catalogs, topics, removed-posts and removed-users. Use the sitemap index with the matching kind to see the days that have a file.
How do I know which id field is filled?
kind on each entry says what it is. username is set for users, lists and catalogs and for a post URL that names an author; slug for publications and for a post URL that names a publication; tag for tags; postId for posts and removed posts. removed is true for both removed lists. Other id fields are null.
What is a removed-user or removed-post list?
Those files list URLs that no longer resolve. removed is true and the parsed id says which record was removed, so you can retire rows you stored earlier.
How many credits does it cost?
Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth. Each paginated page is a separate billed request.