Common Sense Media Reviews API

JSON REST API exposing Common Sense Media's reviews and ratings catalog. Each review includes recommended age, age-rating group (littleKids/kids/tweens/teens), star rating, content grid (educational, message, role-model, diversity, violence, sex, language, consumerism, drugs), parents-need-to-know guidance, talking points, and product metadata. Clients filter by media type, age range, star range, character strengths, topics, genres, and the Common Sense Selection award. Authentication uses a partner-issued x-api-key header. The API is GET-only, HTTPS-only, rate-limited to 100 unique requests per minute, and content is refreshed at most hourly.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/common-sense-media-reviews-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

common-sense-media-reviews-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Common Sense Media reviews API
  description: The Common Sense Media Reviews API (v3) provides programmatic access to Common Sense Media's age-rated reviews and ratings of movies, TV shows, books, video games, apps, podcasts, websites, and YouTube channels. Each review includes a recommended age rating, star rating, content grid (educational value, positive messages, role models, diversity, violence, sex, language, consumerism, and drugs), parents-need-to-know guidance, talking points, and product metadata. API access is granted via a business partnership agreement; clients authenticate with a partner- issued x-api-key header.
  version: 3.0.0
  contact:
    name: Business Partner Program
    url: https://commonsense.my.site.com/membersupport/s/contactsupport
servers:
- url: https://api.commonsense.org/api/v3
  description: Main API server
security:
- ApiKey: []
tags:
- name: reviews
  description: Common Sense Media reviews and ratings.
paths:
  /reviews:
    get:
      operationId: reviews
      summary: List reviews
      description: Get a set of reviews, filtered by selection criteria such as media type, recommended age rating, star rating, character strengths, topics, or genres.
      tags:
      - reviews
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/size'
      - $ref: '#/components/parameters/since'
      - $ref: '#/components/parameters/langcode'
      - $ref: '#/components/parameters/ids'
      - name: ageRating
        in: query
        description: Filter based on the recommended age rating, exact value or range.
        style: deepObject
        explode: true
        schema:
          type: object
          properties:
            gte:
              type: integer
              minimum: 2
              maximum: 18
            lte:
              type: integer
              minimum: 2
              maximum: 18
      - $ref: '#/components/parameters/mediaType'
      - name: csmAward
        in: query
        description: Filter for items with the Common Sense Selection award.
        schema:
          type: boolean
      - name: characterStrengths
        in: query
        description: Filter based on a review's Character Strengths (UUID list, OR semantics).
        schema:
          type: array
          items:
            type: string
            format: uuid
      - name: genres
        in: query
        description: Filter based on a review's mediaType-specific genre.
        schema:
          type: string
      - name: stars
        in: query
        description: Filter based on the star rating, exact value or range.
        style: deepObject
        explode: true
        schema:
          type: object
          properties:
            gte:
              type: integer
              minimum: 1
              maximum: 5
            lte:
              type: integer
              minimum: 1
              maximum: 5
      - name: topics
        in: query
        description: Filter based on a review's Topics (UUID list, OR semantics).
        schema:
          type: array
          items:
            type: string
            format: uuid
      responses:
        '200':
          description: List of matched reviews.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/BaseResponse'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/Review'
                    pagination:
                      $ref: '#/components/schemas/Pagination'
        '400':
          $ref: '#/components/responses/InvalidRequestError'
        '401':
          $ref: '#/components/responses/NotAuthorizedError'
        '422':
          $ref: '#/components/responses/UnprocessableEntityError'
        5XX:
          $ref: '#/components/responses/ServerError'
  /reviews/{reviewId}:
    get:
      operationId: reviewById
      summary: Get a single review
      description: Retrieve a single review by its UUID identifier.
      tags:
      - reviews
      parameters:
      - $ref: '#/components/parameters/langcode'
      - name: reviewId
        in: path
        required: true
        description: The unique identifier of the review.
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: The review corresponding to the provided reviewId.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/BaseResponse'
                - type: object
                  properties:
                    data:
                      $ref: '#/components/schemas/Review'
        '403':
          $ref: '#/components/responses/NotAuthorizedError'
        '404':
          $ref: '#/components/responses/NotFoundError'
  /reviews/terms/{fieldName}:
    get:
      operationId: allowedValuesByField
      summary: Get allowed values for a field
      description: Get possible values (vocabulary terms) for a filterable field such as awards, characterStrengths, genres, skills, subjects, or topics. When retrieving genres or awards, the mediaType query parameter is required.
      tags:
      - reviews
      parameters:
      - name: fieldName
        in: path
        required: true
        description: The field to look up vocabulary terms for.
        schema:
          type: string
          enum:
          - awards
          - characterStrengths
          - genres
          - skills
          - subjects
          - topics
      - $ref: '#/components/parameters/langcode'
      - $ref: '#/components/parameters/mediaType'
      responses:
        '200':
          description: The list of allowed values for the provided fieldName.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/BaseResponse'
                - $ref: '#/components/schemas/VocabularyNested'
