Rotten Tomatoes API endpoint
Returns the publications one Rotten Tomatoes critic writes for: publication name, editorial site URL, logo image, encrypted and numeric publication ids, and the top-publication and Tomatometer-approved flags. The list is read directly from Rotten Tomatoes' feed (normally a second or two), with a slower browser fallback when the feed cannot be read. Only the first page is served today; `data.page_info.end_cursor` reports that more exist. An unknown critic path returns 404. Pass exactly one of `path` or `url`.
/rottentomatoes/critic/publicationsQuery parameters:
path: Rotten Tomatoes critic path, for example /critic/mark-kermode. The
directory form /critics/mark-kermode (what /rottentomatoes/critics/authors
returns) and the profile form /profiles/critic/mark-kermode are accepted and
mean the same critic.url: absolute https://www.rottentomatoes.com critic URL.Rotten Tomatoes serves a critic's publications as a JSON feed, and the service reads it directly (the
critic's handle is resolved first, then the list is read). If the feed cannot be read and a browser backend
is available, the service falls back to loading the critic page the way a visitor's browser does and opening
the Publications tab. An unknown critic path returns 404.
data.critic identifies the critic: kind is critic, with path and url.
The subject kind values across the review and critic surface are movie,
season, episode, critic and publication; this endpoint sets critic.data.publications: each with name, editorial_url, image_url,
encrypted_publication_id, publication_id, is_top_publication,
tomatometer_approved.data.page_info reports has_next_page and end_cursor. Only the first page
is served today; the cursor is reported so callers can detect that more exist.data.source_url and data.fetched_at. X-Cache and
X-Availability-Last-Success-* describe freshness. A call normally returns in about a second or two; the
browser fallback takes about 22 seconds.| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| path | string | No | Rotten Tomatoes critic path: /critic/{slug}. /critics/{slug} (the form critics/authors returns) and /profiles/critic/{slug} are accepted too | /critic/mark-kermode | |
| url | string | No | Absolute https://www.rottentomatoes.com critic URL | https://www.rottentomatoes.com/critic/mark-kermode | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/rottentomatoes/critic/publications" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"critic": {
"kind": "critic",
"path": "/critic/mark-kermode",
"url": "https://www.rottentomatoes.com/critic/mark-kermode"
},
"publications": [
{
"name": "Empire Magazine",
"editorial_url": "",
"image_url": "https://resizing.flixster.com/example.jpg",
"encrypted_publication_id": "1XrAqGrw",
"publication_id": "148",
"is_top_publication": true,
"tomatometer_approved": true
},
{
"name": "Time Out",
"editorial_url": "http://www.timeout.com",
"encrypted_publication_id": "example",
"publication_id": "117",
"is_top_publication": true,
"tomatometer_approved": true
}
],
"page_info": {
"has_next_page": false,
"end_cursor": ""
},
"source_url": "https://www.rottentomatoes.com/critic/mark-kermode",
"fetched_at": "2026-10-29T09:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/rottentomatoes.criticPublicationsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | rottentomatoes.CriticPublicationsResponse | No | ||||
| data.critic | object | No | Critic the publications belong to. | |||
| data.critic.ems_id | string | No | 71374db9-1350-30fa-b30a-d3f623bbdfc4 | Rotten Tomatoes' own unique id of the subject, when it has one. | ||
| data.critic.kind | string | No | movie, season, episode, critic, publication | season | Kind of subject: `movie`, `season`, `episode`, `critic` or `publication`. | |
| data.critic.media_type | string | No | TvSeason | Kind of title, such as `TvSeason`. | ||
| data.critic.path | string | No | /tv/breaking_bad/s01 | Rotten Tomatoes path of the subject. | ||
| data.critic.title | string | No | Breaking Bad: Season 1 | Display title of the subject, when known. | ||
| data.critic.url | string | No | https://www.rottentomatoes.com/tv/breaking_bad/s01 | Rotten Tomatoes page URL of the subject. | ||
| data.fetched_at | string | No | 2026-10-29T09:00:00Z | UTC time, to the second, when the data was fetched. | ||
| data.page_info | object | No | Paging information. Only the first page is served today; end_cursor is reported for callers that want to detect more. | |||
| data.page_info.end_cursor | string | No | Mjk= | Cursor of the last item on this page. Pass it as `after` to get the next page. | ||
| data.page_info.has_next_page | boolean | No | true | Whether more items follow this page. | ||
| data.page_info.has_previous_page | boolean | No | true | Whether items precede this page. | ||
| data.page_info.start_cursor | string | No | MA== | Cursor of the first item on this page. | ||
| data.publications | array | No | Publications the critic writes for. | |||
| data.publications[].editorial_url | string | No | http://www.timeout.com | Publication's editorial site URL, when provided. | ||
| data.publications[].encrypted_publication_id | string | No | 1XrAqGrw | Rotten Tomatoes' encrypted publication id. | ||
| data.publications[].image_url | string | No | Logo/image URL of the publication. | |||
| data.publications[].is_top_publication | boolean | No | true | Whether Rotten Tomatoes counts it as a top publication. | ||
| data.publications[].name | string | No | Empire Magazine | Publication name, such as `Empire Magazine`. | ||
| data.publications[].publication_id | string | No | 148 | Rotten Tomatoes' numeric publication id. | ||
| data.publications[].tomatometer_approved | boolean | No | true | Whether the publication is Tomatometer-approved. | ||
| data.source_url | string | No | https://www.rottentomatoes.com/critic/mark-kermode | Rotten Tomatoes page that was rendered. | ||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/rottentomatoes/critic/publications" \
-H "x-api-key: $CRAWLORA_API_KEY"