---
title: "Get Game"
method: GET
path: "/api/games/{slug}"
tags: ["catalog"]
---

# Get Game

`GET /api/games/{slug}`

## Request

- Base URL: `https://api.getcheapgames.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.getcheapgames.com/api/games/{slug}`
- Auth: none declared

## Path parameters

- `slug` string, required

## Query parameters

- `locale` string, nullable
- `country` string, nullable: ISO country code; decides which keys are region-locked FOR YOU
- `currency` string, nullable: One of EUR, GBP, USD, CAD, CHF, DKK, SEK, NOK, PLN, CZK, HUF, BRL, MXN, CLP, COP, PEN, CRC, UYU, GTQ

## Response `200`

Successful Response

- GameOut
  - `slug` string, required
  - `title` string, required
  - `releaseYear` integer, nullable, required
  - `releaseDate` string, date, nullable
  - `publisher` string, required
  - `developer` string, nullable
  - `genres` string[], required
  - `steamAppId` integer, nullable
  - `coverBase` string, nullable
  - `priceHistory` integer[]
  - `metacriticScore` integer, nullable
  - `metacriticUrl` string, nullable
  - `description` string, nullable
  - `descriptionLocale` string, nullable
  - `kind` string
  - `isFree` boolean
  - `freeToKeep` boolean
  - `giveaway` GcgSchemasGiveawayOut: A giveaway on another store than Steam: what the claim button says and where it goes (`catalog.GIVEAWAY_ELSEWHERE`). Steam's own is the game's `free_to_keep`, whose link the client builds from the appid.
    - `platform` string, required
    - `claimUrl` string, nullable
    - `endsAt` string, date-time, nullable
  - `playUrl` string, nullable
  - `edition` string, nullable
  - `steamSubId` integer, nullable
  - `franchise` string, nullable
  - `publisherSlug` string, nullable
  - `baseGame` EditionRef: A sibling product: another edition of the same base game, or the base game itself. Enough to render a link and a box; not the whole product.
    - `slug` string, required
    - `title` string, required
    - `edition` string, nullable
    - `coverBase` string, nullable
    - `fromCents` integer, nullable
    - `fromCurrency` string, nullable
    - `fromByPlatform` object
    - `fromCurrencyByPlatform` object
  - `editions` EditionRef[]
    - `slug` string, required
    - `title` string, required
    - `edition` string, nullable
    - `coverBase` string, nullable
    - `fromCents` integer, nullable
    - `fromCurrency` string, nullable
    - `fromByPlatform` object
    - `fromCurrencyByPlatform` object
  - `contents` ContentRef[]
    - `slug` string, required
    - `title` string, required
    - `kind` string, required
    - `coverBase` string, nullable
    - `fromByPlatform` object
    - `fromCurrencyByPlatform` object
  - `seasonPasses` GameOut[]
  - `dlc` GameOut[]
  - `soundtracks` GameOut[]
  - `requiresGame` GameOut (recursive)
  - `includedIn` GameOut[]
  - `video` GcgSchemasVideoOut: The trailer that leads the gallery.
    - `kind` 'youtube' | 'file' | 'hls', required
    - `src` string, required
    - `poster` string, nullable
  - `screenshots` ScreenshotOut[]
    - `thumb` string, required
    - `full` string, required
  - `pricesChangedAt` string, date-time, nullable
  - `specs` SpecsOut: What a PC game runs on and in, from Steam. The page shows it beside PC keys only: an Xbox or PlayStation key has none of these requirements.
    - `platforms` string[]
    - `requirements` RequirementsOut[]
      - `system` 'windows' | 'mac' | 'linux', required
      - `minimum` RequirementLineOut[]
        - `key` string, nullable, required
        - `label` string, required
        - `value` string, required
      - `recommended` RequirementLineOut[]
        - `key` string, nullable, required
        - `label` string, required
        - `value` string, required
    - `languages` LanguageOut[]
      - `code` string, required
      - `interface` boolean, required
      - `audio` boolean, required
      - `subtitles` boolean, required
  - `ageRating` AgeRatingOut: The age rating official in the reader's country, from Steam, in our format (steam_ratings.py): one board, or none at all.
    - `board` 'pegi' | 'esrb' | 'usk' | 'classind', required
    - `rating` string, required
    - `badge` string, nullable
    - `icons` string[]
    - `descriptors` string[]
    - `interactive` string[]
    - `requiredAge` integer, nullable
  - `steamReviews` SteamReviewsOut: Steam's own user reviews of the product, as its store page sums them (`SteamProduct.review_count`, `review_percent_positive`). Shown beside our rating, attributed and linked, and never presented as ours: it is Steam's figure about Steam's buyers.
    - `count` integer, required
    - `percentPositive` integer, nullable, required
    - `label` string, nullable, required
    - `url` string, nullable, required
  - `gcgRating` GcgRatingOut: Our users' rating of the product (gcg/reviews): the average of its visible reviews to one decimal, and how many. The page's header and its reviews tab read it here, without asking `/reviews` first.
    - `average` number, nullable, required
    - `count` integer, required
  - `news` GameNewsOut: The posts that cover one product (`GameOut.news`, sent with its page by `GET /api/games/{slug}`): the newest few (`news.ABOUT_GAME`), as the index's cards, and how many there are in all, so a page can say there are more than it shows.
    - `items` NewsCardOut[], required
      - `slug` string, required
      - `title` string, required
      - `dek` string, required
      - `tag` string, required
      - `author` string, required
      - `publishedAt` string, date-time, required
      - `updatedAt` string, date-time, required
      - `readingMinutes` integer, required
      - `cover` NewsCoverOut: A post's picture: `src` a 960-wide WebP, the two `srcset`s the widths in AVIF and WebP (`url 480w, url 960w, url 1600w` for a stored cover; a game's own widths when it is borrowed), and the frame's size for the box a page reserves. Pages crop it to 16:9. Site-relative, like `coverBase`.
        - `src` string, required
        - `srcsetAvif` string, required
        - `srcsetWebp` string, required
        - `width` integer, required
        - `height` integer, required
      - `videoId` string, nullable
      - `lang` string
    - `total` integer, required
  - `offers` OfferOut[]
    - `store` StoreRefOut, required: The store fields a client needs to render an offer. Embedded in each offer rather than referenced by id: it removes a client-side join and a second request, and six short records across a response is nothing next to the round trip it saves.
      - `code` string, required
      - `name` string, required
      - `accent` string, required
      - `kind` string, required
    - `currency` string, required
    - `listPriceCents` integer, nullable, required
    - `feeCents` integer, required
    - `totalCents` integer, required
    - `platform` string, required
    - `inStock` boolean, required
    - `id` string, required
    - `priceCents` integer, required
    - `freeToKeep` boolean
    - `couponCode` string, nullable
    - `couponDiscount` string, nullable
    - `region` string, required
    - `edition` string, required
    - `regionLocked` boolean
    - `sellerRating` integer, nullable
    - `checkedAt` string, date-time, required
    - `outUrl` string, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/getcheapgames/apis/getcheapgames-api.md) · [All operations](https://skmtc.dev/getcheapgames/apis/getcheapgames-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getcheapgames/apis/getcheapgames-api/revisions/57333a690301?raw)
