GameKoala API

A free, read-only JSON API for game listings, search, categories, and full game details. No API key. CORS enabled for browser apps.

v1 JSON 300 req/min 45 burst/10s

Base URL: http://games.justmrkoalaai.nl/api/v1

Quick start

curl "http://games.justmrkoalaai.nl/api/v1/games?page=1"
fetch("http://games.justmrkoalaai.nl/api/v1/games/search?q=elden")
  .then((res) => res.json())
  .then((body) => console.log(body.data.games));

Response format

Successful responses use a consistent envelope:

{
  "ok": true,
  "data": { ... },
  "meta": {
    "version": "1.0",
    "cached": true,
    "page": 1
  }
}

Errors return ok: false with an error object:

{
  "ok": false,
  "error": {
    "code": "MISSING_QUERY",
    "message": "Query parameter q is required."
  }
}

Endpoints

GET /api/v1/

API metadata, rate limits, and endpoint discovery.

curl "http://games.justmrkoalaai.nl/api/v1/"
GET /api/v1/games

Latest games, paginated.

Parameter Type Description
page integer Page number, starting at 1. Default: 1.
curl "http://games.justmrkoalaai.nl/api/v1/games?page=2"
GET /api/v1/games/search

Search games by title.

Parameter Type Description
q string Search query, minimum 2 characters. Required.
curl "http://games.justmrkoalaai.nl/api/v1/games/search?q=witchspire"
GET /api/v1/games/{slug}

Full game details including description, specs, Steam data, and download links.

curl "http://games.justmrkoalaai.nl/api/v1/games/witchspire-free-download"
GET /api/v1/categories

List all available categories.

curl "http://games.justmrkoalaai.nl/api/v1/categories"
GET /api/v1/categories/{slug}/games

Games within a category, paginated.

Parameter Type Description
page integer Page number, starting at 1. Default: 1.
curl "http://games.justmrkoalaai.nl/api/v1/categories/action/games?page=2"

Data objects

Game summary

Returned in listing, search, and category responses under data.games:

{
  "title": "Witchspire",
  "slug": "witchspire-free-download",
  "url": "https://steamrip.com/witchspire-free-download/",
  "image": "https://...",
  "banner": "https://...",
  "portrait": "https://...",
  "category": "Adventure",
  "build": "Build 23809611"
}

Game detail

Returned under data.game. Includes all summary fields plus:

Rate limits and caching

Limits use two tiers so normal apps can burst when loading a page, while sustained scraping stays in check.

Tier Limit Purpose
Burst 45 requests / 10 seconds Short spikes, such as loading a grid with parallel detail fetches.
Sustained 300 requests / 60 seconds Overall usage per IP across a minute of browsing.

Error codes

Code HTTP Meaning
MISSING_QUERY 400 Search called without q parameter.
INVALID_QUERY 400 Search query too short.
INVALID_PAGE 400 Page number less than 1.
RATE_LIMITED 429 Burst or sustained limit exceeded. Check response headers for which tier reset first.
UPSTREAM_ERROR 502 Could not fetch data from the source site.