Endpoints
All paths are relative to /api/. Read endpoints are what a mod browser needs; write endpoints are gated by your key's scopes.
Games
| Method | Path | Scope | Notes |
|---|---|---|---|
| GET | mod-games/ | game:read | Games visible to your key. Scoped key = just your game(s). |
| GET | mod-games/{game_id}/ | game:read | One game. 403 if out of scope. |
| GET | mod-games/{game_id}/mods/ | game:read + mod:read | Paginated mods in one game. Same filters and sort as GET mods/. 403 if out of scope. |
Categories
| Method | Path | Scope | Notes |
|---|---|---|---|
| GET | mod-categories/ | mod_category:read | Category tree. |
| GET | mod-categories/flattened/ | mod_category:read | Flat list (easy dropdown). |
| GET | mod-categories/{category_id}/ | mod_category:read | One category. |
| GET | mod-categories/{category_id}/mods/ | mod_category:read + mod:read | Paginated mods in one category. Same filters and sort as GET mods/. |
Mods
| Method | Path | Scope | Notes |
|---|---|---|---|
| GET | mods/ | mod:read | Paginated list. Filters below. |
| GET | mods/{mod_id}/ | mod:read | One mod, verbose. 403 if out of scope. |
| GET | mods/{mod_id}/updates/ | mod:read | Paginated changelog/update posts. |
| GET | mods/{mod_id}/reviews/ | mod_rating:read | Paginated reviews. |
| GET | mods/{mod_id}/versions/ | mod:read | All versions (versioned mods only). |
List filters (query string on GET mods/, GET mod-games/{game_id}/mods/ and GET mod-categories/{category_id}/mods/):
page(int)prefix_id(int)type(free|paid)creator_id(int) - mods by one authormod_ids(int list, max 100) - only these mods, asmod_ids=1,2,3ormod_ids[]=1&mod_ids[]=2. All matches come back in one page. Mods your key cannot see are left out, not reported as errors.order(last_update|mod_date|rating_weighted|download_count|title)direction(asc|desc)
GET mods/ has no game_id filter: a game-scoped key is narrowed to its game(s) server-side. An unrestricted key that wants one game's mods uses GET mod-games/{game_id}/mods/.
Versions & downloads
| Method | Path | Scope | Notes |
|---|---|---|---|
| GET | mod-versions/{version_id}/ | mod:read | One version. |
| GET | mod-versions/{version_id}/download?file={attachment_id} | mod:read | Local file: streams it. External: 302 redirect to the external URL. |
How download info appears on a version result:
- External mod -
download_url(string) + optionaldownload_urls(string[] mirrors). Point the user at those. - Local (hosted) mod -
files[], each{ id, filename, size, download_url }. Thatdownload_urlis the API download endpoint - call it with your key to stream the bytes.
Do not cache or hand out a raw storage URL. Always fetch through mod-versions/{id}/download with your key so access stays revocable. See Acceptable Use.
Updates / Reviews / Comments
| Method | Path | Scope |
|---|---|---|
| GET | mod-updates/ , mod-updates/{id}/ | mod:read |
| GET | mod-reviews/ , mod-reviews/{id}/ | mod_rating:read |
| GET | mod-comments/ , mod-comments/{id}/ | mod:read |
Write endpoints (optional)
Only usable if your key has write scopes. Developer keys are read-only (mod:read + game:read) by default; write access is a manual upgrade.
POST mods/- create a mod (requiresgame_idin body; must be your game or 403).POST mods/{mod_id}/- edit.DELETE mods/{mod_id}/- delete (soft by default).POST mod-versions/- publish a new version of a mod.