TITLESCREEN

API

JSON over HTTPS, no key, CORS open, cached at the edge. Base: https://titlescreen.org/api/v1/. Please use the archive for bulk work rather than walking the API.

Empty means unknown: a field with no value is left out of the answer, never sent as null or zero.

Identify a copy

GET /api/v1/lookup?sha1=<hex>&size=<bytes>     the identity: SHA-1 + size of the canonical form
GET /api/v1/lookup?crc32=<hex>&size=<bytes>    a pre-check: a candidate, not a confirmation
GET /api/v1/lookup?fp1=<hex>                   the disc fingerprint: candidates
GET /api/v1/lookup?serial=SLUS-00594           by the publisher's serial
GET /api/v1/lookup?set=sf2                     an arcade set by name

The answer:

{
  "matches": [
    {
      "basis": "sha1",          // sha1, file (a list's whole-file hash), crc32, fp1, serial, set
      "status": "matched",      // dat, matched, scan-only, unverified, verified
      "dump": {"id": 123, "key": "snes/no-intro/Super Metroid (Japan, USA) (En,Ja)", "name": "...", "platform": "snes", ...},
      "releases": [{"id": "r...", "platform": "snes", "region": "JP", ...}, {"id": "r...", "region": "US", ...}],
      "work": {"id": "w...", "title": "Super Metroid"}
    }
  ],
  "identical_releases": true    // one copy, sold as each of the releases listed
}

How to compute the hashes: the canonical form and the disc fingerprint. Nothing about your file is sent but the hash you ask about.

Games, releases, companies

GET /api/v1/works/{w...}              a game and its releases, titles and links
GET /api/v1/releases/{r...}           a release with its identified copies, files and hashes
GET /api/v1/releases/{r...}/evidence  the statements its facts were resolved from
GET /api/v1/companies/{c...}
GET /api/v1/search?q=&platform=&page=
GET /api/v1/platforms
GET /api/v1/genres
GET /api/v1/meta                      the build's version and inputs

Ids are stable: a game, release or company id never changes meaning. Fields are only ever added within this version of the API.