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.