Download OpenAPI specification:
IsThereAnyDeal API provides programmatic access to features found at IsThereAnyDeal.
API is provided in good faith. We trust you won't misuse the API to damage IsThereAnyDeal, its users or its reputation.
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.
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 endpoints protected with api key, you can either add key as the query parameter
key, or asITAD-API-Keyheader˙. Refer to endpoint's Authorizations section.
For some endpoints you might need explicit approval for use. In such cases, contact us.
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
Access to API is rate limited. We implement a window-based throttling. By default, if your account has verified email, you can make 1000 requests in a 5 minute window. You will see your current limits and usage in the app setup page.
We are about to lower the limits for accounts without verified email, but for a transitional period the limits are kept the same. Even though for now the limits are the same, you will still get a warning in the app setup that you can increase your limits by verifying your email.
The limits are meant to give you some leeway and allow you to handle short bursts of higher activity. You should not be constantly maxing out your usage, implement proper caching.
If you get rate-limited, you will get a 429 Too Many Requests response with a Retry-After header.
If you need higher limits, reach out to us with your use case.
Limits may change in the future. Attempts to work around the limits will cause ban. Further limits and restrictions may be added if we detect misuse.
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 the sake of completeness.
You can find source files for this documentation over at GitHub. Feel free to help us improve it.
Webhooks provide a simpler wait to get data from IsThereAnyDeal, if you don't required full API access.
User can register a webhook in their settings and choose which events they wish to listen to. Once the event is triggered on IsThereAnyDeal, a request will be sent to registered webhook.
Each request will include ITAD-Hook-ID header with a unique ID of a registered webhook
and ITAD-Event-ID headers which identify the event.
Event you can use to test if the webhook is set up correctly. Can be triggered manually from settings.
| User-Agent required | string Value: "ITAD-Webhooks/1.0 (+https://isthereanydeal.com)" |
| Content-Type required | string Value: "application/json" |
| ITAD-Hook-ID required | string <uuid> ID of the Webhook |
| ITAD-Event required | string Event that generated the request Value: "ping" |
Ping even will always send "pong" string in a body
"pong"This event is trigger on new Waitlist notifications
Event's payload is a list of games and their deals that passed user's notification settings, similar to the Waitlist email notification you may receive.
| User-Agent required | string Value: "ITAD-Webhooks/1.0 (+https://isthereanydeal.com)" |
| Content-Type required | string Value: "application/json" |
| ITAD-Hook-ID required | string <uuid> ID of the Webhook |
| ITAD-Event required | string Event that generated the request Value: "notification-waitlist" |
| id required | string <uuid> |
| slug required | string |
| title required | string |
required | Game Type (string) or Game Type (null) (obj.game-type) |
| mature required | boolean |
required | Price (object) or Price (null) (obj.price-nullable) |
required | Price (object) or Price (null) (obj.price-nullable) |
required | Array of objects (Waitlist Notification Deal) |
Payload
[- {
- "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,
}
]
}
]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. Upon successful registration, the response will include webhook's ID that can be used to remove the webhook.
| url required | string <uri> |
| events required | Array of strings non-empty Items Value: "notification-waitlist" |
{- "events": [
- "notification-waitlist"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}Remove previously registered webhook
| id required | string <uuid> |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}{- "status_code": 0,
- "reason_phrase": "string"
}Endpoints for looking up things on IsThereAnyDeal.
Endpoints in /lookup/ namespace will follow this URL structure: /lookup/{lookup-what}/{by-what}/
Endpoints from other namespaces that are related to lookup in any way may also be included in this category.
Lookup IsThereAnyDeal's game IDs by title This is not a full fledged search. Some title preprocessing will happen, but the lookup will only return IDs for titles, that match precisely. Typos or variations in title may not give you expected result.
List of titles
[- "Baldurs Gate 3",
- "Half-Life 2",
- "Unknown game"
]{- "Baldurs Gate 3": "018d9584-24d6-7010-b82b-df1f0b154cc7",
- "Half-Life 2": "018d937f-012f-73b8-ab2c-898516969e6a",
- "Unknown game": null
}Lookup IsThereAnyDeal's game IDs by shop's game IDs
| shopId required | number |
List of shop's game IDs
[- "app/220"
]{- "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"
}Lookup shop's game IDs by IsThereAnyDeal game IDs
| shopId required | number |
List of game IDs
[- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]{- "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"
]
}Search for games by title
| title required | string Find games by name |
| results | number [ 1 .. 100 ] Default: 20 Maximum number of results to return |
Europa Universalis IV search
[- {
- "id": "018d937f-07fc-72ed-8517-d8e24cb1eb22",
- "slug": "europa-universalis-iv",
- "title": "Europa Universalis IV",
- "type": "game",
- "mature": false,
- "assets": {
}
}, - {
- "id": "018d937e-f083-72b5-bfdf-5459a8948636",
- "slug": "europa-universalis-iv-american-dream",
- "title": "Europa Universalis IV: American Dream",
- "type": "dlc",
- "mature": false,
- "assets": {
}
}, - {
- "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": {
}
}, - {
- "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": {
}
}, - {
- "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": {
}
}
]Lookup game based on title or Steam appid
| title | string Find game by it's name |
| appid | number Find game by Steam appid |
Game found
{- "found": true,
- "game": {
- "id": "018d937f-07fc-72ed-8517-d8e24cb1eb22",
- "slug": "europa-universalis-iv",
- "title": "Europa Universalis IV",
- "type": "game",
- "mature": false,
- "assets": {
}
}
}Search for games by title
| title required | string Find games by name |
| results | number [ 1 .. 100 ] Default: 20 Maximum number of results to return |
Europa Universalis IV search
[- {
- "id": "018d937f-07fc-72ed-8517-d8e24cb1eb22",
- "slug": "europa-universalis-iv",
- "title": "Europa Universalis IV",
- "type": "game",
- "mature": false,
- "assets": {
}
}, - {
- "id": "018d937e-f083-72b5-bfdf-5459a8948636",
- "slug": "europa-universalis-iv-american-dream",
- "title": "Europa Universalis IV: American Dream",
- "type": "dlc",
- "mature": false,
- "assets": {
}
}, - {
- "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": {
}
}, - {
- "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": {
}
}, - {
- "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": {
}
}
]Lookup game based on title or Steam appid
| title | string Find game by it's name |
| appid | number Find game by Steam appid |
Game found
{- "found": true,
- "game": {
- "id": "018d937f-07fc-72ed-8517-d8e24cb1eb22",
- "slug": "europa-universalis-iv",
- "title": "Europa Universalis IV",
- "type": "game",
- "mature": false,
- "assets": {
}
}
}Get basic game information
| id required | string <uuid> Game ID |
Europa Universalis IV info
{- "id": "018d937f-07fc-72ed-8517-d8e24cb1eb22",
- "slug": "europa-universalis-iv",
- "title": "Europa Universalis IV",
- "type": "game",
- "mature": false,
- "assets": {
}, - "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": 87,
- "source": "Metascore",
- "count": 31,
}, - {
- "score": 87,
- "source": "Metacritic User Score",
- "count": 1399,
}
], - "stats": {
- "rank": 529,
- "waitlisted": 3368,
- "collected": 18718
}, - "players": {
- "recent": 16763,
- "day": 16967,
- "week": 22451,
- "peak": 46940
},
}Get games' prices
| country | string = 2 characters Default: "US" Two letter country code (ISO 3166-1 alpha-2) |
| deals | boolean Only load deals, omit prices that have no price cut |
| 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 |
List of Game IDs for which to load prices
[- "01849783-6a26-7147-ab32-71804ca47e8e",
- "01849782-1017-7389-8de4-c97c587fd7e3"
]Successful response
[- {
- "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,
}
]
}
]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.
| 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 |
List of Game IDs
[- "01849783-6a26-7147-ab32-71804ca47e8e",
- "01849782-1017-7389-8de4-c97c587fd7e3"
]Successful response
{- "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,
}, - "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,
}, - {
- "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,
}, - "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,
}
], - "bundles": [
- {
- "id": 11631,
- "title": "Rimworld with all Expansions Bundle",
- "page": {
- "id": 8,
- "name": "Fanatical",
- "shopId": 6
}, - "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": {
}
}, - {
- "id": "018d937f-3e88-718b-b99d-9a45bb69be55",
- "slug": "rimworld-royalty",
- "title": "RimWorld - Royalty",
- "type": "dlc",
- "mature": false,
- "assets": {
}
}, - {
- "id": "018d937f-5256-73e1-bba6-66fd3f4d9cd7",
- "slug": "rimworld-ideology",
- "title": "RimWorld - Ideology",
- "type": "dlc",
- "mature": false,
- "assets": {
}
}, - {
- "id": "018d937f-65f0-70d3-83fe-71fac1505a13",
- "slug": "rimworld-biotech",
- "title": "RimWorld - Biotech",
- "type": "dlc",
- "mature": false,
- "assets": {
}
}
]
}
]
}
]
}Get historically lowest prices
| country | string = 2 characters Default: "US" Two letter country code (ISO 3166-1 alpha-2) |
List of Game IDs for which to load historical lows
[- "01849783-6a26-7147-ab32-71804ca47e8e",
- "01849782-1017-7389-8de4-c97c587fd7e3"
]Successful response
[- {
- "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"
}
}
]Get historically lowest prices for individual stores
| 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 |
List of Game IDs for which to load store lows
[- "01849783-6a26-7147-ab32-71804ca47e8e",
- "01849782-1017-7389-8de4-c97c587fd7e3"
]Successful response
[- {
- "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"
}
]
}
]Get log of historical prices
| 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. |
Successful response
[- {
- "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
}
}
]Get bundles
| country | string = 2 characters Default: "US" Two letter country code (ISO 3166-1 alpha-2) |
| offset | number >= 0 Default: 0 |
| limit | number [ 1 .. 50 ] Default: 20 |
| mature | boolean Default: false Include bundles marked as mature |
| expired | boolean Default: false Include expired bundles |
| sort | string Default: "-publish" Sort value, same as on website |
[- {
- "id": 11631,
- "title": "Rimworld with all Expansions Bundle",
- "page": {
- "id": 8,
- "name": "Fanatical",
- "shopId": 6
}, - "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": {
}
}, - {
- "id": "018d937f-3e88-718b-b99d-9a45bb69be55",
- "slug": "rimworld-royalty",
- "title": "RimWorld - Royalty",
- "type": "dlc",
- "mature": false,
- "assets": {
}
}, - {
- "id": "018d937f-5256-73e1-bba6-66fd3f4d9cd7",
- "slug": "rimworld-ideology",
- "title": "RimWorld - Ideology",
- "type": "dlc",
- "mature": false,
- "assets": {
}
}, - {
- "id": "018d937f-65f0-70d3-83fe-71fac1505a13",
- "slug": "rimworld-biotech",
- "title": "RimWorld - Biotech",
- "type": "dlc",
- "mature": false,
- "assets": {
}
}
]
}
]
}
]Get all bundles which contain the game
| 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 |
Successful response
[- {
- "id": 11631,
- "title": "Rimworld with all Expansions Bundle",
- "page": {
- "id": 8,
- "name": "Fanatical",
- "shopId": 6
}, - "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": {
}
}, - {
- "id": "018d937f-3e88-718b-b99d-9a45bb69be55",
- "slug": "rimworld-royalty",
- "title": "RimWorld - Royalty",
- "type": "dlc",
- "mature": false,
- "assets": {
}
}, - {
- "id": "018d937f-5256-73e1-bba6-66fd3f4d9cd7",
- "slug": "rimworld-ideology",
- "title": "RimWorld - Ideology",
- "type": "dlc",
- "mature": false,
- "assets": {
}
}, - {
- "id": "018d937f-65f0-70d3-83fe-71fac1505a13",
- "slug": "rimworld-biotech",
- "title": "RimWorld - Biotech",
- "type": "dlc",
- "mature": false,
- "assets": {
}
}
]
}
]
}
]Get current deals. Follows the 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. If you want to included non-sale prices, use nondeals parameter.
You can define parameters either in a query part of a URL, or you can sent them in a request body. Since the specification for GET requests with body is unclear, we also provide more standard POST endpoint as a fallback.
You can authorize with either api key, or OAuth. If you use OAuth, the user data filters will work, e.g. in Waitlist filter.
| 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:
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:
List of shop IDs separated by comma |
| filter | string Examples:
There are two ways how you can supply filters.
|
You can use either request body or query parameters, but not both at the same time.
If you use request body, you must include Content-Type: application/json header in your request.
| 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 Sorting values, same as in deals list on the website |
| nondeals | boolean Default: false Load non-sale prices |
| mature | boolean Default: false Load games marked as mature |
| shops | Array of numbers List of shop IDs |
object Deal Filters |
{- "country": "US",
- "offset": 0,
- "limit": 20,
- "sort": "string",
- "nondeals": false,
- "mature": false,
- "shops": [
- 0
], - "filter": {
- "price": {
- "min": { },
- "max": { }
}, - "regular": {
- "min": { },
- "max": { }
}, - "cut": {
- "min": 100,
- "max": 100
}, - "flag": "N",
- "hlprice": 0,
- "hlperc": 0,
- "drm": [
- 0
], - "platform": [
- 0
], - "type": [
- 0
], - "typeNot": null,
- "tradingCards": true,
- "achievements": true,
- "mature": true,
- "earlyAccess": true,
- "preOrder": true,
- "notPreOrder": true,
- "bundled": true,
- "wasBundled": true,
- "neverBundled": true,
- "inCollection": true,
- "notInCollection": true,
- "inWaitlist": true,
- "notInWaitlist": true,
- "userDlcs": true,
- "tags": [
- "string"
], - "tagsUnion": [
- "string"
], - "inSpotlight": true,
- "wasSpotlight": true,
- "inBundle": 0,
- "steamPerc": {
- "min": 100,
- "max": 100
}, - "steamCount": {
- "min": { },
- "max": { }
}, - "metaCritic": {
- "min": 100,
- "max": 100
}, - "metauser": {
- "min": 100,
- "max": 100
}, - "openCritic": {
- "min": 100,
- "max": 100
}, - "shops": [
- 0
], - "added": 0,
- "expiry": 0,
- "releaseDays": 0,
- "releaseYear": {
- "min": 100,
- "max": 100
}, - "releaseDate": {
- "min": "2019-08-24",
- "max": "2019-08-24"
}
}
}{- "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": {
}, - "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",
}
}, - {
- "id": "018d937e-e9ec-7103-97a0-732d4301eb72",
- "slug": "shift-quantum",
- "title": "Shift Quantum",
- "type": "game",
- "mature": false,
- "assets": {
}, - "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",
}
}, - {
- "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": {
}, - "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",
}
}
]
}Get current deals. Fallback method if you want to use request body to provide parameters and for whatever reason you can't use GET request. See GET request documentation for more details.
This endpoint does not support 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 Sorting values, same as in deals list on the website |
| nondeals | boolean Default: false Load non-sale prices |
| mature | boolean Default: false Load games marked as mature |
| shops | Array of numbers List of shop IDs |
object Deal Filters |
{- "country": "US",
- "offset": 0,
- "limit": 20,
- "sort": "string",
- "nondeals": false,
- "mature": false,
- "shops": [
- 0
], - "filter": {
- "price": {
- "min": { },
- "max": { }
}, - "regular": {
- "min": { },
- "max": { }
}, - "cut": {
- "min": 100,
- "max": 100
}, - "flag": "N",
- "hlprice": 0,
- "hlperc": 0,
- "drm": [
- 0
], - "platform": [
- 0
], - "type": [
- 0
], - "typeNot": null,
- "tradingCards": true,
- "achievements": true,
- "mature": true,
- "earlyAccess": true,
- "preOrder": true,
- "notPreOrder": true,
- "bundled": true,
- "wasBundled": true,
- "neverBundled": true,
- "inCollection": true,
- "notInCollection": true,
- "inWaitlist": true,
- "notInWaitlist": true,
- "userDlcs": true,
- "tags": [
- "string"
], - "tagsUnion": [
- "string"
], - "inSpotlight": true,
- "wasSpotlight": true,
- "inBundle": 0,
- "steamPerc": {
- "min": 100,
- "max": 100
}, - "steamCount": {
- "min": { },
- "max": { }
}, - "metaCritic": {
- "min": 100,
- "max": 100
}, - "metauser": {
- "min": 100,
- "max": 100
}, - "openCritic": {
- "min": 100,
- "max": 100
}, - "shops": [
- 0
], - "added": 0,
- "expiry": 0,
- "releaseDays": 0,
- "releaseYear": {
- "min": 100,
- "max": 100
}, - "releaseDate": {
- "min": "2019-08-24",
- "max": "2019-08-24"
}
}
}{- "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": {
}, - "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",
}
}, - {
- "id": "018d937e-e9ec-7103-97a0-732d4301eb72",
- "slug": "shift-quantum",
- "title": "Shift Quantum",
- "type": "game",
- "mature": false,
- "assets": {
}, - "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",
}
}, - {
- "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": {
}, - "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",
}
}
]
}Get list of subscriptions the game is listed in.
| country | string = 2 characters Default: "US" Two letter country code (ISO 3166-1 alpha-2) |
List of Game IDs
[- "01849783-6a26-7147-ab32-71804ca47e8e",
- "01849782-1017-7389-8de4-c97c587fd7e3"
]Successful response
[- {
- "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
}
]
}
]Successful response
[- {
- "id": "018d937e-e9e5-72fa-a1dc-e7e090b64d2f",
- "slug": "dwarven-skykeep",
- "title": "Dwarven Skykeep",
- "type": "game",
- "assets": {
}, - "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": {
}, - "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": {
}, - "mature": false,
- "added": "2019-01-13T02:41:06+01:00"
}
]Add games to user's Waitlist
List of Game IDs
[- "01849783-6a26-7147-ab32-71804ca47e8e",
- "01849782-1017-7389-8de4-c97c587fd7e3"
]{- "status_code": 0,
- "reason_phrase": "string"
}Delete games from user's Waitlist
List of Game IDs
[- "01849783-6a26-7147-ab32-71804ca47e8e",
- "01849782-1017-7389-8de4-c97c587fd7e3"
]{- "status_code": 0,
- "reason_phrase": "string"
}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
| 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 |
{- "count": 0,
- "price": {
- "currency": "str",
- "any": 0,
- "average": 0,
- "buckets": [
- {
- "bucket": 0,
- "count": 0,
- "percentile": 100
}
]
}, - "cut": {
- "average": 0,
- "buckets": [
- {
- "bucket": 0,
- "count": 0,
- "percentile": 100
}
]
}
}Get list of most Waitlisted games
| offset | integer >= 0 Default: 0 |
| limit | integer [ 1 .. 500 ] Default: 20 |
[- {
- "position": 1,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "slug": "string",
- "title": "string",
- "type": "game",
- "mature": true,
- "count": 0
}
]This event is trigger on new Waitlist notifications
Event's payload is a list of games and their deals that passed user's notification settings, similar to the Waitlist email notification you may receive.
| User-Agent required | string Value: "ITAD-Webhooks/1.0 (+https://isthereanydeal.com)" |
| Content-Type required | string Value: "application/json" |
| ITAD-Hook-ID required | string <uuid> ID of the Webhook |
| ITAD-Event required | string Event that generated the request Value: "notification-waitlist" |
| id required | string <uuid> |
| slug required | string |
| title required | string |
required | Game Type (string) or Game Type (null) (obj.game-type) |
| mature required | boolean |
required | Price (object) or Price (null) (obj.price-nullable) |
required | Price (object) or Price (null) (obj.price-nullable) |
required | Array of objects (Waitlist Notification Deal) |
Payload
[- {
- "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,
}
]
}
]Get details of Waitlist notification
| id required | string <uuid> Notification ID |
Successful response
{- "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,
}
]
}
]
}Successful response
[- {
- "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": {
}, - "mature": false,
- "group": 38437,
- "added": "2015-10-02T03:00:04+02:00"
}
]Add games to user's Collection
List of Game IDs
[- "01849783-6a26-7147-ab32-71804ca47e8e",
- "01849782-1017-7389-8de4-c97c587fd7e3"
]{- "status_code": 0,
- "reason_phrase": "string"
}Delete games from user's Collection
List of Game IDs
[- "01849783-6a26-7147-ab32-71804ca47e8e",
- "01849782-1017-7389-8de4-c97c587fd7e3"
]{- "status_code": 0,
- "reason_phrase": "string"
}Get all copies user has in their Collection. Copies are returned as a simple list.
It is not necessary to have copy for each game in Collection, so you should not rely on this endpoint if you need to know about all games in user's Collection.
Successful response
[- {
- "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"
}
]Add new copies. If the game is not already in a Collection, it will be added. Similarly, new tags will also be created.
Same copies may exist multiple times for a single game, ITAD does not check for duplicates.
This operation is atomic, either all copies are added or none.
Copies to add
| gameId required | string <uuid> |
| redeemed required | boolean |
number or null | |
object or null | |
string or null | |
Array of strings or null |
[- {
- "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"
]
}
]{- "status_code": 400,
- "reason_phrase": "Bad Request",
- "details": [
- 0,
- {
- "propety": "Missing data for 'property'"
}
]
}Update one or more copies.
You can issue partial updates on copy, only properties that are included for a copy will be updated.
This operation is atomic, either all copies are updated or none.
| id required | number |
| redeemed | boolean |
number or null | |
object or null | |
string or null | |
Array of strings or null |
[- {
- "id": 145742693,
- "shop": 61,
- "price": {
- "amount": 12.34,
- "currency": "USD"
}
}
]{- "status_code": 400,
- "reason_phrase": "Bad Request",
- "details": [
- 0,
- {
- "propety": "Missing data for 'property'"
}
]
}Delete Collection copies.
Copies that do not exist or don't belong to user will be silently ignored.
Operation is atomic. Either all copies are deleted or none.
List of copy IDs
[- 123,
- 124,
- 125
]{- "status_code": 0,
- "reason_phrase": "string"
}Collection category endpoints. Category and group may be used interchangably. Default category has ID 0.
Get all Collection categories, both the user created ones and default one. Default category has id 0 and will always be listed last. User set order of categories is respected in the response.
Successful response
[- {
- "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
}
]Create Collection category. Categories with same name may exist.
Successful response will return the created category.
Category to create
| title required | string |
| public required | boolean |
{- "title": "New Collection Category",
- "public": true
}{- "id": 5669,
- "title": "New Collection Category",
- "public": true
}Update one or more categories.
For each category that you are going to update, only id is required. Fields that you do not want to update may be
set to null or omitted fully. Categories that do not exist or user does not own will be ignored.
Default category (id: 0) may have only public property updated. Other properties will be ignored.
This operation is atomic, either all categories update or none. Successful response is the full category list, including categories that were not updated.
| id required | integer |
string or null | |
boolean or null | |
integer or null |
[- {
- "id": 123,
- "title": "Full update",
- "public": false,
- "position": "1\""
}, - {
- "id": 0,
- "public": false
}
]Successful response
[- {
- "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
}
]Delete Collection categories.
Default category or categories that do not exist or user does not own will be silently ignored.
List of category IDs
[- 123,
- 124,
- 125
]{- "status_code": 0,
- "reason_phrase": "string"
}Get list of most Collected games
| offset | integer >= 0 Default: 0 |
| limit | integer [ 1 .. 500 ] Default: 20 |
[- {
- "position": 1,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "slug": "string",
- "title": "string",
- "type": "game",
- "mature": true,
- "count": 0
}
]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
| 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 |
{- "count": 0,
- "price": {
- "currency": "str",
- "any": 0,
- "average": 0,
- "buckets": [
- {
- "bucket": 0,
- "count": 0,
- "percentile": 100
}
]
}, - "cut": {
- "average": 0,
- "buckets": [
- {
- "bucket": 0,
- "count": 0,
- "percentile": 100
}
]
}
}Get list of most Waitlisted games
| offset | integer >= 0 Default: 0 |
| limit | integer [ 1 .. 500 ] Default: 20 |
[- {
- "position": 1,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "slug": "string",
- "title": "string",
- "type": "game",
- "mature": true,
- "count": 0
}
]Get list of most Collected games
| offset | integer >= 0 Default: 0 |
| limit | integer [ 1 .. 500 ] Default: 20 |
[- {
- "position": 1,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "slug": "string",
- "title": "string",
- "type": "game",
- "mature": true,
- "count": 0
}
]Get list of most popular games. Popularity for each game is computed as Waitlisted count + Collected count.
| offset | integer >= 0 Default: 0 |
| limit | integer [ 1 .. 500 ] Default: 20 |
[- {
- "position": 1,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "slug": "string",
- "title": "string",
- "type": "game",
- "mature": true,
- "count": 0
}
]Add or edit game notes. This operation is atomic and idempotent.
List of notes
| gid required | string <uuid> Game ID |
| note required | string Non-empty string |
[- {
- "gid": "02be4353-7111-4f22-ba28-5d5c245d174c",
- "note": "string"
}
]{- "status_code": 0,
- "reason_phrase": "string"
}Delete game notes. This operation is atomic.
List of game IDs
[- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]{- "status_code": 0,
- "reason_phrase": "string"
}You can create a link between your app's users' accounts and ITAD, and use that link to sync games into Waitlist and Collection in the similar fashion as natively supported profiles on IsThereAnyDeal.
Profile is an object identifying remote account. You need linked profile to use sync endpoints.
After successful link you will get profile token, which is used in subsequent profile operations,
usually as an ITAD-Profile header.
Linking is idempotent, if you lose your token, or you need it in different instance of your app, you can link the same profile again.
Profile to link
| accountId required | string Per-app unique ID. This can be any string, but it needs to uniquely identify the account within your app. |
| accountName required | string Name of the account. Does not need to be unique, it's meant to be a human-friendly name. |
{- "accountId": "acc7896132977",
- "accountName": "My Account"
}{- "token": "string"
}Sync endpoints provide easier way to add or remove games from Waitlist and Collection.
Sync via API works in the same way as natively supported sync of remote profiles, but instead of ITAD pulling data, you will have to push data. Behavior of sync'd games is the same as for natively supported profiles.
It is useful when you can create a list of all games for user, and don't want to handle game identification, deduplication, additions and removals via regular API endpoints.
Sync Waitlist with IsThereAnyDeal. User can set category for your profile and default notification rules in their settings, same as with natively supported profiles.
| ITAD-Profile required | string Profile token |
Games to sync with IsThereAnyDeal
| shop required | number Shop ID |
| id required | string ID can be any string that will identify the game. It should be stable and not change in the future. ID can also used to identify the game, if you use same IDs that we use for tracking shops. If a game is not identified with shop and id, we will use title. For Steam we use full ids, i.e. app/{id}, sub/{id} or bundle/{id}. |
| title required | string Title of the game. |
[- {
- "shop": 61,
- "id": "my-waitlist-id-1",
- "title": "Creatures of Ava: Deluxe Edition"
}, - {
- "shop": 4,
- "id": "my-waitlist-id-3",
- "title": ">observer_"
}
]{- "total": 0,
- "added": 0,
- "removed": 0
}Sync Collection with IsThereAnyDeal. User can set category for your profile in their settings, same as with natively supported profiles.
Games are synced as redeemed copies. If there already is a redemeed copy with the same shop in user's Collection, new copy will not be added.
| ITAD-Profile required | string Profile token |
Games to sync with IsThereAnyDeal
| shop required | number Shop ID |
| id required | string ID can be any string that will identify the game. It should be stable and not change in the future. ID can also used to identify the game, if you use same IDs that we use for tracking shops. If a game is not identified with shop and id, we will use title. For Steam we use full ids, i.e. app/{id}, sub/{id} or bundle/{id}. |
| title required | string Title of the game. |
number or null Play time in minutes | |
string or null |
[- {
- "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_"
}
]{- "total": 0,
- "added": 0,
- "removed": 0
}Successful response
[- {
- "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"
}
]Get details of Waitlist notification
| id required | string <uuid> Notification ID |
Successful response
{- "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,
}
]
}
]
}Return active shops for specified country, with basic information about number of games and shop's last update.
| country | string = 2 characters Default: "US" Two letter country code (ISO 3166-1 alpha-2) |
[- {
- "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
}
]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.
[- {
- "id": 19,
- "title": "2game"
}, - {
- "id": 2,
- "title": "AllYouPlay"
}, - {
- "id": 3,
- "title": "Amazon"
}
]Endpoints that are not yet stable. They may be in development, experimental, or we are not sure about their current definition.
We are looking for a feedback for this endpoint. Please let us know whether you find this useful or not, or suggest changes. If we won't hear any feedback, we will assume this endpoint is useless and will be removed in the future.
Get list of currently recognized active games.
One of the biggest hurdles to communicate with the ITAD API is to get game IDs that are needed by our endpoints. Usually, you will get these IDs by doing a lookup or search when you are trying to get to specific game, or they will be a part of the response of other endpoints, e.g. Deals list.
With this endpoint we are experimenting with returning a list of all currently active games, which could be used to bootstrap your application.
However, this is not a load once and forget solution. Each game on IsThereAnyDeal has associated products, which are basically entries from shops that we cover. Think about "game" on ITAD as a container, that includes products and has some other associated information or metadata.
Once a game loses its products, it will become inactive. This can happen for example if the game is renamed. In such cases, new game entry will be created, and products will be reassigned to the new game. This can happen automatically by a system, or manually.
The automatic product to game assignment is not perfect, and sometimes needs to be fixed manually. This may happen because of various sitations, for example:
To make things even more complicated, the shop may change their product ID, or may use different product IDs for different regions, based on their internal structure. To get a better understanding of this, you can check any game on ITAD for its products. As an example, here's Red Dead Redemption 2.
The game IDs are ensured to be ascending. You can check for new entries by using your last known game ID to get only new entries. However, there may be a case, where an old inactive game becomes active again
We are looking for a feedback about this endpoint. You can currently use it to bootstrap your application, but it should not be relied upon for 100% coverage all the time. At the very least, if you end up relying on this map and omit doing lookups, you should check for new entries, and periodically (e.g. once a week) recheck the entire list.
There is a possiblity to return all known game entries, including the inactive ones, but this would include a lot of dead entries that will never be used again, like when a shop listed a game with typo and such.
The maximum number of games you will get is 10000. Use last parameter to get more entries.
This endpoint is supposed to be used in concert with Game Changes endpoint.
| last | string <uuid> Last known game ID, use to get newer entries |
[- {
- "id": "018d937f-0680-71f6-a2c0-30660ed59d79",
- "title": "Eternal Lore",
- "appid": 601790
}, - {
- "id": "018d937f-0681-7345-8d53-d0b6170cf842",
- "title": "Zooloretto",
- "appid": null
}
]We are looking for a feedback for this endpoint. Please let us know whether you find this useful or not, or suggest changes. If we won't hear any feedback, we will assume this endpoint is useless and will be removed in the future.
Get list of product assignment changes.
As explained in the Games List endpoint, game on IsThereAnyDeal is a container that has products assigned, and products may move between game entries.
This endpoint will return these products changes. The intention is that if you use Games List endpoint to get the game map, you will also use this endpoint in concert, and recheck games that had their products reassigned.
Number of entries returned is limited to 1000. You can use last parameter to get newer entries since your last known id,
or since parameter to get newer entries since supplied unix timestamp.
If none are used, you will get the newest 1000 entries.
This endpoint is supposed to be used in concert with Game List endpoint.
| last | number Last known change ID, use to get newer entries |
| since | integer Unix timestamp, to return newer entries than supplied timestamp |
[- {
- "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"
}
]Endpoints available for our own services. They are documented here for the sake of completeness.
List of appids
[- 0
]{- "appid1": true,
- "appid2": true
}