Common Sense Media API: Get an age rating
Finds the Common Sense Media review of a movie, TV show, game, book, app or podcast by title (optionally type and year) and returns its age rating, star rating, verdict and parents' guide.
Unofficial. Not affiliated with or endorsed by Common Sense Media.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Type optional
type Kind of entertainment to match, for example movie; defaults to any.
any (default)
One of
any,movie,tv,game,book,app,podcast.- Year optional
year Release year to distinguish titles, for example 2024.
Not set
Whole number from 1900 to 2100.
- Title, required
title Name of the movie, show, game, book, app or podcast, for example Inside Out 2.
Inside Out 2
Input as JSON
{ "title": "Inside Out 2"}Output
{ "type": "movie", "year": 2024, "title": "Inside Out 2", "content": [ { "note": "We all have many emotions, and they're all essential to establishing our sense of self. Growing up is often messy and complicated, but it's also beautiful and rewarding. Loving someone unconditionally means loving all of them, including their imperfections and mistakes. You can't always protect your…", "level": 5, "category": "Positive Messages" }, { "note": "Joy is still determined, positive, and focused on Riley's happiness (and she's better now at appreciating the role/value of the other emotions), and she also shows vulnerability by admitting to being frustrated and not having all the answers. She makes mistakes in the name of trying to help and prot…" , "level": 4, "category": "Role Models" }, { "note": "Scenes of suspense and peril when Joy and the other emotions are caught up in storms/avalanches and chased by authorities and fall from heights. They're also captured and briefly locked up in a dark, scary room and almost tumble into a deep \"Sar Chasm.\" Headquarters is smashed up by a demolition cre…" , "level": 3, "category": "Violence and Scariness" } ], "verdict": "Growing up is emotional in thoughtful sequel; some peril.", "review_link": "https://www.commonsensemedia.org/movie-reviews/inside-out-2" , "quality_rating": 4, "recommended_age": "6+", "kids_suggested_age": "7+", "parents_need_to_know": "Parents need to know that Inside Out 2 , the follow-up to Pixar's beloved 2015 film about the emotions of a girl named Riley (voiced by Kensington Tallman ), deals with the complicated life changes that come with being a teenager. With the onset of puberty, Riley's five original emotions—Joy, Sadnes…", "parents_suggested_age": "7+"}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"commonsensemedia.org/get_age_rating","input":{"title":"Inside Out 2"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "commonsensemedia.org/get_age_rating" , "input": { "title": "Inside Out 2" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "commonsensemedia.org/get_age_rating" , "input": { "title": "Inside Out 2" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run commonsensemedia.org/get_age_rating# with {"title":"Inside Out 2"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "title" ], "properties": { "type": { "enum": [ "any", "movie", "tv", "game", "book", "app", "podcast" ], "type": "string", "default": "any", "description": "Kind of entertainment to match, for example movie; defaults to any." }, "year": { "type": "integer", "maximum": 2100, "minimum": 1900, "description": "Release year to distinguish titles, for example 2024." }, "title": { "type": "string", "description": "Name of the movie, show, game, book, app or podcast, for example Inside Out 2." } }}Output schema
{ "type": "object", "required": [ "title", "type", "year", "recommended_age", "quality_rating", "verdict", "parents_need_to_know", "content", "parents_suggested_age", "kids_suggested_age", "review_link" ], "properties": { "type": { "type": "string" }, "year": { "type": [ "integer", "null" ] }, "title": { "type": "string" }, "content": { "type": "array", "items": { "type": "object", "required": [ "category", "level", "note" ], "properties": { "note": { "type": [ "string", "null" ] }, "level": { "type": [ "integer", "null" ] }, "category": { "type": "string" } } } }, "verdict": { "type": [ "string", "null" ] }, "review_link": { "type": "string" }, "quality_rating": { "type": [ "number", "null" ], "description": "Stars out of 5." }, "recommended_age": { "type": [ "string", "null" ] }, "kids_suggested_age": { "type": [ "string", "null" ] }, "parents_need_to_know": { "type": [ "string", "null" ] }, "parents_suggested_age": { "type": [ "string", "null" ] } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
commonsensemedia.org/get_age_rating- Returns
- title, type, year, recommended age, quality rating, verdict, parents need to know, content ratings, parent and kid suggested ages, review link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method commonsensemedia.org/get_age_rating with the inputs above.
Ask your agent
- Is the movie Wicked (2024) okay for my 8-year-old? What age does Common Sense Media recommend?
- What's the recommended age and parents' guide for the video game Fortnite?
- Look up the commonsensemedia.org review for the TV show Bluey and tell me the star rating and verdict
- My 11-year-old wants to read The Hunger Games book — what do parents need to know about violence and language?
- Find the age rating, content breakdown, and what other parents and kids say about the app Roblox
See more
Finds a game, movie or TV show on Metacritic by name and returns critic and user scores with title details.
metacritic.com/get_scoresGets age certifications and non-spoiler Parents Guide summaries (severity votes and example descriptions for five categories) for a movie or show by title, IMDb link or title ID. A year selects a specific release.
imdb.com/get_parents_guideLists the highest-Metascore games, movies or TV shows on Metacritic for a release year or all time. You can filter by genre, and by platform for games.
metacritic.com/list_best_reviewedGets Rotten Tomatoes critic and audience scores and title details for a movie or TV show, optionally for one TV season. Audience rating counts may be unavailable for series.
rottentomatoes.com/get_scoresReads the newest critic or audience reviews for a Rotten Tomatoes movie or TV show. For a whole TV show it combines reviews from its seasons.
rottentomatoes.com/get_reviewsFinds a movie on TMDB by exact title (optionally its release year) or by TMDB movie link, and returns its details, cast, crew, trailers, and the release date, age rating and streaming services for a chosen country.
themoviedb.org/get_movieGets a movie or TV show's IMDb details from its name, IMDb title link or title ID; a year picks between titles with the same name. Unavailable details are null.
imdb.com/get_movie_or_showGets one Netflix movie or series by its exact name or Netflix title URL: title details, publicly shown seasons and episodes, and whether it is available in a given country's catalogue (checked against public JustWatch listings).
netflix.com/get_movie_or_show