components:
  responses:
    InvalidRequestError:
      description: One or more of the request parameters are invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    UnprocessableEntityError:
      description: One or more of the request parameters are invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFoundError:
      description: The requested item does not exist.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ServerError:
      description: An unexpected server error occurred.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotAuthorizedError:
      description: The requester is unauthorized.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    ContentGridItem:
      type: object
      properties:
        rating:
          type: integer
          minimum: 0
          maximum: 5
        label:
          type: string
        text:
          type: string
    VocabularyNested:
      description: A nested list of tags keyed by id.
      type: object
      additionalProperties: true
    Review:
      type: object
      properties:
        id:
          type: string
          format: uuid
        updated:
          type: integer
        url:
          type: string
          format: uri
        langcode:
          type: string
          default: en
          enum:
          - en
          - es
        mediaType:
          type: string
          enum:
          - app
          - book
          - game
          - movie
          - podcast
          - tv
          - website
          - youtube
        title:
          type: string
        ageRating:
          type: integer
          minimum: 2
          maximum: 18
        ageRatingGroup:
          type: string
          enum:
          - littleKids
          - kids
          - tweens
          - teens
        stars:
          type: integer
          minimum: 1
          maximum: 5
        oneLiner:
          type: string
        anyGood:
          type: string
        parentsNeedToKnow:
          type: string
        description:
          type: string
        talkingPoints:
          type: array
          items:
            type: string
        contentGrid:
          type: object
          description: 'Content grid items: educational, message, roleModel, diversity, violence, sex, language, consumerism, drugs.'
          additionalProperties:
            $ref: '#/components/schemas/ContentGridItem'
    Pagination:
      type: object
      properties:
        totalResults:
          type: integer
          minimum: 0
        page:
          type: integer
          minimum: 0
        size:
          type: integer
          minimum: 0
        totalPages:
          type: integer
          minimum: 0
        nextPage:
          type: string
          format: uri
        previousPage:
          type: string
          format: uri
    Error:
      type: object
      required:
      - message
      properties:
        code:
          type: number
        type:
          type: string
        message:
          type: string
        detail:
          type: string
    BaseResponse:
      type: object
      properties:
        request:
          type: object
          properties:
            url:
              type: string
              format: uri
            method:
              type: string
            version:
              type: string
            timestamp:
              type: integer
        error:
          type: object
          properties:
            code:
              type: integer
            message:
              type: string
  parameters:
    mediaType:
      name: mediaType
      in: query
      description: Filter based on the media type of the review's product.
      schema:
        type: string
        enum:
        - app
        - book
        - game
        - movie
        - podcast
        - tv
        - website
        - youtube
    langcode:
      name: langcode
      in: query
      description: Language code for items, if available.
      schema:
        type: string
        enum:
        - en
        - es
        default: en
    size:
      name: size
      in: query
      description: Number of items per page of results.
      schema:
        type: integer
        default: 100
        minimum: 1
        maximum: 100
    since:
      name: since
      in: query
      description: Limit to items updated since the given Unix timestamp.
      schema:
        type: integer
    ids:
      name: id
      in: query
      description: Filter based on a list of item IDs (OR search).
      schema:
        type: array
        items:
          type: string
          format: uuid
    page:
      name: page
      in: query
      description: Page number of items to return.
      schema:
        type: integer
        format: int32
        default: 0
  securitySchemes:
    ApiKey:
      type: apiKey
      in: header
      name: X-Api-Key
externalDocs:
  description: Developer Center
  url: https://www.commonsensemedia.org/developers