{
  "openapi": "3.1.0",
  "info": {
    "title": "IsThereAnyDeal API",
    "description": "[Changelog](https://github.com/IsThereAnyDeal/API/blob/master/CHANGELOG.md)\n\nIsThereAnyDeal API provides programmatic access to features found at IsThereAnyDeal.  \n\n## Terms of Service\n\nAPI is provided in good faith. We trust you won't misuse the API to damage IsThereAnyDeal, its users or its reputation.\n\n- You MAY use this API for commercial purposes **IF** the resulting app is available to public.\n  Private **personal** use is allowed. Private use beyond personal requires approval, contact us.\n- You SHOULD provide a link to IsThereAnyDeal.com or mention IsThereAnyDeal API.\n- You MUST NOT make an impression that you are affiliated with IsThereAnyDeal, unless agreed otherwise.\n  If you are interested in making an official app, please contact us.\n- You MUST NOT change provided data in any way. This means that you can't remove affiliate tags from the URLs, change prices and so on.\n  You MAY use only part of data provided and enrich them from your own sources.  \n- You MUST NOT make an app that could be considered a competition to IsThereAnyDeal or IsThereAnyDeal projects.\n- You MUST NOT use this API to directly or indirectly help the competition of IsThereAnyDeal.\n\nAll data are provided _as-is_. We reserve the right to deny you access to the API at any point without notice.\nIf you are not sure about any of the points, please contact us.\n\n## Access\n\nMost of the endpoints will be restricted by either API key or OAuth.\nIn order to get neccessary keys, you have to [register your app](https://isthereanydeal.com/apps/my/).\nUpon registration, api keys and OAuth credentials will be generated for you.\n\n> For endpoints protected with api key, you can either add key as the query parameter `key`, or as `ITAD-API-Key` header˙.\n> Refer to endpoint's Authorizations section.\n\nFor some endpoints you might need explicit approval for use. In such cases, contact us.\n\n### OAuth\n\nWe support [authorization code](https://www.oauth.com/oauth2-servers/access-tokens/authorization-code-request/) flow with [PKCE extension](https://oauth.net/2/pkce/).\n\n> You can find PKCE step-through tutorial at [OAuth 2.0 PKCE Flow](https://www.oauth.com/playground/authorization-code-with-pkce.html)\n\nDo not set hard limits for token lengths. Server will return access token as JWT of variable length.\nTo authorize your endpoint access use Authorization header.\n\n> At the moment implicit flow is also enabled, but its usage is discouraged and support may be removed in the future\n\n## Rate Limiting\n\nAccess to API is rate limited. We implement a window-based throttling. By default, if your account has verified email,\nyou can make 1000 requests in a 5 minute window. You will see your current limits and usage in the app setup page.\n\n> We are about to lower the limits for accounts without verified email, but for a transitional period the limits\n> are kept the same.\n> Even though for now the limits are the same, you will still get\n> a warning in the app setup that you can increase your limits by verifying your email.\n\nThe limits are meant to give you some leeway and allow you to handle short bursts of higher activity.\nYou should not be constantly maxing out your usage, implement proper caching.\n\nIf you get rate-limited, you will get a `429 Too Many Requests` response with a `Retry-After` header.\n\nIf you need higher limits, reach out to us with your use case.\n\nLimits may change in the future. Attempts to work around the limits will cause ban.\nFurther limits and restrictions may be added if we detect misuse.\n\n# Unstable and Internal Endpoints\n\nSome endpoints are marked as unstable or internal. Unstable endpoints are publicly available,\nbut the API may not be completely finalized yet - either the way the endpoint is called or the response may change\nat any time.\n\nInternal APIs are available only for our own services. They are documented here for the sake of completeness.\n\n# Unofficial SDKs\n- [isthereanydeal-nodejs](https://www.npmjs.com/package/isthereanydeal-nodejs) \\\n  An unofficial Node.js library for the IsThereAnyDeal API written in TypeScript.\n\n# Source\n\nYou can find source files for this documentation over at [GitHub](https://github.com/IsThereAnyDeal/API).\nFeel free to help us improve it.\n",
    "termsOfService": "https://github.com/IsThereAnyDeal/API/blob/master/TERMS_OF_SERVICE.md",
    "version": "2.11.0",
    "contact": {
      "name": "General API contact",
      "email": "api@isthereanydeal.com"
    }
  },
  "servers": [
    {
      "url": "https://api.isthereanydeal.com"
    }
  ],
  "tags": [
    {
      "name": "Lookup",
      "description": "Endpoints for looking up things on IsThereAnyDeal.\n\nEndpoints in `/lookup/` namespace will follow this URL structure: `/lookup/{lookup-what}/{by-what}/`\n\nEndpoints from other namespaces that are related to lookup in any way may also be\nincluded in this category. \n"
    },
    {
      "name": "Game"
    },
    {
      "name": "Prices"
    },
    {
      "name": "History"
    },
    {
      "name": "Bundles"
    },
    {
      "name": "Giveaways"
    },
    {
      "name": "Deals List"
    },
    {
      "name": "Subscriptions"
    },
    {
      "name": "Waitlist Games",
      "x-displayName": "Games"
    },
    {
      "name": "Waitlist Stats",
      "x-displayName": "Stats"
    },
    {
      "name": "Waitlist Notifications",
      "x-displayName": "Notifications"
    },
    {
      "name": "Collection Games",
      "x-displayName": "Games",
      "description": "Basic Collection operations when you only need to track games, without additional details.\n"
    },
    {
      "name": "Collection Copies",
      "x-displayName": "Copies",
      "description": "Operations on Collection copies. These allow more detailed tracking of owned games.\n"
    },
    {
      "name": "Collection Groups",
      "x-displayName": "Categories",
      "description": "Collection category endpoints. Category and group may be used interchangably. Default category has ID 0.\n"
    },
    {
      "name": "Collection Stats",
      "x-displayName": "Stats"
    },
    {
      "name": "Ignored Games",
      "x-displayName": "Games"
    },
    {
      "name": "User"
    },
    {
      "name": "User Notes",
      "x-displayName": "Notes",
      "description": "Endpoints for managing notes, that user can create for individual games."
    },
    {
      "name": "Profiles",
      "description": "You can create a link between your app's users' accounts and ITAD, and use that link to sync\ngames into Waitlist and Collection in the similar fashion as natively supported profiles on IsThereAnyDeal.\n"
    },
    {
      "name": "Sync",
      "description": "Sync endpoints provide easier way to add or remove games from Waitlist and Collection.\n\nSync via API works in the same way as natively supported sync of remote profiles, but instead of ITAD pulling data,\nyou will have to push data. Behavior of sync'd games is the same as for natively supported profiles.\n\nIt is useful when you can create a list of all games for user, and don't want to handle game identification,\ndeduplication, additions and removals via regular API endpoints.\n"
    },
    {
      "name": "Notifications"
    },
    {
      "name": "Shops"
    },
    {
      "name": "Stats"
    },
    {
      "name": "Unstable",
      "description": "Endpoints that are not yet stable. They may be in development, experimental,\nor we are not sure about their current definition.\n"
    },
    {
      "name": "Internal",
      "description": "Endpoints available for our own services. They are documented here for the sake of completeness.\n"
    },
    {
      "name": "Webhooks",
      "description": "Webhooks provide a simpler wait to get data from IsThereAnyDeal, if you don't required full API access.\n\nUser can [register a webhook in their settings](https://isthereanydeal.com/settings/webhooks/)\nand choose which events they wish to listen to. Once the event is triggered on IsThereAnyDeal,\na request will be sent to registered webhook.\n\nEach request will include `ITAD-Hook-ID` header with a unique ID of a registered webhook\nand `ITAD-Event-ID` headers which identify the event.\n"
    }
  ],
  "paths": {
    "/lookup/id/title/v1": {
      "post": {
        "operationId": "lookup-gid-title-v1",
        "tags": [
          "Lookup"
        ],
        "summary": "Lookup ITAD game IDs by title",
        "description": "Lookup IsThereAnyDeal's game IDs by title\nThis is not a full fledged search. Some title preprocessing will happen, but the lookup will only return IDs for titles, that match precisely.\nTypos or variations in title may not give you expected result.",
        "security": [
          {},
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "requestBody": {
          "description": "List of titles",
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "minItems": 1,
                "items": {
                  "type": "string"
                }
              },
              "example": [
                "Baldurs Gate 3",
                "Half-Life 2",
                "Unknown game"
              ]
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.lookup.gid-by-title"
                },
                "examples": {
                  "success": {
                    "$ref": "#/components/examples/resp.gid-by-title.post.v1.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/lookup/id/shop/{shopId}/v1": {
      "post": {
        "operationId": "lookup-gid-shopid-v1",
        "tags": [
          "Lookup"
        ],
        "summary": "Lookup ITAD game IDs by IDs on shop",
        "description": "Lookup IsThereAnyDeal's game IDs by shop's game IDs",
        "security": [
          {},
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "name": "shopId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "number"
            }
          }
        ],
        "requestBody": {
          "description": "List of shop's game IDs",
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "minItems": 1,
                "items": {
                  "type": "string"
                }
              },
              "example": [
                "app/220"
              ]
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.lookup.gid-by-shopid"
                },
                "examples": {
                  "success": {
                    "$ref": "#/components/examples/resp.gid-by-shopid.post.v1.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/lookup/shop/{shopId}/id/v1": {
      "post": {
        "operationId": "lookup-shopid-gid-v1",
        "tags": [
          "Lookup"
        ],
        "summary": "Lookup game IDs on shop by ITAD game IDs",
        "description": "Lookup shop's game IDs by IsThereAnyDeal game IDs",
        "security": [
          {},
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "name": "shopId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "number"
            }
          }
        ],
        "requestBody": {
          "description": "List of game IDs",
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "minItems": 1,
                "items": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.lookup.shopid-by-gid"
                },
                "examples": {
                  "success": {
                    "$ref": "#/components/examples/resp.shopid-by-gid.post.v1.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/bundles/v1": {
      "get": {
        "operationId": "bundles-v1",
        "tags": [
          "Bundles"
        ],
        "summary": "Bundle List",
        "description": "Get bundles",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/country"
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 1,
              "maximum": 50,
              "default": 20
            }
          },
          {
            "name": "mature",
            "in": "query",
            "description": "Include bundles marked as mature",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "expired",
            "in": "query",
            "description": "Include expired bundles",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Sort value, same as on website",
            "schema": {
              "type": "string",
              "default": "-publish"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.bundles"
                },
                "examples": {
                  "success": {
                    "$ref": "#/components/examples/resp.bundles.v1.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/giveaways/v1": {
      "get": {
        "operationId": "giveaways-v1",
        "tags": [
          "Giveaways"
        ],
        "summary": "Giveaways List",
        "description": "Get giveaways",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 1,
              "maximum": 50,
              "default": 20
            }
          },
          {
            "name": "mature",
            "in": "query",
            "description": "Include bundles marked as mature",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "expired",
            "in": "query",
            "description": "Include expired bundles",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Sort value, same as on website",
            "schema": {
              "type": "string",
              "default": "-publish"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.giveaways"
                },
                "examples": {
                  "success": {
                    "$ref": "#/components/examples/resp.giveaways.v1.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/games/search/v1": {
      "get": {
        "operationId": "games-search-v1",
        "tags": [
          "Game",
          "Lookup"
        ],
        "summary": "Search",
        "description": "Search for games by title",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "name": "title",
            "in": "query",
            "description": "Find games by name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "results",
            "in": "query",
            "description": "Maximum number of results to return",
            "schema": {
              "type": "number",
              "minimum": 1,
              "maximum": 100,
              "default": 20
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Search response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.games.search"
                },
                "examples": {
                  "results": {
                    "description": "Europa Universalis IV search",
                    "$ref": "#/components/examples/resp.search.v1.results"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/games/lookup/v1": {
      "get": {
        "operationId": "games-lookup-v1",
        "tags": [
          "Game",
          "Lookup"
        ],
        "summary": "Lookup Game",
        "description": "Lookup game based on title or Steam appid",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "name": "title",
            "in": "query",
            "description": "Find game by it's name",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "appid",
            "in": "query",
            "description": "Find game by Steam appid",
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lookup response with found game",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.games.lookup"
                },
                "examples": {
                  "found": {
                    "description": "Game found",
                    "$ref": "#/components/examples/resp.lookup.v1.found"
                  },
                  "not-found": {
                    "description": "Game not found",
                    "$ref": "#/components/examples/resp.lookup.v1.not-found"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/games/info/v2": {
      "get": {
        "operationId": "games-info-v2",
        "tags": [
          "Game"
        ],
        "summary": "Game Info",
        "description": "Get basic game information",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/gid"
          }
        ],
        "responses": {
          "200": {
            "description": "Info response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.games.info"
                },
                "examples": {
                  "found": {
                    "description": "Europa Universalis IV info",
                    "$ref": "#/components/examples/info.v2.found"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "404": {
            "$ref": "#/components/responses/error-response",
            "description": "Game not found"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/games/prices/v3": {
      "post": {
        "operationId": "games-prices-v3",
        "tags": [
          "Prices"
        ],
        "summary": "Prices",
        "description": "Get games' prices",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/country"
          },
          {
            "name": "deals",
            "in": "query",
            "description": "Only load deals, omit prices that have no price cut",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "vouchers",
            "in": "query",
            "description": "Allow vouchers in prices",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "capacity",
            "in": "query",
            "description": "How many prices to load per each game, 0 or omit for no limit",
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          },
          {
            "$ref": "#/components/parameters/shops",
            "description": "List of shop IDs for which you want to load prices"
          }
        ],
        "requestBody": {
          "description": "List of Game IDs for which to load prices",
          "$ref": "#/components/requestBodies/gids-200"
        },
        "responses": {
          "200": {
            "description": "Info response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.games.prices"
                },
                "examples": {
                  "success": {
                    "description": "Successful response",
                    "$ref": "#/components/examples/resp.prices.post.v3.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/games/bundles/v2": {
      "get": {
        "operationId": "games-bundles-v2",
        "tags": [
          "Bundles"
        ],
        "summary": "Bundles with Game",
        "description": "Get all bundles which contain the game",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/gid"
          },
          {
            "$ref": "#/components/parameters/country"
          },
          {
            "name": "expired",
            "in": "query",
            "description": "Include expired bundles",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.games.bundles"
                },
                "examples": {
                  "success": {
                    "description": "Successful response",
                    "$ref": "#/components/examples/resp.bundles.v2.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/games/giveaways/v1": {
      "get": {
        "operationId": "games-giveaways-v1",
        "tags": [
          "Giveaways"
        ],
        "summary": "Giveaways with Game",
        "description": "Get all giveaways which contain the game",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/gid"
          },
          {
            "name": "expired",
            "in": "query",
            "description": "Include expired giveaways",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.games.giveaways"
                },
                "examples": {
                  "success": {
                    "description": "Successful response",
                    "$ref": "#/components/examples/resp.giveaways.v1.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/games/overview/v2": {
      "post": {
        "operationId": "games-overview-v2",
        "tags": [
          "Prices"
        ],
        "summary": "Price Overview",
        "description": "Get basic price overview for selected games.\n\nFor each game current best price will be loaded (optionally, only from selected shops),\nhistorical low price (among all covered shops).\n\nFurthermore, result will also contain list of currently active bundles,\nwhich contain at least one of the queried games.\n",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/country"
          },
          {
            "$ref": "#/components/parameters/shops"
          },
          {
            "name": "vouchers",
            "in": "query",
            "description": "Allow vouchers in prices",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/gids-200"
        },
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.games.overview"
                },
                "examples": {
                  "success": {
                    "description": "Successful response",
                    "$ref": "#/components/examples/resp.overview.v2.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/games/historylow/v1": {
      "post": {
        "operationId": "games-historylow-v1",
        "tags": [
          "History"
        ],
        "summary": "History Low",
        "description": "Get historically lowest prices",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/country"
          }
        ],
        "requestBody": {
          "description": "List of Game IDs for which to load historical lows",
          "$ref": "#/components/requestBodies/gids-200"
        },
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.games.historylow"
                },
                "examples": {
                  "success": {
                    "description": "Successful response",
                    "$ref": "#/components/examples/historylow.v1.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/games/storelow/v2": {
      "post": {
        "operationId": "games-storelow-v2",
        "tags": [
          "History"
        ],
        "summary": "Store Low",
        "description": "Get historically lowest prices for individual stores",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/country"
          },
          {
            "$ref": "#/components/parameters/shops"
          }
        ],
        "requestBody": {
          "description": "List of Game IDs for which to load store lows",
          "$ref": "#/components/requestBodies/gids-200"
        },
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.games.storelow"
                },
                "examples": {
                  "success": {
                    "description": "Successful response",
                    "$ref": "#/components/examples/storelow.v2.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/games/history/v2": {
      "get": {
        "operationId": "games-history-v2",
        "tags": [
          "History"
        ],
        "summary": "History log",
        "description": "Get log of historical prices",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/gid"
          },
          {
            "$ref": "#/components/parameters/country"
          },
          {
            "$ref": "#/components/parameters/shops"
          },
          {
            "name": "since",
            "in": "query",
            "description": "Load only price changes after this date.            \nBy default, only last 3 months are loaded\n",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.games.history"
                },
                "examples": {
                  "success": {
                    "description": "Successful response",
                    "$ref": "#/components/examples/history.v2.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/games/subs/v1": {
      "post": {
        "operationId": "games-subscriptions-v1",
        "tags": [
          "Subscriptions"
        ],
        "summary": "Game Subscriptions",
        "description": "Get list of subscriptions the game is listed in.\n",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/country"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/gids-200"
        },
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.games.subscriptions"
                },
                "examples": {
                  "success": {
                    "description": "Successful response",
                    "$ref": "#/components/examples/resp.games.subs.v1.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/deals/v2": {
      "get": {
        "operationId": "deals-v2",
        "tags": [
          "Deals List"
        ],
        "summary": "Deals List",
        "description": "Get current deals. Follows the same rules as deals list displayed on the website, which means that\nyou will not get one game more than once in the list.\n\nFor each game, the best price is displayed, ignoring stores that currently don't have game on sale,\neven if they currently have a better price. If you want to included non-sale prices, use `nondeals` parameter.\n\nYou can define parameters either in a query part of a URL, or you can sent them in a request body.\nSince the specification for GET requests with body is unclear, we also provide more standard POST endpoint\nas a fallback.\n\nYou can authorize with either api key, or OAuth. If you use OAuth, the user data filters will work,\ne.g. in Waitlist filter.\n",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          },
          {
            "OAuth2": [
              "wait_read",
              "coll_read"
            ]
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/country"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Deals list offset",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "How many deals to return",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 20
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Sorting values, same as in deals list on the website",
            "examples": {
              "cut": {
                "summary": "Highest cut",
                "value": "-cut"
              },
              "price": {
                "summary": "Lowest price",
                "value": "price"
              }
            },
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "nondeals",
            "in": "query",
            "description": "Load non-sale prices",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "mature",
            "in": "query",
            "description": "Load deals for mature prices",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "shops",
            "in": "query",
            "description": "List of shop IDs separated by comma",
            "explode": false,
            "style": "form",
            "schema": {
              "type": "array",
              "items": {
                "type": "number",
                "description": "Shop ID"
              }
            },
            "examples": {
              "e1": {
                "summary": "Only Steam (61) and GOG (35)",
                "value": [
                  61,
                  35
                ]
              }
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "There are two ways how you can supply filters.\n\n- A base64 encoded lz compressed filter json - this is what ITAD uses, you can copy and paste filters from the URL\n- Filter JSON (see request body for specification). Examples are omitting URL encoding for clarity, \nbut make sure to URL encode these.\n",
            "examples": {
              "encoded": {
                "summary": "At least 50% off, base64 lz string",
                "value": "N4IgxgrgLiBcoFsCWA7OBWADAGhAghgB5wCMmmAvhUA="
              },
              "json": {
                "summary": "At least 50% off, json",
                "value": "{\"cut\":{\"min\":50,\"max\":null}}\n"
              }
            },
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "You can use either request body or query parameters, but not both at the same time.\nIf you use request body, you must include `Content-Type: application/json` header in your request.\n",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/req.deals"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Deals list",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.deals"
                },
                "examples": {
                  "success": {
                    "summary": "Deals list response example",
                    "$ref": "#/components/examples/resp.deals.get.v2.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      },
      "post": {
        "operationId": "deals-post-v2",
        "tags": [
          "Deals List"
        ],
        "summary": "Deals List",
        "description": "Get current deals. Fallback method if you want to use request body to provide parameters and for whatever reason\nyou can't use GET request. See [GET request documentation](#tag/Deals-List/operation/deals-v2) for more details.\n\nThis endpoint does not support query parameters.\n",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          },
          {
            "OAuth2": [
              "wait_read",
              "coll_read"
            ]
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/req.deals"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Deals list",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.deals"
                },
                "examples": {
                  "success": {
                    "summary": "Deals list response example",
                    "$ref": "#/components/examples/resp.deals.get.v2.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/waitlist/games/v1": {
      "get": {
        "operationId": "waitlist-games-v1-get",
        "tags": [
          "Waitlist Games"
        ],
        "summary": "Games in Waitlist",
        "description": "Get games in user's Waitlist",
        "security": [
          {
            "OAuth2": [
              "wait_read"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.waitlist.games"
                },
                "examples": {
                  "success": {
                    "description": "Successful response",
                    "$ref": "#/components/examples/resp.games.get.v1.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      },
      "put": {
        "operationId": "waitlist-games-v1-put",
        "tags": [
          "Waitlist Games"
        ],
        "summary": "Add to Waitlist",
        "description": "Add games to user's Waitlist",
        "security": [
          {
            "OAuth2": [
              "wait_write"
            ]
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/gids"
        },
        "responses": {
          "204": {
            "description": "Successful response"
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      },
      "delete": {
        "operationId": "waitlist-games-v1-delete",
        "tags": [
          "Waitlist Games"
        ],
        "summary": "Delete from Waitlist",
        "description": "Delete games from user's Waitlist",
        "security": [
          {
            "OAuth2": [
              "wait_write"
            ]
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/gids"
        },
        "responses": {
          "204": {
            "description": "Successful response"
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/collection/games/v1": {
      "get": {
        "operationId": "collection-games-v1-get",
        "tags": [
          "Collection Games"
        ],
        "summary": "Games in Collection",
        "description": "Get games in user's Collection",
        "security": [
          {
            "OAuth2": [
              "coll_read"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "title": "Collection Games Response",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/obj.collection.game"
                  }
                },
                "examples": {
                  "success": {
                    "description": "Successful response",
                    "$ref": "#/components/examples/resp.games.get.v1.success-2"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      },
      "put": {
        "operationId": "collection-games-v1-put",
        "tags": [
          "Collection Games"
        ],
        "summary": "Add to Collection",
        "description": "Add games to user's Collection",
        "security": [
          {
            "OAuth2": [
              "coll_write"
            ]
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/gids"
        },
        "responses": {
          "204": {
            "description": "Successful response"
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      },
      "delete": {
        "operationId": "collection-games-v1-delete",
        "tags": [
          "Collection Games"
        ],
        "summary": "Delete from Collection",
        "description": "Delete games from user's Collection",
        "security": [
          {
            "OAuth2": [
              "coll_write"
            ]
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/gids"
        },
        "responses": {
          "204": {
            "description": "Successful response"
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/collection/copies/v1": {
      "get": {
        "operationId": "collection-copies-v1-get",
        "tags": [
          "Collection Copies"
        ],
        "summary": "List Copies",
        "description": "Get all copies user has in their Collection. Copies are returned as a simple list.\n\nIt is not necessary to have copy for each game in Collection, so you should not rely on this endpoint\nif you need to know about all games in user's Collection.\n",
        "security": [
          {
            "OAuth2": [
              "coll_read"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "title": "Collection Copies Response",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/obj.collection.copy"
                  }
                },
                "examples": {
                  "success": {
                    "description": "Successful response",
                    "$ref": "#/components/examples/resp.copies.get.v1"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      },
      "post": {
        "operationId": "collection-copies-v1-post",
        "tags": [
          "Collection Copies"
        ],
        "summary": "Add Copies",
        "description": "Add new copies. If the game is not already in a Collection, it will be added. Similarly, new tags will also be created.\n\nSame copies may exist multiple times for a single game, ITAD does not check for duplicates.\n\nThis operation is atomic, either all copies are added or none.\n",
        "security": [
          {
            "OAuth2": [
              "coll_write"
            ]
          }
        ],
        "requestBody": {
          "description": "Copies to add",
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/obj.collection.copy.new"
                }
              },
              "example": [
                {
                  "gameId": "018d937e-e9ab-70f4-bd05-1db7a138eb39",
                  "redeemed": false,
                  "shop": 61,
                  "price": {
                    "amount": 33.33,
                    "currency": "EUR"
                  },
                  "note": "Api note",
                  "tags": [
                    "From Api",
                    "Second tag"
                  ]
                },
                {
                  "gameId": "018d937e-e9ab-70f4-bd05-1db7a138eb39",
                  "redeemed": false,
                  "shop": 4,
                  "price": null,
                  "note": null,
                  "tags": [
                    "From Api"
                  ]
                }
              ]
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful response"
          },
          "400": {
            "$ref": "#/components/responses/resp.error.array-of-objects-validation"
          },
          "default": {
            "$ref": "#/components/responses/resp.error.array-of-objects-validation"
          }
        }
      },
      "patch": {
        "operationId": "collection-copies-v1-patch",
        "tags": [
          "Collection Copies"
        ],
        "summary": "Update Copies",
        "description": "Update one or more copies.\n\nYou can issue partial updates on copy, only properties that are included for a copy will be updated.\n    \nThis operation is atomic, either all copies are updated or none.\n",
        "security": [
          {
            "OAuth2": [
              "coll_write"
            ]
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/obj.collection.copy.patch"
                },
                "example": [
                  {
                    "id": 145742693,
                    "shop": 61,
                    "price": {
                      "amount": 12.34,
                      "currency": "USD"
                    }
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success response"
          },
          "400": {
            "$ref": "#/components/responses/resp.error.array-of-objects-validation"
          },
          "default": {
            "$ref": "#/components/responses/resp.error.array-of-objects-validation"
          }
        }
      },
      "delete": {
        "operationId": "collection-copies-v1-delete",
        "tags": [
          "Collection Copies"
        ],
        "summary": "Delete Copies",
        "description": "Delete Collection copies.\n\nCopies that do not exist or don't belong to user will be silently ignored.\n\nOperation is atomic. Either all copies are deleted or none.\n",
        "security": [
          {
            "OAuth2": [
              "coll_write"
            ]
          }
        ],
        "requestBody": {
          "description": "List of copy IDs",
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer"
                }
              },
              "example": [
                123,
                124,
                125
              ]
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response"
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/collection/groups/v1": {
      "get": {
        "operationId": "collection-groups-v1-get",
        "tags": [
          "Collection Groups"
        ],
        "summary": "Get all Categories",
        "description": "Get all Collection categories, both the user created ones and default one.\nDefault category has id 0 and will always be listed last. User set order of categories is respected in the response.\n",
        "security": [
          {
            "OAuth2": [
              "coll_read"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "title": "Collection Categories Response",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/obj.collection.group"
                  }
                },
                "examples": {
                  "success": {
                    "description": "Successful response",
                    "$ref": "#/components/examples/resp.groups.get.v1.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      },
      "post": {
        "operationId": "collection-groups-v1-post",
        "tags": [
          "Collection Groups"
        ],
        "summary": "Create new Category",
        "description": "Create Collection category. Categories with same name may exist.\n\nSuccessful response will return the created category.\n",
        "security": [
          {
            "OAuth2": [
              "coll_write"
            ]
          }
        ],
        "requestBody": {
          "description": "Category to create",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/obj.collection.group.new"
              },
              "example": {
                "title": "New Collection Category",
                "public": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Created category",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/obj.collection.group",
                  "title": "Newly created category"
                },
                "examples": {
                  "success": {
                    "$ref": "#/components/examples/resp.groups.post.v1.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/resp.error.object-validation"
          },
          "default": {
            "$ref": "#/components/responses/resp.error.object-validation"
          }
        }
      },
      "patch": {
        "operationId": "collection-groups-v1-patch",
        "tags": [
          "Collection Groups"
        ],
        "summary": "Update Categories",
        "description": "Update one or more categories.\n\nFor each category that you are going to update, only `id` is required. Fields that you do not want to update may be\nset to `null` or omitted fully. Categories that do not exist or user does not own will be ignored.\n\nDefault category (id: `0`) may have only `public` property updated. Other properties will be ignored.\n\nThis operation is atomic, either all categories update or none. Successful response is the full category list,\nincluding categories that were not updated.\n",
        "security": [
          {
            "OAuth2": [
              "coll_write"
            ]
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/obj.collection.group.patch"
                },
                "example": [
                  {
                    "id": 123,
                    "title": "Full update",
                    "public": false,
                    "position": "1\""
                  },
                  {
                    "id": 0,
                    "public": false
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "title": "Collection Categories Response",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/obj.collection.group"
                  }
                },
                "examples": {
                  "success": {
                    "description": "Successful response",
                    "$ref": "#/components/examples/resp.groups.get.v1.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/resp.error.array-of-objects-validation"
          },
          "default": {
            "$ref": "#/components/responses/resp.error.array-of-objects-validation"
          }
        }
      },
      "delete": {
        "operationId": "collection-groups-v1-delete",
        "tags": [
          "Collection Groups"
        ],
        "summary": "Delete Categories",
        "description": "Delete Collection categories.\n\nDefault category or categories that do not exist or user does not own will be silently ignored.\n",
        "security": [
          {
            "OAuth2": [
              "coll_write"
            ]
          }
        ],
        "requestBody": {
          "description": "List of category IDs",
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer"
                }
              },
              "example": [
                123,
                124,
                125
              ]
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response"
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/ignored/games/v1": {
      "get": {
        "operationId": "ignored-games-v1-get",
        "tags": [
          "Ignored Games"
        ],
        "summary": "Games in Ignore List",
        "description": "Get games in user's Ignore List",
        "security": [
          {
            "OAuth2": [
              "ignored_read"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.ignored.games"
                },
                "examples": {
                  "success": {
                    "description": "Successful response",
                    "$ref": "#/components/examples/resp.games.get.v1.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      },
      "put": {
        "operationId": "ignored-games-v1-put",
        "tags": [
          "Ignored Games"
        ],
        "summary": "Add to Ignore List",
        "description": "Add games to user's Ignore List",
        "security": [
          {
            "OAuth2": [
              "ignored_write"
            ]
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/gids"
        },
        "responses": {
          "204": {
            "description": "Successful response"
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      },
      "delete": {
        "operationId": "ignored-games-v1-delete",
        "tags": [
          "Ignored Games"
        ],
        "summary": "Delete from Ignore List",
        "description": "Delete games from user's Ignore List",
        "security": [
          {
            "OAuth2": [
              "ignored_write"
            ]
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/gids"
        },
        "responses": {
          "204": {
            "description": "Successful response"
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/stats/waitlist/v1": {
      "get": {
        "operationId": "stats-waitlist-v1",
        "tags": [
          "Stats",
          "Waitlist Stats"
        ],
        "summary": "Waitlist Stats",
        "description": "Get Waitlist statistics for a game\n\n> Note: stats do not take into consideration users' regions.\n> If they have set their price limit to be a historical low, stats will be computed\n> for all users as if they were in the region you specify\n",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/gid"
          },
          {
            "$ref": "#/components/parameters/country"
          },
          {
            "name": "bucket_price",
            "in": "query",
            "description": "Price bucket size",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 5
            }
          },
          {
            "name": "bucket_cut",
            "in": "query",
            "description": "Cut bucket size",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 5
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.stats.waitlist"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/stats/most-waitlisted/v1": {
      "get": {
        "operationId": "stats-most-waitlisted-v1",
        "tags": [
          "Stats",
          "Waitlist Stats"
        ],
        "summary": "Most Waitlisted",
        "description": "Get list of most Waitlisted games\n",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500,
              "default": 20
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.stats.ranked-games"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/stats/most-collected/v1": {
      "get": {
        "operationId": "stats-most-collected-v1",
        "tags": [
          "Stats",
          "Collection Stats"
        ],
        "summary": "Most Collected",
        "description": "Get list of most Collected games\n",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500,
              "default": 20
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.stats.ranked-games"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/stats/most-popular/v1": {
      "get": {
        "operationId": "stats-most-popular-v1",
        "tags": [
          "Stats"
        ],
        "summary": "Most Popular",
        "description": "Get list of most popular games. Popularity for each game is computed as Waitlisted count + Collected count.\n",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500,
              "default": 20
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.stats.ranked-games"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/user/info/v2": {
      "get": {
        "operationId": "user-info-v2",
        "tags": [
          "User"
        ],
        "summary": "User Info",
        "description": "Get user info, currently just a username",
        "security": [
          {
            "OAuth2": [
              "user_info"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.user.info"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/user/notes/v1": {
      "get": {
        "operationId": "user-notes-v1-get",
        "tags": [
          "User Notes"
        ],
        "summary": "Get notes",
        "description": "Get user's game notes\n",
        "security": [
          {
            "OAuth2": [
              "notes_read"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.notes.get"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      },
      "put": {
        "operationId": "user-notes-v1-put",
        "tags": [
          "User Notes"
        ],
        "summary": "Add or edit notes",
        "description": "Add or edit game notes. This operation is atomic and idempotent.\n",
        "security": [
          {
            "OAuth2": [
              "notes_write"
            ]
          }
        ],
        "requestBody": {
          "required": true,
          "description": "List of notes",
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/obj.note"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success response"
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      },
      "delete": {
        "operationId": "user-notes-v1-delete",
        "tags": [
          "User Notes"
        ],
        "summary": "Delete notes",
        "description": "Delete game notes. This operation is atomic.\n",
        "security": [
          {
            "OAuth2": [
              "notes_write"
            ]
          }
        ],
        "requestBody": {
          "required": true,
          "description": "List of game IDs",
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success response"
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/profiles/link/v1": {
      "put": {
        "operationId": "profiles-link-v1-put",
        "tags": [
          "Profiles"
        ],
        "summary": "Link profile",
        "description": "Profile is an object identifying remote account. You need linked profile to use sync endpoints.\n\nAfter successful link you will get profile token, which is used in subsequent profile operations,\nusually as an `ITAD-Profile` header. \n\nLinking is idempotent, if you lose your token, or you need it in different instance of your app,\nyou can link the same profile again.\n",
        "security": [
          {
            "OAuth2": [
              "profiles"
            ]
          }
        ],
        "requestBody": {
          "required": true,
          "description": "Profile to link",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/obj.profile"
              },
              "example": {
                "accountId": "acc7896132977",
                "accountName": "My Account"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.link.put"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      },
      "delete": {
        "operationId": "profiles-link-v1-delete",
        "tags": [
          "Profiles"
        ],
        "summary": "Unlink profile",
        "security": [
          {
            "OAuth2": [
              "profiles"
            ]
          }
        ],
        "parameters": [
          {
            "name": "ITAD-Profile",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Profile token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success response"
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/profiles/sync/waitlist/v1": {
      "put": {
        "operationId": "profiles-sync-waitlist-v1-put",
        "tags": [
          "Sync"
        ],
        "summary": "Sync Waitlist",
        "description": "Sync Waitlist with IsThereAnyDeal. User can set category for your profile and default notification rules\nin their [settings](https://isthereanydeal.com/settings/profiles/), same as with natively supported profiles.\n",
        "security": [
          {
            "OAuth2": [
              "profiles"
            ]
          }
        ],
        "parameters": [
          {
            "name": "ITAD-Profile",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Profile token"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "description": "Games to sync with IsThereAnyDeal",
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/obj.waitlist.entry"
                }
              },
              "example": [
                {
                  "shop": 61,
                  "id": "my-waitlist-id-1",
                  "title": "Creatures of Ava: Deluxe Edition"
                },
                {
                  "shop": 4,
                  "id": "my-waitlist-id-3",
                  "title": ">observer_"
                }
              ]
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.sync.waitlist"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/resp.error.array-of-objects-validation"
          },
          "default": {
            "$ref": "#/components/responses/resp.error.array-of-objects-validation"
          }
        }
      }
    },
    "/profiles/sync/collection/v1": {
      "put": {
        "operationId": "profiles-sync-collection-v1-put",
        "tags": [
          "Sync"
        ],
        "summary": "Sync Collection",
        "description": "Sync Collection with IsThereAnyDeal. User can set category for your profile\nin their [settings](https://isthereanydeal.com/settings/profiles/), same as with natively supported profiles.\n\nGames are synced as redeemed copies. If there already is a redemeed copy with the same shop in user's Collection,\nnew copy will not be added.\n",
        "security": [
          {
            "OAuth2": [
              "profiles"
            ]
          }
        ],
        "parameters": [
          {
            "name": "ITAD-Profile",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Profile token"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "description": "Games to sync with IsThereAnyDeal",
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/obj.collection.entry"
                }
              },
              "example": [
                {
                  "shop": 61,
                  "id": "my-tracking-id-2",
                  "title": "Creatures of Ava: Deluxe Edition",
                  "playtime": 100,
                  "lastPlayed": "2024-08-26T22:04:08+01:00"
                },
                {
                  "shop": 4,
                  "id": "my-tracking-id-3",
                  "title": ">observer_"
                }
              ]
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.sync.collection"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/resp.error.array-of-objects-validation"
          },
          "default": {
            "$ref": "#/components/responses/resp.error.array-of-objects-validation"
          }
        }
      }
    },
    "/notifications/v1": {
      "get": {
        "operationId": "notifications-list-v1-get",
        "tags": [
          "Notifications"
        ],
        "summary": "List notifications",
        "description": "Get user's notifications",
        "security": [
          {
            "OAuth2": [
              "notifications"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "title": "Notifications Response",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/obj.notification"
                  }
                },
                "examples": {
                  "success": {
                    "description": "Successful response",
                    "$ref": "#/components/examples/resp.notifications.get.v1"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/notifications/waitlist/v1": {
      "get": {
        "operationId": "notifications-waitlist-v1-get",
        "tags": [
          "Notifications",
          "Waitlist Notifications"
        ],
        "summary": "Waitlist notification detail",
        "description": "Get details of Waitlist notification",
        "security": [
          {
            "OAuth2": [
              "notifications"
            ]
          }
        ],
        "parameters": [
          {
            "in": "query",
            "name": "id",
            "description": "Notification ID",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "title": "Waitlist Notification Detail Response",
                  "$ref": "#/components/schemas/obj.notification.waitlist"
                },
                "examples": {
                  "success": {
                    "description": "Successful response",
                    "$ref": "#/components/examples/resp.notifications.waitlist.get.v1"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/notifications/read/v1": {
      "put": {
        "operationId": "notifications-read-v1-put",
        "tags": [
          "Notifications"
        ],
        "summary": "Mark notification read",
        "description": "Mark single notification as read",
        "security": [
          {
            "OAuth2": [
              "notifications"
            ]
          }
        ],
        "parameters": [
          {
            "in": "query",
            "name": "id",
            "description": "Notification ID",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Success response"
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/notifications/read/all/v1": {
      "put": {
        "operationId": "notifications-read-all-v1-put",
        "tags": [
          "Notifications"
        ],
        "summary": "Mark all notifications read",
        "description": "Mark all notifications as read",
        "security": [
          {
            "OAuth2": [
              "notifications"
            ]
          }
        ],
        "responses": {
          "204": {
            "description": "Success response"
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/service/shops/v1": {
      "get": {
        "operationId": "service-shops-v1",
        "tags": [
          "Shops"
        ],
        "summary": "Active shops",
        "description": "Return active shops for specified country, with basic information about number of games and shop's last update.",
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/country"
          }
        ],
        "responses": {
          "200": {
            "description": "List of shops and their details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.service.shops"
                },
                "examples": {
                  "success": {
                    "summary": "Short shop list example",
                    "$ref": "#/components/examples/shops.v1.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/service/shops/map/v1": {
      "get": {
        "operationId": "service-shops-map-v1",
        "tags": [
          "Shops"
        ],
        "summary": "Shop Map",
        "description": "Get list of all shops that were ever covered by IsThereAnyDeal, including inactive shops. Only id and title of the shop is included in the response, since the shop details may differ by region.",
        "security": [],
        "responses": {
          "200": {
            "description": "Shop map",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.service.shops.map"
                },
                "examples": {
                  "success": {
                    "summary": "Short shop map example",
                    "$ref": "#/components/examples/shops.map.v1.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/webhooks/v1": {
      "put": {
        "operationId": "webhooks-add-v1",
        "tags": [
          "Webhooks"
        ],
        "summary": "Add webhook",
        "description": "Register a webhook for the user. All webhooks should implicitly support ping event. You don't have to specify ping event in the list of supported ones, it will be added automatically.\nUpon successful registration, the response will include webhook's ID that can be used to remove the webhook.",
        "security": [
          {
            "OAuth2": [
              "webhooks"
            ]
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/obj.webhook"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful webhook registration",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.webhook.add"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/resp.error.object-validation"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      },
      "delete": {
        "operationId": "webhooks-delete-v1",
        "tags": [
          "Webhooks"
        ],
        "summary": "Remove webhook",
        "description": "Remove previously registered webhook",
        "security": [
          {
            "OAuth2": [
              "webhooks"
            ]
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Successful response"
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/unstable/games/list/v1": {
      "get": {
        "operationId": "unstable-games-list-v1",
        "tags": [
          "Unstable"
        ],
        "summary": "Game List",
        "description": "> We are looking for a feedback for this endpoint. Please let us know whether you find this useful or not,\n> or suggest changes. If we won't hear any feedback, we will assume this endpoint\n> is useless and will be removed in the future.\n\nGet list of currently recognized active games.\n\nOne of the biggest hurdles to communicate with the ITAD API is to get game IDs that are needed by our endpoints.\nUsually, you will get these IDs by doing a lookup or search when you are trying to get to specific game,\nor they will be a part of the response of other endpoints, e.g. Deals list.\n\nWith this endpoint we are experimenting with returning a list of all currently active games, which could be used to\nbootstrap your application.\n\nHowever, this is not a load once and forget solution. Each game on IsThereAnyDeal has associated products,\nwhich are basically entries from shops that we cover. Think about \"game\" on ITAD as a _container_,\nthat includes products and has some other associated information or metadata.\n\nOnce a game loses its products, it will become inactive. This can happen for example if the game is renamed.\nIn such cases, new game entry will be created, and products will be reassigned to the new game.\nThis can happen automatically by a system, or manually.\n\nThe automatic product to game assignment is not perfect, and sometimes needs to be fixed manually.\nThis may happen because of various sitations, for example:\n- developer changes the game's name, but some of the shops don't reflect the change and keep using the old name\n- shop lists a game in a slightly different way that our system can't manage automatically \n- remaster of the game is released with the same name as the old entry\n- a different game with the same name exists and products needs to be split to correct entries\n\n> To make things even more complicated, the shop may change their product ID,\n> or may use different product IDs for different regions, based on their internal structure.\n> To get a better understanding of this, you can check any game on ITAD for its products. As an example,\n> here's [Red Dead Redemption 2](https://isthereanydeal.com/game/red-dead-redemption-2/products/). \n\nThe game IDs are ensured to be ascending. You can check for new entries by using your last known game ID\nto get only new entries. However, there may be a case, where an old inactive game becomes active again\n- it stopped being sold, but has since returned and is being sold again.\n\nWe are looking for a feedback about this endpoint. You can currently use it to bootstrap your application,\nbut it should not be relied upon for 100% coverage all the time. At the very least, if you end up relying on this map\nand omit doing lookups, you should check for new entries, and periodically (e.g. once a week) recheck the entire list.\n\nThere is a possiblity to return all known game entries, including the inactive ones, but this would include\na lot of dead entries that will never be used again, like when a shop listed a game with typo and such.\n\nThe maximum number of games you will get is 10000. Use `last` parameter to get more entries.\n\n> This endpoint is supposed to be used in concert with [Game Changes endpoint](#tag/Unstable/operation/unstable-games-dots-v1).\n",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "name": "last",
            "in": "query",
            "required": false,
            "description": "Last known game ID, use to get newer entries",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Info response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.games.list"
                },
                "examples": {
                  "list": {
                    "$ref": "#/components/examples/resp.games.list.v1.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/unstable/games/dots/v1": {
      "get": {
        "operationId": "unstable-games-dots-v1",
        "tags": [
          "Unstable"
        ],
        "summary": "Game Changes",
        "description": "> We are looking for a feedback for this endpoint. Please let us know whether you find this useful or not,\n> or suggest changes. If we won't hear any feedback, we will assume this endpoint\n> is useless and will be removed in the future.\n\nGet list of product assignment changes.\n\nAs explained in the [Games List endpoint](#tag/Unstable/operation/unstable-games-list-v1), game on IsThereAnyDeal\nis a container that has products assigned, and products may move between game entries.\n\nThis endpoint will return these products changes. The intention is that if you use Games List endpoint\nto get the game map, you will also use this endpoint in concert, and recheck games that had their products reassigned.\n\nNumber of entries returned is limited to 1000. You can use `last` parameter to get newer entries since your last known id,\nor `since` parameter to get newer entries since supplied unix timestamp.\nIf none are used, you will get the newest 1000 entries.\n\n> This endpoint is supposed to be used in concert with [Game List endpoint](#tag/Unstable/operation/unstable-games-list-v1).\n",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "name": "last",
            "in": "query",
            "required": false,
            "description": "Last known change ID, use to get newer entries",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "description": "Unix timestamp, to return newer entries than supplied timestamp",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.games.dots"
                },
                "examples": {
                  "changes": {
                    "$ref": "#/components/examples/resp.games.dots.v1.success"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/internal/early-access/v1": {
      "get": {
        "operationId": "internal-earlyaccess-v1",
        "tags": [
          "Internal"
        ],
        "summary": "Early Access Games",
        "description": "Returns list of Steam appids, which are currently considered to be early in early access",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "integer"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/internal/players/v1": {
      "get": {
        "operationId": "internal-players-v1",
        "tags": [
          "Internal"
        ],
        "summary": "Number of Players Statistics",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "name": "appid",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.internal.players"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/internal/hltb/v1": {
      "get": {
        "operationId": "internal-hltb-v1",
        "tags": [
          "Internal"
        ],
        "summary": "HowLongToBeat Overview",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "name": "appid",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.internal.hltb"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/internal/wsgf/v1": {
      "get": {
        "operationId": "internal-wsgf-v1",
        "tags": [
          "Internal"
        ],
        "summary": "WSGF Overview",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "name": "appid",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.internal.wsgf"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/internal/reviews/v1": {
      "get": {
        "operationId": "internal-reviews-v1",
        "tags": [
          "Internal"
        ],
        "summary": "Reviews Score",
        "description": "Returns Metacritic user reviews overview and OpenCritic overview for a given game",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "name": "appid",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.internal.reviews"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/internal/rates/v1": {
      "get": {
        "operationId": "internal-rates-v1",
        "tags": [
          "Internal"
        ],
        "summary": "Conversion Rates",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.internal.rates"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/internal/exfgls/v1": {
      "get": {
        "operationId": "internal-exfgls-v1",
        "tags": [
          "Internal"
        ],
        "summary": "Excluded from Family Sharing",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "requestBody": {
          "description": "List of appids",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.internal.exfgls"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/internal/twitch/stream/v1": {
      "get": {
        "operationId": "internal-twitchstream-v1",
        "tags": [
          "Internal"
        ],
        "summary": "Current stream of Twitch channel",
        "security": [
          {
            "ApiKeyParamAuth": []
          },
          {
            "ApiKeyHeaderAuth": []
          }
        ],
        "parameters": [
          {
            "name": "channel",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/resp.internal.twitchstream"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/error-response"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    }
  },
  "webhooks": {
    "ping": {
      "post": {
        "operationId": "webhook-ping-post",
        "tags": [
          "Webhooks"
        ],
        "summary": "Ping event",
        "description": "Event you can use to test if the webhook is set up correctly.\nCan be triggered manually from [settings](https://isthereanydeal.com/settings/webhooks/).\n",
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/headers.user-agent"
          },
          {
            "$ref": "#/components/parameters/headers.content-type"
          },
          {
            "$ref": "#/components/parameters/headers.hook-id"
          },
          {
            "$ref": "#/components/parameters/headers.event",
            "schema": {
              "type": "string",
              "const": "ping"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "string",
                "const": "pong",
                "description": "Ping even will always send \"pong\" string in a body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return 200 to indicate webhook request was received successfuly"
          },
          "default": {
            "description": "Frequent or prolonged error responses (other than in 200 range) may in some cases cause webhook to be disabled\n"
          }
        }
      }
    },
    "notification": {
      "post": {
        "operationId": "webhook-notification-post",
        "tags": [
          "Webhooks",
          "Waitlist Notifications"
        ],
        "summary": "Waitlist notification event",
        "description": "This event is trigger on new Waitlist notifications\n\nEvent's payload is a list of games and their deals that passed user's notification settings,\nsimilar to the Waitlist email notification you may receive.\n",
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/headers.user-agent"
          },
          {
            "$ref": "#/components/parameters/headers.content-type"
          },
          {
            "$ref": "#/components/parameters/headers.hook-id"
          },
          {
            "$ref": "#/components/parameters/headers.event",
            "schema": {
              "type": "string",
              "const": "notification-waitlist"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "title": "Waitlist Notification Payload",
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/obj.notification.game"
                }
              },
              "examples": {
                "success": {
                  "description": "Payload",
                  "$ref": "#/components/examples/event.notification-waitlist"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return 200 to indicate webhook request was received successfuly"
          },
          "default": {
            "description": "Frequent or prolonged error responses (other than in 200 range) may in some cases cause webhook to be disabled\n"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "ApiKeyParamAuth": {
        "type": "apiKey",
        "in": "query",
        "name": "key"
      },
      "ApiKeyHeaderAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "ITAD-API-Key"
      },
      "OAuth2": {
        "type": "oauth2",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://isthereanydeal.com/oauth/authorize/",
            "tokenUrl": "https://isthereanydeal.com/oauth/token/",
            "refreshUrl": "https://isthereanydeal.com/oauth/token/",
            "scopes": {
              "user_info": "Get basic user's info",
              "notes_read": "Read user's game notes",
              "notes_write": "Write (add, edit, delete) user's game notes",
              "profiles": "Link or unlink profiles",
              "wait_read": "Read user's Waitlist",
              "wait_write": "Write (add, edit, delete) in user's Waitlist",
              "coll_read": "Read user's Collection",
              "coll_write": "Write (add, edit, delete) in user's Collection",
              "ignored_read": "Read user's Ignore list",
              "ignored_write": "Write (add, delete) in user's Ignore list",
              "webhooks": "Add or remove webhooks on user's behalf"
            }
          }
        }
      }
    },
    "parameters": {
      "country": {
        "name": "country",
        "in": "query",
        "description": "Two letter country code (ISO 3166-1 alpha-2)",
        "schema": {
          "type": "string",
          "minLength": 2,
          "maxLength": 2,
          "default": "US"
        }
      },
      "gid": {
        "name": "id",
        "in": "query",
        "required": true,
        "description": "Game ID",
        "schema": {
          "type": "string",
          "format": "uuid"
        }
      },
      "shops": {
        "name": "shops",
        "in": "query",
        "description": "List of shop IDs",
        "explode": false,
        "style": "form",
        "schema": {
          "type": "array",
          "items": {
            "type": "integer"
          },
          "example": [
            65,
            35
          ]
        }
      },
      "headers.user-agent": {
        "in": "header",
        "name": "User-Agent",
        "required": true,
        "schema": {
          "type": "string",
          "const": "ITAD-Webhooks/1.0 (+https://isthereanydeal.com)"
        }
      },
      "headers.content-type": {
        "in": "header",
        "name": "Content-Type",
        "required": true,
        "schema": {
          "type": "string",
          "const": "application/json"
        }
      },
      "headers.hook-id": {
        "in": "header",
        "name": "ITAD-Hook-ID",
        "description": "ID of the Webhook",
        "required": true,
        "schema": {
          "type": "string",
          "format": "uuid"
        }
      },
      "headers.event": {
        "in": "header",
        "name": "ITAD-Event",
        "description": "Event that generated the request",
        "required": true,
        "schema": {
          "type": "string"
        }
      }
    },
    "requestBodies": {
      "gids": {
        "description": "List of Game IDs",
        "content": {
          "application/json": {
            "schema": {
              "type": "array",
              "minItems": 1,
              "items": {
                "type": "string",
                "format": "uuid"
              }
            },
            "example": [
              "01849783-6a26-7147-ab32-71804ca47e8e",
              "01849782-1017-7389-8de4-c97c587fd7e3"
            ]
          }
        }
      },
      "gids-200": {
        "description": "List of Game IDs",
        "content": {
          "application/json": {
            "schema": {
              "type": "array",
              "minItems": 1,
              "maxItems": 200,
              "items": {
                "type": "string",
                "format": "uuid"
              }
            },
            "example": [
              "01849783-6a26-7147-ab32-71804ca47e8e",
              "01849782-1017-7389-8de4-c97c587fd7e3"
            ]
          }
        }
      }
    },
    "responses": {
      "error-response": {
        "description": "Error response",
        "content": {
          "application/json": {
            "schema": {
              "title": "Error Response",
              "type": "object",
              "required": [
                "status_code",
                "reason_phrase"
              ],
              "properties": {
                "status_code": {
                  "description": "HTTP status code",
                  "type": "number"
                },
                "reason_phrase": {
                  "description": "Error description",
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "resp.error.array-of-objects-validation": {
        "description": "Array Validation Error Response",
        "content": {
          "application/json": {
            "schema": {
              "title": "Array Validation Error Response",
              "type": "object",
              "required": [
                "status_code",
                "reason_phrase"
              ],
              "properties": {
                "status_code": {
                  "description": "HTTP status code",
                  "type": "number"
                },
                "reason_phrase": {
                  "description": "Error description",
                  "type": "string"
                },
                "details": {
                  "description": "When this endpoint fails during data validation, validation errors will be listed\nas array of two items.\n\nFirst item is the index of object in request data.\n\nSecond item is map of errors, with key being the property that failed to validate and value is the error itself.\n",
                  "type": "array",
                  "prefixItems": [
                    {
                      "type": "number",
                      "description": "Index of object"
                    },
                    {
                      "type": "object",
                      "description": "Validation errors",
                      "additionalProperties": {
                        "type": "string"
                      }
                    }
                  ]
                }
              }
            },
            "example": {
              "status_code": 400,
              "reason_phrase": "Bad Request",
              "details": [
                0,
                {
                  "propety": "Missing data for 'property'"
                }
              ]
            }
          }
        }
      },
      "resp.error.object-validation": {
        "description": "Data Validation Error Response",
        "content": {
          "application/json": {
            "schema": {
              "title": "Data Validation Error Response",
              "type": "object",
              "required": [
                "status_code",
                "reason_phrase"
              ],
              "properties": {
                "status_code": {
                  "description": "HTTP status code",
                  "type": "number"
                },
                "reason_phrase": {
                  "description": "Error description",
                  "type": "string"
                },
                "details": {
                  "description": "When this endpoint fails during data validation, validation errors will be provided as a map,\nwhere key is the property that failed to validate and value is the error itself.\n",
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                }
              }
            },
            "example": {
              "status_code": 400,
              "reason_phrase": "Bad Request",
              "details": {
                "propety": "Missing data for 'property'"
              }
            }
          }
        }
      }
    },
    "schemas": {
      "resp.lookup.gid-by-title": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Game IDs Lookup by Title Response",
        "type": "object",
        "additionalProperties": {
          "x-additionalPropertiesName": "title",
          "oneOf": [
            {
              "type": "null"
            },
            {
              "type": "string",
              "format": "uuid"
            }
          ]
        }
      },
      "resp.lookup.gid-by-shopid": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Game IDs lookup by shop ID response",
        "type": "object",
        "additionalProperties": {
          "x-additionalPropertiesName": "shop ID",
          "oneOf": [
            {
              "type": "null"
            },
            {
              "type": "string",
              "format": "uuid"
            }
          ]
        }
      },
      "resp.lookup.shopid-by-gid": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Shop IDs Lookup Response",
        "type": "object",
        "patternProperties": {
          "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          }
        }
      },
      "obj.price": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Price",
        "type": "object",
        "properties": {
          "amount": {
            "type": "number",
            "minimum": 0
          },
          "amountInt": {
            "type": "integer",
            "minimum": 0
          },
          "currency": {
            "type": "string",
            "pattern": "[A-Z]{3}"
          }
        },
        "required": [
          "amount",
          "amountInt",
          "currency"
        ]
      },
      "obj.game-type": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Game Type",
        "oneOf": [
          {
            "type": "string",
            "enum": [
              "game",
              "dlc",
              "package"
            ]
          },
          {
            "type": "null"
          }
        ]
      },
      "obj.asset-map": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Asset Map",
        "type": "object",
        "properties": {
          "banner145": {
            "type": "string"
          },
          "banner300": {
            "type": "string"
          },
          "banner400": {
            "type": "string"
          },
          "banner600": {
            "type": "string"
          },
          "boxart": {
            "type": "string"
          }
        }
      },
      "obj.game": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Game",
        "type": "object",
        "required": [
          "id",
          "slug",
          "title",
          "type",
          "mature",
          "assets"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/obj.game-type"
          },
          "mature": {
            "type": "boolean"
          },
          "assets": {
            "$ref": "#/components/schemas/obj.asset-map"
          }
        }
      },
      "obj.bundle": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Bundle",
        "type": "object",
        "required": [
          "id",
          "title",
          "page",
          "url",
          "isMature",
          "publish",
          "expiry",
          "note",
          "counts",
          "tiers"
        ],
        "properties": {
          "id": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "page": {
            "type": "object",
            "required": [
              "id",
              "name"
            ],
            "properties": {
              "id": {
                "type": "number"
              },
              "name": {
                "type": "string"
              },
              "shopId": {
                "oneOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            }
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "details": {
            "type": "string",
            "format": "uri"
          },
          "isMature": {
            "type": "boolean"
          },
          "publish": {
            "type": "string",
            "format": "date-time"
          },
          "expiry": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "note": {
            "type": [
              "string",
              "null"
            ]
          },
          "counts": {
            "type": "object",
            "required": [
              "games",
              "media"
            ],
            "properties": {
              "games": {
                "type": "integer",
                "minimum": 0
              },
              "media": {
                "type": "integer",
                "minimum": 0
              }
            }
          },
          "tiers": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "price",
                "addon",
                "games"
              ],
              "properties": {
                "price": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/obj.price"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "addon": {
                  "type": "boolean"
                },
                "games": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/obj.game"
                  }
                }
              }
            }
          }
        }
      },
      "resp.bundles": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/obj.bundle"
        }
      },
      "obj.shop": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Shop",
        "type": "object",
        "required": [
          "id",
          "name"
        ],
        "properties": {
          "id": {
            "type": "number"
          },
          "name": {
            "type": "string"
          }
        }
      },
      "obj.platform": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Platform",
        "type": "object",
        "required": [
          "id",
          "name"
        ],
        "properties": {
          "id": {
            "type": "number"
          },
          "name": {
            "type": "string"
          }
        }
      },
      "obj.platform-list": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Platform List",
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/obj.platform"
        }
      },
      "obj.giveaway": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Giveaway",
        "type": "object",
        "required": [
          "id",
          "title",
          "shop",
          "url",
          "details",
          "isMature",
          "publish",
          "expiry",
          "note",
          "games"
        ],
        "properties": {
          "id": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "shop": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/obj.shop"
              },
              {
                "type": "null"
              }
            ]
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "details": {
            "type": "string",
            "format": "uri"
          },
          "isMature": {
            "type": "boolean"
          },
          "publish": {
            "type": "string",
            "format": "date-time"
          },
          "expiry": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "note": {
            "type": [
              "string",
              "null"
            ]
          },
          "games": {
            "type": "array",
            "items": {
              "title": "Giveaway Game",
              "type": "object",
              "required": [
                "id",
                "slug",
                "title",
                "type",
                "mature",
                "assets",
                "drmFree",
                "keys",
                "platforms"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "slug": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "type": {
                  "$ref": "#/components/schemas/obj.game-type"
                },
                "mature": {
                  "type": "boolean"
                },
                "assets": {
                  "$ref": "#/components/schemas/obj.asset-map"
                },
                "drmFree": {
                  "type": "boolean"
                },
                "keys": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/obj.shop"
                  }
                },
                "platforms": {
                  "$ref": "#/components/schemas/obj.platform-list"
                }
              }
            }
          }
        }
      },
      "resp.giveaways": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/obj.giveaway"
        }
      },
      "resp.games.search": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Game Search Response",
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/obj.game"
        }
      },
      "resp.games.lookup": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Game Lookup Response",
        "type": "object",
        "required": [
          "found"
        ],
        "properties": {
          "found": {
            "type": "boolean"
          },
          "game": {
            "$ref": "#/components/schemas/obj.game"
          }
        }
      },
      "obj.company": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Company",
        "type": "object",
        "required": [
          "id",
          "name"
        ],
        "properties": {
          "id": {
            "type": "number"
          },
          "name": {
            "type": "string"
          }
        }
      },
      "obj.reviews": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Reviews",
        "type": "object",
        "required": [
          "score",
          "source",
          "count",
          "url"
        ],
        "properties": {
          "score": {
            "type": [
              "number",
              "null"
            ]
          },
          "source": {
            "type": "string"
          },
          "count": {
            "type": [
              "number",
              "null"
            ]
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "resp.games.info": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Game Info Response",
        "type": "object",
        "required": [
          "id",
          "slug",
          "title",
          "type",
          "mature",
          "assets",
          "earlyAccess",
          "achievements",
          "tradingCards",
          "appid",
          "tags",
          "releaseDate",
          "developers",
          "publishers",
          "reviews",
          "stats",
          "players",
          "urls"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/obj.game-type"
          },
          "mature": {
            "type": "boolean"
          },
          "assets": {
            "$ref": "#/components/schemas/obj.asset-map"
          },
          "earlyAccess": {
            "type": "boolean"
          },
          "achievements": {
            "type": "boolean"
          },
          "tradingCards": {
            "type": "boolean"
          },
          "appid": {
            "type": [
              "integer",
              "null"
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "releaseDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "developers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/obj.company"
            }
          },
          "publishers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/obj.company"
            }
          },
          "reviews": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/obj.reviews"
            }
          },
          "stats": {
            "type": "object",
            "properties": {
              "rank": {
                "type": "integer",
                "minimum": 0
              },
              "waitlisted": {
                "type": "integer",
                "minimum": 0
              },
              "collected": {
                "type": "integer",
                "minimum": 0
              }
            }
          },
          "players": {
            "oneOf": [
              {
                "type": "object",
                "required": [
                  "recent",
                  "day",
                  "week",
                  "peak"
                ],
                "properties": {
                  "recent": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "day": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "week": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "peak": {
                    "type": "integer",
                    "minimum": 0
                  }
                }
              },
              {
                "type": "null"
              }
            ]
          },
          "urls": {
            "type": "object",
            "required": [
              "game"
            ],
            "properties": {
              "game": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "obj.deal-flag": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Deal Flag",
        "oneOf": [
          {
            "type": "string",
            "enum": [
              "H",
              "N",
              "S"
            ],
            "description": "- **H**: Historical Low\n- **N**: New Historical Low\n- **S**: Store low"
          },
          {
            "type": "null"
          }
        ]
      },
      "obj.drm": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "DRM",
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ]
      },
      "obj.drm-list": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "DRM List",
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/obj.drm"
        }
      },
      "obj.deal2": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Deal",
        "type": "object",
        "required": [
          "shop",
          "price",
          "regular",
          "cut",
          "voucher",
          "storeLow",
          "flag",
          "drm",
          "platforms",
          "timestamp",
          "expiry",
          "url"
        ],
        "properties": {
          "shop": {
            "$ref": "#/components/schemas/obj.shop"
          },
          "price": {
            "$ref": "#/components/schemas/obj.price"
          },
          "regular": {
            "$ref": "#/components/schemas/obj.price"
          },
          "cut": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100
          },
          "voucher": {
            "type": [
              "string",
              "null"
            ]
          },
          "storeLow": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/obj.price"
              }
            ]
          },
          "flag": {
            "$ref": "#/components/schemas/obj.deal-flag"
          },
          "drm": {
            "$ref": "#/components/schemas/obj.drm-list"
          },
          "platforms": {
            "$ref": "#/components/schemas/obj.platform-list"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "expiry": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "resp.games.prices": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Prices Response",
        "type": "array",
        "items": {
          "type": "object",
          "required": [
            "id",
            "historyLow",
            "deals"
          ],
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "description": "Game ID"
            },
            "historyLow": {
              "type": "object",
              "required": [
                "all",
                "y1",
                "m3"
              ],
              "properties": {
                "all": {
                  "oneOf": [
                    {
                      "type": "null"
                    },
                    {
                      "$ref": "#/components/schemas/obj.price"
                    }
                  ]
                },
                "y1": {
                  "oneOf": [
                    {
                      "type": "null"
                    },
                    {
                      "$ref": "#/components/schemas/obj.price"
                    }
                  ]
                },
                "m3": {
                  "oneOf": [
                    {
                      "type": "null"
                    },
                    {
                      "$ref": "#/components/schemas/obj.price"
                    }
                  ]
                }
              }
            },
            "deals": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/obj.deal2"
              }
            }
          }
        }
      },
      "resp.games.bundles": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Bundles with Game Response",
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/obj.bundle"
        }
      },
      "resp.games.giveaways": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Giveaways with Game Response",
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/obj.giveaway"
        }
      },
      "obj.deal-overview": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Overview Deal",
        "description": "This object is basically the same as regular Deal, difference being storeLow and historyLow properties are not included",
        "type": "object",
        "required": [
          "shop",
          "price",
          "regular",
          "cut",
          "voucher",
          "flag",
          "drm",
          "platforms",
          "timestamp",
          "expiry",
          "url"
        ],
        "properties": {
          "shop": {
            "$ref": "#/components/schemas/obj.shop"
          },
          "price": {
            "$ref": "#/components/schemas/obj.price"
          },
          "regular": {
            "$ref": "#/components/schemas/obj.price"
          },
          "cut": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100
          },
          "voucher": {
            "type": [
              "string",
              "null"
            ]
          },
          "flag": {
            "$ref": "#/components/schemas/obj.deal-flag"
          },
          "drm": {
            "$ref": "#/components/schemas/obj.drm-list"
          },
          "platforms": {
            "$ref": "#/components/schemas/obj.platform-list"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "expiry": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "obj.historylow": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Historical Low",
        "type": "object",
        "required": [
          "shop",
          "price",
          "regular",
          "cut",
          "timestamp"
        ],
        "properties": {
          "shop": {
            "$ref": "#/components/schemas/obj.shop"
          },
          "price": {
            "$ref": "#/components/schemas/obj.price"
          },
          "regular": {
            "$ref": "#/components/schemas/obj.price"
          },
          "cut": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "resp.games.overview": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Games Overview Response",
        "type": "object",
        "required": [
          "prices",
          "bundles"
        ],
        "properties": {
          "prices": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "current",
                "lowest",
                "bundled",
                "urls"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "current": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/obj.deal-overview"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "lowest": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/obj.historylow"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "bundled": {
                  "type": "integer",
                  "minimum": 0
                },
                "urls": {
                  "type": "object",
                  "required": [
                    "game"
                  ],
                  "properties": {
                    "game": {
                      "type": "string",
                      "format": "uri"
                    }
                  }
                }
              }
            }
          },
          "bundles": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/obj.bundle"
            }
          }
        }
      },
      "resp.games.historylow": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Historical Lows Response",
        "type": "array",
        "items": {
          "title": "Historical Low Record",
          "type": "object",
          "required": [
            "id",
            "low"
          ],
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid"
            },
            "low": {
              "$ref": "#/components/schemas/obj.historylow"
            }
          }
        }
      },
      "resp.games.storelow": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Store Lows Response",
        "type": "array",
        "items": {
          "title": "Store Lows",
          "type": "object",
          "required": [
            "id",
            "lows"
          ],
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid"
            },
            "lows": {
              "type": "array",
              "minItems": 1,
              "items": {
                "type": "object",
                "required": [
                  "shop",
                  "price",
                  "regular",
                  "cut",
                  "timestamp"
                ],
                "properties": {
                  "shop": {
                    "$ref": "#/components/schemas/obj.shop"
                  },
                  "price": {
                    "$ref": "#/components/schemas/obj.price"
                  },
                  "regular": {
                    "$ref": "#/components/schemas/obj.price"
                  },
                  "cut": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "timestamp": {
                    "type": "string",
                    "format": "date-time"
                  }
                }
              }
            }
          }
        }
      },
      "resp.games.history": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "History response",
        "type": "array",
        "items": {
          "type": "object",
          "required": [
            "timestamp",
            "shop",
            "deal"
          ],
          "properties": {
            "timestamp": {
              "type": "string",
              "format": "date-time"
            },
            "shop": {
              "$ref": "#/components/schemas/obj.shop"
            },
            "deal": {
              "oneOf": [
                {
                  "type": "object",
                  "required": [
                    "price",
                    "regular",
                    "cut"
                  ],
                  "properties": {
                    "price": {
                      "$ref": "#/components/schemas/obj.price"
                    },
                    "regular": {
                      "$ref": "#/components/schemas/obj.price"
                    },
                    "cut": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    }
                  }
                },
                {
                  "type": "null"
                }
              ]
            }
          }
        }
      },
      "obj.game.subscription": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Game Subscription",
        "type": "object",
        "required": [
          "id",
          "name",
          "leaving"
        ],
        "properties": {
          "id": {
            "title": "Subscription ID",
            "type": "integer",
            "minimum": 1
          },
          "name": {
            "title": "Subscription name",
            "type": "string"
          },
          "leaving": {
            "oneOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "resp.games.subscriptions": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Games Subscriptions Response",
        "type": "array",
        "items": {
          "title": "Game Subscriptions",
          "type": "object",
          "required": [
            "id",
            "subs"
          ],
          "properties": {
            "id": {
              "title": "Game ID",
              "type": "string",
              "format": "uuid"
            },
            "subs": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/obj.game.subscription"
              }
            }
          }
        }
      },
      "filter.range": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "description": "Range filter",
        "type": "object",
        "required": [
          "min",
          "max"
        ],
        "properties": {
          "min": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "number"
              }
            ]
          },
          "max": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "number"
              }
            ]
          }
        }
      },
      "filter.range.bounded": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "description": "Bounded Range filter",
        "type": "object",
        "required": [
          "min",
          "max"
        ],
        "properties": {
          "min": {
            "oneOf": [
              {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "max": {
            "oneOf": [
              {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "obj.filters.deals": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "description": "Deal Filters",
        "type": "object",
        "required": [],
        "properties": {
          "price": {
            "$ref": "#/components/schemas/filter.range"
          },
          "regular": {
            "$ref": "#/components/schemas/filter.range"
          },
          "cut": {
            "$ref": "#/components/schemas/filter.range.bounded"
          },
          "flag": {
            "description": "Deal flag, N for new historical low, H for historical low, S for shop low",
            "oneOf": [
              {
                "type": "string",
                "enum": [
                  "N",
                  "H",
                  "S"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "hlprice": {
            "description": "Within `<price (number)>` of historical low",
            "type": "number"
          },
          "hlperc": {
            "description": "Within `<percent (number)>` of historical low",
            "type": "number"
          }
        }
      },
      "filter.boolean": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "boolean",
        "enum": [
          true
        ]
      },
      "obj.filters.game": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "description": "Game Filters",
        "type": "object",
        "required": [],
        "properties": {
          "drm": {
            "description": "`1000` for DRM Free or `shopId`\n",
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "platform": {
            "description": "`1` Windows, `2` Mac, `3` Linux, `5` HTC Vive, `6` Oculus, `7` Windows Mixed Reality\n",
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "type": {
            "description": "\"Is a\" filter \\\nPossible values: `1` Game, `2` DLC, `3` Package, `7` Software, `9` Hardware\n",
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "typeNot": {
            "description": "\"Is not a\" filter \\\nSee `type` for possible values\n"
          },
          "tradingCards": {
            "$ref": "#/components/schemas/filter.boolean"
          },
          "achievements": {
            "$ref": "#/components/schemas/filter.boolean"
          },
          "mature": {
            "$ref": "#/components/schemas/filter.boolean"
          },
          "earlyAccess": {
            "$ref": "#/components/schemas/filter.boolean"
          },
          "preOrder": {
            "$ref": "#/components/schemas/filter.boolean"
          },
          "notPreOrder": {
            "$ref": "#/components/schemas/filter.boolean"
          },
          "bundled": {
            "$ref": "#/components/schemas/filter.boolean"
          },
          "wasBundled": {
            "$ref": "#/components/schemas/filter.boolean"
          },
          "neverBundled": {
            "$ref": "#/components/schemas/filter.boolean"
          },
          "inCollection": {
            "$ref": "#/components/schemas/filter.boolean"
          },
          "notInCollection": {
            "$ref": "#/components/schemas/filter.boolean"
          },
          "inWaitlist": {
            "$ref": "#/components/schemas/filter.boolean"
          },
          "notInWaitlist": {
            "$ref": "#/components/schemas/filter.boolean"
          },
          "userDlcs": {
            "description": "DLCs for user's games",
            "$ref": "#/components/schemas/filter.boolean"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "tagsUnion": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "inSpotlight": {
            "$ref": "#/components/schemas/filter.boolean"
          },
          "wasSpotlight": {
            "$ref": "#/components/schemas/filter.boolean"
          },
          "inBundle": {
            "description": "Game is included in bundle ID `<number>`",
            "type": "number"
          }
        }
      },
      "obj.filters.reviews": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "description": "Reviews Filters",
        "type": "object",
        "required": [],
        "properties": {
          "steamPerc": {
            "description": "Steam score",
            "$ref": "#/components/schemas/filter.range.bounded"
          },
          "steamCount": {
            "description": "Steam review count",
            "$ref": "#/components/schemas/filter.range"
          },
          "metaCritic": {
            "description": "OpenCritic critics score",
            "$ref": "#/components/schemas/filter.range.bounded"
          },
          "metauser": {
            "description": "MetaCritic users score",
            "$ref": "#/components/schemas/filter.range.bounded"
          },
          "openCritic": {
            "description": "OpenCritic score",
            "$ref": "#/components/schemas/filter.range.bounded"
          }
        }
      },
      "obj.filters.shops": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "description": "Shops Filters",
        "type": "object",
        "required": [],
        "properties": {
          "shops": {
            "description": "List of shop IDs",
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        }
      },
      "obj.filters.time": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "description": "Time Filters",
        "type": "object",
        "required": [],
        "properties": {
          "added": {
            "description": "Deal found in last `<value>` hours",
            "type": "number",
            "minimum": 0
          },
          "expiry": {
            "description": "Deal expires in next `<value>` hours",
            "type": "number",
            "minimum": 0
          },
          "releaseDays": {
            "description": "Game was released in last `<value>` days",
            "type": "number"
          },
          "releaseYear": {
            "description": "Game was released between `<min year>` and `<max year>`",
            "type": "object",
            "required": [
              "min",
              "max"
            ],
            "properties": {
              "min": {
                "oneOf": [
                  {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "max": {
                "oneOf": [
                  {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            }
          },
          "releaseDate": {
            "description": "Game was released between `<min YYYY-mm-dd>` and `<max YYYY-mm-dd>`",
            "type": "object",
            "required": [
              "min",
              "max"
            ],
            "properties": {
              "min": {
                "oneOf": [
                  {
                    "type": "string",
                    "format": "date"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "max": {
                "oneOf": [
                  {
                    "type": "string",
                    "format": "date"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            }
          }
        }
      },
      "req.deals": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Deals Request",
        "type": "object",
        "properties": {
          "country": {
            "description": "Two letter country code (ISO 3166-1 alpha-2)",
            "type": "string",
            "minLength": 2,
            "maxLength": 2,
            "default": "US"
          },
          "offset": {
            "description": "Deals list offset",
            "type": "integer",
            "minimum": 0,
            "default": 0
          },
          "limit": {
            "description": "How many deals to return",
            "type": "integer",
            "minimum": 1,
            "maximum": 200,
            "default": 20
          },
          "sort": {
            "description": "Sorting values, same as in deals list on the website",
            "type": "string"
          },
          "nondeals": {
            "description": "Load non-sale prices",
            "type": "boolean",
            "default": false
          },
          "mature": {
            "description": "Load games marked as mature",
            "type": "boolean",
            "default": false
          },
          "shops": {
            "description": "List of shop IDs",
            "type": "array",
            "items": {
              "type": "number",
              "description": "Shop ID"
            }
          },
          "filter": {
            "allOf": [
              {
                "$ref": "#/components/schemas/obj.filters.deals"
              },
              {
                "$ref": "#/components/schemas/obj.filters.game"
              },
              {
                "$ref": "#/components/schemas/obj.filters.reviews"
              },
              {
                "$ref": "#/components/schemas/obj.filters.shops"
              },
              {
                "$ref": "#/components/schemas/obj.filters.time"
              }
            ]
          }
        }
      },
      "obj.deal": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Deal",
        "type": "object",
        "required": [
          "shop",
          "price",
          "regular",
          "cut",
          "voucher",
          "storeLow",
          "historyLow",
          "historyLow_1y",
          "historyLow_3m",
          "flag",
          "drm",
          "platforms",
          "timestamp",
          "expiry",
          "url"
        ],
        "properties": {
          "shop": {
            "$ref": "#/components/schemas/obj.shop"
          },
          "price": {
            "$ref": "#/components/schemas/obj.price"
          },
          "regular": {
            "$ref": "#/components/schemas/obj.price"
          },
          "cut": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100
          },
          "voucher": {
            "type": [
              "string",
              "null"
            ]
          },
          "storeLow": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/obj.price"
              }
            ]
          },
          "historyLow": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/obj.price"
              }
            ]
          },
          "historyLow_1y": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/obj.price"
              }
            ]
          },
          "historyLow_3m": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/obj.price"
              }
            ]
          },
          "flag": {
            "$ref": "#/components/schemas/obj.deal-flag"
          },
          "drm": {
            "$ref": "#/components/schemas/obj.drm-list"
          },
          "platforms": {
            "$ref": "#/components/schemas/obj.platform-list"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "expiry": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "resp.deals": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Deals Response",
        "type": "object",
        "required": [
          "nextOffset",
          "hasMore",
          "list"
        ],
        "properties": {
          "nextOffset": {
            "type": "integer",
            "format": "int32",
            "minimum": 0
          },
          "hasMore": {
            "type": "boolean"
          },
          "list": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "slug": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "type": {
                  "$ref": "#/components/schemas/obj.game-type"
                },
                "mature": {
                  "type": "boolean"
                },
                "assets": {
                  "$ref": "#/components/schemas/obj.asset-map"
                },
                "deal": {
                  "$ref": "#/components/schemas/obj.deal"
                }
              },
              "required": [
                "id",
                "slug",
                "title",
                "type",
                "deal"
              ]
            }
          }
        }
      },
      "obj.waitlist.game": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Waitlist Game",
        "type": "object",
        "required": [
          "id",
          "slug",
          "title",
          "type",
          "assets",
          "mature",
          "added"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/obj.game-type"
          },
          "assets": {
            "$ref": "#/components/schemas/obj.asset-map"
          },
          "mature": {
            "type": "boolean"
          },
          "added": {
            "oneOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "resp.waitlist.games": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Waitlist Games Response",
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/obj.waitlist.game"
        }
      },
      "obj.collection.game": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Collection Game",
        "type": "object",
        "required": [
          "id",
          "slug",
          "title",
          "type",
          "assets",
          "mature",
          "group",
          "added"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/obj.game-type"
          },
          "assets": {
            "$ref": "#/components/schemas/obj.asset-map"
          },
          "mature": {
            "type": "boolean"
          },
          "group": {
            "type": "number",
            "minimum": 0
          },
          "added": {
            "oneOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "obj.user-tag": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Tag",
        "type": "object",
        "required": [
          "id",
          "tag"
        ],
        "properties": {
          "id": {
            "type": "number"
          },
          "tag": {
            "type": "string"
          }
        }
      },
      "obj.collection.copy": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Collection Copy",
        "type": "object",
        "required": [
          "id",
          "game",
          "shop",
          "redeemed",
          "price",
          "note",
          "tags",
          "added"
        ],
        "properties": {
          "id": {
            "type": "integer"
          },
          "game": {
            "type": "object",
            "required": [
              "id"
            ],
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          "shop": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/obj.shop"
              },
              {
                "type": "null"
              }
            ]
          },
          "redeemed": {
            "type": "boolean"
          },
          "price": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/obj.price"
              },
              {
                "type": "null"
              }
            ]
          },
          "note": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/obj.user-tag"
            }
          },
          "added": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "obj.collection.copy.new": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "New Collection Copy",
        "type": "object",
        "required": [
          "gameId",
          "redeemed"
        ],
        "properties": {
          "gameId": {
            "type": "string",
            "format": "uuid"
          },
          "redeemed": {
            "type": "boolean"
          },
          "shop": {
            "oneOf": [
              {
                "type": "number",
                "description": "Shop ID"
              },
              {
                "type": "null"
              }
            ]
          },
          "price": {
            "oneOf": [
              {
                "type": "object",
                "required": [
                  "amount",
                  "currency"
                ],
                "properties": {
                  "amount": {
                    "type": "number",
                    "format": "float"
                  },
                  "currency": {
                    "type": "string"
                  }
                }
              },
              {
                "type": "null"
              }
            ]
          },
          "note": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "tags": {
            "oneOf": [
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "obj.collection.copy.patch": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Collection Copy Patch",
        "type": "object",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "type": "number"
          },
          "redeemed": {
            "type": "boolean"
          },
          "shop": {
            "oneOf": [
              {
                "type": "number",
                "description": "Shop ID"
              },
              {
                "type": "null"
              }
            ]
          },
          "price": {
            "oneOf": [
              {
                "type": "object",
                "required": [
                  "amount",
                  "currency"
                ],
                "properties": {
                  "amount": {
                    "type": "number",
                    "format": "float"
                  },
                  "currency": {
                    "type": "string"
                  }
                }
              },
              {
                "type": "null"
              }
            ]
          },
          "note": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "tags": {
            "oneOf": [
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "obj.collection.group": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Collection Category",
        "type": "object",
        "required": [
          "id",
          "title",
          "public"
        ],
        "properties": {
          "id": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "public": {
            "type": "boolean"
          }
        }
      },
      "obj.collection.group.new": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "New Collection Category",
        "type": "object",
        "required": [
          "title",
          "public"
        ],
        "properties": {
          "title": {
            "type": "string"
          },
          "public": {
            "type": "boolean"
          }
        }
      },
      "obj.collection.group.patch": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Collection Category Patch",
        "type": "object",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "type": "integer"
          },
          "title": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "public": {
            "oneOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "position": {
            "oneOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "obj.ignored.game": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Ignored Game",
        "type": "object",
        "required": [
          "id",
          "slug",
          "title",
          "type",
          "assets",
          "mature",
          "added"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/obj.game-type"
          },
          "assets": {
            "$ref": "#/components/schemas/obj.asset-map"
          },
          "mature": {
            "type": "boolean"
          },
          "added": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "resp.ignored.games": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Ignore List Games Response",
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/obj.ignored.game"
        }
      },
      "bucket": {
        "type": "object",
        "required": [
          "bucket",
          "count",
          "percentile"
        ],
        "properties": {
          "bucket": {
            "type": "number",
            "minimum": 0
          },
          "count": {
            "type": "number",
            "minimum": 0
          },
          "percentile": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          }
        }
      },
      "resp.stats.waitlist": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Waitlist Stats Response",
        "type": "object",
        "required": [
          "count",
          "price",
          "cut"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "minimum": 0
          },
          "price": {
            "type": "object",
            "required": [
              "currency",
              "any",
              "average",
              "buckets"
            ],
            "properties": {
              "currency": {
                "type": "string",
                "minLength": 3,
                "maxLength": 3,
                "pattern": "^[A-Z]{3}$",
                "description": "Currency in which the prices are listed"
              },
              "any": {
                "type": "integer",
                "minimum": 0,
                "description": "How many users did not set price limit"
              },
              "average": {
                "type": "number",
                "minimum": 0
              },
              "buckets": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/bucket"
                }
              }
            }
          },
          "cut": {
            "type": "object",
            "required": [
              "average",
              "buckets"
            ],
            "properties": {
              "average": {
                "type": "number",
                "minimum": 0
              },
              "buckets": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/bucket"
                }
              }
            }
          }
        },
        "$defs": {
          "bucket": {
            "type": "object",
            "required": [
              "bucket",
              "count",
              "percentile"
            ],
            "properties": {
              "bucket": {
                "type": "number",
                "minimum": 0
              },
              "count": {
                "type": "number",
                "minimum": 0
              },
              "percentile": {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              }
            }
          }
        }
      },
      "obj.game-ranked": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Ranked Game",
        "type": "object",
        "required": [
          "position",
          "id",
          "slug",
          "title",
          "type",
          "mature",
          "count"
        ],
        "properties": {
          "position": {
            "type": "integer",
            "minimum": 1
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/obj.game-type"
          },
          "mature": {
            "type": "boolean"
          },
          "count": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "resp.stats.ranked-games": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Ranked Games Response",
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/obj.game-ranked"
        }
      },
      "resp.user.info": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "User Info Response",
        "type": "object",
        "required": [
          "username"
        ],
        "properties": {
          "username": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "obj.note": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "User game note",
        "type": "object",
        "required": [
          "gid",
          "note"
        ],
        "properties": {
          "gid": {
            "description": "Game ID",
            "type": "string",
            "format": "uuid"
          },
          "note": {
            "description": "Non-empty string",
            "type": "string"
          }
        }
      },
      "resp.notes.get": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Get Notes Response",
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/obj.note"
        }
      },
      "obj.profile": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Profile",
        "description": "Description of the account",
        "type": "object",
        "required": [
          "accountId",
          "accountName"
        ],
        "properties": {
          "accountId": {
            "type": "string",
            "description": "Per-app unique ID. This can be any string, but it needs to uniquely identify the account within your app."
          },
          "accountName": {
            "type": "string",
            "description": "Name of the account. Does not need to be unique, it's meant to be a human-friendly name."
          }
        }
      },
      "resp.link.put": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Link Profile Response",
        "type": "object",
        "required": [
          "token"
        ],
        "properties": {
          "token": {
            "type": "string"
          }
        }
      },
      "obj.waitlist.entry": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Waitlist Sync Entry",
        "type": "object",
        "required": [
          "shop",
          "id",
          "title"
        ],
        "properties": {
          "shop": {
            "type": "number",
            "description": "Shop ID"
          },
          "id": {
            "type": "string",
            "description": "ID can be any string that will identify the game. It should be stable and not change in the future.\n\nID can also used to identify the game, if you use same IDs that we use for tracking shops. If a game is not identified\nwith shop and id, we will use title. \n\nFor Steam we use full ids, i.e. app/{id}, sub/{id} or bundle/{id}.\n"
          },
          "title": {
            "type": "string",
            "description": "Title of the game.\n"
          }
        }
      },
      "resp.sync.waitlist": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Sync Response",
        "type": "object",
        "required": [
          "total",
          "added",
          "removed"
        ],
        "properties": {
          "total": {
            "description": "Number of games that were successfully parsed",
            "type": "number",
            "minimum": 0
          },
          "added": {
            "description": "Number of games that were added to Waitlist",
            "type": "number",
            "minimum": 0
          },
          "removed": {
            "description": "Number of games that were removed from Waitlist",
            "type": "number",
            "minimum": 0
          }
        }
      },
      "obj.collection.entry": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Collection Sync Entry",
        "type": "object",
        "required": [
          "shop",
          "id",
          "title"
        ],
        "properties": {
          "shop": {
            "type": "number",
            "description": "Shop ID"
          },
          "id": {
            "type": "string",
            "description": "ID can be any string that will identify the game. It should be stable and not change in the future.\n\nID can also used to identify the game, if you use same IDs that we use for tracking shops. If a game is not identified\nwith shop and id, we will use title. \n\nFor Steam we use full ids, i.e. app/{id}, sub/{id} or bundle/{id}.\n"
          },
          "title": {
            "type": "string",
            "description": "Title of the game.\n"
          },
          "playtime": {
            "description": "Play time in minutes",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "lastPlayed": {
            "oneOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "resp.sync.collection": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Sync Response",
        "type": "object",
        "required": [
          "total",
          "added",
          "removed"
        ],
        "properties": {
          "total": {
            "description": "Number of copies that were successfully parsed",
            "type": "number",
            "minimum": 0
          },
          "added": {
            "description": "Number of copies that were added to Collection",
            "type": "number",
            "minimum": 0
          },
          "removed": {
            "description": "Number of copies that were removed from Collection",
            "type": "number",
            "minimum": 0
          }
        }
      },
      "obj.notification": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Notification",
        "type": "object",
        "required": [
          "id",
          "type",
          "title",
          "timestamp",
          "read"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "type": {
            "type": "string",
            "enum": [
              "waitlist"
            ]
          },
          "title": {
            "type": "string"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "read": {
            "oneOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "obj.price-nullable": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Price",
        "oneOf": [
          {
            "$ref": "#/components/schemas/obj.price"
          },
          {
            "type": "null"
          }
        ]
      },
      "obj.notification.deal": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Waitlist Notification Deal",
        "type": "object",
        "required": [
          "shop",
          "price",
          "regular",
          "cut",
          "voucher",
          "storeLow",
          "flag",
          "drm",
          "platforms",
          "timestamp",
          "expiry",
          "url"
        ],
        "properties": {
          "shop": {
            "$ref": "#/components/schemas/obj.shop"
          },
          "price": {
            "$ref": "#/components/schemas/obj.price"
          },
          "regular": {
            "$ref": "#/components/schemas/obj.price"
          },
          "cut": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100
          },
          "voucher": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "storeLow": {
            "$ref": "#/components/schemas/obj.price-nullable"
          },
          "flag": {
            "$ref": "#/components/schemas/obj.deal-flag"
          },
          "drm": {
            "$ref": "#/components/schemas/obj.drm-list"
          },
          "platforms": {
            "$ref": "#/components/schemas/obj.platform-list"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "expiry": {
            "oneOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "obj.notification.game": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Waitlist Notification Game",
        "type": "object",
        "required": [
          "id",
          "slug",
          "title",
          "type",
          "mature",
          "historyLow",
          "lastPrice",
          "deals"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/obj.game-type"
          },
          "mature": {
            "type": "boolean"
          },
          "historyLow": {
            "$ref": "#/components/schemas/obj.price-nullable"
          },
          "lastPrice": {
            "$ref": "#/components/schemas/obj.price-nullable"
          },
          "deals": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/obj.notification.deal"
            }
          }
        }
      },
      "obj.notification.waitlist": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Waitlist Notification",
        "type": "object",
        "required": [
          "id",
          "timestamp",
          "read",
          "games"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "read": {
            "oneOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "games": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/obj.notification.game"
            }
          }
        }
      },
      "resp.service.shops": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Shops response",
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "number"
            },
            "title": {
              "type": "string"
            },
            "deals": {
              "type": "number"
            },
            "games": {
              "type": "number"
            },
            "update": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time"
            }
          },
          "required": [
            "id",
            "title",
            "deals",
            "games",
            "update"
          ]
        }
      },
      "resp.service.shops.map": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Shops response",
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "number"
            },
            "title": {
              "type": "string"
            }
          },
          "required": [
            "id",
            "title"
          ]
        }
      },
      "obj.webhook": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "required": [
          "url",
          "events"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri"
          },
          "events": {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "string",
              "enum": [
                "notification-waitlist"
              ]
            }
          }
        }
      },
      "resp.webhook.add": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          }
        }
      },
      "resp.games.list": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "array",
        "items": {
          "type": "object",
          "required": [
            "id",
            "title",
            "appid"
          ],
          "properties": {
            "id": {
              "title": "Game Id",
              "type": "string",
              "format": "uuid"
            },
            "title": {
              "title": "Game title",
              "type": "string"
            },
            "appid": {
              "oneOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            }
          }
        }
      },
      "resp.games.dots": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "array",
        "items": {
          "type": "object",
          "required": [
            "id",
            "product_id",
            "old_game_id",
            "new_game_id",
            "timestamp",
            "date"
          ],
          "properties": {
            "id": {
              "title": "Change ID",
              "type": "integer"
            },
            "product_id": {
              "title": "Product ID",
              "type": "string",
              "format": "uuid"
            },
            "old_game_id": {
              "title": "Old game ID",
              "type": "string",
              "format": "uuid"
            },
            "new_game_id": {
              "title": "New game ID",
              "type": "string",
              "format": "uuid"
            },
            "timestamp": {
              "title": "Unix timestamp of the change",
              "type": "integer"
            },
            "date": {
              "title": "Datetime of the change",
              "type": "string",
              "format": "datetime"
            }
          }
        }
      },
      "resp.internal.players": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Players Statistics Response",
        "type": "object",
        "required": [
          "current",
          "day",
          "peak"
        ],
        "properties": {
          "current": {
            "type": "number",
            "minimum": 0
          },
          "day": {
            "type": "number",
            "minimum": 0
          },
          "peak": {
            "type": "number",
            "minimum": 0
          }
        }
      },
      "resp.internal.hltb": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "HowLongToBeat Overview Response",
        "type": "object",
        "required": [
          "id",
          "main",
          "extra",
          "complete"
        ],
        "properties": {
          "id": {
            "type": "number",
            "minimum": 0
          },
          "main": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "number",
                "minimum": 0
              }
            ]
          },
          "extra": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "number",
                "minimum": 0
              }
            ]
          },
          "complete": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "number",
                "minimum": 0
              }
            ]
          }
        }
      },
      "resp.internal.wsgf": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "WSGF Overview Response",
        "type": "object",
        "required": [
          "url",
          "wide",
          "ultrawide",
          "multi_monitor",
          "4k"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "url"
          },
          "wide": {
            "type": "string",
            "enum": [
              "A",
              "B",
              "C",
              "Incomplete",
              "Unsupported"
            ]
          },
          "ultrawide": {
            "type": "string",
            "enum": [
              "A",
              "B",
              "C",
              "Incomplete",
              "Unsupported"
            ]
          },
          "multi_monitor": {
            "type": "string",
            "enum": [
              "A",
              "B",
              "C",
              "Incomplete",
              "Unsupported"
            ]
          },
          "4k": {
            "type": "string",
            "enum": [
              "A",
              "B",
              "C",
              "Incomplete",
              "Unsupported"
            ]
          }
        }
      },
      "resp.internal.reviews": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Reviews Overview Response",
        "type": "object",
        "required": [
          "metauser",
          "opencritic"
        ],
        "properties": {
          "metauser": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "score": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "verdict": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  }
                }
              },
              {
                "type": "null"
              }
            ]
          },
          "opencritic": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "score": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "verdict": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  }
                }
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "resp.internal.rates": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Currency Rates Response",
        "type": "array",
        "items": {
          "type": "object",
          "required": [
            "from",
            "to",
            "rate"
          ],
          "properties": {
            "from": {
              "type": "string",
              "pattern": "^[A-Z]{3}$"
            },
            "to": {
              "type": "string",
              "pattern": "^[A-Z]{3}$"
            },
            "rate": {
              "type": "number",
              "exclusiveMinimum": 0
            }
          }
        }
      },
      "resp.internal.exfgls": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Excluded from Family Sharing Response",
        "type": "object",
        "additionalProperties": {
          "x-additionalPropertiesName": "appid",
          "type": "boolean"
        }
      },
      "resp.internal.twitchstream": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "oneOf": [
          {
            "title": "Players Statistics Response",
            "type": "object",
            "required": [
              "user_name",
              "title",
              "thumbnail_url",
              "viewer_count",
              "game"
            ],
            "properties": {
              "user_name": {
                "type": "string"
              },
              "title": {
                "type": "string"
              },
              "thumbnail_url": {
                "type": "string"
              },
              "viewer_count": {
                "type": "integer",
                "minimum": 0
              },
              "game": {
                "type": "string"
              }
            }
          },
          {
            "type": "null"
          }
        ]
      }
    },
    "examples": {
      "resp.gid-by-title.post.v1.success": {
        "value": {
          "Baldurs Gate 3": "018d9584-24d6-7010-b82b-df1f0b154cc7",
          "Half-Life 2": "018d937f-012f-73b8-ab2c-898516969e6a",
          "Unknown game": null
        }
      },
      "resp.gid-by-shopid.post.v1.success": {
        "value": {
          "bundle/27508": "018d95bc-fe96-73e6-a9f7-10afc28c0c03",
          "bundle/28796": "018d937f-6671-7056-b419-aac8a69a625e",
          "sub/467072": "018d937f-42c6-70a5-a29b-9d8c2e0f7b84",
          "sub/752476": "018d937f-6128-7151-8d2e-b4a9ad2e1ce8",
          "sub/137730": "018d937f-6ee4-73f5-858c-2fde3407462f",
          "app/137730": null,
          "bundle/33608": "018d937f-7596-706f-b75d-834d76172237"
        }
      },
      "resp.shopid-by-gid.post.v1.success": {
        "value": {
          "018d95bc-fe96-73e6-a9f7-10afc28c0c03": [
            "bundle/27508"
          ],
          "018d937f-6671-7056-b419-aac8a69a625e": [
            "bundle/32380",
            "bundle/28796"
          ],
          "018d937f-42c6-70a5-a29b-9d8c2e0f7b84": [
            "app/1336490",
            "sub/467072"
          ],
          "018d937f-6128-7151-8d2e-b4a9ad2e1ce8": [
            "sub/637996",
            "app/1777620",
            "sub/752476"
          ]
        }
      },
      "resp.bundles.v1.success": {
        "value": [
          {
            "id": 11631,
            "title": "Rimworld with all Expansions Bundle",
            "page": {
              "id": 8,
              "name": "Fanatical",
              "shopId": 6
            },
            "url": "https://www.dpbolvw.net/click-6305441-13212017?url=https%3A%2F%2Fwww.fanatical.com%2Fen%2Fbundle%2Frimworld-with-all-expansions",
            "details": "https://isthereanydeal.com/bundles/11631/",
            "isMature": false,
            "publish": "2024-03-04T19:00:00+01:00",
            "expiry": "2024-03-22T00:59:46+01:00",
            "note": "* Bundle being relaunched...again and again.",
            "counts": {
              "games": 4,
              "media": 1
            },
            "tiers": [
              {
                "price": {
                  "amount": 87.96,
                  "amountInt": 8796,
                  "currency": "USD"
                },
                "addon": false,
                "games": [
                  {
                    "id": "018d937f-12e9-71ca-a5d5-f31985870694",
                    "slug": "rimworld",
                    "title": "RimWorld",
                    "type": "game",
                    "mature": false,
                    "assets": {
                      "boxart": "https://assets.isthereanydeal.com/018d937f-12e9-71ca-a5d5-f31985870694/boxart.jpg?t=1734155400",
                      "banner145": "https://assets.isthereanydeal.com/018d937f-12e9-71ca-a5d5-f31985870694/banner145.jpg?t=1734155400",
                      "banner300": "https://assets.isthereanydeal.com/018d937f-12e9-71ca-a5d5-f31985870694/banner300.jpg?t=1734155400",
                      "banner400": "https://assets.isthereanydeal.com/018d937f-12e9-71ca-a5d5-f31985870694/banner400.jpg?t=1734155400",
                      "banner600": "https://assets.isthereanydeal.com/018d937f-12e9-71ca-a5d5-f31985870694/banner600.jpg?t=1734155400"
                    }
                  },
                  {
                    "id": "018d937f-3e88-718b-b99d-9a45bb69be55",
                    "slug": "rimworld-royalty",
                    "title": "RimWorld - Royalty",
                    "type": "dlc",
                    "mature": false,
                    "assets": {
                      "boxart": "https://assets.isthereanydeal.com/018d937f-3e88-718b-b99d-9a45bb69be55/boxart.jpg?t=1732764965",
                      "banner145": "https://assets.isthereanydeal.com/018d937f-3e88-718b-b99d-9a45bb69be55/banner145.jpg?t=1732764965",
                      "banner300": "https://assets.isthereanydeal.com/018d937f-3e88-718b-b99d-9a45bb69be55/banner300.jpg?t=1732764965",
                      "banner400": "https://assets.isthereanydeal.com/018d937f-3e88-718b-b99d-9a45bb69be55/banner400.jpg?t=1732764965",
                      "banner600": "https://assets.isthereanydeal.com/018d937f-3e88-718b-b99d-9a45bb69be55/banner600.jpg?t=1732764966"
                    }
                  },
                  {
                    "id": "018d937f-5256-73e1-bba6-66fd3f4d9cd7",
                    "slug": "rimworld-ideology",
                    "title": "RimWorld - Ideology",
                    "type": "dlc",
                    "mature": false,
                    "assets": {
                      "boxart": "https://assets.isthereanydeal.com/018d937f-5256-73e1-bba6-66fd3f4d9cd7/boxart.jpg?t=1732782945",
                      "banner145": "https://assets.isthereanydeal.com/018d937f-5256-73e1-bba6-66fd3f4d9cd7/banner145.jpg?t=1732782945",
                      "banner300": "https://assets.isthereanydeal.com/018d937f-5256-73e1-bba6-66fd3f4d9cd7/banner300.jpg?t=1732782945",
                      "banner400": "https://assets.isthereanydeal.com/018d937f-5256-73e1-bba6-66fd3f4d9cd7/banner400.jpg?t=1732782945",
                      "banner600": "https://assets.isthereanydeal.com/018d937f-5256-73e1-bba6-66fd3f4d9cd7/banner600.jpg?t=1732782945"
                    }
                  },
                  {
                    "id": "018d937f-65f0-70d3-83fe-71fac1505a13",
                    "slug": "rimworld-biotech",
                    "title": "RimWorld - Biotech",
                    "type": "dlc",
                    "mature": false,
                    "assets": {
                      "boxart": "https://assets.isthereanydeal.com/018d937f-65f0-70d3-83fe-71fac1505a13/boxart.jpg?t=1732751175",
                      "banner145": "https://assets.isthereanydeal.com/018d937f-65f0-70d3-83fe-71fac1505a13/banner145.jpg?t=1732751175",
                      "banner300": "https://assets.isthereanydeal.com/018d937f-65f0-70d3-83fe-71fac1505a13/banner300.jpg?t=1732751175",
                      "banner400": "https://assets.isthereanydeal.com/018d937f-65f0-70d3-83fe-71fac1505a13/banner400.jpg?t=1732751175",
                      "banner600": "https://assets.isthereanydeal.com/018d937f-65f0-70d3-83fe-71fac1505a13/banner600.jpg?t=1732751176"
                    }
                  }
                ]
              }
            ]
          }
        ]
      },
      "resp.giveaways.v1.success": {
        "value": [
          {
            "id": 16541,
            "title": "State of Mind - Free on GOG",
            "shop": {
              "id": 35,
              "name": "GOG"
            },
            "url": "https://www.dpbolvw.net/click-6305441-15456889?url=https%3A%2F%2Fwww.gog.com%2Fen%2Fgame%2Fstate_of_mind",
            "details": "https://isthereanydeal.com/giveaways/16541/",
            "isMature": false,
            "publish": "2026-09-07T19:04:40+02:00",
            "expiry": "2026-09-10T15:00:44+02:00",
            "note": null,
            "games": [
              {
                "id": "018d937f-3807-7238-b56e-d219b2c2da64",
                "slug": "state-of-mind",
                "title": "State of Mind",
                "type": "game",
                "mature": false,
                "assets": {
                  "boxart": "https://assets.isthereanydeal.com/018d937f-3807-7238-b56e-d219b2c2da64/boxart.jpg?t=1786392990",
                  "banner145": "https://assets.isthereanydeal.com/018d937f-3807-7238-b56e-d219b2c2da64/banner145.jpg?t=1786392990",
                  "banner300": "https://assets.isthereanydeal.com/018d937f-3807-7238-b56e-d219b2c2da64/banner300.jpg?t=1786392990",
                  "banner400": "https://assets.isthereanydeal.com/018d937f-3807-7238-b56e-d219b2c2da64/banner400.jpg?t=1786392990",
                  "banner600": "https://assets.isthereanydeal.com/018d937f-3807-7238-b56e-d219b2c2da64/banner600.jpg?t=1786392991"
                },
                "drmFree": false,
                "keys": [
                  {
                    "id": 35,
                    "name": "GOG"
                  }
                ],
                "platforms": [
                  {
                    "id": 1,
                    "name": "Windows"
                  },
                  {
                    "id": 2,
                    "name": "Mac"
                  },
                  {
                    "id": 3,
                    "name": "Linux"
                  }
                ]
              }
            ]
          }
        ]
      },
      "resp.search.v1.results": {
        "value": [
          {
            "id": "018d937f-07fc-72ed-8517-d8e24cb1eb22",
            "slug": "europa-universalis-iv",
            "title": "Europa Universalis IV",
            "type": "game",
            "mature": false,
            "assets": {
              "banner145": "https://assets.isthereanydeal.com/018d937f-07fc-72ed-8517-d8e24cb1eb22/banner145.jpg?t=1738002003",
              "banner300": "https://assets.isthereanydeal.com/018d937f-07fc-72ed-8517-d8e24cb1eb22/banner300.jpg?t=1738002003",
              "banner400": "https://assets.isthereanydeal.com/018d937f-07fc-72ed-8517-d8e24cb1eb22/banner400.jpg?t=1738002003",
              "banner600": "https://assets.isthereanydeal.com/018d937f-07fc-72ed-8517-d8e24cb1eb22/banner600.jpg?t=1738002003",
              "boxart": "https://assets.isthereanydeal.com/018d937f-07fc-72ed-8517-d8e24cb1eb22/boxart.jpg?t=1738002003"
            }
          },
          {
            "id": "018d937e-f083-72b5-bfdf-5459a8948636",
            "slug": "europa-universalis-iv-american-dream",
            "title": "Europa Universalis IV: American Dream",
            "type": "dlc",
            "mature": false,
            "assets": {
              "banner145": "https://assets.isthereanydeal.com/018d937e-f083-72b5-bfdf-5459a8948636/banner145.jpg?t=1733619419",
              "banner300": "https://assets.isthereanydeal.com/018d937e-f083-72b5-bfdf-5459a8948636/banner300.jpg?t=1733619419",
              "banner400": "https://assets.isthereanydeal.com/018d937e-f083-72b5-bfdf-5459a8948636/banner400.jpg?t=1733619419",
              "boxart": "https://assets.isthereanydeal.com/018d937e-f083-72b5-bfdf-5459a8948636/boxart.jpg?t=1733619418"
            }
          },
          {
            "id": "018d937e-f4e0-71ad-add5-c2642abc7a55",
            "slug": "europa-universalis-iv-rights-of-man",
            "title": "Europa Universalis IV: Rights of Man",
            "type": "dlc",
            "mature": false,
            "assets": {
              "banner145": "https://assets.isthereanydeal.com/018d937e-f4e0-71ad-add5-c2642abc7a55/banner145.jpg?t=1732741281",
              "banner300": "https://assets.isthereanydeal.com/018d937e-f4e0-71ad-add5-c2642abc7a55/banner300.jpg?t=1732741281",
              "banner400": "https://assets.isthereanydeal.com/018d937e-f4e0-71ad-add5-c2642abc7a55/banner400.jpg?t=1732741281",
              "banner600": "https://assets.isthereanydeal.com/018d937e-f4e0-71ad-add5-c2642abc7a55/banner600.jpg?t=1732741281",
              "boxart": "https://assets.isthereanydeal.com/018d937e-f4e0-71ad-add5-c2642abc7a55/boxart.jpg?t=1732741281"
            }
          },
          {
            "id": "018d937e-f999-71c8-b0a0-932f481087f9",
            "slug": "expansion-europa-universalis-iv-res-publica",
            "title": "Expansion - Europa Universalis IV: Res Publica",
            "type": "dlc",
            "mature": false,
            "assets": {
              "banner145": "https://assets.isthereanydeal.com/018d937e-f999-71c8-b0a0-932f481087f9/banner145.jpg?t=1732801577",
              "banner300": "https://assets.isthereanydeal.com/018d937e-f999-71c8-b0a0-932f481087f9/banner300.jpg?t=1732801577",
              "banner400": "https://assets.isthereanydeal.com/018d937e-f999-71c8-b0a0-932f481087f9/banner400.jpg?t=1732801577",
              "banner600": "https://assets.isthereanydeal.com/018d937e-f999-71c8-b0a0-932f481087f9/banner600.jpg?t=1732801578",
              "boxart": "https://assets.isthereanydeal.com/018d937e-f999-71c8-b0a0-932f481087f9/boxart.jpg?t=1732801577"
            }
          },
          {
            "id": "018d937f-27ec-71c5-a8a4-21b0b76b3e77",
            "slug": "europa-universalis-iv-songs-of-yuletide",
            "title": "Europa Universalis IV: Songs of Yuletide",
            "type": "dlc",
            "mature": false,
            "assets": {
              "banner145": "https://assets.isthereanydeal.com/018d937f-27ec-71c5-a8a4-21b0b76b3e77/banner145.jpg",
              "banner300": "https://assets.isthereanydeal.com/018d937f-27ec-71c5-a8a4-21b0b76b3e77/banner300.jpg",
              "banner400": "https://assets.isthereanydeal.com/018d937f-27ec-71c5-a8a4-21b0b76b3e77/banner400.jpg",
              "banner600": "https://assets.isthereanydeal.com/018d937f-27ec-71c5-a8a4-21b0b76b3e77/banner600.png",
              "boxart": "https://assets.isthereanydeal.com/018d937f-27ec-71c5-a8a4-21b0b76b3e77/boxart.jpg"
            }
          }
        ]
      },
      "resp.lookup.v1.found": {
        "value": {
          "found": true,
          "game": {
            "id": "018d937f-07fc-72ed-8517-d8e24cb1eb22",
            "slug": "europa-universalis-iv",
            "title": "Europa Universalis IV",
            "type": "game",
            "mature": false,
            "assets": {
              "boxart": "https://assets.isthereanydeal.com/018d937f-07fc-72ed-8517-d8e24cb1eb22/boxart.jpg?t=1738002003",
              "banner145": "https://assets.isthereanydeal.com/018d937f-07fc-72ed-8517-d8e24cb1eb22/banner145.jpg?t=1738002003",
              "banner300": "https://assets.isthereanydeal.com/018d937f-07fc-72ed-8517-d8e24cb1eb22/banner300.jpg?t=1738002003",
              "banner400": "https://assets.isthereanydeal.com/018d937f-07fc-72ed-8517-d8e24cb1eb22/banner400.jpg?t=1738002003",
              "banner600": "https://assets.isthereanydeal.com/018d937f-07fc-72ed-8517-d8e24cb1eb22/banner600.jpg?t=1738002003"
            }
          }
        }
      },
      "resp.lookup.v1.not-found": {
        "value": {
          "found": false
        }
      },
      "info.v2.found": {
        "value": {
          "id": "018d937f-07fc-72ed-8517-d8e24cb1eb22",
          "slug": "europa-universalis-iv",
          "title": "Europa Universalis IV",
          "type": "game",
          "mature": false,
          "assets": {
            "boxart": "https://dbxce1spal1df.cloudfront.net/018d937f-07fc-72ed-8517-d8e24cb1eb22/boxart.jpg",
            "banner145": "https://dbxce1spal1df.cloudfront.net/018d937f-07fc-72ed-8517-d8e24cb1eb22/banner145.jpg",
            "banner300": "https://dbxce1spal1df.cloudfront.net/018d937f-07fc-72ed-8517-d8e24cb1eb22/banner300.jpg",
            "banner400": "https://dbxce1spal1df.cloudfront.net/018d937f-07fc-72ed-8517-d8e24cb1eb22/banner400.jpg",
            "banner600": "https://dbxce1spal1df.cloudfront.net/018d937f-07fc-72ed-8517-d8e24cb1eb22/banner600.jpg"
          },
          "earlyAccess": false,
          "achievements": true,
          "tradingCards": true,
          "appid": 236850,
          "tags": [
            "Grand Strategy",
            "Strategy",
            "Historical",
            "Simulation",
            "4X"
          ],
          "releaseDate": "2013-08-13",
          "developers": [
            {
              "id": 434,
              "name": "Paradox Development Studio"
            },
            {
              "id": 8188,
              "name": "Paradox"
            },
            {
              "id": 8765,
              "name": "Paradox Development Studio / Paradox Tinto"
            },
            {
              "id": 514,
              "name": "Paradox Tinto"
            }
          ],
          "publishers": [
            {
              "id": 84,
              "name": "Paradox Interactive"
            },
            {
              "id": 16,
              "name": "Paradox Interactive AB"
            },
            {
              "id": 8188,
              "name": "Paradox"
            }
          ],
          "reviews": [
            {
              "score": 86,
              "source": "Steam",
              "count": 84184,
              "url": "https://store.steampowered.com/app/236850/"
            },
            {
              "score": 87,
              "source": "Metascore",
              "count": 31,
              "url": "https://metacritic.com/game/europa-universalis-iv/critic-reviews/?platform=pc"
            },
            {
              "score": 87,
              "source": "Metacritic User Score",
              "count": 1399,
              "url": "https://metacritic.com/game/europa-universalis-iv/user-reviews/?platform=pc"
            }
          ],
          "stats": {
            "rank": 529,
            "waitlisted": 3368,
            "collected": 18718
          },
          "players": {
            "recent": 16763,
            "day": 16967,
            "week": 22451,
            "peak": 46940
          },
          "urls": {
            "game": "https://isthereanydeal.com/game/europa-universalis-iv/"
          }
        }
      },
      "resp.prices.post.v3.success": {
        "value": [
          {
            "id": "018d937f-012f-73b8-ab2c-898516969e6a",
            "historyLow": {
              "all": {
                "amount": 0.99,
                "amountInt": 99,
                "currency": "USD"
              },
              "y1": {
                "amount": 0.99,
                "amountInt": 99,
                "currency": "USD"
              },
              "m3": {
                "amount": 9.99,
                "amountInt": 999,
                "currency": "USD"
              }
            },
            "deals": [
              {
                "shop": {
                  "id": 61,
                  "name": "Steam"
                },
                "price": {
                  "amount": 9.99,
                  "amountInt": 999,
                  "currency": "USD"
                },
                "regular": {
                  "amount": 9.99,
                  "amountInt": 999,
                  "currency": "USD"
                },
                "cut": 0,
                "voucher": null,
                "storeLow": {
                  "amount": 0.99,
                  "amountInt": 99,
                  "currency": "USD"
                },
                "flag": null,
                "drm": [],
                "platforms": [
                  {
                    "id": 1,
                    "name": "Windows"
                  },
                  {
                    "id": 2,
                    "name": "Mac"
                  },
                  {
                    "id": 3,
                    "name": "Linux"
                  }
                ],
                "timestamp": "2024-02-11T01:47:46+01:00",
                "expiry": null,
                "url": "https://next.isthereanydeal.com/link/018d9386-7132-719b-89e1-e11b8c591ee7/"
              }
            ]
          }
        ]
      },
      "resp.bundles.v2.success": {
        "value": [
          {
            "id": 11631,
            "title": "Rimworld with all Expansions Bundle",
            "page": {
              "id": 8,
              "name": "Fanatical",
              "shopId": 6
            },
            "url": "https://www.dpbolvw.net/click-6305441-13212017?url=https%3A%2F%2Fwww.fanatical.com%2Fen%2Fbundle%2Frimworld-with-all-expansions",
            "details": "https://isthereanydeal.com/bundles/11631/",
            "isMature": false,
            "publish": "2024-03-04T19:00:00+01:00",
            "expiry": "2024-03-22T00:59:46+01:00",
            "note": "* Bundle being relaunched...again and again.",
            "counts": {
              "games": 4,
              "media": 1
            },
            "tiers": [
              {
                "price": {
                  "amount": 87.96,
                  "amountInt": 8796,
                  "currency": "USD"
                },
                "addon": false,
                "games": [
                  {
                    "id": "018d937f-12e9-71ca-a5d5-f31985870694",
                    "slug": "rimworld",
                    "title": "RimWorld",
                    "type": "game",
                    "mature": false,
                    "assets": {
                      "boxart": "https://assets.isthereanydeal.com/018d937f-12e9-71ca-a5d5-f31985870694/boxart.jpg?t=1734155400",
                      "banner145": "https://assets.isthereanydeal.com/018d937f-12e9-71ca-a5d5-f31985870694/banner145.jpg?t=1734155400",
                      "banner300": "https://assets.isthereanydeal.com/018d937f-12e9-71ca-a5d5-f31985870694/banner300.jpg?t=1734155400",
                      "banner400": "https://assets.isthereanydeal.com/018d937f-12e9-71ca-a5d5-f31985870694/banner400.jpg?t=1734155400",
                      "banner600": "https://assets.isthereanydeal.com/018d937f-12e9-71ca-a5d5-f31985870694/banner600.jpg?t=1734155400"
                    }
                  },
                  {
                    "id": "018d937f-3e88-718b-b99d-9a45bb69be55",
                    "slug": "rimworld-royalty",
                    "title": "RimWorld - Royalty",
                    "type": "dlc",
                    "mature": false,
                    "assets": {
                      "boxart": "https://assets.isthereanydeal.com/018d937f-3e88-718b-b99d-9a45bb69be55/boxart.jpg?t=1732764965",
                      "banner145": "https://assets.isthereanydeal.com/018d937f-3e88-718b-b99d-9a45bb69be55/banner145.jpg?t=1732764965",
                      "banner300": "https://assets.isthereanydeal.com/018d937f-3e88-718b-b99d-9a45bb69be55/banner300.jpg?t=1732764965",
                      "banner400": "https://assets.isthereanydeal.com/018d937f-3e88-718b-b99d-9a45bb69be55/banner400.jpg?t=1732764965",
                      "banner600": "https://assets.isthereanydeal.com/018d937f-3e88-718b-b99d-9a45bb69be55/banner600.jpg?t=1732764966"
                    }
                  },
                  {
                    "id": "018d937f-5256-73e1-bba6-66fd3f4d9cd7",
                    "slug": "rimworld-ideology",
                    "title": "RimWorld - Ideology",
                    "type": "dlc",
                    "mature": false,
                    "assets": {
                      "boxart": "https://assets.isthereanydeal.com/018d937f-5256-73e1-bba6-66fd3f4d9cd7/boxart.jpg?t=1732782945",
                      "banner145": "https://assets.isthereanydeal.com/018d937f-5256-73e1-bba6-66fd3f4d9cd7/banner145.jpg?t=1732782945",
                      "banner300": "https://assets.isthereanydeal.com/018d937f-5256-73e1-bba6-66fd3f4d9cd7/banner300.jpg?t=1732782945",
                      "banner400": "https://assets.isthereanydeal.com/018d937f-5256-73e1-bba6-66fd3f4d9cd7/banner400.jpg?t=1732782945",
                      "banner600": "https://assets.isthereanydeal.com/018d937f-5256-73e1-bba6-66fd3f4d9cd7/banner600.jpg?t=1732782945"
                    }
                  },
                  {
                    "id": "018d937f-65f0-70d3-83fe-71fac1505a13",
                    "slug": "rimworld-biotech",
                    "title": "RimWorld - Biotech",
                    "type": "dlc",
                    "mature": false,
                    "assets": {
                      "boxart": "https://assets.isthereanydeal.com/018d937f-65f0-70d3-83fe-71fac1505a13/boxart.jpg?t=1732751175",
                      "banner145": "https://assets.isthereanydeal.com/018d937f-65f0-70d3-83fe-71fac1505a13/banner145.jpg?t=1732751175",
                      "banner300": "https://assets.isthereanydeal.com/018d937f-65f0-70d3-83fe-71fac1505a13/banner300.jpg?t=1732751175",
                      "banner400": "https://assets.isthereanydeal.com/018d937f-65f0-70d3-83fe-71fac1505a13/banner400.jpg?t=1732751175",
                      "banner600": "https://assets.isthereanydeal.com/018d937f-65f0-70d3-83fe-71fac1505a13/banner600.jpg?t=1732751176"
                    }
                  }
                ]
              }
            ]
          }
        ]
      },
      "resp.overview.v2.success": {
        "value": {
          "prices": [
            {
              "id": "018d937f-12e9-71ca-a5d5-f31985870694",
              "current": {
                "shop": {
                  "id": 61,
                  "name": "Steam"
                },
                "price": {
                  "amount": 31.99,
                  "amountInt": 3199,
                  "currency": "EUR"
                },
                "regular": {
                  "amount": 31.99,
                  "amountInt": 3199,
                  "currency": "EUR"
                },
                "cut": 0,
                "voucher": null,
                "flag": null,
                "drm": [],
                "platforms": [
                  {
                    "id": 1,
                    "name": "Windows"
                  },
                  {
                    "id": 2,
                    "name": "Mac"
                  },
                  {
                    "id": 3,
                    "name": "Linux"
                  }
                ],
                "timestamp": "2025-02-06T19:21:30+01:00",
                "expiry": null,
                "url": "https://itad.link/018d9386-b9c8-71ea-8724-47f829db21bd/"
              },
              "lowest": {
                "shop": {
                  "id": 6,
                  "name": "Fanatical"
                },
                "price": {
                  "amount": 22.07,
                  "amountInt": 2207,
                  "currency": "EUR"
                },
                "regular": {
                  "amount": 31.99,
                  "amountInt": 3199,
                  "currency": "EUR"
                },
                "cut": 31,
                "timestamp": "2024-07-01T17:15:49+02:00"
              },
              "bundled": 1,
              "urls": {
                "game": "https://isthereanydeal.com/game/id:018d937f-12e9-71ca-a5d5-f31985870694/"
              }
            },
            {
              "id": "018d937f-6ee4-73f5-858c-2fde3407462f",
              "current": {
                "shop": {
                  "id": 67,
                  "name": "eTail.Market"
                },
                "price": {
                  "amount": 34.19,
                  "amountInt": 3419,
                  "currency": "EUR"
                },
                "regular": {
                  "amount": 39.99,
                  "amountInt": 3999,
                  "currency": "EUR"
                },
                "cut": 15,
                "voucher": null,
                "flag": null,
                "drm": [
                  {
                    "id": 61,
                    "name": "Steam"
                  }
                ],
                "platforms": [],
                "timestamp": "2025-02-24T05:11:43+01:00",
                "expiry": null,
                "url": "https://itad.link/018dbf61-5f64-7073-a201-d4d25151bfb0/"
              },
              "lowest": {
                "shop": {
                  "id": 67,
                  "name": "eTail.Market"
                },
                "price": {
                  "amount": 26.48,
                  "amountInt": 2648,
                  "currency": "EUR"
                },
                "regular": {
                  "amount": 39.99,
                  "amountInt": 3999,
                  "currency": "EUR"
                },
                "cut": 34,
                "timestamp": "2024-12-13T12:31:59+01:00"
              },
              "bundled": 0,
              "urls": {
                "game": "https://isthereanydeal.com/game/id:018d937f-6ee4-73f5-858c-2fde3407462f/"
              }
            }
          ],
          "bundles": [
            {
              "id": 11631,
              "title": "Rimworld with all Expansions Bundle",
              "page": {
                "id": 8,
                "name": "Fanatical",
                "shopId": 6
              },
              "url": "https://www.dpbolvw.net/click-6305441-13212017?url=https%3A%2F%2Fwww.fanatical.com%2Fen%2Fbundle%2Frimworld-with-all-expansions",
              "details": "https://isthereanydeal.com/bundles/11631/",
              "isMature": false,
              "publish": "2024-03-04T19:00:00+01:00",
              "expiry": "2024-03-22T00:59:46+01:00",
              "note": null,
              "counts": {
                "games": 4,
                "media": 1
              },
              "tiers": [
                {
                  "price": {
                    "amount": 87.96,
                    "amountInt": 8796,
                    "currency": "USD"
                  },
                  "addon": false,
                  "games": [
                    {
                      "id": "018d937f-12e9-71ca-a5d5-f31985870694",
                      "slug": "rimworld",
                      "title": "RimWorld",
                      "type": "game",
                      "mature": false,
                      "assets": {
                        "boxart": "https://assets.isthereanydeal.com/018d937f-12e9-71ca-a5d5-f31985870694/boxart.jpg?t=1734155400",
                        "banner145": "https://assets.isthereanydeal.com/018d937f-12e9-71ca-a5d5-f31985870694/banner145.jpg?t=1734155400",
                        "banner300": "https://assets.isthereanydeal.com/018d937f-12e9-71ca-a5d5-f31985870694/banner300.jpg?t=1734155400",
                        "banner400": "https://assets.isthereanydeal.com/018d937f-12e9-71ca-a5d5-f31985870694/banner400.jpg?t=1734155400",
                        "banner600": "https://assets.isthereanydeal.com/018d937f-12e9-71ca-a5d5-f31985870694/banner600.jpg?t=1734155400"
                      }
                    },
                    {
                      "id": "018d937f-3e88-718b-b99d-9a45bb69be55",
                      "slug": "rimworld-royalty",
                      "title": "RimWorld - Royalty",
                      "type": "dlc",
                      "mature": false,
                      "assets": {
                        "boxart": "https://assets.isthereanydeal.com/018d937f-3e88-718b-b99d-9a45bb69be55/boxart.jpg?t=1732764965",
                        "banner145": "https://assets.isthereanydeal.com/018d937f-3e88-718b-b99d-9a45bb69be55/banner145.jpg?t=1732764965",
                        "banner300": "https://assets.isthereanydeal.com/018d937f-3e88-718b-b99d-9a45bb69be55/banner300.jpg?t=1732764965",
                        "banner400": "https://assets.isthereanydeal.com/018d937f-3e88-718b-b99d-9a45bb69be55/banner400.jpg?t=1732764965",
                        "banner600": "https://assets.isthereanydeal.com/018d937f-3e88-718b-b99d-9a45bb69be55/banner600.jpg?t=1732764966"
                      }
                    },
                    {
                      "id": "018d937f-5256-73e1-bba6-66fd3f4d9cd7",
                      "slug": "rimworld-ideology",
                      "title": "RimWorld - Ideology",
                      "type": "dlc",
                      "mature": false,
                      "assets": {
                        "boxart": "https://assets.isthereanydeal.com/018d937f-5256-73e1-bba6-66fd3f4d9cd7/boxart.jpg?t=1732782945",
                        "banner145": "https://assets.isthereanydeal.com/018d937f-5256-73e1-bba6-66fd3f4d9cd7/banner145.jpg?t=1732782945",
                        "banner300": "https://assets.isthereanydeal.com/018d937f-5256-73e1-bba6-66fd3f4d9cd7/banner300.jpg?t=1732782945",
                        "banner400": "https://assets.isthereanydeal.com/018d937f-5256-73e1-bba6-66fd3f4d9cd7/banner400.jpg?t=1732782945",
                        "banner600": "https://assets.isthereanydeal.com/018d937f-5256-73e1-bba6-66fd3f4d9cd7/banner600.jpg?t=1732782945"
                      }
                    },
                    {
                      "id": "018d937f-65f0-70d3-83fe-71fac1505a13",
                      "slug": "rimworld-biotech",
                      "title": "RimWorld - Biotech",
                      "type": "dlc",
                      "mature": false,
                      "assets": {
                        "boxart": "https://assets.isthereanydeal.com/018d937f-65f0-70d3-83fe-71fac1505a13/boxart.jpg?t=1732751175",
                        "banner145": "https://assets.isthereanydeal.com/018d937f-65f0-70d3-83fe-71fac1505a13/banner145.jpg?t=1732751175",
                        "banner300": "https://assets.isthereanydeal.com/018d937f-65f0-70d3-83fe-71fac1505a13/banner300.jpg?t=1732751175",
                        "banner400": "https://assets.isthereanydeal.com/018d937f-65f0-70d3-83fe-71fac1505a13/banner400.jpg?t=1732751175",
                        "banner600": "https://assets.isthereanydeal.com/018d937f-65f0-70d3-83fe-71fac1505a13/banner600.jpg?t=1732751176"
                      }
                    }
                  ]
                }
              ]
            }
          ]
        }
      },
      "historylow.v1.success": {
        "value": [
          {
            "id": "01849782-1017-7389-8de4-c97c587fd7e3",
            "low": {
              "shop": {
                "id": 47,
                "name": "MacGameStore"
              },
              "price": {
                "amount": 3.99,
                "amountInt": 399,
                "currency": "USD"
              },
              "regular": {
                "amount": 21.99,
                "amountInt": 2199,
                "currency": "USD"
              },
              "cut": 82,
              "timestamp": "2022-11-27T21:33:36+01:00"
            }
          },
          {
            "id": "01849783-6a26-7147-ab32-71804ca47e8e",
            "low": {
              "shop": {
                "id": 47,
                "name": "MacGameStore"
              },
              "price": {
                "amount": 5.99,
                "amountInt": 599,
                "currency": "USD"
              },
              "regular": {
                "amount": 39.99,
                "amountInt": 3999,
                "currency": "USD"
              },
              "cut": 85,
              "timestamp": "2022-12-23T03:22:14+01:00"
            }
          }
        ]
      },
      "storelow.v2.success": {
        "value": [
          {
            "id": "01849782-1017-7389-8de4-c97c587fd7e3",
            "lows": [
              {
                "shop": {
                  "id": 13,
                  "name": "DLGamer"
                },
                "price": {
                  "amount": 6.6,
                  "amountInt": 660,
                  "currency": "USD"
                },
                "regular": {
                  "amount": 21.99,
                  "amountInt": 2199,
                  "currency": "USD"
                },
                "cut": 70,
                "timestamp": "2022-11-29T02:14:37+01:00"
              },
              {
                "shop": {
                  "id": 61,
                  "name": "Steam"
                },
                "price": {
                  "amount": 6.59,
                  "amountInt": 659,
                  "currency": "USD"
                },
                "regular": {
                  "amount": 21.99,
                  "amountInt": 2199,
                  "currency": "USD"
                },
                "cut": 70,
                "timestamp": "2022-12-21T00:29:04+01:00"
              }
            ]
          },
          {
            "id": "01849783-6a26-7147-ab32-71804ca47e8e",
            "lows": [
              {
                "shop": {
                  "id": 13,
                  "name": "DLGamer"
                },
                "price": {
                  "amount": 10,
                  "amountInt": 1000,
                  "currency": "USD"
                },
                "regular": {
                  "amount": 39.99,
                  "amountInt": 3999,
                  "currency": "USD"
                },
                "cut": 75,
                "timestamp": "2022-11-29T02:14:36+01:00"
              },
              {
                "shop": {
                  "id": 61,
                  "name": "Steam"
                },
                "price": {
                  "amount": 39.99,
                  "amountInt": 3999,
                  "currency": "USD"
                },
                "regular": {
                  "amount": 39.99,
                  "amountInt": 3999,
                  "currency": "USD"
                },
                "cut": 0,
                "timestamp": "2022-12-14T00:28:40+01:00"
              }
            ]
          }
        ]
      },
      "history.v2.success": {
        "value": [
          {
            "timestamp": "2022-12-27T11:21:08+01:00",
            "shop": {
              "id": 61,
              "name": "Steam"
            },
            "deal": {
              "price": {
                "amount": 9.99,
                "amountInt": 999,
                "currency": "EUR"
              },
              "regular": {
                "amount": 39.99,
                "amountInt": 3999,
                "currency": "EUR"
              },
              "cut": 75
            }
          },
          {
            "timestamp": "2022-12-14T00:12:29+01:00",
            "shop": {
              "id": 61,
              "name": "Steam"
            },
            "deal": {
              "price": {
                "amount": 39.99,
                "amountInt": 3999,
                "currency": "EUR"
              },
              "regular": {
                "amount": 39.99,
                "amountInt": 3999,
                "currency": "EUR"
              },
              "cut": 0
            }
          }
        ]
      },
      "resp.games.subs.v1.success": {
        "value": [
          {
            "id": "018d937f-24b7-731c-a789-8307ae059efa",
            "subs": [
              {
                "id": 1,
                "name": "Prime Gaming",
                "leaving": "2025-02-26T18:00:00+00:00"
              }
            ]
          },
          {
            "id": "018d937f-700e-7161-9c8d-5423af1b7c99",
            "subs": [
              {
                "id": 6,
                "name": "Game Pass",
                "leaving": null
              }
            ]
          }
        ]
      },
      "resp.deals.get.v2.success": {
        "value": {
          "nextOffset": 3,
          "hasMore": true,
          "list": [
            {
              "id": "018d937e-e9ce-718b-9715-111f50820ed4",
              "slug": "lego-marvels-avengers-season-pass",
              "title": "LEGO Marvel's Avengers Season Pass",
              "type": "dlc",
              "mature": false,
              "assets": {
                "boxart": "https://assets.isthereanydeal.com/018d937e-e9ce-718b-9715-111f50820ed4/boxart.jpg?t=1732868120",
                "banner145": "https://assets.isthereanydeal.com/018d937e-e9ce-718b-9715-111f50820ed4/banner145.jpg?t=1732868120",
                "banner300": "https://assets.isthereanydeal.com/018d937e-e9ce-718b-9715-111f50820ed4/banner300.jpg?t=1732868120",
                "banner400": "https://assets.isthereanydeal.com/018d937e-e9ce-718b-9715-111f50820ed4/banner400.jpg?t=1732868120",
                "banner600": "https://assets.isthereanydeal.com/018d937e-e9ce-718b-9715-111f50820ed4/banner600.jpg?t=1732868121"
              },
              "deal": {
                "shop": {
                  "id": 50,
                  "name": "Nuuvem"
                },
                "price": {
                  "amount": 1.49,
                  "amountInt": 149,
                  "currency": "BRL"
                },
                "regular": {
                  "amount": 29.9,
                  "amountInt": 2990,
                  "currency": "BRL"
                },
                "cut": 95,
                "voucher": null,
                "storeLow": {
                  "amount": 1.49,
                  "amountInt": 149,
                  "currency": "BRL"
                },
                "historyLow": {
                  "amount": 1.49,
                  "amountInt": 149,
                  "currency": "BRL"
                },
                "historyLow_1y": {
                  "amount": 1.49,
                  "amountInt": 149,
                  "currency": "BRL"
                },
                "historyLow_3m": {
                  "amount": 1.49,
                  "amountInt": 149,
                  "currency": "BRL"
                },
                "flag": "H",
                "drm": [
                  {
                    "id": 61,
                    "name": "Steam"
                  }
                ],
                "platforms": [
                  {
                    "id": 1,
                    "name": "Windows"
                  }
                ],
                "timestamp": "2024-10-01T15:25:52+02:00",
                "expiry": "2024-11-01T03:59:59+01:00",
                "url": "https://itad.link/018d9386-8be1-7319-8ecc-ab31d44c64d8/"
              }
            },
            {
              "id": "018d937e-e9ec-7103-97a0-732d4301eb72",
              "slug": "shift-quantum",
              "title": "Shift Quantum",
              "type": "game",
              "mature": false,
              "assets": {
                "boxart": "https://assets.isthereanydeal.com/018d937e-e9ec-7103-97a0-732d4301eb72/boxart.jpg",
                "banner145": "https://assets.isthereanydeal.com/018d937e-e9ec-7103-97a0-732d4301eb72/banner145.jpg",
                "banner300": "https://assets.isthereanydeal.com/018d937e-e9ec-7103-97a0-732d4301eb72/banner300.jpg",
                "banner400": "https://assets.isthereanydeal.com/018d937e-e9ec-7103-97a0-732d4301eb72/banner400.jpg",
                "banner600": "https://assets.isthereanydeal.com/018d937e-e9ec-7103-97a0-732d4301eb72/banner600.jpg"
              },
              "deal": {
                "shop": {
                  "id": 50,
                  "name": "Nuuvem"
                },
                "price": {
                  "amount": 11.4,
                  "amountInt": 1140,
                  "currency": "BRL"
                },
                "regular": {
                  "amount": 37.99,
                  "amountInt": 3799,
                  "currency": "BRL"
                },
                "cut": 70,
                "voucher": null,
                "storeLow": {
                  "amount": 9.49,
                  "amountInt": 949,
                  "currency": "BRL"
                },
                "historyLow": {
                  "amount": 7.59,
                  "amountInt": 759,
                  "currency": "BRL"
                },
                "historyLow_1y": {
                  "amount": 9.49,
                  "amountInt": 949,
                  "currency": "BRL"
                },
                "historyLow_3m": {
                  "amount": 9.49,
                  "amountInt": 949,
                  "currency": "BRL"
                },
                "flag": null,
                "drm": [
                  {
                    "id": 61,
                    "name": "Steam"
                  }
                ],
                "platforms": [
                  {
                    "id": 1,
                    "name": "Windows"
                  }
                ],
                "timestamp": "2024-12-05T04:26:01+01:00",
                "expiry": "2024-12-19T03:59:59+01:00",
                "url": "https://itad.link/018d9386-c580-739b-bac6-06f2a7eb5d61/"
              }
            },
            {
              "id": "018d937e-f7f5-70ea-a1dd-e1901a199f3d",
              "slug": "grand-theft-auto-v-cesp-and-great-white-shark-card-bundle",
              "title": "Grand Theft Auto V - CESP + Great White Shark Card Bundle",
              "type": null,
              "mature": false,
              "assets": {
                "boxart": "https://assets.isthereanydeal.com/018d937e-f7f5-70ea-a1dd-e1901a199f3d/boxart.jpg",
                "banner145": "https://assets.isthereanydeal.com/018d937e-f7f5-70ea-a1dd-e1901a199f3d/banner145.jpg",
                "banner300": "https://assets.isthereanydeal.com/018d937e-f7f5-70ea-a1dd-e1901a199f3d/banner300.jpg",
                "banner400": "https://assets.isthereanydeal.com/018d937e-f7f5-70ea-a1dd-e1901a199f3d/banner400.jpg"
              },
              "deal": {
                "shop": {
                  "id": 50,
                  "name": "Nuuvem"
                },
                "price": {
                  "amount": 49.23,
                  "amountInt": 4923,
                  "currency": "BRL"
                },
                "regular": {
                  "amount": 109.41,
                  "amountInt": 10941,
                  "currency": "BRL"
                },
                "cut": 55,
                "voucher": null,
                "storeLow": {
                  "amount": 38.39,
                  "amountInt": 3839,
                  "currency": "BRL"
                },
                "historyLow": {
                  "amount": 38.39,
                  "amountInt": 3839,
                  "currency": "BRL"
                },
                "historyLow_1y": {
                  "amount": 49.23,
                  "amountInt": 4923,
                  "currency": "BRL"
                },
                "historyLow_3m": {
                  "amount": 49.23,
                  "amountInt": 4923,
                  "currency": "BRL"
                },
                "flag": null,
                "drm": [
                  {
                    "id": 61,
                    "name": "Steam"
                  }
                ],
                "platforms": [
                  {
                    "id": 1,
                    "name": "Windows"
                  }
                ],
                "timestamp": "2024-12-10T05:15:41+01:00",
                "expiry": "2024-12-14T03:29:00+01:00",
                "url": "https://itad.link/018d9386-6e38-705c-9b92-958ee5e10f77/"
              }
            }
          ]
        }
      },
      "resp.games.get.v1.success": {
        "value": [
          {
            "id": "018d937e-e9e5-72fa-a1dc-e7e090b64d2f",
            "slug": "dwarven-skykeep",
            "title": "Dwarven Skykeep",
            "type": "game",
            "assets": {
              "boxart": "https://cdn.example.com//018d937e-e9e5-72fa-a1dc-e7e090b64d2f/boxart.jpg",
              "banner145": "https://cdn.example.com//018d937e-e9e5-72fa-a1dc-e7e090b64d2f/banner145.jpg",
              "banner300": "https://cdn.example.com//018d937e-e9e5-72fa-a1dc-e7e090b64d2f/banner300.jpg",
              "banner400": "https://cdn.example.com//018d937e-e9e5-72fa-a1dc-e7e090b64d2f/banner400.jpg",
              "banner600": "https://cdn.example.com//018d937e-e9e5-72fa-a1dc-e7e090b64d2f/banner600.jpg"
            },
            "mature": false,
            "added": "2023-02-01T21:04:21+01:00"
          },
          {
            "id": "018d937e-e9f4-71bb-9413-3b25175df416",
            "slug": "orcish-inn",
            "title": "Orcish Inn",
            "type": "game",
            "assets": {
              "boxart": "https://cdn.example.com//018d937e-e9f4-71bb-9413-3b25175df416/boxart.jpg",
              "banner145": "https://cdn.example.com//018d937e-e9f4-71bb-9413-3b25175df416/banner145.jpg",
              "banner300": "https://cdn.example.com//018d937e-e9f4-71bb-9413-3b25175df416/banner300.jpg",
              "banner400": "https://cdn.example.com//018d937e-e9f4-71bb-9413-3b25175df416/banner400.jpg",
              "banner600": "https://cdn.example.com//018d937e-e9f4-71bb-9413-3b25175df416/banner600.jpg"
            },
            "mature": false,
            "added": "2023-02-01T21:04:21+01:00"
          },
          {
            "id": "018d937e-e9f9-734c-8413-5a447e993a8c",
            "slug": "take-on-mars",
            "title": "Take On Mars",
            "type": "game",
            "assets": {},
            "mature": false,
            "added": "2019-01-13T02:41:06+01:00"
          },
          {
            "id": "018d937e-ea40-7125-bab3-feb2fba446a1",
            "slug": "surviving-mars",
            "title": "Surviving Mars",
            "type": "game",
            "assets": {
              "boxart": "https://cdn.example.com//018d937e-ea40-7125-bab3-feb2fba446a1/boxart.jpg",
              "banner145": "https://cdn.example.com//018d937e-ea40-7125-bab3-feb2fba446a1/banner145.jpg",
              "banner300": "https://cdn.example.com//018d937e-ea40-7125-bab3-feb2fba446a1/banner300.jpg",
              "banner400": "https://cdn.example.com//018d937e-ea40-7125-bab3-feb2fba446a1/banner400.jpg",
              "banner600": "https://cdn.example.com//018d937e-ea40-7125-bab3-feb2fba446a1/banner600.jpg"
            },
            "mature": false,
            "added": "2019-01-13T02:41:06+01:00"
          }
        ]
      },
      "resp.games.get.v1.success-2": {
        "value": [
          {
            "id": "018d937f-20d1-7349-9963-b278a98f2fb0",
            "slug": "abyss-odyssey",
            "title": "Abyss Odyssey",
            "type": "game",
            "assets": {},
            "mature": false,
            "group": 0,
            "added": "2015-10-02T03:00:04+02:00"
          },
          {
            "id": "018d937f-11d2-70c4-9b73-0a6cf40fe771",
            "slug": "abzu",
            "title": "ABZU",
            "type": "game",
            "assets": {
              "boxart": "https://cdn.example.com/018d937f-11d2-70c4-9b73-0a6cf40fe771/boxart.jpg",
              "banner145": "https://cdn.example.com/018d937f-11d2-70c4-9b73-0a6cf40fe771/banner145.jpg",
              "banner300": "https://cdn.example.com/018d937f-11d2-70c4-9b73-0a6cf40fe771/banner300.jpg",
              "banner400": "https://cdn.example.com/018d937f-11d2-70c4-9b73-0a6cf40fe771/banner400.jpg",
              "banner600": "https://cdn.example.com/018d937f-11d2-70c4-9b73-0a6cf40fe771/banner600.jpg"
            },
            "mature": false,
            "group": 38437,
            "added": "2015-10-02T03:00:04+02:00"
          }
        ]
      },
      "resp.copies.get.v1": {
        "value": [
          {
            "id": 145742693,
            "game": {
              "id": "018d937e-e9ab-70f4-bd05-1db7a138eb39"
            },
            "shop": {
              "id": 61,
              "name": "Steam"
            },
            "redeemed": true,
            "price": {
              "amount": 15,
              "amountInt": 1500,
              "currency": "EUR"
            },
            "note": "My note for this copy",
            "tags": [
              {
                "id": 21,
                "tag": "tag 1"
              },
              {
                "id": 22,
                "tag": "tag 2"
              }
            ],
            "added": "2024-02-16T21:16:17+01:00"
          },
          {
            "id": 9128925,
            "game": {
              "id": "018d937e-e9ac-7156-83a6-7d27fd9f857a"
            },
            "shop": null,
            "redeemed": true,
            "price": null,
            "note": null,
            "tags": [],
            "added": "2015-10-02T03:00:04+02:00"
          }
        ]
      },
      "resp.groups.get.v1.success": {
        "value": [
          {
            "id": 3857,
            "title": "Favorites",
            "public": true
          },
          {
            "id": 5662,
            "title": "Playing now",
            "public": true
          },
          {
            "id": 5663,
            "title": "Not yet played",
            "public": true
          },
          {
            "id": 0,
            "title": "Default Category",
            "public": false
          }
        ]
      },
      "resp.groups.post.v1.success": {
        "value": {
          "id": 5669,
          "title": "New Collection Category",
          "public": true
        }
      },
      "resp.notifications.get.v1": {
        "value": [
          {
            "id": "01921bab-b582-73bc-8473-9f125837107b",
            "type": "waitlist",
            "title": "Stardew Valley and 3 more games",
            "timestamp": "2024-09-24T02:43:04+02:00",
            "read": "2024-10-06T16:06:47+02:00"
          },
          {
            "id": "019216c1-0c76-7373-98f0-a1790c6e65f7",
            "type": "waitlist",
            "title": "Potion Permit and 42 more games",
            "timestamp": "2024-09-24T02:43:04+02:00",
            "read": "2024-10-06T16:06:47+02:00"
          },
          {
            "id": "019216c1-0c74-704e-b590-cce7a5fc8ec6",
            "type": "waitlist",
            "title": "Dwarven Skykeep and 74 more games",
            "timestamp": "2024-09-24T02:43:04+02:00",
            "read": "2024-10-06T16:06:47+02:00"
          }
        ]
      },
      "resp.notifications.waitlist.get.v1": {
        "value": {
          "id": "01921bab-b582-73bc-8473-9f125837107b",
          "timestamp": "2024-09-24T02:43:04+02:00",
          "read": "2024-10-06T16:06:47+02:00",
          "games": [
            {
              "id": "018d937e-f835-710c-b95b-928e277b187e",
              "slug": "stardew-valley",
              "title": "Stardew Valley",
              "type": "game",
              "mature": false,
              "historyLow": {
                "amount": 6.99,
                "amountInt": 699,
                "currency": "EUR"
              },
              "lastPrice": {
                "amount": 13.99,
                "amountInt": 1399,
                "currency": "EUR"
              },
              "deals": [
                {
                  "shop": {
                    "id": 35,
                    "name": "GOG"
                  },
                  "price": {
                    "amount": 13.99,
                    "amountInt": 1399,
                    "currency": "EUR"
                  },
                  "regular": {
                    "amount": 13.99,
                    "amountInt": 1399,
                    "currency": "EUR"
                  },
                  "cut": 0,
                  "voucher": null,
                  "storeLow": {
                    "amount": 7,
                    "amountInt": 700,
                    "currency": "EUR"
                  },
                  "flag": null,
                  "drm": [
                    {
                      "id": 1000,
                      "name": "Drm Free"
                    }
                  ],
                  "platforms": [
                    {
                      "id": 1,
                      "name": "Windows"
                    },
                    {
                      "id": 2,
                      "name": "Mac"
                    },
                    {
                      "id": 3,
                      "name": "Linux"
                    }
                  ],
                  "timestamp": "2024-02-11T01:20:50+01:00",
                  "expiry": null,
                  "url": "https://itad.link/018d9386-d141-7169-a0af-3349dedb00d2/"
                }
              ]
            }
          ]
        }
      },
      "shops.v1.success": {
        "value": [
          {
            "id": 19,
            "title": "2game",
            "deals": 3170,
            "games": 3785,
            "update": "2023-06-06T21:51:13+02:00"
          },
          {
            "id": 2,
            "title": "AllYouPlay",
            "deals": 435,
            "games": 4926,
            "update": "2023-06-06T22:10:25+02:00"
          },
          {
            "id": 3,
            "title": "Amazon",
            "deals": 0,
            "games": 0,
            "update": null
          }
        ]
      },
      "shops.map.v1.success": {
        "value": [
          {
            "id": 19,
            "title": "2game"
          },
          {
            "id": 2,
            "title": "AllYouPlay"
          },
          {
            "id": 3,
            "title": "Amazon"
          }
        ]
      },
      "resp.games.list.v1.success": {
        "value": [
          {
            "id": "018d937f-0680-71f6-a2c0-30660ed59d79",
            "title": "Eternal Lore",
            "appid": 601790
          },
          {
            "id": "018d937f-0681-7345-8d53-d0b6170cf842",
            "title": "Zooloretto",
            "appid": null
          }
        ]
      },
      "resp.games.dots.v1.success": {
        "value": [
          {
            "id": 7574,
            "product_id": "018dbf3c-8009-7199-b27d-eca502aa0192",
            "old_game_id": "018dbf3c-80f9-73d2-aa30-b39b52a6c7f7",
            "new_game_id": "018d937f-51cf-71a2-8359-bde441247ae1",
            "timestamp": 1777055407,
            "date": "Fri, 24 Apr 2026 18:30:07 +0000"
          },
          {
            "id": 7573,
            "product_id": "018d9578-ed32-7201-b1eb-586ccf9d3de6",
            "old_game_id": "018d937f-7466-727c-8331-8f9c8e239e9e",
            "new_game_id": "018d937f-15f9-7056-8edf-2e8fa4b8f357",
            "timestamp": 1777055393,
            "date": "Fri, 24 Apr 2026 18:29:53 +0000"
          }
        ]
      },
      "event.notification-waitlist": {
        "value": [
          {
            "id": "018d937e-f835-710c-b95b-928e277b187e",
            "slug": "stardew-valley",
            "title": "Stardew Valley",
            "type": "game",
            "mature": false,
            "historyLow": {
              "amount": 6.99,
              "amountInt": 699,
              "currency": "EUR"
            },
            "lastPrice": {
              "amount": 13.99,
              "amountInt": 1399,
              "currency": "EUR"
            },
            "deals": [
              {
                "shop": {
                  "id": 35,
                  "name": "GOG"
                },
                "price": {
                  "amount": 13.99,
                  "amountInt": 1399,
                  "currency": "EUR"
                },
                "regular": {
                  "amount": 13.99,
                  "amountInt": 1399,
                  "currency": "EUR"
                },
                "cut": 0,
                "voucher": null,
                "storeLow": {
                  "amount": 7,
                  "amountInt": 700,
                  "currency": "EUR"
                },
                "flag": null,
                "drm": [
                  {
                    "id": 1000,
                    "name": "Drm Free"
                  }
                ],
                "platforms": [
                  {
                    "id": 1,
                    "name": "Windows"
                  },
                  {
                    "id": 2,
                    "name": "Mac"
                  },
                  {
                    "id": 3,
                    "name": "Linux"
                  }
                ],
                "timestamp": "2024-02-11T01:20:50+01:00",
                "expiry": null,
                "url": "https://itad.link/018d9386-d141-7169-a0af-3349dedb00d2/"
              }
            ]
          }
        ]
      }
    }
  },
  "x-tagGroups": [
    {
      "name": "Webhooks",
      "tags": [
        "Webhooks"
      ]
    },
    {
      "name": "Lookup",
      "tags": [
        "Lookup"
      ]
    },
    {
      "name": "Games",
      "tags": [
        "Game",
        "Prices",
        "History",
        "Bundles",
        "Giveaways",
        "Deals List",
        "Subscriptions"
      ]
    },
    {
      "name": "Waitlist",
      "tags": [
        "Waitlist Games",
        "Waitlist Stats",
        "Waitlist Notifications"
      ]
    },
    {
      "name": "Collection",
      "tags": [
        "Collection Games",
        "Collection Copies",
        "Collection Groups",
        "Collection Stats"
      ]
    },
    {
      "name": "Ignore List",
      "tags": [
        "Ignored Games"
      ]
    },
    {
      "name": "Stats",
      "tags": [
        "Stats"
      ]
    },
    {
      "name": "User",
      "tags": [
        "User",
        "User Notes",
        "Profiles",
        "Sync"
      ]
    },
    {
      "name": "Notifications",
      "tags": [
        "Notifications"
      ]
    },
    {
      "name": "Shops",
      "tags": [
        "Shops"
      ]
    },
    {
      "name": "Unstable",
      "tags": [
        "Unstable"
      ]
    },
    {
      "name": "Internal",
      "tags": [
        "Internal"
      ]
    }
  ]
}