IsThereAnyDeal API (2.0.0)

Download OpenAPI specification:Download

General API contact: [email protected]

IsThereAnyDeal API provides programmatic access to features found at IsThereAnyDeal.

Terms of Service

API is provided in good faith. We trust you won't misuse the API to damage IsThereAnyDeal, its users or its reputation.

  • You MAY use this API for commercial purposes IF the resulting app is available to public. If you want to use this API privately contact us.
  • You SHOULD provide a link to IsThereAnyDeal.com or mention IsThereAnyDeal API.
  • You MUST NOT make an impression that you are affiliated with IsThereAnyDeal, unless agreed otherwise. If you are interested in making an official app, please contact us.
  • 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. You MAY use only part of data provided and enrich them from your own sources.
  • You MUST NOT make an app that could be considered a competition to IsThereAnyDeal or IsThereAnyDeal projects.
  • You MUST NOT use this API to directly or indirectly help the competition of IsThereAnyDeal.

All data are provided as-is. We reserve the right to deny you access to the API at any point without notice. If you are not sure about any of the points, please contact us.

Access

Most of the endpoints will be restricted by either API key or OAuth. In order to get neccessary keys, you have to register your app. Upon registration, api keys and OAuth credentials will be generated for you.

For some endpoints you might need explicit approval for use. In such cases, contact us.

OAuth

We support authorization code flow with PKCE extension.

You can find PKCE step-through tutorial at OAuth 2.0 PKCE Flow

Do not set hard limits for token lengths. Server will return access token as JWT of variable length. To authorize your endpoint access use Authorization header.

At the moment implicit flow is also enabled, but its usage is discouraged and support may be removed in the future

Rate Limiting

Access to API is rate limited and subject to change. You should get rate-limit info in appropriate headers. Further limits and restrictions may be added if we detect misuse.

If you have questions about limits, contact us.

Unstable and Internal Endpoints

Some endpoints are marked as unstable or internal. Unstable endpoints are publicly available, but the API may not be completely finalized yet - either the way the endpoint is called or the response may change at any time.

Internal APIs are available only for our own services. They are documented here for completeness.

Source

You can find source files for this documentation over at GitHub. Feel free to help us improve it.

service

Shops

Return information about shops

query Parameters
country
string = 2 characters
Default: "US"

Two letter country code (ISO 3166-1 alpha-2)

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

deals

Deals List

Get current deals. Follows same rules as deals list displayed on the website, which means that you will not get one game more than once in the list.

For each game, the best price is displayed, ignoring stores that currently don't have game on sale, even if they currently have a better price.

Authorizations:
keySecurity
query Parameters
country
string = 2 characters
Default: "US"

Two letter country code (ISO 3166-1 alpha-2)

offset
integer >= 0
Default: 0

Deals list offset

limit
integer [ 1 .. 200 ]
Default: 20

How many deals to return

sort
string
Examples:
  • sort=-cut - Highest cut
  • sort=price - Lowest price

Sorting values, same as in deals list on the website

nondeals
boolean
Default: false

Load non-sale prices

mature
boolean
Default: false

Load deals for mature prices

shops
Array of numbers
Examples:
  • shops=61,35 - Only Steam (61) and GOG (35)

List of shop IDs separated by comma

filter
string

Filter string

Responses

Response samples

Content type
application/json
{
  • "nextOffset": 3,
  • "hasMore": true,
  • "list": [
    ]
}

Prices

Get games' prices

Authorizations:
keySecurity
query Parameters
country
string = 2 characters
Default: "US"

Two letter country code (ISO 3166-1 alpha-2)

nondeals
boolean

Load non-sale prices

vouchers
boolean

Allow vouchers in prices

capacity
integer >= 0

How many prices to load per each game, 0 or omit for no limit

shops
Array of integers
Example: shops=65,35

List of shop IDs for which you want to load prices

Request Body schema: application/json

List of Game IDs for which to load prices

Array ([ 1 .. 200 ] items)
string <uuid>

Responses

Request samples

Content type
application/json
[
  • "01849783-6a26-7147-ab32-71804ca47e8e",
  • "01849782-1017-7389-8de4-c97c587fd7e3"
]

Response samples

Content type
application/json

Successful response

[
  • {
    },
  • {
    }
]

games

Game Lookup

Lookup game based on title or Steam appid

