Games & Comics — entry 025 of 75
FreeToGame
FreeToGame's keyless JSON API lists free-to-play PC and browser titles with filters for platform, genre (MMORPG, shooter, battle royale, and more), and sort order, plus a single-game lookup that adds a full description and minimum system requirements. Live testing returned 400+ current titles, including 2026 releases, with no authentication or documented rate limit.
FreeToGame's keyless JSON API lists free-to-play PC and browser titles as bare top-level arrays — no envelope, no data wrapper. A live GET this run against /game?id=1 returned a genuine 1,871 B single-game object at HTTP 200, content-type: application/json.
GreatAPIs Score
Auth quickstart
- No API key, signup, or credit card required — the live GET above returned real game data with no auth header of any kind attached.
access-control-allow-origin: *was present on every response tested this run, so direct browser fetches work too.
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
Look up a single game by id
GEThttps://www.freetogame.com/api/game?id=1
{
"id": 1,
"title": "Dauntless",
"thumbnail": "https://www.freetogame.com/g/1/thumbnail.jpg",
"status": "Offline",
"short_description": "A free-to-play, co-op action RPG with gameplay similar to Monster Hunter.",
"game_url": "https://www.freetogame.com/open/dauntless",
"genre": "MMORPG",
"platform": "Windows",
"publisher": "Phoenix Labs",
"developer": "Phoenix Labs, Iron Galaxy",
"release_date": "2019-05-21",
"freetogame_profile_url": "https://www.freetogame.com/dauntless",
"minimum_system_requirements": {
"os": "Windows 7 DX11 Support",
"processor": "CPU: i5 SandyBridge",
"memory": "4GB",
"graphics": "GPU: nVidia 660Ti (DX11) or equivalent",
"storage": "15GB of storage space"
},
"screenshots": [
{ "id": 5, "image": "https://www.freetogame.com/g/1/dauntless-1.jpg" },
{ "id": 6, "image": "https://www.freetogame.com/g/1/dauntless-2.jpg" }
]
}status is confirmed live — id 1 (Dauntless) reads "status": "Offline" even though the entry is still listed and fully queryable; the list endpoint (/games) doesn't return a status field at all, only the single-game lookup does. minimum_system_requirements and screenshots are likewise only present on the single-game shape, not the list.
Try it
Developer reference
https://www.freetogame.com/api"Please avoid doing more than 10 requests per second" — per www.freetogame.com/api-doc.
- GET/games
- GET/games?platform={platform}
- GET/game?id={id}
- GET/filter?tag={tag}
Gotchas & limits
- The HTTP status and the in-body status disagree, and disagree in opposite directions on two different error paths. A live GET this run against
/games?platform=nosuchreturned real HTTP 404 with an 87 B body{"status":0,"status_message":"No platform found, please check the correct parameters."}— the body'sstatusis0, not404./game?id=999999→ the same real 404, 58 B,{"status":0,"status_message":"No game found with that id"}. Neither error body'sstatusfield can be used in place of the HTTP status. - An unrecognized route returns HTTP 200, not 404. A live GET this run against
/nosuchroutereturned real HTTP 200 with 50,057 B oftext/html;charset=UTF-8— the WordPress site's own page, not a JSON error. Code that checks onlyresponse.okbefore callingresponse.json()will get a parse error on what looks like a successful response. - List and single-game responses are bare top-level arrays/objects with no envelope —
/gamesreturns[{...}, {...}]directly (161,808 B confirmed live this run for?platform=pc&sort-by=popularity), not{"data": [...]}or{"games": [...]}. There is nothing to unwrap. sort-byis hyphenated in the query string (?sort-by=popularity), not camelCase or underscored — a client that guessessortByorsort_bysilently gets the default sort order back instead of an error.