---
title: "Game with offers, subscriptions, cheapest way to play and historical lows"
method: GET
path: "/v1/games/{id}"
tags: ["Games"]
---

# Game with offers, subscriptions, cheapest way to play and historical lows

`GET /v1/games/{id}`

## Request

- Base URL: `https://api.fairly.gg`
- URL: `https://api.fairly.gg/v1/games/{id}`
- Auth: one of:
  - API key in header `X-Api-Key`
  - none

`id` is a Steam AppID (`730`) or an IGDB id (`igdb:123`). `time_to_beat_minutes` is the main story length (IGDB time to beat, hastily); null when unknown, for free-to-play, multiplayer-only and live-service games, or outside 2-100 hours. `is_free_to_play` marks games that cost nothing to start: they have no price and are left out of price lists. SteamSpy playtime is never used as main story. `other_region_offers` lists offers measured in other regions for editions with at most one offer measured in the visitor region; they are labelled with `measured_in` and never enter `cheapest_way` or the ranking.

## Path parameters

- `id` string, required

## Query parameters

- `owned` string

## Response `200`

OK

- ApiResponseOfGameDetailModel
  - `data` GameDetailModel, required
    - `game` GameSummary, required
      - `id` integer, required
      - `steam_app_id` integer, nullable, required
      - `igdb_id` integer, nullable, required
      - `title` string, required
      - `slug` string, required
      - `cover_url` string, nullable, required
      - `cover_portrait_url` string, nullable
    - `release_date` string, date, nullable, required
    - `genres` string[], required
    - `review_percent` integer, nullable, required
    - `editions` Edition[], required
    - `time_to_beat_minutes` integer, nullable, required
    - `offers` OfferModel[], required
      - `offer_id` integer, required
      - `store_code` string, required
      - `store_name` string, required
      - `store_kind` 'authorized' | 'marketplace' | 'console' | 'subscription', required
      - `edition` 'standard' | 'deluxe' | 'gold' | 'goty' | 'ultimate' | 'bundle' | 'unknown', required
      - `platform` 'steam' | 'epic' | 'gog' | 'ubisoft' | 'ea' | 'xbox_pc' | 'ps' | 'switch' | 'xbox', required
      - `region_lock` 'global' | 'eu' | 'tr' | 'ru_cis' | 'row' | 'latam' | 'asia', required
      - `real_price` Money, required
        - `amount` number, required
        - `currency` string, required: USD, EUR, GBP or TRY.
        - `formatted` string, required: Display text, e.g. "€9.99".
      - `list_price` Money, required
        - `amount` number, required
        - `currency` string, required: USD, EUR, GBP or TRY.
        - `formatted` string, required: Display text, e.g. "€9.99".
      - `fee_label` 'verified' | 'may_apply' | 'stale', required
      - `fee_verified_at` string, date-time, nullable, required
      - `discount_pct` integer, nullable, required
      - `low` LowLabel, required
        - `kind` 'unknown' | 'at_low' | 'above_low' | 'since_tracking', required
        - `above_percent` integer
        - `since` string, date, nullable
        - `basis` unknown
      - `converted` boolean, required
      - `fetched_at` string, date-time, required
      - `freshness` 'fresh' | 'stale' | 'hidden', required
      - `url` string, required
      - `measured_in` unknown, required
      - `discount_ends_at` string, date-time, nullable, required
      - `price_region` unknown, required
      - `eligible` boolean, required
    - `subscriptions` SubscriptionView[], required
      - `code` string, required
      - `name` string, required
      - `monthly_price` Money, required
        - `amount` number, required
        - `currency` string, required: USD, EUR, GBP or TRY.
        - `formatted` string, required: Display text, e.g. "€9.99".
      - `leaving_at` string, date-time, nullable, required
      - `in_catalog` boolean, required
      - `leaving_announced` boolean
      - `owned` boolean
      - `finish` FinishInTimeResult
        - `days_left` integer, required
        - `hours_needed` number, double, required
        - `hours_per_day` number, double, required
        - `verdict` 'comfortable' | 'tight' | 'not_realistic', required
    - `cheapest_way` CheapestWayResult, required
      - `winner` PlayOption, required
        - `kind` 'buy_authorized' | 'buy_marketplace' | 'subscription', required
        - `label` string, required
        - `cost` Money, required
          - `amount` number, required
          - `currency` string, required: USD, EUR, GBP or TRY.
          - `formatted` string, required: Display text, e.g. "€9.99".
        - `months` integer, nullable
        - `offer_id` integer, nullable
        - `subscription_code` string, nullable
        - `owned` boolean
      - `candidates` PlayOption[], required
        - `kind` 'buy_authorized' | 'buy_marketplace' | 'subscription', required
        - `label` string, required
        - `cost` Money, required
          - `amount` number, required
          - `currency` string, required: USD, EUR, GBP or TRY.
          - `formatted` string, required: Display text, e.g. "€9.99".
        - `months` integer, nullable
        - `offer_id` integer, nullable
        - `subscription_code` string, nullable
        - `owned` boolean
      - `notes` SubscriptionNote[], required
        - `code` string, required
        - `name` string, required
        - `kind` 'duration_unknown' | 'leaving_too_soon', required
        - `leaving_at` string, date-time, nullable, required
      - `sentence` string, nullable
    - `lows` LowsModel, required
      - `all_time` Money, required
        - `amount` number, required
        - `currency` string, required: USD, EUR, GBP or TRY.
        - `formatted` string, required: Display text, e.g. "€9.99".
      - `last_90_days` Money, required
        - `amount` number, required
        - `currency` string, required: USD, EUR, GBP or TRY.
        - `formatted` string, required: Display text, e.g. "€9.99".
      - `all_time_at` string, date-time, nullable, required
    - `other_region_offers` OfferModel[], required
      - `offer_id` integer, required
      - `store_code` string, required
      - `store_name` string, required
      - `store_kind` 'authorized' | 'marketplace' | 'console' | 'subscription', required
      - `edition` 'standard' | 'deluxe' | 'gold' | 'goty' | 'ultimate' | 'bundle' | 'unknown', required
      - `platform` 'steam' | 'epic' | 'gog' | 'ubisoft' | 'ea' | 'xbox_pc' | 'ps' | 'switch' | 'xbox', required
      - `region_lock` 'global' | 'eu' | 'tr' | 'ru_cis' | 'row' | 'latam' | 'asia', required
      - `real_price` Money, required
        - `amount` number, required
        - `currency` string, required: USD, EUR, GBP or TRY.
        - `formatted` string, required: Display text, e.g. "€9.99".
      - `list_price` Money, required
        - `amount` number, required
        - `currency` string, required: USD, EUR, GBP or TRY.
        - `formatted` string, required: Display text, e.g. "€9.99".
      - `fee_label` 'verified' | 'may_apply' | 'stale', required
      - `fee_verified_at` string, date-time, nullable, required
      - `discount_pct` integer, nullable, required
      - `low` LowLabel, required
        - `kind` 'unknown' | 'at_low' | 'above_low' | 'since_tracking', required
        - `above_percent` integer
        - `since` string, date, nullable
        - `basis` unknown
      - `converted` boolean, required
      - `fetched_at` string, date-time, required
      - `freshness` 'fresh' | 'stale' | 'hidden', required
      - `url` string, required
      - `measured_in` unknown, required
      - `discount_ends_at` string, date-time, nullable, required
      - `price_region` unknown, required
      - `eligible` boolean, required
    - `console_offers` OfferModel[], required
      - `offer_id` integer, required
      - `store_code` string, required
      - `store_name` string, required
      - `store_kind` 'authorized' | 'marketplace' | 'console' | 'subscription', required
      - `edition` 'standard' | 'deluxe' | 'gold' | 'goty' | 'ultimate' | 'bundle' | 'unknown', required
      - `platform` 'steam' | 'epic' | 'gog' | 'ubisoft' | 'ea' | 'xbox_pc' | 'ps' | 'switch' | 'xbox', required
      - `region_lock` 'global' | 'eu' | 'tr' | 'ru_cis' | 'row' | 'latam' | 'asia', required
      - `real_price` Money, required
        - `amount` number, required
        - `currency` string, required: USD, EUR, GBP or TRY.
        - `formatted` string, required: Display text, e.g. "€9.99".
      - `list_price` Money, required
        - `amount` number, required
        - `currency` string, required: USD, EUR, GBP or TRY.
        - `formatted` string, required: Display text, e.g. "€9.99".
      - `fee_label` 'verified' | 'may_apply' | 'stale', required
      - `fee_verified_at` string, date-time, nullable, required
      - `discount_pct` integer, nullable, required
      - `low` LowLabel, required
        - `kind` 'unknown' | 'at_low' | 'above_low' | 'since_tracking', required
        - `above_percent` integer
        - `since` string, date, nullable
        - `basis` unknown
      - `converted` boolean, required
      - `fetched_at` string, date-time, required
      - `freshness` 'fresh' | 'stale' | 'hidden', required
      - `url` string, required
      - `measured_in` unknown, required
      - `discount_ends_at` string, date-time, nullable, required
      - `price_region` unknown, required
      - `eligible` boolean, required
    - `is_free_to_play` boolean, required
  - `fetched_at` string, date-time, required
  - `data_age_seconds` integer, required
  - `stale` boolean, required
  - `region` unknown
  - `currency` string, nullable
  - `region_fallback` boolean, nullable
  - `attribution` string

## Other responses

- `400`: Bad Request

---

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