API reference
Games
Games libraries (2026-10-05): starting a game in the browser with the EmulatorJS the owner added to the server — Collectoh brings no emulator, BIOS or game — and the emulator’s status for the admin.
Paths are relative to /api/v1 on your server.
/games/{id}/media#The manual and the video kept with a game
Looked for around the game’s file where front-ends keep them: beside it named as it is, in manuals, videos or snaps folders, or in a media folder of those. A manual is a PDF or a comic archive; a video an MP4 or a WebM.
- Authorisation
- Bearer token or API key · Session cookie
| Parameter | In | Type | Description |
|---|---|---|---|
id required | path | string (uuid) |
- 200Success.
application/json·object - 401
UNAUTHENTICATED: no session, or the access token expired.application/json·ErrorEnvelope - 403
FORBIDDEN: the account lackslibrary:view, or the library, label, age or schedule scope refuses it.application/json·ErrorEnvelope - 404
NOT_FOUND: no such thing, or not one the caller may see.application/json·ErrorEnvelope
/games/{id}/media/{kind}#A game’s manual or video
The file itself, with Accept-Ranges.
- Authorisation
- Bearer token or API key · Session cookie
| Parameter | In | Type | Description |
|---|---|---|---|
id required | path | string (uuid) | |
kind required | path | "manual" | "video" |
- 200Success.
application/octet-stream· - 401
UNAUTHENTICATED: no session, or the access token expired.application/json·ErrorEnvelope - 403
FORBIDDEN: the account lackslibrary:view, or the library, label, age or schedule scope refuses it.application/json·ErrorEnvelope - 404
NOT_FOUND: no such thing, or not one the caller may see.NOT_FOUND: the game has nothing of that kind kept with itapplication/json·ErrorEnvelope
/games/{id}/player#The player page
An HTML page that loads the owner’s EmulatorJS from this server with the game, its platform’s core and its BIOS. Its Content-Security-Policy lets it reach this server and nothing else.
- Authorisation
- Bearer token or API key · Session cookie
| Parameter | In | Type | Description |
|---|---|---|---|
id required | path | string (uuid) | |
file | query | string (uuid) | |
state | query | string (uuid) |
- 200Success.
text/html· - 400
VALIDATION_FAILED: the request did not match the schema;details.issueslists what.application/json·ErrorEnvelope - 401
UNAUTHENTICATED: no session, or the access token expired.application/json·ErrorEnvelope - 403
FORBIDDEN: the account lackslibrary:view, or the library, label, age or schedule scope refuses it.application/json·ErrorEnvelope - 404
NOT_FOUND: no such thing, or not one the caller may see.application/json·ErrorEnvelope
/games/{id}/plays#Start a game
Checks the game plays in a browser on this server — its platform has an emulator core, the copy is not a PC program, and the owner has added EmulatorJS in Admin → Games — then records the play (History, Continue) and answers with the player page to open in a frame. fileId picks a copy (a region, a revision); the primary otherwise.
- Authorisation
- Bearer token or API key · Session cookie
- Body
application/json·object
| Parameter | In | Type | Description |
|---|---|---|---|
id required | path | string (uuid) |
- 201Success.
application/json·object - 400
VALIDATION_FAILED: the request did not match the schema;details.issueslists what.VALIDATION_FAILED: the platform does not play in a browser, or no emulator has been added to the serverapplication/json·ErrorEnvelope - 401
UNAUTHENTICATED: no session, or the access token expired.application/json·ErrorEnvelope - 403
FORBIDDEN: the account lackslibrary:view, or the library, label, age or schedule scope refuses it.application/json·ErrorEnvelope - 404
NOT_FOUND: no such thing, or not one the caller may see.NOT_FOUND: no game the caller can see has that id, or it has no such fileapplication/json·ErrorEnvelope
/games/{id}/rom/{fileId}/{name}#The game itself
The copy’s file, with Accept-Ranges; a disc set (a CUE and its BINs, a GDI and its tracks) as one stored zip, since the emulator is handed one file. name is the file’s name, which some cores read.
- Authorisation
- Bearer token or API key · Session cookie
| Parameter | In | Type | Description |
|---|---|---|---|
id required | path | string (uuid) | |
fileId required | path | string (uuid) | |
name required | path | string |
- 200Success.
application/octet-stream· - 401
UNAUTHENTICATED: no session, or the access token expired.application/json·ErrorEnvelope - 403
FORBIDDEN: the account lackslibrary:view, or the library, label, age or schedule scope refuses it.application/json·ErrorEnvelope - 404
NOT_FOUND: no such thing, or not one the caller may see.MEDIA_FILE_MISSING: the file, or a part its disc names, is not thereapplication/json·ErrorEnvelope
/games/{id}/saves#Your saves in a game
The caller’s own, newest first: the moments saved from the pause screen (state) and the game’s own saves (battery, one per copy). kind and file narrow them.
- Authorisation
- Bearer token or API key · Session cookie
| Parameter | In | Type | Description |
|---|---|---|---|
id required | path | string (uuid) | |
kind | query | "state" | "battery" | |
file | query | string (uuid) |
- 200Success.
application/json·object - 400
VALIDATION_FAILED: the request did not match the schema;details.issueslists what.application/json·ErrorEnvelope - 401
UNAUTHENTICATED: no session, or the access token expired.application/json·ErrorEnvelope - 403
FORBIDDEN: the account lackslibrary:view, or the library, label, age or schedule scope refuses it.application/json·ErrorEnvelope - 404
NOT_FOUND: no such thing, or not one the caller may see.application/json·ErrorEnvelope
/games/{id}/saves#Keep a save on the server
The body is the save’s bytes, as the emulator wrote them (64 MB at most). kind=state keeps a new moment — past thirty for one game, the oldest goes — and kind=battery writes over the copy’s last game save. file is the copy it was made in, core the emulator core that wrote it. A moment’s picture is sent after, to its own address.
- Authorisation
- Bearer token or API key · Session cookie
- Body
application/octet-stream·
| Parameter | In | Type | Description |
|---|---|---|---|
id required | path | string (uuid) | |
kind required | query | "state" | "battery" | |
file required | query | string (uuid) | |
core required | query | string |
- 201Success.
application/json·object - 400
VALIDATION_FAILED: the request did not match the schema;details.issueslists what.VALIDATION_FAILED: the body is emptyapplication/json·ErrorEnvelope - 401
UNAUTHENTICATED: no session, or the access token expired.application/json·ErrorEnvelope - 403
FORBIDDEN: the account lackslibrary:view, or the library, label, age or schedule scope refuses it.application/json·ErrorEnvelope - 404
NOT_FOUND: no such thing, or not one the caller may see.NOT_FOUND: no game the caller can see has that id, or it has no such fileapplication/json·ErrorEnvelope - 413
PAYLOAD_TOO_LARGE: the save is over 64 MBapplication/json·ErrorEnvelope
/games/{id}/status#Say where you are with a game
LaunchBox’s progress, the caller’s own: not started (unplayed, want, wont), under way (playing, continuous, paused) or done (beaten, completed, mastered, dropped); null says nothing again. A game’s first play makes it playing unless it is under way or done already. The item’s game include reads it back.
- Authorisation
- Bearer token or API key · Session cookie
- Body
application/json·object
| Parameter | In | Type | Description |
|---|---|---|---|
id required | path | string (uuid) |
- 204Done; no body.
- 400
VALIDATION_FAILED: the request did not match the schema;details.issueslists what.application/json·ErrorEnvelope - 401
UNAUTHENTICATED: no session, or the access token expired.application/json·ErrorEnvelope - 403
FORBIDDEN: the account lackslibrary:view, or the library, label, age or schedule scope refuses it.application/json·ErrorEnvelope - 404
NOT_FOUND: no such thing, or not one the caller may see.NOT_FOUND: no game the caller can see has that idapplication/json·ErrorEnvelope
/games/bios/{platform}#A platform’s BIOS
The BIOS file the platform’s core is given, the first of the names it looks for that the owner’s BIOS folder holds.
- Authorisation
- Bearer token or API key · Session cookie
| Parameter | In | Type | Description |
|---|---|---|---|
platform required | path | string |
- 200Success.
application/octet-stream· - 401
UNAUTHENTICATED: no session, or the access token expired.application/json·ErrorEnvelope - 403
FORBIDDEN: the account lackslibrary:view, or the library, label, age or schedule scope refuses it.application/json·ErrorEnvelope - 404
NOT_FOUND: no such thing, or not one the caller may see.application/json·ErrorEnvelope
/games/emulator/{dir}/{file}#The owner’s emulator, a folder down
- Authorisation
- Bearer token or API key · Session cookie
| Parameter | In | Type | Description |
|---|---|---|---|
dir required | path | string | |
file required | path | string |
- 200Success.
application/octet-stream· - 401
UNAUTHENTICATED: no session, or the access token expired.application/json·ErrorEnvelope - 403
FORBIDDEN: the account lackslibrary:view, or the library, label, age or schedule scope refuses it.application/json·ErrorEnvelope - 404
NOT_FOUND: no such thing, or not one the caller may see.application/json·ErrorEnvelope
/games/emulator/{dir}/{sub}/{file}#The owner’s emulator, two folders down
- Authorisation
- Bearer token or API key · Session cookie
| Parameter | In | Type | Description |
|---|---|---|---|
dir required | path | string | |
sub required | path | string | |
file required | path | string |
- 200Success.
application/octet-stream· - 401
UNAUTHENTICATED: no session, or the access token expired.application/json·ErrorEnvelope - 403
FORBIDDEN: the account lackslibrary:view, or the library, label, age or schedule scope refuses it.application/json·ErrorEnvelope - 404
NOT_FOUND: no such thing, or not one the caller may see.application/json·ErrorEnvelope
/games/emulator/{file}#The owner’s emulator
A file of the EmulatorJS the owner added, by its path in the folder (loader.js; cores/fceumm-wasm.data and cores/reports/fceumm.json by the two routes below): scripts, WebAssembly, cores, their words. Read-only; nothing outside the folder, and only the kinds of file the player loads.
- Authorisation
- Bearer token or API key · Session cookie
| Parameter | In | Type | Description |
|---|---|---|---|
file required | path | string |
- 200Success.
application/octet-stream· - 401
UNAUTHENTICATED: no session, or the access token expired.application/json·ErrorEnvelope - 403
FORBIDDEN: the account lackslibrary:view, or the library, label, age or schedule scope refuses it.application/json·ErrorEnvelope - 404
NOT_FOUND: no such thing, or not one the caller may see.application/json·ErrorEnvelope
/games/plays/{eventId}/end#A game was closed
How long it was played, as the app counted it, never more than the time since it started. Another person’s play, or one already ended, is left as it is.
- Authorisation
- Bearer token or API key · Session cookie
- Body
application/json·object
| Parameter | In | Type | Description |
|---|---|---|---|
eventId required | path | string (uuid) |
- 204Done; no body.
- 400
VALIDATION_FAILED: the request did not match the schema;details.issueslists what.application/json·ErrorEnvelope - 401
UNAUTHENTICATED: no session, or the access token expired.application/json·ErrorEnvelope - 403
FORBIDDEN: the account lackslibrary:view, or the library, label, age or schedule scope refuses it.application/json·ErrorEnvelope - 404
NOT_FOUND: no such thing, or not one the caller may see.application/json·ErrorEnvelope
/games/saves/{saveId}#A save’s bytes
For the player to load; only the caller’s own.
- Authorisation
- Bearer token or API key · Session cookie
| Parameter | In | Type | Description |
|---|---|---|---|
saveId required | path | string (uuid) |
- 200Success.
application/octet-stream· - 401
UNAUTHENTICATED: no session, or the access token expired.application/json·ErrorEnvelope - 403
FORBIDDEN: the account lackslibrary:view, or the library, label, age or schedule scope refuses it.application/json·ErrorEnvelope - 404
NOT_FOUND: no such thing, or not one the caller may see.NOT_FOUND: the caller has no save with that idapplication/json·ErrorEnvelope
/games/saves/{saveId}#Delete a save
- Authorisation
- Bearer token or API key · Session cookie
| Parameter | In | Type | Description |
|---|---|---|---|
saveId required | path | string (uuid) |
- 204Done; no body.
- 401
UNAUTHENTICATED: no session, or the access token expired.application/json·ErrorEnvelope - 403
FORBIDDEN: the account lackslibrary:view, or the library, label, age or schedule scope refuses it.application/json·ErrorEnvelope - 404
NOT_FOUND: no such thing, or not one the caller may see.NOT_FOUND: the caller has no save with that idapplication/json·ErrorEnvelope
/games/saves/{saveId}/picture#The picture of a saved moment
- Authorisation
- Bearer token or API key · Session cookie
| Parameter | In | Type | Description |
|---|---|---|---|
saveId required | path | string (uuid) |
- 200Success.
application/octet-stream· - 401
UNAUTHENTICATED: no session, or the access token expired.application/json·ErrorEnvelope - 403
FORBIDDEN: the account lackslibrary:view, or the library, label, age or schedule scope refuses it.application/json·ErrorEnvelope - 404
NOT_FOUND: no such thing, or not one the caller may see.NOT_FOUND: no such save of the caller’s, or it has no pictureapplication/json·ErrorEnvelope
/games/saves/{saveId}/picture#A picture of a saved moment
A PNG, JPEG or WebP, 4 MB at most, of the screen as the moment was saved.
- Authorisation
- Bearer token or API key · Session cookie
- Body
image/jpeg·
| Parameter | In | Type | Description |
|---|---|---|---|
saveId required | path | string (uuid) |
- 204Done; no body.
- 400
VALIDATION_FAILED: the request did not match the schema;details.issueslists what.VALIDATION_FAILED: it is not a moment, or the body is not a pictureapplication/json·ErrorEnvelope - 401
UNAUTHENTICATED: no session, or the access token expired.application/json·ErrorEnvelope - 403
FORBIDDEN: the account lackslibrary:view, or the library, label, age or schedule scope refuses it.application/json·ErrorEnvelope - 404
NOT_FOUND: no such thing, or not one the caller may see.NOT_FOUND: the caller has no save with that idapplication/json·ErrorEnvelope
/games/status#The emulator and BIOS folders
Whether EmulatorJS is in the folder the owner named, which cores it has, and for each platform whether it plays in a browser here and which BIOS it would be given.
- Authorisation
- Bearer token or API key · Session cookie
- 200Success.
application/json·object - 401
UNAUTHENTICATED: no session, or the access token expired.application/json·ErrorEnvelope - 403
FORBIDDEN: the account lackssettings:manage, or the library, label, age or schedule scope refuses it.application/json·ErrorEnvelope
No endpoint here matches. Try another word, or look in another area.