Hexascore

Quickstart

Community scores for games, movies, TV series and books — 0 to 100, in six categories per item — over a read-only JSON API.

1. Create an API key

Open your API dashboard and create a key. It starts with hx_live_ and is shown only once — store it in an environment variable, never in client-side code:

shell
export HEXASCORE_API_KEY="hx_live_..."

The Free plan includes 100 requests in total — enough to build and test an integration.

2. Make your first request

The base URL is https://api.hexascore.com/v1. Every endpoint is a GET. Here are the five best-rated games:

cURL
curl "https://api.hexascore.com/v1/games?sort=-score&limit=5" \
  -H "Authorization: Bearer $HEXASCORE_API_KEY"
JavaScript (Node 18+, Bun, Deno)
const res = await fetch("https://api.hexascore.com/v1/games?sort=-score&limit=5", {
  headers: { Authorization: `Bearer ${process.env.HEXASCORE_API_KEY}` },
});
if (!res.ok) {
  const problem = await res.json(); // RFC 9457: { code, detail, request_id, ... }
  throw new Error(`${problem.code}: ${problem.detail}`);
}
const { data, next_cursor } = await res.json();
for (const game of data) console.log(game.score, game.title);
Python (requests)
import os
import requests

res = requests.get(
    "https://api.hexascore.com/v1/games",
    params={"sort": "-score", "limit": 5},
    headers={"Authorization": f"Bearer {os.environ['HEXASCORE_API_KEY']}"},
    timeout=10,
)
if not res.ok:
    problem = res.json()  # RFC 9457: code, detail, request_id
    raise RuntimeError(f"{problem['code']}: {problem['detail']}")
for game in res.json()["data"]:
    print(game["score"], game["title"])

3. Read the response

Lists return data plus a next_cursor for the next page. Field names are snake_case and dates are ISO 8601. score and categories are null until an item has 5 ratings.

200 OK
{
  "data": [
    {
      "id": "0190a1b2-0000-7000-8000-000000000001",
      "type": "game",
      "slug": "the-legend-of-zelda",
      "title": "The Legend of Zelda",
      "release_date": "1986-02-21",
      "year": 1986,
      "score": 90,
      "categories": { "gameplay": 92, "fun": 91, "sound": 88, "technical": 85, "visual": 89, "storytelling": 95 },
      "rating_count": 1234,
      "genres": ["Adventure"],
      "platforms": ["NES"],
      "cover_url": null,
      "url": "https://hexascore.com/games/the-legend-of-zelda"
    }
  ],
  "next_cursor": "eyJzIjoiLXNjb3JlIiwidiI6IjkwIi..."
}

Next steps

  • Fetch one item with GET /games/{id} for external ids, trailers and the licensed synopsis.
  • Map ids you already have with GET /lookup?source=imdb&id=tt0111161 (also steam, igdb, tmdb, isbn13, openlibrary, wikidata).
  • Handle errors and rate limits, then browse the API reference.

SDKs

Typed clients are generated from the OpenAPI document: TypeScript (@hexascore/sdk) and Python (hexascore). They are not on npm/PyPI yet — build them from sdks/ in the repository until the first release.

TypeScript SDK
import { createHexascoreClient, listGames } from "@hexascore/sdk";

const client = createHexascoreClient({ apiKey: process.env.HEXASCORE_API_KEY });
const { data, error } = await listGames({ client, query: { sort: "-score", limit: 5 } });
if (error) throw new Error(`${error.code}: ${error.detail}`);