---
title: "Find"
method: GET
path: "/api/find"
tags: ["catalog"]
---

# Find

`GET /api/find`

## 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/find`
- Auth: none declared

The best-rated paid games in the genres and on the platforms asked for,
with a key in stock at `max_price` or less: "a strategy game under €20",
for the MCP server's `find_games` and the home page's example chat
(`catalog.find_games`). Each with Steam's review summary it is ranked by.

## Query parameters

- `max_price` number, nullable: The highest price, in `currency` (e.g. 20 for €20)
- `platforms` string[], nullable: Canonical platforms
- `genres` string[], nullable: Steam genre descriptions
- `limit` integer
- `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

- FoundGameOut[]
  - `slug` string, required
  - `title` string, required
  - `releaseYear` integer, nullable, required
  - `releaseDate` string, date, nullable
  - `publisher` string, required
  - `genres` string[], required
  - `steamAppId` integer, nullable
  - `coverBase` string, nullable
  - `priceHistory` integer[]
  - `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
  - `franchise` string, nullable
  - `offers` OfferCardOut[]
    - `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
  - `reviewPercentPositive` integer, nullable
  - `reviewCount` integer, nullable

## 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/962824bb76da?raw)