Authorizations:
keySecurity
query Parameters
title
string

Find game by it's name

appid
number

Find game by Steam appid

Responses

Response samples

Content type
application/json
Example

Game found

{
  • "found": true,
  • "game": {
    }
}

Game Search

Search for games by title

Authorizations:
keySecurity
query Parameters
title
required
string

Find games by name

results
number [ 1 .. 100 ]
Default: 20

Maximum number of results to return

Responses

Response samples

Content type
application/json

Europa Universalis IV search

[
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    }
]

Game Info

Get basic game information

Authorizations:
keySecurity
query Parameters
id
required
string <uuid>

Game ID

Responses

Response samples

Content type
application/json

Europa Universalis IV info

{}

Prices

Get games' prices

Authorizations:
keySecurity
query Parameters
country
string = 2 characters
Default: "US"

Two letter country code (ISO 3166-1 alpha-2)

nondeals
boolean

Load non-sale prices

vouchers
boolean

Allow vouchers in prices

capacity
integer >= 0

How many prices to load per each game, 0 or omit for no limit

shops
Array of integers
Example: shops=65,35

List of shop IDs for which you want to load prices

Request Body schema: application/json

List of Game IDs for which to load prices

Array ([ 1 .. 200 ] items)
string <uuid>

Responses

Request samples

Content type
application/json
[
  • "01849783-6a26-7147-ab32-71804ca47e8e",
  • "01849782-1017-7389-8de4-c97c587fd7e3"
]

Response samples

Content type
application/json

Successful response

[
  • {
    },
  • {
    }
]

History Low

Get historically lowest prices

Authorizations:
keySecurity
query Parameters
country
string = 2 characters
Default: "US"

Two letter country code (ISO 3166-1 alpha-2)

Request Body schema: application/json

List of Game IDs for which to load historical lows

Array ([ 1 .. 200 ] items)
string <uuid>

Responses

Request samples

Content type
application/json
[
  • "01849783-6a26-7147-ab32-71804ca47e8e",
  • "01849782-1017-7389-8de4-c97c587fd7e3"
]

Response samples

Content type
application/json

Successful response

[
  • {
    },
  • {
    }
]

Store Low

Get historically lowest prices for individual stores

Authorizations:
keySecurity
query Parameters
country
string = 2 characters
Default: "US"

Two letter country code (ISO 3166-1 alpha-2)

shops
Array of integers
Example: shops=65,35

List of shop IDs

Request Body schema: application/json

List of Game IDs for which to load store lows

Array ([ 1 .. 200 ] items)
string <uuid>

Responses

Request samples

Content type
application/json
[
  • "01849783-6a26-7147-ab32-71804ca47e8e",
  • "01849782-1017-7389-8de4-c97c587fd7e3"
]

Response samples

Content type
application/json

Successful response

[
  • {
    },
  • {
    }
]

Bundles including Game

Get all bundles which contain the game

Authorizations:
keySecurity
query Parameters
id
required
string <uuid>

Game ID

country
string = 2 characters
Default: "US"

Two letter country code (ISO 3166-1 alpha-2)

expired
boolean

Include expired bundles

Responses

Response samples

Content type
application/json

Successful response

[
  • {
    }
]

Price Overview

Get basic price overview for selected games.

For each game current best price will be loaded (optionally, only from selected shops), historical low price (among all covered shops).

Furthermore, result will also contain list of currently active bundles, which contain at least one of the queried games.

Authorizations:
keySecurity
query Parameters
country
string = 2 characters
Default: "US"

Two letter country code (ISO 3166-1 alpha-2)

shops
Array of integers
Example: shops=65,35

List of shop IDs

vouchers
boolean
Default: true

Allow vouchers in prices

Request Body schema: application/json

List of Game IDs

Array ([ 1 .. 200 ] items)
string <uuid>

Responses

Request samples

Content type
application/json
[
  • "01849783-6a26-7147-ab32-71804ca47e8e",
  • "01849782-1017-7389-8de4-c97c587fd7e3"
]

Response samples

Content type
application/json

Successful response

{
  • "prices": [
    ],
  • "bundles": [
    ]
}

History log

Get log of historical prices

Authorizations:
keySecurity
query Parameters
id
required
string <uuid>

Game ID

country
string = 2 characters
Default: "US"

