Rotten Tomatoes API endpoint
Returns Rotten Tomatoes TV episode metadata, scorecard data, parent series/season metadata, and public video metadata. Pass exactly one of `path` or `url`.
/rottentomatoes/episodeQuery parameters:
path: Rotten Tomatoes episode path, for example /tv/breaking_bad/s01/e01.url: absolute https://www.rottentomatoes.com episode URL.Notable response behavior:
data.public_page_derived is true.parent_series and parent_season come from public JSON-LD and vanity
metadata when exposed by the page.video is included only when the public TVEpisode JSON-LD exposes video
metadata.critics_score and audience_score are included only when the public page
exposes scorecard data. Some episode pages expose review/rating counts
without score percentages.| Field | Filled in, of 6 checked | Values in the sample |
|---|---|---|
| name | 6 | “Bryan Cranston” and 5 other values |
| url | 6 | rottentomatoes.com |
| image_url | 6 | resizing.flixster.com |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| path | string | No | Rotten Tomatoes episode path | /tv/breaking_bad/s01/e01 | |
| url | string | No | Absolute https://www.rottentomatoes.com episode URL | https://www.rottentomatoes.com/tv/breaking_bad/s01/e01 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/rottentomatoes/episode" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"title": "Pilot",
"path": "/tv/breaking_bad/s01/e01",
"url": "https://www.rottentomatoes.com/tv/breaking_bad/s01/e01",
"ems_id": "ccda9549-4dcb-3147-9a2b-1106dcf852f7",
"media_type": "TvEpisode",
"parent_series": {
"title": "Breaking Bad",
"path": "/tv/breaking_bad"
},
"parent_season": {
"title": "Season 1",
"path": "/tv/breaking_bad/s01",
"season_number": 1
},
"season_number": 1,
"episode_number": 1,
"air_date": "2008-01-20",
"video": {
"title": "Breaking Bad: Official Clip - Walter Wants to Cook"
},
"public_page_derived": true
}
}Request schema
No body schema
Response schema
#/definitions/rottentomatoes.episodeResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | rottentomatoes.EpisodeResponse | No | ||||
| data.air_date | string | No | 2008-01-20 | Date the episode first aired, such as `2008-01-20`. | ||
| data.audience_score | object | No | Popcornmeter audience score of the episode. | |||
| data.audience_score.average_rating | string | No | 8.40 | Average rating as shown on the scorecard, such as `8.40`. | ||
| data.audience_score.banded_rating_count | string | No | 250,000+ Ratings | Approximate number of ratings as shown on the page, such as `250,000+ Ratings`. | ||
| data.audience_score.certified | boolean | No | true | Whether Rotten Tomatoes marks the score as certified. | ||
| data.audience_score.liked_count | integer | No | 314 | Number of ratings that liked the title. | ||
| data.audience_score.not_liked_count | integer | No | 49 | Number of ratings that did not like the title. | ||
| data.audience_score.rating_count | integer | No | 363 | Number of ratings behind the score. | ||
| data.audience_score.review_count | integer | No | 363 | Number of reviews behind the score. | ||
| data.audience_score.reviews_page_url | string | No | https://www.rottentomatoes.com/m/inception/reviews | URL of the Rotten Tomatoes page that lists the reviews behind this score. | ||
| data.audience_score.score | integer | No | 87 | Score as a whole-number percentage. | ||
| data.audience_score.score_percent | string | No | 87% | Score as text with a percent sign, such as `87%`. | ||
| data.audience_score.score_type | string | No | ALL | Audience group the score covers, such as `ALL` or `VERIFIED`. | ||
| data.audience_score.sentiment | string | No | POSITIVE | Overall sentiment of the score, such as `POSITIVE`. | ||
| data.audience_score.title | string | No | Tomatometer | Name of the score, such as `Tomatometer` or `Popcornmeter`. | ||
| data.cast | array | No | People in the cast of the episode. | |||
| data.cast[].image_url | string | No | URL of the person's photo. | |||
| data.cast[].name | string | No | Christopher Nolan | Name of the person. | ||
| data.cast[].url | string | No | https://www.rottentomatoes.com/celebrity/christopher_nolan | Rotten Tomatoes page URL of the person. | ||
| data.critics_score | object | No | Tomatometer critics score of the episode. | |||
| data.critics_score.average_rating | string | No | 8.40 | Average rating as shown on the scorecard, such as `8.40`. | ||
| data.critics_score.banded_rating_count | string | No | 250,000+ Ratings | Approximate number of ratings as shown on the page, such as `250,000+ Ratings`. | ||
| data.critics_score.certified | boolean | No | true | Whether Rotten Tomatoes marks the score as certified. | ||
| data.critics_score.liked_count | integer | No | 314 | Number of ratings that liked the title. | ||
| data.critics_score.not_liked_count | integer | No | 49 | Number of ratings that did not like the title. | ||
| data.critics_score.rating_count | integer | No | 363 | Number of ratings behind the score. | ||
| data.critics_score.review_count | integer | No | 363 | Number of reviews behind the score. | ||
| data.critics_score.reviews_page_url | string | No | https://www.rottentomatoes.com/m/inception/reviews | URL of the Rotten Tomatoes page that lists the reviews behind this score. | ||
| data.critics_score.score | integer | No | 87 | Score as a whole-number percentage. | ||
| data.critics_score.score_percent | string | No | 87% | Score as text with a percent sign, such as `87%`. | ||
| data.critics_score.score_type | string | No | ALL | Audience group the score covers, such as `ALL` or `VERIFIED`. | ||
| data.critics_score.sentiment | string | No | POSITIVE | Overall sentiment of the score, such as `POSITIVE`. | ||
| data.critics_score.title | string | No | Tomatometer | Name of the score, such as `Tomatometer` or `Popcornmeter`. | ||
| data.description | string | No | Short synopsis of the episode. | |||
| data.directors | array | No | Directors of the episode. | |||
| data.directors[].image_url | string | No | URL of the person's photo. | |||
| data.directors[].name | string | No | Christopher Nolan | Name of the person. | ||
| data.directors[].url | string | No | https://www.rottentomatoes.com/celebrity/christopher_nolan | Rotten Tomatoes page URL of the person. | ||
| data.ems_id | string | No | ccda9549-4dcb-3147-9a2b-1106dcf852f7 | Rotten Tomatoes' own unique id of the episode. | ||
| data.episode_number | integer | No | 1 | Episode number within its season. | ||
| data.fetched_at | string | No | 2026-06-07T14:46:16Z | Time the data was fetched, in UTC (RFC 3339). | ||
| data.genres | array | No | Crime | Genres of the episode. | ||
| data.image_url | string | No | URL of the episode image. | |||
| data.lifecycle | string | No | NOT_AIRING | Airing status, such as `NOT_AIRING`. | ||
| data.media_type | string | No | TvEpisode | Kind of title, such as `TvEpisode`. | ||
| data.parent_season | object | No | Season the episode belongs to. | |||
| data.parent_season.ems_id | string | No | 71374db9-1350-30fa-b30a-d3f623bbdfc4 | Rotten Tomatoes' own unique id of the season. | ||
| data.parent_season.path | string | No | /tv/breaking_bad/s01 | Rotten Tomatoes path of the season page, such as `/tv/breaking_bad/s01`. | ||
| data.parent_season.season_number | integer | No | 1 | Number of the season within the series. | ||
| data.parent_season.title | string | No | Season 1 | Season title, such as `Season 1`. | ||
| data.parent_season.url | string | No | https://www.rottentomatoes.com/tv/breaking_bad/s01 | Rotten Tomatoes page URL of the season. | ||
| data.parent_series | object | No | Series the episode belongs to. | |||
| data.parent_series.ems_id | string | No | 6a74def4-dc62-319e-ae3d-360dcf360244 | Rotten Tomatoes' own unique id of the series. | ||
| data.parent_series.path | string | No | /tv/breaking_bad | Rotten Tomatoes path of the series page, such as `/tv/breaking_bad`. | ||
| data.parent_series.title | string | No | Breaking Bad | Title of the series, as Rotten Tomatoes shows it. | ||
| data.parent_series.url | string | No | https://www.rottentomatoes.com/tv/breaking_bad | Rotten Tomatoes page URL of the series. | ||
| data.path | string | No | /tv/breaking_bad/s01/e01 | Rotten Tomatoes path of the episode page, such as `/tv/breaking_bad/s01/e01`. | ||
| data.producers | array | No | Producers of the episode. | |||
| data.producers[].image_url | string | No | URL of the person's photo. | |||
| data.producers[].name | string | No | Christopher Nolan | Name of the person. | ||
| data.producers[].url | string | No | https://www.rottentomatoes.com/celebrity/christopher_nolan | Rotten Tomatoes page URL of the person. | ||
| data.public_page_derived | boolean | No | true | Always `true`: the data comes from publicly visible Rotten Tomatoes pages. | ||
| data.season_number | integer | No | 1 | Number of the season the episode belongs to. | ||
| data.source_url | string | No | https://www.rottentomatoes.com/tv/breaking_bad/s01/e01 | URL the data was read from. | ||
| data.title | string | No | Pilot | Title of the episode, as Rotten Tomatoes shows it. | ||
| data.url | string | No | https://www.rottentomatoes.com/tv/breaking_bad/s01/e01 | Rotten Tomatoes page URL of the episode. | ||
| data.video | object | No | Video clip shown on the episode page. | |||
| data.video.description | string | No | Description of the video. | |||
| data.video.duration | string | No | 2:32 | Length of the video as text, such as `2:32`. | ||
| data.video.thumbnail | string | No | URL of the video thumbnail image. | |||
| data.video.title | string | No | Breaking Bad: Official Clip - Walter Wants to Cook | Title of the video. | ||
| data.video.upload_date | string | No | 2024-07-11T19:23:03 | Date and time the video was uploaded, such as `2024-07-11T19:23:03`. | ||
| data.video.url | string | No | https://www.rottentomatoes.com/tv/breaking_bad/s01/e01/videos/JR3ymbH1dpLb | Rotten Tomatoes page URL of the video. | ||
| 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/episode" \
-H "x-api-key: $CRAWLORA_API_KEY"