Zorse Game Catalog API

A public, read-only catalog generated from the same game content as this website. No account, API key, or SDK is required.

When to use the catalog

Use the catalog to find Zorse games, compare their descriptions and supported platforms, or get their store download links. Follow each game's url for more detail, and read News for announcements and release updates.

The API provides published game information only. It cannot look up player progress or perform gameplay, account, or purchase actions. It always returns the complete catalog: query parameters are ignored, so filter the returned games locally.

Make a request

GET /api/v1/games returns the game catalog as JSON. GET /api/v1 returns a JSON index with the version's support status, endpoints, documentation, and OpenAPI schema.

curl --fail https://zorse.io/api/v1/games

Or use the built-in fetch function in Node.js:

const response = await fetch('https://zorse.io/api/v1/games');
if (!response.ok) throw new Error(`Catalog request failed: ${response.status}`);
const catalog = await response.json();
console.log(catalog.games.map(game => game.name));

Both endpoints support GET and HEAD. No parameters are needed.

Versioning and deprecation policy

API contracts are versioned by major version in the URL. Version 1 is supported and has no retirement scheduled. Integrations should use /api/v1/games; there is no unversioned or latest alias.

Backward-compatible additions, such as optional fields or new endpoints, may be released within v1. Clients should ignore unknown response fields. Catalog entries, descriptions, platform availability, and store links may change without a new API version.

Removing or renaming fields, changing field types, adding required request parameters, or changing established behavior requires a new major version, such as /api/v2. Existing versioned URLs keep their contract and never redirect to a new major version.

Before retiring a supported version, we provide at least 90 days' notice on this page, a migration guide, and a working replacement throughout that notice period. Old and new versions remain available together during migration.

Deprecation is signaled on affected responses with the Deprecation header and a Link header with rel="deprecation" pointing to the migration documentation. Once retirement is scheduled, the Sunset header gives the retirement date. Version 1 currently sends neither Deprecation nor Sunset.

Find iPhone and Android games

After fetching the catalog above, filter its games array by platform. The catalog uses iOS for iPhone and iPad, and Android for Android phones and tablets. Availability varies by game.

const iPhoneGames = catalog.games.filter(game =>
  game.platforms.includes('iOS'));
const androidGames = catalog.games.filter(game =>
  game.platforms.includes('Android'));

console.log({
  iPhone: iPhoneGames.map(game => game.name),
  Android: androidGames.map(game => game.name)
});

Get official store links

Use each game's App Store and Google Play entries to get its download links, including the API campaign parameters. A missing store is returned as null in this example.

console.log(catalog.games.map(game => ({
  name: game.name,
  appStore: game.stores.find(store => store.name === 'App Store')?.url ?? null,
  googlePlay: game.stores.find(store => store.name === 'Google Play')?.url ?? null
})));

Response fields

The response contains schemaVersion: 1 and a games array in website catalog order. Each game includes:

  • id, name, and description: the game slug, name, and description.
  • url and icon: absolute URLs for the game page and app icon.
  • platforms and genres: arrays of supported platforms and game genres.
  • stores: download links with a store name and url. Google Play URLs include utm_source=zorse_api and utm_campaign=game_catalog. App Store URLs include pt=121532493, ct=zorse_api_game_catalog, and mt=8. These parameters identify API referrals in each store's reports.

Read the Zorse OpenAPI schema for the complete field types, or use the site index to find game pages and release news.

The standard API discovery catalog links this endpoint to its documentation and schema using RFC 9727.

Errors and supported methods

Successful API reads return HTTP 200 with application/json. Unknown /api/... endpoints return HTTP 404 with application/problem+json and Cache-Control: no-store. A HEAD request returns the same status and headers without a body.

These errors use RFC 9457 problem details: type identifies the problem, title and detail explain it, status matches the HTTP status, and instance is the requested path without its query string. The existing error and links fields remain available for compatibility and recovery.

{
  "type": "about:blank",
  "title": "Not Found",
  "status": 404,
  "detail": "Unknown API endpoint.",
  "instance": "/api/v1/missing",
  "error": {
    "code": "not_found",
    "message": "Unknown API endpoint.",
    "status": 404
  },
  "links": {
    "documentation": "https://zorse.io/api",
    "games": "https://zorse.io/api/v1/games",
    "openapi": "https://zorse.io/openapi.json"
  }
}

Unsupported methods, such as POST, currently return HTTP 403 with an HTML response from the delivery layer. Storage or delivery errors for known API files can also return HTML.

Check the status and content type before parsing an error response as JSON. A method rejection does not mean an API key or login is required.

For questions or feedback about the catalog, contact Zorse.