Two letter country code (ISO 3166-1 alpha-2)

shops
Array of integers
Example: shops=65,35

List of shop IDs

since
string <date-time>

Load only price changes after this date.
By default, only last 3 months are loaded

Responses

Response samples

Content type
application/json

Successful response

[
  • {
    },
  • {
    }
]

Lookup Shop's Game IDs

Lookup shop's game IDs by IsThereAnyDeal game IDs

Authorizations:
NonekeySecurity
path Parameters
shopId
required
number
Request Body schema: application/json

List of game IDs

Array (non-empty)
string <uuid>

Responses

Request samples

Content type
application/json
[
  • "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]

Response samples

Content type
application/json
{
  • "018d95bc-fe96-73e6-a9f7-10afc28c0c03": [
    ],
  • "018d937f-6671-7056-b419-aac8a69a625e": [
    ],
  • "018d937f-42c6-70a5-a29b-9d8c2e0f7b84": [
    ],
  • "018d937f-6128-7151-8d2e-b4a9ad2e1ce8": [
    ]
}

Lookup Game IDs

Lookup IsThereAnyDeal's game IDs by shop's game IDs

Authorizations:
NonekeySecurity
path Parameters
shopId
required
number
Request Body schema: application/json

List of shop's game IDs

Array (non-empty)
string

Responses

Request samples

Content type
application/json
[
  • "app/220"
]

Response samples

Content type
application/json
{
  • "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"
}

history

History Low

Get historically lowest prices

Authorizations:
keySecurity
query Parameters
country
string = 2 characters
Default: "US"

Two letter country code (ISO 3166-1 alpha-2)

Request Body schema: application/json

List of Game IDs for which to load historical lows

Array ([ 1 .. 200 ] items)
string <uuid>

Responses

Request samples

Content type
application/json
[
  • "01849783-6a26-7147-ab32-71804ca47e8e",
  • "01849782-1017-7389-8de4-c97c587fd7e3"
]

Response samples

Content type
application/json

Successful response

[
  • {
    },
  • {
    }
]

Store Low

Get historically lowest prices for individual stores

Authorizations:
keySecurity
query Parameters
country
string = 2 characters
Default: "US"

Two letter country code (ISO 3166-1 alpha-2)

shops
Array of integers
Example: shops=65,35

List of shop IDs

Request Body schema: application/json

List of Game IDs for which to load store lows

Array ([ 1 .. 200 ] items)
string <uuid>

Responses

Request samples

Content type
application/json
[
  • "01849783-6a26-7147-ab32-71804ca47e8e",
  • "01849782-1017-7389-8de4-c97c587fd7e3"
]

Response samples

Content type
application/json

Successful response

[
  • {
    },
  • {
    }
]

History log

Get log of historical prices

Authorizations:
keySecurity
query Parameters
id
required
string <uuid>

Game ID

country
string = 2 characters
Default: "US"

Two letter country code (ISO 3166-1 alpha-2)

shops
Array of integers
Example: shops=65,35

List of shop IDs

since
string <date-time>

Load only price changes after this date.
By default, only last 3 months are loaded

Responses

Response samples

Content type
application/json

Successful response

[
  • {
    },
  • {
    }
]

bundles

Bundles including Game

Get all bundles which contain the game

Authorizations:
keySecurity
query Parameters
id
required
string <uuid>

Game ID

country
string = 2 characters
Default: "US"

Two letter country code (ISO 3166-1 alpha-2)

expired
boolean

Include expired bundles

Responses

Response samples

Content type
application/json

Successful response

[
  • {
    }
]

user

Games in Waitlist

Get games in user's Waitlist

Authorizations:
oauthSecurity

Responses

Response samples

Content type
application/json

Successful response

[
  • {
    },
  • {
    },
  • {
    }
]

Add to Waitlist

Add games to user's Waitlist

Authorizations:
oauthSecurity
Request Body schema: application/json

List of Game IDs

Array (non-empty)
string <uuid>

Responses

Request samples

Content type
application/json
[
  • "01849783-6a26-7147-ab32-71804ca47e8e",
  • "01849782-1017-7389-8de4-c97c587fd7e3"
]

Response samples

Content type
application/json
{
  • "status_code": 0,
  • "reason_phrase": "string"
}

Delete from Waitlist

Delete games from user's Waitlist

Authorizations:
oauthSecurity
Request Body schema: application/json

List of Game IDs

Array (non-empty)
string <uuid>

Responses

Request samples

Content type
application/json
[
  • "01849783-6a26-7147-ab32-71804ca47e8e",
  • "01849782-1017-7389-8de4-c97c587fd7e3"
]

Response samples

Content type
application/json
{
  • "status_code": 0,
  • "reason_phrase": "string"
}

Games in Collection

Get games in user's Collection

Authorizations:
oauthSecurity

Responses

Response samples

Content type
application/json

Successful response

[
  • {
    },
  • {
    },
  • {
    }
]

Add to Collection

Add games to user's Collection

Authorizations:
oauthSecurity
Request Body schema: application/json

List of Game IDs

Array (non-empty)
string <uuid>

Responses

Request samples

Content type
application/json
[
  • "01849783-6a26-7147-ab32-71804ca47e8e",
  • "01849782-1017-7389-8de4-c97c587fd7e3"
]

Response samples

Content type
application/json
{
  • "status_code": 0,
  • "reason_phrase": "string"
}

Delete from Collection

Delete games from user's Collection

Authorizations:
oauthSecurity
Request Body schema: application/json

List of Game IDs

Array (non-empty)
string <uuid>

Responses

Request samples

Content type
application/json
[
  • "01849783-6a26-7147-ab32-71804ca47e8e",
  • "01849782-1017-7389-8de4-c97c587fd7e3"
]

Response samples

Content type
application/json
{
  • "status_code": 0,
  • "reason_phrase": "string"
}

User Info

Get user info, currently just a username

Authorizations:
oauthSecurity

Responses

Response samples

Content type
application/json
{
  • "username": "string"
}

waitlist

Games in Waitlist

Get games in user's Waitlist

Authorizations:
oauthSecurity

Responses

Response samples

Content type
application/json

Successful response

[
  • {
    },
  • {
    },
  • {
    }
]

Add to Waitlist

Add games to user's Waitlist

Authorizations:
oauthSecurity
Request Body schema: application/json

List of Game IDs

Array (non-empty)
string <uuid>

Responses

Request samples

Content type
application/json
[
  • "01849783-6a26-7147-ab32-71804ca47e8e",
  • "01849782-1017-7389-8de4-c97c587fd7e3"
]

Response samples

Content type
application/json
{
  • "status_code": 0,
  • "reason_phrase": "string"
}

Delete from Waitlist

Delete games from user's Waitlist

Authorizations:
oauthSecurity
Request Body schema: application/json

List of Game IDs

Array (non-empty)
string <uuid>

Responses

Request samples

Content type
application/json
[
  • "01849783-6a26-7147-ab32-71804ca47e8e",
  • "01849782-1017-7389-8de4-c97c587fd7e3"
]

Response samples

Content type
application/json
{
  • "status_code": 0,
  • "reason_phrase": "string"
}

Waitlist Stats

Get Waitlist statistics for a game

Note: stats do not take into consideration users' regions. If they have set their price limit to be a historical low, stats will be computed for all users as if they were in the region you specify

Authorizations:
keySecurity
query Parameters
id
required
string <uuid>

Game ID

country
string = 2 characters
Default: "US"

Two letter country code (ISO 3166-1 alpha-2)

bucket_price
integer >= 0
Default: 5

Price bucket size

bucket_cut
integer >= 0
Default: 5

Cut bucket size

Responses

Response samples

Content type
application/json
{
  • "count": 0,
  • "price": {
    },
  • "cut": {
    }
}

Most Waitlisted

Get list of most Waitlisted games

Authorizations:
keySecurity
query Parameters
offset
integer >= 0
Default: 0
limit
integer [ 1 .. 500 ]
Default: 20

Responses

Response samples

Content type
application/json
[
  • {
    }
]

collection

Games in Collection

Get games in user's Collection

Authorizations:
oauthSecurity

Responses

Response samples

Content type
application/json

Successful response

[
  • {
    },
  • {
    },
  • {
    }
]

Add to Collection

Add games to user's Collection

Authorizations:
oauthSecurity
Request Body schema: application/json

List of Game IDs

Array (non-empty)
string <uuid>

Responses

Request samples

Content type
application/json
[
  • "01849783-6a26-7147-ab32-71804ca47e8e",
  • "01849782-1017-7389-8de4-c97c587fd7e3"
]

Response samples

Content type
application/json
{
  • "status_code": 0,
  • "reason_phrase": "string"
}

Delete from Collection

Delete games from user's Collection

Authorizations:
oauthSecurity
Request Body schema: application/json

List of Game IDs

Array (non-empty)
string <uuid>

Responses

Request samples

Content type
application/json
[
  • "01849783-6a26-7147-ab32-71804ca47e8e",
  • "01849782-1017-7389-8de4-c97c587fd7e3"
]

Response samples

Content type
application/json
{
  • "status_code": 0,
  • "reason_phrase": "string"
}

Most Collected

Get list of most Collected games

Authorizations:
keySecurity
query Parameters
offset
integer >= 0
Default: 0
limit
integer [ 1 .. 500 ]
Default: 20

Responses

Response samples

Content type
application/json
[
  • {
    }
]

stats

Waitlist Stats

Get Waitlist statistics for a game

Note: stats do not take into consideration users' regions. If they have set their price limit to be a historical low, stats will be computed for all users as if they were in the region you specify

Authorizations:
keySecurity
query Parameters
id
required
string <uuid>

Game ID

country
string = 2 characters
Default: "US"

Two letter country code (ISO 3166-1 alpha-2)

bucket_price
integer >= 0
Default: 5

Price bucket size

bucket_cut
integer >= 0
Default: 5

Cut bucket size

Responses

Response samples

Content type
application/json
{
  • "count": 0,
  • "price": {
    },
  • "cut": {
    }
}

Most Waitlisted

Get list of most Waitlisted games

Authorizations:
keySecurity
query Parameters
offset
integer >= 0
Default: 0
limit
integer [ 1 .. 500 ]
Default: 20

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Most Collected

Get list of most Collected games

Authorizations:
keySecurity
query Parameters
offset
integer >= 0
Default: 0
limit
integer [ 1 .. 500 ]
Default: 20

Responses

Response samples

Content type
application/json
[
  • {
    }
]

unstable

Lookup Shop's Game IDs

Lookup shop's game IDs by IsThereAnyDeal game IDs

Authorizations:
NonekeySecurity
path Parameters
shopId
required
number
Request Body schema: application/json

List of game IDs

Array (non-empty)
string <uuid>

Responses

Request samples

Content type
application/json
[
  • "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]

Response samples

Content type
application/json
{
  • "018d95bc-fe96-73e6-a9f7-10afc28c0c03": [
    ],
  • "018d937f-6671-7056-b419-aac8a69a625e": [
    ],
  • "018d937f-42c6-70a5-a29b-9d8c2e0f7b84": [
    ],
  • "018d937f-6128-7151-8d2e-b4a9ad2e1ce8": [
    ]
}

Lookup Game IDs

Lookup IsThereAnyDeal's game IDs by shop's game IDs

Authorizations:
NonekeySecurity
path Parameters
shopId
required
number
Request Body schema: application/json

List of shop's game IDs

Array (non-empty)
string

Responses

Request samples

Content type
application/json
[
  • "app/220"
]

Response samples

Content type
application/json
{
  • "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"
}

internal

Early Access Games

Returns list of Steam appids, which are currently considered to be early in early access

Authorizations:
keySecurity

Responses

Response samples

Content type
application/json
[
  • 0
]

Number of Players Statistics

Authorizations:
keySecurity
query Parameters
appid
required
number

Responses

Response samples

Content type
application/json
{
  • "current": 0,
  • "day": 0,
  • "peak": 0
}

HowLongToBeat Overview

Authorizations:
keySecurity
query Parameters
appid
required
number

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "main": { },
  • "extra": { },
  • "complete": { }
}

Reviews Score

Returns Metacritic user reviews overview and OpenCritic overview for a given game

Authorizations:
keySecurity
query Parameters
appid
required
number

Responses

Response samples

Content type
application/json
{}

Conversion Rates

Authorizations:
keySecurity

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Current stream of Twitch channel

Authorizations:
keySecurity
query Parameters
channel
required
string

Responses

Response samples

Content type
application/json
Example
{
  • "user_name": "string",
  • "title": "string",
  • "thumbnail_url": "string",
  • "viewer_count": 0,
  • "game": "string"
}