From 520cac386dfe20a967f57cc5e47d693868ad58f0 Mon Sep 17 00:00:00 2001 From: Chew Date: Tue, 3 Feb 2026 20:59:35 -0600 Subject: [PATCH 1/8] initial openapi spec integration --- docs/.vitepress/theme/index.ts | 10 + docs/v2/achievements.md | 6 + docs/v2/profile.md | 84 ++ docs/v2/retroachievements.json | 2053 ++++++++++++++++++++++++++++++++ docs/v2/systems.md | 6 + package.json | 2 + pnpm-lock.yaml | 204 ++++ 7 files changed, 2365 insertions(+) create mode 100644 docs/v2/achievements.md create mode 100644 docs/v2/profile.md create mode 100644 docs/v2/retroachievements.json create mode 100644 docs/v2/systems.md diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts index c86b19c..71b8aed 100644 --- a/docs/.vitepress/theme/index.ts +++ b/docs/.vitepress/theme/index.ts @@ -3,10 +3,20 @@ import "./styles.css"; import DefaultTheme from "vitepress/theme"; import type { Theme } from "vitepress"; import ConditionalCopyButtons from "./ConditionalCopyButtons.vue"; +import { theme, useOpenapi } from "vitepress-openapi/client"; +import "vitepress-openapi/dist/style.css"; + +import spec from "../../v2/retroachievements.json" with { type: "json" }; export default { extends: DefaultTheme, enhanceApp({ app }) { + useOpenapi({ + spec, + }); + + theme.enhanceApp({ app }); + app.component("CopyOrDownloadAsMarkdownButtons", ConditionalCopyButtons); }, } satisfies Theme; diff --git a/docs/v2/achievements.md b/docs/v2/achievements.md new file mode 100644 index 0000000..7d840ef --- /dev/null +++ b/docs/v2/achievements.md @@ -0,0 +1,6 @@ + + + diff --git a/docs/v2/profile.md b/docs/v2/profile.md new file mode 100644 index 0000000..351234f --- /dev/null +++ b/docs/v2/profile.md @@ -0,0 +1,84 @@ + + +# User Profile + +A call to this endpoint will retrieve user profile information, such as their ID, motto, most recent game ID, avatar, and points. + +[[toc]] + +## On-site Representation + +This information can be found near the top of [any user page](https://retroachievements.org/user/MaxMilyin): + +![User Profile](/user-profile.png) + +## HTTP Request + +https://retroachievements.org/api/v2/profile/MaxMilyin + +### Parameters + +You must query the user by either their username or their ULID. +Please note the username is not considered a stable value. As of 2025, users can change their usernames. Initially querying by username is a good way to fetch a ULID. + +| Name | Required? | Description | +| :--- | :-------- | :--------------------------- | +| `u` | Yes | The target username or ULID. | + +## Response + +::: code-group + +```json [HTTP Response] +{ + "User": "MaxMilyin", + "ULID": "00003EMFWR7XB8SDPEHB3K56ZQ", + "UserPic": "/UserPic/MaxMilyin.png", + "MemberSince": "2016-01-02 00:43:04", + "RichPresenceMsg": "Playing ~Hack~ 11th Annual Vanilla Level Design Contest, The", + "LastGameID": 19504, + "ContribCount": 0, + "ContribYield": 0, + "TotalPoints": 399597, + "TotalSoftcorePoints": 0, + "TotalTruePoints": 1599212, + "Permissions": 1, + "Untracked": 0, + "ID": 16446, + "UserWallActive": true, + "Motto": "Join me on Twitch! GameSquadSquad for live RA" +} +``` + +```json [NodeJS] +{ + "user": "MaxMilyin", + "ulid": "00003EMFWR7XB8SDPEHB3K56ZQ", + "userPic": "/UserPic/MaxMilyin.png", + "memberSince": "2016-01-02 00:43:04", + "richPresenceMsg": "Playing ~Hack~ 11th Annual Vanilla Level Design Contest, The", + "lastGameId": 19504, + "contribCount": 0, + "contribYield": 0, + "totalPoints": 399597, + "totalSoftcorePoints": 0, + "totalTruePoints": 1599212, + "permissions": 1, + "untracked": false, + "id": 16446, + "userWallActive": true, + "motto": "Join me on Twitch! GameSquadSquad for live RA" +} +``` + +::: + +## Source + +| Repo | URL | +| :--------- | :------------------------------------------------------------------------------------------------------------------- | +| RAWeb | https://github.com/RetroAchievements/RAWeb/blob/master/public/API/API_GetUserProfile.php | +| api-js | https://github.com/RetroAchievements/api-js/blob/main/src/user/getUserProfile.ts | +| api-kotlin | https://github.com/RetroAchievements/api-kotlin/blob/main/src/main/kotlin/org/retroachivements/api/RetroInterface.kt | diff --git a/docs/v2/retroachievements.json b/docs/v2/retroachievements.json new file mode 100644 index 0000000..ef27eee --- /dev/null +++ b/docs/v2/retroachievements.json @@ -0,0 +1,2053 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "RetroAchievements", + "description": "JSON:API built using Laravel", + "version": "2.0" + }, + "servers": [ + { + "url": "https://api.retroachievements.org/v2", + "description": "Primary server" + } + ], + "paths": { + "/achievements": { + "get": { + "tags": ["Achievements"], + "summary": "Get all achievements", + "description": "", + "operationId": "achievements.index", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "page[number]", + "in": "query", + "description": "The page number for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "sort", + "in": "query", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "id", + "-id", + "title", + "-title", + "points", + "-points", + "pointsWeighted", + "-pointsWeighted", + "type", + "-type", + "orderColumn", + "-orderColumn", + "unlocksTotal", + "-unlocksTotal", + "unlocksHardcore", + "-unlocksHardcore", + "unlockPercentage", + "-unlockPercentage", + "unlockHardcorePercentage", + "-unlockHardcorePercentage" + ], + "type": "string" + } + } + }, + { + "name": "filter[id]", + "in": "query", + "description": "A list of ids to filter by.", + "required": false, + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "default": [], + "type": "array", + "items": { + "type": "string" + } + }, + "examples": { + "empty": { + "value": [] + }, + "1": { + "value": ["1"] + }, + "2": { + "value": ["2"] + }, + "3": { + "value": ["3"] + } + } + }, + { + "name": "filter[state]", + "in": "query", + "description": "Applies the state scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "filter[gameId]", + "in": "query", + "description": "Applies the gameId scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "filter[type]", + "in": "query", + "description": "A list of types to filter by.", + "required": false, + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "default": { + "value": [] + }, + "type": "array", + "items": { + "type": "string" + } + }, + "examples": { + "progression": { + "value": "progression" + }, + "missable": { + "value": "missable" + } + } + } + ], + "responses": { + "200": { + "description": "Index achievements", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.achievements.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/achievements/{achievement}": { + "get": { + "tags": ["Achievements"], + "summary": "Show one achievement", + "description": "", + "operationId": "achievements.show", + "parameters": [ + { + "name": "achievement", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show achievements", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "$ref": "#/components/schemas/resources.achievements.resource.fetch" + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/achievement-sets/{achievement_set}": { + "get": { + "tags": ["Achievement-sets"], + "summary": "Show one achievement-set", + "description": "", + "operationId": "achievement-sets.show", + "parameters": [ + { + "name": "achievement_set", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show achievement-sets", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "$ref": "#/components/schemas/resources.achievement-sets.resource.fetch" + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/games": { + "get": { + "tags": ["Games"], + "summary": "Get all games", + "description": "", + "operationId": "games.index", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "page[number]", + "in": "query", + "description": "The page number for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "sort", + "in": "query", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "id", + "-id", + "title", + "-title", + "sortTitle", + "-sortTitle", + "releasedAt", + "-releasedAt", + "playersTotal", + "-playersTotal", + "playersHardcore", + "-playersHardcore", + "achievementsPublished", + "-achievementsPublished", + "pointsTotal", + "-pointsTotal", + "pointsWeighted", + "-pointsWeighted" + ], + "type": "string" + } + } + }, + { + "name": "filter[id]", + "in": "query", + "description": "A list of ids to filter by.", + "required": false, + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "default": [], + "type": "array", + "items": { + "type": "string" + } + }, + "examples": { + "empty": { + "value": [] + }, + "1": { + "value": ["1"] + }, + "2": { + "value": ["2"] + }, + "3": { + "value": ["3"] + } + } + }, + { + "name": "filter[systemId]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": "", + "type": "string" + }, + "examples": { + "1": { + "value": 1 + } + } + } + ], + "responses": { + "200": { + "description": "Index games", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.games.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/games/{game}": { + "get": { + "tags": ["Games"], + "summary": "Show one game", + "description": "", + "operationId": "games.show", + "parameters": [ + { + "name": "game", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show games", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "$ref": "#/components/schemas/resources.games.resource.fetch" + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/leaderboards": { + "get": { + "tags": ["Leaderboards"], + "summary": "Get all leaderboards", + "description": "", + "operationId": "leaderboards.index", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "page[number]", + "in": "query", + "description": "The page number for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "sort", + "in": "query", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "id", + "-id", + "title", + "-title", + "orderColumn", + "-orderColumn", + "createdAt", + "-createdAt", + "updatedAt", + "-updatedAt" + ], + "type": "string" + } + } + }, + { + "name": "filter[id]", + "in": "query", + "description": "A list of ids to filter by.", + "required": false, + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "default": [], + "type": "array", + "items": { + "type": "string" + } + }, + "examples": { + "empty": { + "value": [] + }, + "1": { + "value": ["1"] + }, + "2": { + "value": ["2"] + }, + "3": { + "value": ["3"] + } + } + }, + { + "name": "filter[gameId]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": "", + "type": "string" + }, + "examples": { + "1": { + "value": 1 + } + } + }, + { + "name": "filter[state]", + "in": "query", + "description": "Applies the state scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Index leaderboards", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.leaderboards.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/leaderboards/{leaderboard}": { + "get": { + "tags": ["Leaderboards"], + "summary": "Show one leaderboard", + "description": "", + "operationId": "leaderboards.show", + "parameters": [ + { + "name": "leaderboard", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show leaderboards", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "$ref": "#/components/schemas/resources.leaderboards.resource.fetch" + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/systems": { + "get": { + "tags": ["Systems"], + "summary": "Get All Systems", + "description": "Views a list of all systems on the site", + "operationId": "systems.index", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "page[number]", + "in": "query", + "description": "The page number for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "sort", + "in": "query", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "id", + "-id", + "name", + "-name", + "nameFull", + "-nameFull", + "nameShort", + "-nameShort" + ], + "type": "string" + } + } + }, + { + "name": "filter[id]", + "in": "query", + "description": "A list of ids to filter by.", + "required": false, + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "default": [], + "type": "array", + "items": { + "type": "string" + } + }, + "examples": { + "empty": { + "value": [] + }, + "1": { + "value": ["1"] + }, + "2": { + "value": ["2"] + }, + "3": { + "value": ["3"] + } + } + }, + { + "name": "filter[active]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": "", + "type": "string" + }, + "examples": { + "1": { + "value": true + } + } + } + ], + "responses": { + "200": { + "description": "Index systems", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.systems.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/systems/{system}": { + "get": { + "tags": ["Systems"], + "summary": "Show one system", + "description": "", + "operationId": "systems.show", + "parameters": [ + { + "name": "system", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show systems", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "$ref": "#/components/schemas/resources.systems.resource.fetch" + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/users": { + "get": { + "tags": ["Users"], + "summary": "Get all users", + "description": "", + "operationId": "users.index", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "page[number]", + "in": "query", + "description": "The page number for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "sort", + "in": "query", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "id", + "-id", + "points", + "-points", + "pointsHardcore", + "-pointsHardcore", + "pointsWeighted", + "-pointsWeighted", + "yieldUnlocks", + "-yieldUnlocks", + "yieldPoints", + "-yieldPoints", + "joinedAt", + "-joinedAt", + "lastActivityAt", + "-lastActivityAt" + ], + "type": "string" + } + } + }, + { + "name": "filter[role]", + "in": "query", + "description": "Applies the role scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Index users", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.users.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/users/{user}": { + "get": { + "tags": ["Users"], + "summary": "Show one user", + "description": "", + "operationId": "users.show", + "parameters": [ + { + "name": "user", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "01K4Y87MWZ3Q9WC9EFFT6JKSNP": { + "value": "01K4Y87MWZ3Q9WC9EFFT6JKSNP" + }, + "01K4Y87VCKZ0HCW9M95BPVZ2T8": { + "value": "01K4Y87VCKZ0HCW9M95BPVZ2T8" + }, + "01K4Y87BXTWJWX795ZTVS0FQBF": { + "value": "01K4Y87BXTWJWX795ZTVS0FQBF" + } + } + } + ], + "responses": { + "200": { + "description": "Show users", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "$ref": "#/components/schemas/resources.users.resource.fetch" + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + } + }, + "components": { + "schemas": { + "helper.errors": { + "title": "Helper/Errors", + "type": "array", + "items": { + "title": "Error", + "type": "object", + "required": ["status", "title"], + "properties": { + "detail": { + "type": "string" + }, + "status": { + "type": "string" + }, + "title": { + "type": "string" + }, + "source": { + "type": "object", + "properties": { + "pointer": { + "type": "string" + } + } + } + } + } + }, + "helper.jsonapi": { + "title": "Helper/JSONAPI", + "type": "object", + "required": ["version"], + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "resources.achievement-sets.resource.fetch": { + "title": "Resource/Achievement-set/Fetch", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "achievement-sets", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "readOnly": true, + "example": "Quia Impedit Libero Quam" + }, + "pointsTotal": { + "title": "pointsTotal", + "type": "number", + "readOnly": true, + "example": 189 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 341 + }, + "achievementsPublished": { + "title": "achievementsPublished", + "type": "number", + "readOnly": true, + "example": 20 + }, + "achievementsUnpublished": { + "title": "achievementsUnpublished", + "type": "number", + "readOnly": true, + "example": 0 + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true + }, + "achievementsFirstPublishedAt": { + "title": "achievementsFirstPublishedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T07:20:03.000000Z" + }, + "types": { + "title": "types", + "type": "array", + "readOnly": true + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:58.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true, + "example": "2026-01-09T02:06:22.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "games": { + "title": "games", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://retroachievements.org/api/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://retroachievements.org/api/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + "resources.achievements.resource.fetch": { + "title": "Resource/Achievement/Fetch", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "achievements", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "readOnly": true, + "example": "Soluta Quasi!" + }, + "description": { + "title": "description", + "type": "string", + "readOnly": true, + "example": "Nisi et sit labore reprehenderit aliquam aspernatur explicabo. True." + }, + "points": { + "title": "points", + "type": "number", + "readOnly": true, + "example": 1 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 1 + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Badge/00001.png" + }, + "badgeLockedUrl": { + "title": "badgeLockedUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Badge/00001_lock.png" + }, + "type": { + "title": "type", + "type": "string", + "readOnly": true + }, + "state": { + "title": "state", + "type": "string", + "readOnly": true + }, + "orderColumn": { + "title": "orderColumn", + "type": "number", + "readOnly": true, + "example": 1 + }, + "unlocksTotal": { + "title": "unlocksTotal", + "type": "number", + "readOnly": true, + "example": 81 + }, + "unlocksHardcore": { + "title": "unlocksHardcore", + "type": "number", + "readOnly": true, + "example": 81 + }, + "unlockPercentage": { + "title": "unlockPercentage", + "type": "number", + "readOnly": true, + "example": 0.987804878 + }, + "unlockHardcorePercentage": { + "title": "unlockHardcorePercentage", + "type": "number", + "readOnly": true, + "example": 0.987804878 + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:58.000000Z" + }, + "modifiedAt": { + "title": "modifiedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:58.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "developer": { + "title": "developer", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://retroachievements.org/api/v2/developers/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://retroachievements.org/api/v2/developers/1" + } + }, + "readOnly": true + } + } + }, + "achievementSet": { + "title": "achievementSet", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://retroachievements.org/api/v2/achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://retroachievements.org/api/v2/achievement-sets/1" + } + }, + "readOnly": true + } + } + }, + "games": { + "title": "games", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://retroachievements.org/api/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://retroachievements.org/api/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + "resources.games.resource.fetch": { + "title": "Resource/Game/Fetch", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "games", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "example": "Quia Impedit Libero Quam" + }, + "sortTitle": { + "title": "sortTitle", + "type": "string", + "example": "quia impedit libero quam" + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "imageBoxArtUrl": { + "title": "imageBoxArtUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "imageTitleUrl": { + "title": "imageTitleUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "imageIngameUrl": { + "title": "imageIngameUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "releasedAt": { + "title": "releasedAt", + "type": "string" + }, + "releasedAtGranularity": { + "title": "releasedAtGranularity", + "type": "string" + }, + "playersTotal": { + "title": "playersTotal", + "type": "number", + "example": 82 + }, + "playersHardcore": { + "title": "playersHardcore", + "type": "number", + "example": 82 + }, + "achievementsPublished": { + "title": "achievementsPublished", + "type": "number", + "example": 20 + }, + "achievementsUnpublished": { + "title": "achievementsUnpublished", + "type": "number", + "example": 0 + }, + "pointsTotal": { + "title": "pointsTotal", + "type": "number", + "example": 189 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "example": 341 + }, + "timesBeaten": { + "title": "timesBeaten", + "type": "number", + "example": 0 + }, + "timesBeatenHardcore": { + "title": "timesBeatenHardcore", + "type": "number", + "example": 1 + }, + "medianTimeToBeatMinutes": { + "title": "medianTimeToBeatMinutes", + "type": "number" + }, + "medianTimeToBeatHardcoreMinutes": { + "title": "medianTimeToBeatHardcoreMinutes", + "type": "number", + "example": 5153 + } + } + }, + "relationships": { + "type": "object", + "properties": { + "system": { + "title": "system", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://retroachievements.org/api/v2/systems/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://retroachievements.org/api/v2/systems/1" + } + }, + "readOnly": true + } + } + }, + "achievementSets": { + "title": "achievementSets", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://retroachievements.org/api/v2/achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://retroachievements.org/api/v2/achievement-sets/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + "resources.leaderboards.resource.fetch": { + "title": "Resource/Leaderboard/Fetch", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "leaderboards", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "readOnly": true, + "example": "Totam Unde" + }, + "description": { + "title": "description", + "type": "string", + "readOnly": true, + "example": "Modi vitae commodi possimus animi." + }, + "format": { + "title": "format", + "type": "string", + "readOnly": true, + "example": "VALUE" + }, + "rankAsc": { + "title": "rankAsc", + "type": "boolean", + "readOnly": true, + "example": false + }, + "state": { + "title": "state", + "type": "string", + "readOnly": true, + "example": "active" + }, + "orderColumn": { + "title": "orderColumn", + "type": "number", + "readOnly": true, + "example": 64 + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:04:12.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:04:12.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "games": { + "title": "games", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://retroachievements.org/api/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://retroachievements.org/api/v2/games/1" + } + }, + "readOnly": true + } + } + }, + "developer": { + "title": "developer", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://retroachievements.org/api/v2/developers/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://retroachievements.org/api/v2/developers/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + "resources.systems.resource.fetch": { + "title": "Resource/System/Fetch", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "systems", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "title": "name", + "type": "string", + "example": "Genesis/Mega Drive" + }, + "nameFull": { + "title": "nameFull", + "type": "string", + "example": "Sega Genesis/Mega Drive" + }, + "nameShort": { + "title": "nameShort", + "type": "string", + "example": "MD" + }, + "manufacturer": { + "title": "manufacturer", + "type": "string", + "example": "Sega" + }, + "iconUrl": { + "title": "iconUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/assets/images/system/md.png" + }, + "active": { + "title": "active", + "type": "boolean", + "example": true + } + } + } + } + }, + "resources.users.resource.fetch": { + "title": "Resource/User/Fetch", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "users", + "type": "string" + }, + "id": { + "type": "string", + "example": "01K4Y87MWZ3Q9WC9EFFT6JKSNP" + }, + "attributes": { + "type": "object", + "properties": { + "displayName": { + "title": "displayName", + "type": "string", + "readOnly": true, + "example": "claireboehm" + }, + "avatarUrl": { + "title": "avatarUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/UserPic/claireboehm.png" + }, + "motto": { + "title": "motto", + "type": "string", + "readOnly": true, + "example": "" + }, + "points": { + "title": "points", + "type": "number", + "readOnly": true, + "example": 1250 + }, + "pointsHardcore": { + "title": "pointsHardcore", + "type": "number", + "readOnly": true, + "example": 9019 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 19902 + }, + "yieldUnlocks": { + "title": "yieldUnlocks", + "type": "number", + "readOnly": true, + "example": 0 + }, + "yieldPoints": { + "title": "yieldPoints", + "type": "number", + "readOnly": true, + "example": 0 + }, + "joinedAt": { + "title": "joinedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:51.000000Z" + }, + "lastActivityAt": { + "title": "lastActivityAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:24:12.000000Z" + }, + "deletedAt": { + "title": "deletedAt", + "type": "string", + "readOnly": true + }, + "isUnranked": { + "title": "isUnranked", + "type": "boolean", + "readOnly": true, + "example": false + }, + "isUserWallActive": { + "title": "isUserWallActive", + "type": "boolean", + "readOnly": true, + "example": true + }, + "richPresence": { + "title": "richPresence", + "type": "string", + "readOnly": true, + "example": "Playing Alias Et" + }, + "richPresenceUpdatedAt": { + "title": "richPresenceUpdatedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:24:12.000000Z" + }, + "visibleRole": { + "title": "visibleRole", + "type": "string", + "readOnly": true + }, + "displayableRoles": { + "title": "displayableRoles", + "type": "array", + "readOnly": true + } + } + } + } + } + }, + "responses": { + "400": { + "description": "Bad request", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "helper.jsonapi": { + "$ref": "#/components/schemas/helper.jsonapi" + }, + "helper.errors": { + "$ref": "#/components/schemas/helper.errors" + } + } + }, + "examples": { + "-": { + "value": { + "jsonapi": { + "version": "1.0" + }, + "errors": [ + { + "detail": "The member id is required.", + "source": { + "pointer": "/data" + }, + "status": "400", + "title": "Non-Compliant JSON:API Document" + } + ] + } + } + } + } + } + }, + "401": { + "description": "Unauthorized Action", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "helper.jsonapi": { + "$ref": "#/components/schemas/helper.jsonapi" + }, + "helper.errors": { + "$ref": "#/components/schemas/helper.errors" + } + } + }, + "examples": { + "-": { + "value": { + "jsonapi": { + "version": "1.0" + }, + "errors": [ + { + "title": "Unauthorized.", + "status": "401", + "detail": "Unauthenticated." + } + ] + } + } + } + } + } + }, + "404": { + "description": "Content Not Found", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "helper.jsonapi": { + "$ref": "#/components/schemas/helper.jsonapi" + }, + "helper.errors": { + "$ref": "#/components/schemas/helper.errors" + } + } + }, + "examples": { + "-": { + "value": { + "jsonapi": { + "version": "1.0" + }, + "errors": [ + { + "title": "Not Found", + "status": "404" + } + ] + } + } + } + } + } + }, + "422": { + "description": "Unprocessable Entity", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "helper.jsonapi": { + "$ref": "#/components/schemas/helper.jsonapi" + }, + "helper.errors": { + "$ref": "#/components/schemas/helper.errors" + } + } + }, + "examples": { + "-": { + "value": { + "jsonapi": { + "version": "1.0" + }, + "errors": [ + { + "detail": "Lorem Ipsum", + "source": { + "pointer": "/data/attributes/lorem" + }, + "title": "Unprocessable Entity", + "status": "422" + } + ] + } + } + } + } + } + } + } + } +} diff --git a/docs/v2/systems.md b/docs/v2/systems.md new file mode 100644 index 0000000..a680df8 --- /dev/null +++ b/docs/v2/systems.md @@ -0,0 +1,6 @@ + + + diff --git a/package.json b/package.json index 2170c22..fe5102c 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "engines": { "node": ">=20" }, + "type": "module", "scripts": { "dev": "vitepress dev docs", "build": "vitepress build docs", @@ -17,6 +18,7 @@ "license": "MIT", "dependencies": { "vitepress": "^1.6.4", + "vitepress-openapi": "^0.1.13", "vitepress-plugin-llms": "^1.7.3", "vue": "3.5.18" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 50e3405..3ce06f3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: vitepress: specifier: ^1.6.4 version: 1.6.4(@algolia/client-search@5.35.0)(postcss@8.4.38)(search-insights@2.14.0) + vitepress-openapi: + specifier: ^0.1.13 + version: 0.1.13(vitepress@1.6.4(@algolia/client-search@5.35.0)(postcss@8.4.38)(search-insights@2.14.0))(vue@3.5.18) vitepress-plugin-llms: specifier: ^1.7.3 version: 1.7.3 @@ -375,12 +378,30 @@ packages: cpu: [x64] os: [win32] + '@floating-ui/core@1.7.4': + resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==} + + '@floating-ui/dom@1.7.5': + resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==} + + '@floating-ui/utils@0.2.10': + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + + '@floating-ui/vue@1.1.10': + resolution: {integrity: sha512-vdf8f6rHnFPPLRsmL4p12wYl+Ux4mOJOkjzKEMYVnwdf7UFdvBtHlLvQyx8iKG5vhPRbDRgZxdtpmyigDPjzYg==} + '@iconify-json/simple-icons@1.2.48': resolution: {integrity: sha512-EACOtZMoPJtERiAbX1De0asrrCtlwI27+03c9OJlYWsly9w1O5vcD8rTzh+kDPjo+K8FOVnq2Qy+h/CzljSKDA==} '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + '@internationalized/date@3.10.1': + resolution: {integrity: sha512-oJrXtQiAXLvT9clCf1K4kxp3eKsQhIaZqxEyowkBcsvZDdZkbWrVmnGknxs5flTD0VGsxrxKgBCZty1EzoiMzA==} + + '@internationalized/number@3.6.5': + resolution: {integrity: sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g==} + '@isaacs/balanced-match@4.0.1': resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} engines: {node: 20 || >=22} @@ -554,6 +575,17 @@ packages: '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@swc/helpers@0.5.18': + resolution: {integrity: sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==} + + '@tanstack/virtual-core@3.13.18': + resolution: {integrity: sha512-Mx86Hqu1k39icq2Zusq+Ey2J6dDWTjDvEv43PJtRCoEYTLyfaPnxIQ6iy7YAOK0NV/qOEmZQ/uCufrppZxTgcg==} + + '@tanstack/vue-virtual@3.13.18': + resolution: {integrity: sha512-6pT8HdHtTU5Z+t906cGdCroUNA5wHjFXsNss9gwk7QAr1VNZtz9IQCs2Nhx0gABK48c+OocHl2As+TMg8+Hy4A==} + peerDependencies: + vue: ^2.7.0 || ^3.0.0 + '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -635,6 +667,11 @@ packages: '@vueuse/core@12.8.2': resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==} + '@vueuse/core@13.9.0': + resolution: {integrity: sha512-ts3regBQyURfCE2BcytLqzm8+MmLlo5Ln/KLoxDVcsZ2gzIwVNnQpQOL/UKV8alUqjSZOlpFZcRNsLRqj+OzyA==} + peerDependencies: + vue: ^3.5.0 + '@vueuse/integrations@12.8.2': resolution: {integrity: sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==} peerDependencies: @@ -679,9 +716,17 @@ packages: '@vueuse/metadata@12.8.2': resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==} + '@vueuse/metadata@13.9.0': + resolution: {integrity: sha512-1AFRvuiGphfF7yWixZa0KwjYH8ulyjDCC0aFgrGRz8+P4kvDFSdXLVfTk5xAN9wEuD1J6z4/myMoYbnHoX07zg==} + '@vueuse/shared@12.8.2': resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==} + '@vueuse/shared@13.9.0': + resolution: {integrity: sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g==} + peerDependencies: + vue: ^3.5.0 + algoliasearch@5.35.0: resolution: {integrity: sha512-Y+moNhsqgLmvJdgTsO4GZNgsaDWv8AOGAaPeIeHKlDn/XunoAqYbA+XNpBd1dW8GOXAUDyxC9Rxc7AV4kpFcIg==} engines: {node: '>= 14.0.0'} @@ -722,6 +767,10 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + aria-hidden@1.2.6: + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} + engines: {node: '>=10'} + autoprefixer@10.4.19: resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} engines: {node: ^10 || ^12 || >=14} @@ -790,6 +839,9 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + cli-cursor@4.0.0: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -802,6 +854,10 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -875,6 +931,9 @@ packages: decode-named-character-reference@1.2.0: resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -1139,12 +1198,20 @@ packages: resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} engines: {node: 14 || >=16.14} + lucide-vue-next@0.503.0: + resolution: {integrity: sha512-3MrtHIBdh4dPCUZDLxQnvmQ17UzUnBYgezUSIo87Laais8hOz6qIPllp0iG/uS/UIzk7bJxyZRzoZTW/gLSr4A==} + peerDependencies: + vue: '>=3.0.1' + magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} mark.js@8.11.1: resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + markdown-it-link-attributes@4.0.1: + resolution: {integrity: sha512-pg5OK0jPLg62H4k7M9mRJLT61gUp9nvG0XveKYHMOOluASo9OEF13WlXrpAp2aj35LbedAy3QOCgQCw0tkLKAQ==} + markdown-it@14.1.0: resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} hasBin: true @@ -1324,6 +1391,9 @@ packages: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -1634,6 +1704,11 @@ packages: regex@6.0.1: resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} + reka-ui@2.7.0: + resolution: {integrity: sha512-m+XmxQN2xtFzBP3OAdIafKq7C8OETo2fqfxcIIxYmNN2Ch3r5oAf6yEYCIJg5tL/yJU2mHqF70dCCekUkrAnXA==} + peerDependencies: + vue: '>= 3.2.0' + remark-frontmatter@5.0.0: resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==} @@ -1806,6 +1881,9 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} @@ -1876,6 +1954,12 @@ packages: terser: optional: true + vitepress-openapi@0.1.13: + resolution: {integrity: sha512-cu0d07Gn6NCtWCNWtNI91bM41OeLBX5wdKRSCxaC1wZv9RSBNZ35KKT9GW5+Eb0qDx0wBtGeXZ9fIGf5QT3xGA==} + peerDependencies: + vitepress: '>=1.0.0' + vue: ^3.0.0 + vitepress-plugin-llms@1.7.3: resolution: {integrity: sha512-XhTVbUrKwrzrwlRKd/zT2owvjwi5cdB21HgDRcHqp9PYK4Fy+mBYJUoTcLaJ5IKD1DDrJZMo0DuJeyC5RSDI9Q==} @@ -1891,6 +1975,17 @@ packages: postcss: optional: true + vue-demi@0.14.10: + resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + vue@3.5.18: resolution: {integrity: sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==} peerDependencies: @@ -2230,12 +2325,40 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true + '@floating-ui/core@1.7.4': + dependencies: + '@floating-ui/utils': 0.2.10 + + '@floating-ui/dom@1.7.5': + dependencies: + '@floating-ui/core': 1.7.4 + '@floating-ui/utils': 0.2.10 + + '@floating-ui/utils@0.2.10': {} + + '@floating-ui/vue@1.1.10(vue@3.5.18)': + dependencies: + '@floating-ui/dom': 1.7.5 + '@floating-ui/utils': 0.2.10 + vue-demi: 0.14.10(vue@3.5.18) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + '@iconify-json/simple-icons@1.2.48': dependencies: '@iconify/types': 2.0.0 '@iconify/types@2.0.0': {} + '@internationalized/date@3.10.1': + dependencies: + '@swc/helpers': 0.5.18 + + '@internationalized/number@3.6.5': + dependencies: + '@swc/helpers': 0.5.18 + '@isaacs/balanced-match@4.0.1': {} '@isaacs/brace-expansion@5.0.0': @@ -2385,6 +2508,17 @@ snapshots: '@shikijs/vscode-textmate@10.0.2': {} + '@swc/helpers@0.5.18': + dependencies: + tslib: 2.8.1 + + '@tanstack/virtual-core@3.13.18': {} + + '@tanstack/vue-virtual@3.13.18(vue@3.5.18)': + dependencies: + '@tanstack/virtual-core': 3.13.18 + vue: 3.5.18 + '@types/debug@4.1.12': dependencies: '@types/ms': 2.1.0 @@ -2502,6 +2636,13 @@ snapshots: transitivePeerDependencies: - typescript + '@vueuse/core@13.9.0(vue@3.5.18)': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 13.9.0 + '@vueuse/shared': 13.9.0(vue@3.5.18) + vue: 3.5.18 + '@vueuse/integrations@12.8.2(focus-trap@7.6.5)': dependencies: '@vueuse/core': 12.8.2 @@ -2514,12 +2655,18 @@ snapshots: '@vueuse/metadata@12.8.2': {} + '@vueuse/metadata@13.9.0': {} + '@vueuse/shared@12.8.2': dependencies: vue: 3.5.18 transitivePeerDependencies: - typescript + '@vueuse/shared@13.9.0(vue@3.5.18)': + dependencies: + vue: 3.5.18 + algoliasearch@5.35.0: dependencies: '@algolia/abtesting': 1.1.0 @@ -2564,6 +2711,10 @@ snapshots: argparse@2.0.1: {} + aria-hidden@1.2.6: + dependencies: + tslib: 2.8.1 + autoprefixer@10.4.19(postcss@8.4.38): dependencies: browserslist: 4.23.0 @@ -2625,6 +2776,10 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + cli-cursor@4.0.0: dependencies: restore-cursor: 4.0.0 @@ -2640,6 +2795,8 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + clsx@2.1.1: {} + color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -2692,6 +2849,8 @@ snapshots: dependencies: character-entities: 2.0.2 + defu@6.1.4: {} + dequal@2.0.3: {} devlop@1.1.0: @@ -2964,12 +3123,18 @@ snapshots: lru-cache@10.2.2: {} + lucide-vue-next@0.503.0(vue@3.5.18): + dependencies: + vue: 3.5.18 + magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 mark.js@8.11.1: {} + markdown-it-link-attributes@4.0.1: {} + markdown-it@14.1.0: dependencies: argparse: 2.0.1 @@ -3246,6 +3411,8 @@ snapshots: object-hash@3.0.0: {} + ohash@2.0.11: {} + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 @@ -3548,6 +3715,23 @@ snapshots: dependencies: regex-utilities: 2.3.0 + reka-ui@2.7.0(vue@3.5.18): + dependencies: + '@floating-ui/dom': 1.7.5 + '@floating-ui/vue': 1.1.10(vue@3.5.18) + '@internationalized/date': 3.10.1 + '@internationalized/number': 3.6.5 + '@tanstack/vue-virtual': 3.13.18(vue@3.5.18) + '@vueuse/core': 12.8.2 + '@vueuse/shared': 12.8.2 + aria-hidden: 1.2.6 + defu: 6.1.4 + ohash: 2.0.11 + vue: 3.5.18 + transitivePeerDependencies: + - '@vue/composition-api' + - typescript + remark-frontmatter@5.0.0: dependencies: '@types/mdast': 4.0.4 @@ -3780,6 +3964,8 @@ snapshots: ts-interface-checker@0.1.13: {} + tslib@2.8.1: {} + uc.micro@2.1.0: {} unified@11.0.5: @@ -3847,6 +4033,20 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + vitepress-openapi@0.1.13(vitepress@1.6.4(@algolia/client-search@5.35.0)(postcss@8.4.38)(search-insights@2.14.0))(vue@3.5.18): + dependencies: + '@vueuse/core': 13.9.0(vue@3.5.18) + class-variance-authority: 0.7.1 + clsx: 2.1.1 + lucide-vue-next: 0.503.0(vue@3.5.18) + markdown-it-link-attributes: 4.0.1 + reka-ui: 2.7.0(vue@3.5.18) + vitepress: 1.6.4(@algolia/client-search@5.35.0)(postcss@8.4.38)(search-insights@2.14.0) + vue: 3.5.18 + transitivePeerDependencies: + - '@vue/composition-api' + - typescript + vitepress-plugin-llms@1.7.3: dependencies: byte-size: 9.0.1 @@ -3915,6 +4115,10 @@ snapshots: - typescript - universal-cookie + vue-demi@0.14.10(vue@3.5.18): + dependencies: + vue: 3.5.18 + vue@3.5.18: dependencies: '@vue/compiler-dom': 3.5.18 From 5b115bfc01a64b0287794299e8392f6634e22ba8 Mon Sep 17 00:00:00 2001 From: Chew Date: Tue, 3 Feb 2026 21:23:47 -0600 Subject: [PATCH 2/8] update spec, add sidebar --- docs/.vitepress/config.mts | 500 ++++++++-------- docs/v2/achievement.md | 6 + docs/v2/retroachievements.json | 1010 ++++++++++++++++++++++++++++++-- 3 files changed, 1238 insertions(+), 278 deletions(-) create mode 100644 docs/v2/achievement.md diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 9a19f17..c77616c 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -1,6 +1,8 @@ import { defineConfig } from "vitepress"; import llmstxt from "vitepress-plugin-llms"; import { copyOrDownloadAsMarkdownButtons } from "vitepress-plugin-llms"; +import { useSidebar } from 'vitepress-openapi' +import spec from '../v2/retroachievements.json' with { type: "json" }; /** * Try your best not to have any sidebar page titles wrap to a 2nd line. @@ -47,243 +49,273 @@ export default defineConfig({ }, ], - nav: [{ text: "Quick Start", link: "/getting-started" }], + nav: [ + { text: "Quick Start", link: "/getting-started" }, + { text: "Version 1", link: "/v1" }, + { text: "Version 2", link: "/v2" }, + ], - sidebar: [ - { - text: "About", - link: "/", - }, - { - text: "Getting Started", - link: "/getting-started", - }, - { - text: "User", - collapsible: true, - items: [ - { - text: "Profile", - link: "/v1/get-user-profile", - }, - { - text: "Unlocks (most recent)", - link: "/v1/get-user-recent-achievements", - }, - { - text: "Unlocks (by date range)", - link: "/v1/get-achievements-earned-between", - }, - { - text: "Unlocks (on date)", - link: "/v1/get-achievements-earned-on-day", - }, - { - text: "Game Progress", - link: "/v1/get-game-info-and-user-progress", - }, - { - text: "All Completion Progress", - link: "/v1/get-user-completion-progress", - }, - { - text: "Awards / Badges", - link: "/v1/get-user-awards", - }, - { - text: "Set Development Claims", - link: "/v1/get-user-claims", - }, - { - text: "Game Rank and Score", - link: "/v1/get-user-game-rank-and-score", - }, - { - text: "Point Totals", - link: "/v1/get-user-points", - }, - { - text: "Specific Games Progress", - link: "/v1/get-user-progress", - }, - { - text: "Recently Played Games", - link: "/v1/get-user-recently-played-games", - }, - { - text: "Summary", - link: "/v1/get-user-summary", - }, - { - text: "Completed Games", - link: "/v1/get-user-completed-games", - }, - { - text: "Want to Play Games List", - link: "/v1/get-user-want-to-play-list", - }, - { - text: "Users I Follow", - link: "/v1/get-users-i-follow", - }, - { - text: "Users Following Me", - link: "/v1/get-users-following-me", - }, - { - text: "User Set Requests", - link: "/v1/get-user-set-requests", - }, - ], - }, - { - text: "Game", - collapsible: true, - items: [ - { - text: "Summary", - link: "/v1/get-game", - }, - { - text: "Extended Details", - link: "/v1/get-game-extended", - }, - { - text: "Hashes", - link: "/v1/get-game-hashes", - }, - { - text: "Achievement IDs", - link: "/v1/get-achievement-count", - }, - { - text: "Unlocks Distribution", - link: "/v1/get-achievement-distribution", - }, - { - text: "High Scores", - link: "/v1/get-game-rank-and-score", - }, - { - text: "Progression", - link: "/v1/get-game-progression", - }, - ], - }, - { - text: "Leaderboards", - collapsible: true, - items: [ - { - text: "Leaderboards (by gameID)", - link: "/v1/get-game-leaderboards", - }, - { - text: "Entries", - link: "/v1/get-leaderboard-entries", - }, - { - text: "User Leaderboards (by gameID)", - link: "/v1/get-user-game-leaderboards", - }, - ], - }, - { - text: "System", - collapsible: true, - items: [ - { - text: "All Systems", - link: "/v1/get-console-ids", - }, - { - text: "All Games and Hashes", - link: "/v1/get-game-list", - }, - ], - }, - { - text: "Achievement", - collapsible: true, - items: [ - { - text: "All Unlocks", - link: "/v1/get-achievement-unlocks", - }, + sidebar: { + '/': [ + { + text: "Home", + items: [ + { + text: "About", + link: "/", + }, + { + text: "Getting Started", + link: "/getting-started", + }, + ] + } ], - }, - { - text: "Comment", - collapsible: true, - items: [ - { - text: "Comments", - link: "/v1/get-comments", - }, - ], - }, - { - text: "Feed", - collapsible: true, - items: [ - { - text: "All Recent Game Awards", - link: "/v1/get-recent-game-awards", - }, - { - text: "Active Claims", - link: "/v1/get-active-claims", - }, - { - text: "Inactive Claims", - link: "/v1/get-claims", - }, - { - text: "Top Ten Ranked Users", - link: "/v1/get-top-ten-users", - }, - ], - }, - { - text: "Event", - items: [ - { - text: "Achievement of the Week", - link: "/v1/get-achievement-of-the-week", - }, + '/v1/': [ + { + text: 'v1', + items: [{ + text: "API v2", + link: "/v2" + }, + { + text: "User", + collapsible: true, + items: [ + { + text: "Profile", + link: "/v1/get-user-profile", + }, + { + text: "Unlocks (most recent)", + link: "/v1/get-user-recent-achievements", + }, + { + text: "Unlocks (by date range)", + link: "/v1/get-achievements-earned-between", + }, + { + text: "Unlocks (on date)", + link: "/v1/get-achievements-earned-on-day", + }, + { + text: "Game Progress", + link: "/v1/get-game-info-and-user-progress", + }, + { + text: "All Completion Progress", + link: "/v1/get-user-completion-progress", + }, + { + text: "Awards / Badges", + link: "/v1/get-user-awards", + }, + { + text: "Set Development Claims", + link: "/v1/get-user-claims", + }, + { + text: "Game Rank and Score", + link: "/v1/get-user-game-rank-and-score", + }, + { + text: "Point Totals", + link: "/v1/get-user-points", + }, + { + text: "Specific Games Progress", + link: "/v1/get-user-progress", + }, + { + text: "Recently Played Games", + link: "/v1/get-user-recently-played-games", + }, + { + text: "Summary", + link: "/v1/get-user-summary", + }, + { + text: "Completed Games", + link: "/v1/get-user-completed-games", + }, + { + text: "Want to Play Games List", + link: "/v1/get-user-want-to-play-list", + }, + { + text: "Users I Follow", + link: "/v1/get-users-i-follow", + }, + { + text: "Users Following Me", + link: "/v1/get-users-following-me", + }, + { + text: "User Set Requests", + link: "/v1/get-user-set-requests", + }, + ], + }, + { + text: "Game", + collapsible: true, + items: [ + { + text: "Summary", + link: "/v1/get-game", + }, + { + text: "Extended Details", + link: "/v1/get-game-extended", + }, + { + text: "Hashes", + link: "/v1/get-game-hashes", + }, + { + text: "Achievement IDs", + link: "/v1/get-achievement-count", + }, + { + text: "Unlocks Distribution", + link: "/v1/get-achievement-distribution", + }, + { + text: "High Scores", + link: "/v1/get-game-rank-and-score", + }, + { + text: "Progression", + link: "/v1/get-game-progression", + }, + ], + }, + { + text: "Leaderboards", + collapsible: true, + items: [ + { + text: "Leaderboards (by gameID)", + link: "/v1/get-game-leaderboards", + }, + { + text: "Entries", + link: "/v1/get-leaderboard-entries", + }, + { + text: "User Leaderboards (by gameID)", + link: "/v1/get-user-game-leaderboards", + }, + ], + }, + { + text: "System", + collapsible: true, + items: [ + { + text: "All Systems", + link: "/v1/get-console-ids", + }, + { + text: "All Games and Hashes", + link: "/v1/get-game-list", + }, + ], + }, + { + text: "Achievement", + collapsible: true, + items: [ + { + text: "All Unlocks", + link: "/v1/get-achievement-unlocks", + }, + ], + }, + { + text: "Comment", + collapsible: true, + items: [ + { + text: "Comments", + link: "/v1/get-comments", + }, + ], + }, + { + text: "Feed", + collapsible: true, + items: [ + { + text: "All Recent Game Awards", + link: "/v1/get-recent-game-awards", + }, + { + text: "Active Claims", + link: "/v1/get-active-claims", + }, + { + text: "Inactive Claims", + link: "/v1/get-claims", + }, + { + text: "Top Ten Ranked Users", + link: "/v1/get-top-ten-users", + }, + ], + }, + { + text: "Event", + items: [ + { + text: "Achievement of the Week", + link: "/v1/get-achievement-of-the-week", + }, + ], + }, + { + text: "Ticket", + collapsible: true, + items: [ + { + text: "Get Ticket by ID", + link: "/v1/get-ticket-data/get-ticket-by-id", + }, + { + text: "Get Most Ticketed Games", + link: "/v1/get-ticket-data/get-most-ticketed-games", + }, + { + text: "Get Most Recent Tickets", + link: "/v1/get-ticket-data/get-most-recent-tickets", + }, + { + text: "Get Game Ticket Stats", + link: "/v1/get-ticket-data/get-game-ticket-stats", + }, + { + text: "Get Developer Ticket Stats", + link: "/v1/get-ticket-data/get-developer-ticket-stats", + }, + { + text: "Get Achievement Ticket Stats", + link: "/v1/get-ticket-data/get-achievement-ticket-stats", + }, + ], + }] + } ], - }, - { - text: "Ticket", - collapsible: true, - items: [ - { - text: "Get Ticket by ID", - link: "/v1/get-ticket-data/get-ticket-by-id", - }, - { - text: "Get Most Ticketed Games", - link: "/v1/get-ticket-data/get-most-ticketed-games", - }, - { - text: "Get Most Recent Tickets", - link: "/v1/get-ticket-data/get-most-recent-tickets", - }, - { - text: "Get Game Ticket Stats", - link: "/v1/get-ticket-data/get-game-ticket-stats", - }, - { - text: "Get Developer Ticket Stats", - link: "/v1/get-ticket-data/get-developer-ticket-stats", - }, - { - text: "Get Achievement Ticket Stats", - link: "/v1/get-ticket-data/get-achievement-ticket-stats", - }, - ], - }, - ], + '/v2/': useSidebar({spec}).generateSidebarGroups({ + linkPrefix: "/v2/", + sidebarItemTemplate: ({ + title + }) => { + + return title; + } + }), + }, + editLink: { pattern: diff --git a/docs/v2/achievement.md b/docs/v2/achievement.md new file mode 100644 index 0000000..a7a7274 --- /dev/null +++ b/docs/v2/achievement.md @@ -0,0 +1,6 @@ + + + diff --git a/docs/v2/retroachievements.json b/docs/v2/retroachievements.json index ef27eee..06a7bad 100644 --- a/docs/v2/retroachievements.json +++ b/docs/v2/retroachievements.json @@ -7,8 +7,7 @@ }, "servers": [ { - "url": "https://api.retroachievements.org/v2", - "description": "Primary server" + "url": "https://api.retroachievements.org/v2" } ], "paths": { @@ -535,6 +534,502 @@ } } }, + "/hubs": { + "get": { + "tags": ["Hubs"], + "summary": "Get all hubs", + "description": "", + "operationId": "hubs.index", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "page[number]", + "in": "query", + "description": "The page number for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "sort", + "in": "query", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "id", + "-id", + "title", + "-title", + "sortTitle", + "-sortTitle", + "createdAt", + "-createdAt", + "updatedAt", + "-updatedAt", + "gamesCount", + "-gamesCount", + "linkedHubsCount", + "-linkedHubsCount", + "gamesCount", + "-gamesCount", + "linkedHubsCount", + "-linkedHubsCount" + ], + "type": "string" + } + } + }, + { + "name": "filter[id]", + "in": "query", + "description": "A list of ids to filter by.", + "required": false, + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "default": [], + "type": "array", + "items": { + "type": "string" + } + }, + "examples": { + "empty": { + "value": [] + }, + "1": { + "value": ["1"] + }, + "2": { + "value": ["2"] + }, + "3": { + "value": ["3"] + } + } + }, + { + "name": "filter[parentId]", + "in": "query", + "description": "Applies the parentId scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "filter[title]", + "in": "query", + "description": "Applies the title scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Index hubs", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.hubs.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/hubs/{hub}": { + "get": { + "tags": ["Hubs"], + "summary": "Show one hub", + "description": "", + "operationId": "hubs.show", + "parameters": [ + { + "name": "hub", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show hubs", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "$ref": "#/components/schemas/resources.hubs.resource.fetch" + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/hubs/{hub}/games": { + "get": { + "tags": ["Hubs"], + "summary": "Show games", + "description": "", + "operationId": "hubs.games", + "parameters": [ + { + "name": "hub", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "ShowRelated hubs", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.games.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/hubs/{hub}/relationships/games": { + "get": { + "tags": ["Hubs"], + "summary": "Show games relation", + "description": "", + "operationId": "hubs.games.show", + "parameters": [ + { + "name": "hub", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show hubs", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.hubs.relationship.games.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/hubs/{hub}/links": { + "get": { + "tags": ["Hubs"], + "summary": "Show links", + "description": "", + "operationId": "hubs.links", + "parameters": [ + { + "name": "hub", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "ShowRelated hubs", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.hubs.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/hubs/{hub}/relationships/links": { + "get": { + "tags": ["Hubs"], + "summary": "Show links relation", + "description": "", + "operationId": "hubs.links.show", + "parameters": [ + { + "name": "hub", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show hubs", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.hubs.relationship.links.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, "/leaderboards": { "get": { "tags": ["Leaderboards"], @@ -631,21 +1126,155 @@ "value": 1 } } - }, - { - "name": "filter[state]", - "in": "query", - "description": "Applies the state scope.", - "required": false, - "allowEmptyValue": false, - "schema": { - "type": "boolean" - } + }, + { + "name": "filter[state]", + "in": "query", + "description": "Applies the state scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Index leaderboards", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.leaderboards.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/leaderboards/{leaderboard}": { + "get": { + "tags": ["Leaderboards"], + "summary": "Show one leaderboard", + "description": "", + "operationId": "leaderboards.show", + "parameters": [ + { + "name": "leaderboard", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show leaderboards", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "$ref": "#/components/schemas/resources.leaderboards.resource.fetch" + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/leaderboards/{leaderboard}/entries": { + "get": { + "tags": ["Leaderboards"], + "summary": "Show entries", + "description": "", + "operationId": "leaderboards.entries", + "parameters": [ + { + "name": "leaderboard", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } } ], "responses": { "200": { - "description": "Index leaderboards", + "description": "ShowRelated leaderboards", "content": { "application/vnd.api+json": { "schema": { @@ -665,7 +1294,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.leaderboards.resource.fetch" + "$ref": "#/components/schemas/resources.leaderboard-entries.resource.fetch" } } } @@ -678,16 +1307,19 @@ }, "401": { "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" } } } }, - "/leaderboards/{leaderboard}": { + "/leaderboards/{leaderboard}/relationships/entries": { "get": { "tags": ["Leaderboards"], - "summary": "Show one leaderboard", + "summary": "Show entries relation", "description": "", - "operationId": "leaderboards.show", + "operationId": "leaderboards.entries.show", "parameters": [ { "name": "leaderboard", @@ -730,7 +1362,10 @@ } }, "data": { - "$ref": "#/components/schemas/resources.leaderboards.resource.fetch" + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.leaderboards.relationship.entries.fetch" + } } } } @@ -752,8 +1387,8 @@ "/systems": { "get": { "tags": ["Systems"], - "summary": "Get All Systems", - "description": "Views a list of all systems on the site", + "summary": "Get all systems", + "description": "", "operationId": "systems.index", "parameters": [ { @@ -1258,12 +1893,12 @@ "related": { "title": "related", "type": "string", - "example": "https://retroachievements.org/api/v2/games/1" + "example": "https://raweb.test/api/v2/games/1" }, "self": { "title": "self", "type": "string", - "example": "https://retroachievements.org/api/v2/games/1" + "example": "https://raweb.test/api/v2/games/1" } }, "readOnly": true @@ -1319,13 +1954,13 @@ "title": "badgeUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Badge/00001.png" + "example": "https://raweb.test/media/Badge/00001.png" }, "badgeLockedUrl": { "title": "badgeLockedUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Badge/00001_lock.png" + "example": "https://raweb.test/media/Badge/00001_lock.png" }, "type": { "title": "type", @@ -1394,12 +2029,12 @@ "related": { "title": "related", "type": "string", - "example": "https://retroachievements.org/api/v2/developers/1" + "example": "https://raweb.test/api/v2/developers/1" }, "self": { "title": "self", "type": "string", - "example": "https://retroachievements.org/api/v2/developers/1" + "example": "https://raweb.test/api/v2/developers/1" } }, "readOnly": true @@ -1416,12 +2051,12 @@ "related": { "title": "related", "type": "string", - "example": "https://retroachievements.org/api/v2/achievement-sets/1" + "example": "https://raweb.test/api/v2/achievement-sets/1" }, "self": { "title": "self", "type": "string", - "example": "https://retroachievements.org/api/v2/achievement-sets/1" + "example": "https://raweb.test/api/v2/achievement-sets/1" } }, "readOnly": true @@ -1438,12 +2073,12 @@ "related": { "title": "related", "type": "string", - "example": "https://retroachievements.org/api/v2/games/1" + "example": "https://raweb.test/api/v2/games/1" }, "self": { "title": "self", "type": "string", - "example": "https://retroachievements.org/api/v2/games/1" + "example": "https://raweb.test/api/v2/games/1" } }, "readOnly": true @@ -1485,25 +2120,25 @@ "title": "badgeUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://raweb.test/media/Images/000002.png" }, "imageBoxArtUrl": { "title": "imageBoxArtUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://raweb.test/media/Images/000002.png" }, "imageTitleUrl": { "title": "imageTitleUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://raweb.test/media/Images/000002.png" }, "imageIngameUrl": { "title": "imageIngameUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://raweb.test/media/Images/000002.png" }, "releasedAt": { "title": "releasedAt", @@ -1577,12 +2212,12 @@ "related": { "title": "related", "type": "string", - "example": "https://retroachievements.org/api/v2/systems/1" + "example": "https://raweb.test/api/v2/systems/1" }, "self": { "title": "self", "type": "string", - "example": "https://retroachievements.org/api/v2/systems/1" + "example": "https://raweb.test/api/v2/systems/1" } }, "readOnly": true @@ -1599,12 +2234,260 @@ "related": { "title": "related", "type": "string", - "example": "https://retroachievements.org/api/v2/achievement-sets/1" + "example": "https://raweb.test/api/v2/achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://raweb.test/api/v2/achievement-sets/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + "resources.hubs.relationship.games.fetch": { + "title": "Resource/Hub/Relationship/Games/Fetch", + "type": "object", + "required": ["type", "id"], + "properties": { + "type": { + "title": "type", + "default": "games", + "type": "string" + }, + "id": { + "title": "id", + "type": "string", + "example": "1" + } + } + }, + "resources.hubs.relationship.links.fetch": { + "title": "Resource/Hub/Relationship/Links/Fetch", + "type": "object", + "required": ["type", "id"], + "properties": { + "type": { + "title": "type", + "default": "hubs", + "type": "string" + }, + "id": { + "title": "id", + "type": "string", + "example": "1" + } + } + }, + "resources.hubs.resource.fetch": { + "title": "Resource/Hub/Fetch", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "hubs", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "readOnly": true, + "example": "[Central]" + }, + "sortTitle": { + "title": "sortTitle", + "type": "string", + "readOnly": true + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true, + "example": "https://raweb.test/media/Images/000001.png" + }, + "hasMatureContent": { + "title": "hasMatureContent", + "type": "boolean", + "readOnly": true, + "example": false + }, + "gamesCount": { + "title": "gamesCount", + "type": "number", + "readOnly": true, + "example": 0 + }, + "linkedHubsCount": { + "title": "linkedHubsCount", + "type": "number", + "readOnly": true, + "example": 0 + }, + "isEventHub": { + "title": "isEventHub", + "type": "boolean", + "readOnly": true, + "example": false + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:04:29.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:04:29.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "games": { + "title": "games", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://raweb.test/api/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://raweb.test/api/v2/games/1" + } + }, + "readOnly": true + } + } + }, + "links": { + "title": "links", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://raweb.test/api/v2/links/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://raweb.test/api/v2/links/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + "resources.leaderboard-entries.resource.fetch": { + "title": "Resource/Leaderboard-entry/Fetch", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "leaderboard-entries", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "score": { + "title": "score", + "type": "number", + "readOnly": true, + "example": 1 + }, + "rank": { + "title": "rank", + "type": "number", + "readOnly": true + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "user": { + "title": "user", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://raweb.test/api/v2/users/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://raweb.test/api/v2/users/1" + } + }, + "readOnly": true + } + } + }, + "leaderboard": { + "title": "leaderboard", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://raweb.test/api/v2/leaderboards/1" }, "self": { "title": "self", "type": "string", - "example": "https://retroachievements.org/api/v2/achievement-sets/1" + "example": "https://raweb.test/api/v2/leaderboards/1" } }, "readOnly": true @@ -1615,6 +2498,23 @@ } } }, + "resources.leaderboards.relationship.entries.fetch": { + "title": "Resource/Leaderboard/Relationship/Entries/Fetch", + "type": "object", + "required": ["type", "id"], + "properties": { + "type": { + "title": "type", + "default": "leaderboard-entries", + "type": "string" + }, + "id": { + "title": "id", + "type": "string", + "example": "1" + } + } + }, "resources.leaderboards.resource.fetch": { "title": "Resource/Leaderboard/Fetch", "type": "object", @@ -1695,12 +2595,12 @@ "related": { "title": "related", "type": "string", - "example": "https://retroachievements.org/api/v2/games/1" + "example": "https://raweb.test/api/v2/games/1" }, "self": { "title": "self", "type": "string", - "example": "https://retroachievements.org/api/v2/games/1" + "example": "https://raweb.test/api/v2/games/1" } }, "readOnly": true @@ -1717,12 +2617,34 @@ "related": { "title": "related", "type": "string", - "example": "https://retroachievements.org/api/v2/developers/1" + "example": "https://raweb.test/api/v2/developers/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://raweb.test/api/v2/developers/1" + } + }, + "readOnly": true + } + } + }, + "entries": { + "title": "entries", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://raweb.test/api/v2/entries/1" }, "self": { "title": "self", "type": "string", - "example": "https://retroachievements.org/api/v2/developers/1" + "example": "https://raweb.test/api/v2/entries/1" } }, "readOnly": true @@ -1774,7 +2696,7 @@ "title": "iconUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/assets/images/system/md.png" + "example": "https://raweb.test/assets/images/system/md.png" }, "active": { "title": "active", @@ -1812,7 +2734,7 @@ "title": "avatarUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/UserPic/claireboehm.png" + "example": "https://raweb.test/media/UserPic/claireboehm.png" }, "motto": { "title": "motto", From 60d44ed5daf6ddc5c6713babcfe3d0afee7bf2c6 Mon Sep 17 00:00:00 2001 From: Chew Date: Fri, 13 Feb 2026 16:43:26 -0600 Subject: [PATCH 3/8] update spec with player-game, use api url in examples --- docs/v2/retroachievements.json | 356 ++++++++++++++++++++++++++++++--- 1 file changed, 330 insertions(+), 26 deletions(-) diff --git a/docs/v2/retroachievements.json b/docs/v2/retroachievements.json index 06a7bad..d881baa 100644 --- a/docs/v2/retroachievements.json +++ b/docs/v2/retroachievements.json @@ -1759,6 +1759,146 @@ } } } + }, + "/users/{user}/player-games": { + "get": { + "tags": ["Users"], + "summary": "Show playerGames", + "description": "", + "operationId": "users.playerGames", + "parameters": [ + { + "name": "user", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "01K4Y87MWZ3Q9WC9EFFT6JKSNP": { + "value": "01K4Y87MWZ3Q9WC9EFFT6JKSNP" + }, + "01K4Y87VCKZ0HCW9M95BPVZ2T8": { + "value": "01K4Y87VCKZ0HCW9M95BPVZ2T8" + }, + "01K4Y87BXTWJWX795ZTVS0FQBF": { + "value": "01K4Y87BXTWJWX795ZTVS0FQBF" + } + } + } + ], + "responses": { + "200": { + "description": "ShowRelated users", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.player-games.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/users/{user}/relationships/player-games": { + "get": { + "tags": ["Users"], + "summary": "Show playerGames relation", + "description": "", + "operationId": "users.playerGames.show", + "parameters": [ + { + "name": "user", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "01K4Y87MWZ3Q9WC9EFFT6JKSNP": { + "value": "01K4Y87MWZ3Q9WC9EFFT6JKSNP" + }, + "01K4Y87VCKZ0HCW9M95BPVZ2T8": { + "value": "01K4Y87VCKZ0HCW9M95BPVZ2T8" + }, + "01K4Y87BXTWJWX795ZTVS0FQBF": { + "value": "01K4Y87BXTWJWX795ZTVS0FQBF" + } + } + } + ], + "responses": { + "200": { + "description": "Show users", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.users.relationship.playerGames.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } } }, "components": { @@ -1893,12 +2033,12 @@ "related": { "title": "related", "type": "string", - "example": "https://raweb.test/api/v2/games/1" + "example": "https://api.retroachievements.org/v2/games/1" }, "self": { "title": "self", "type": "string", - "example": "https://raweb.test/api/v2/games/1" + "example": "https://api.retroachievements.org/v2/games/1" } }, "readOnly": true @@ -2029,12 +2169,12 @@ "related": { "title": "related", "type": "string", - "example": "https://raweb.test/api/v2/developers/1" + "example": "https://api.retroachievements.org/v2/developers/1" }, "self": { "title": "self", "type": "string", - "example": "https://raweb.test/api/v2/developers/1" + "example": "https://api.retroachievements.org/v2/developers/1" } }, "readOnly": true @@ -2051,12 +2191,12 @@ "related": { "title": "related", "type": "string", - "example": "https://raweb.test/api/v2/achievement-sets/1" + "example": "https://api.retroachievements.org/v2/achievement-sets/1" }, "self": { "title": "self", "type": "string", - "example": "https://raweb.test/api/v2/achievement-sets/1" + "example": "https://api.retroachievements.org/v2/achievement-sets/1" } }, "readOnly": true @@ -2073,12 +2213,12 @@ "related": { "title": "related", "type": "string", - "example": "https://raweb.test/api/v2/games/1" + "example": "https://api.retroachievements.org/v2/games/1" }, "self": { "title": "self", "type": "string", - "example": "https://raweb.test/api/v2/games/1" + "example": "https://api.retroachievements.org/v2/games/1" } }, "readOnly": true @@ -2212,12 +2352,12 @@ "related": { "title": "related", "type": "string", - "example": "https://raweb.test/api/v2/systems/1" + "example": "https://api.retroachievements.org/v2/systems/1" }, "self": { "title": "self", "type": "string", - "example": "https://raweb.test/api/v2/systems/1" + "example": "https://api.retroachievements.org/v2/systems/1" } }, "readOnly": true @@ -2234,12 +2374,12 @@ "related": { "title": "related", "type": "string", - "example": "https://raweb.test/api/v2/achievement-sets/1" + "example": "https://api.retroachievements.org/v2/achievement-sets/1" }, "self": { "title": "self", "type": "string", - "example": "https://raweb.test/api/v2/achievement-sets/1" + "example": "https://api.retroachievements.org/v2/achievement-sets/1" } }, "readOnly": true @@ -2369,12 +2509,12 @@ "related": { "title": "related", "type": "string", - "example": "https://raweb.test/api/v2/games/1" + "example": "https://api.retroachievements.org/v2/games/1" }, "self": { "title": "self", "type": "string", - "example": "https://raweb.test/api/v2/games/1" + "example": "https://api.retroachievements.org/v2/games/1" } }, "readOnly": true @@ -2391,12 +2531,12 @@ "related": { "title": "related", "type": "string", - "example": "https://raweb.test/api/v2/links/1" + "example": "https://api.retroachievements.org/v2/links/1" }, "self": { "title": "self", "type": "string", - "example": "https://raweb.test/api/v2/links/1" + "example": "https://api.retroachievements.org/v2/links/1" } }, "readOnly": true @@ -2460,12 +2600,12 @@ "related": { "title": "related", "type": "string", - "example": "https://raweb.test/api/v2/users/1" + "example": "https://api.retroachievements.org/v2/users/1" }, "self": { "title": "self", "type": "string", - "example": "https://raweb.test/api/v2/users/1" + "example": "https://api.retroachievements.org/v2/users/1" } }, "readOnly": true @@ -2482,12 +2622,12 @@ "related": { "title": "related", "type": "string", - "example": "https://raweb.test/api/v2/leaderboards/1" + "example": "https://api.retroachievements.org/v2/leaderboards/1" }, "self": { "title": "self", "type": "string", - "example": "https://raweb.test/api/v2/leaderboards/1" + "example": "https://api.retroachievements.org/v2/leaderboards/1" } }, "readOnly": true @@ -2595,12 +2735,12 @@ "related": { "title": "related", "type": "string", - "example": "https://raweb.test/api/v2/games/1" + "example": "https://api.retroachievements.org/v2/games/1" }, "self": { "title": "self", "type": "string", - "example": "https://raweb.test/api/v2/games/1" + "example": "https://api.retroachievements.org/v2/games/1" } }, "readOnly": true @@ -2617,12 +2757,12 @@ "related": { "title": "related", "type": "string", - "example": "https://raweb.test/api/v2/developers/1" + "example": "https://api.retroachievements.org/v2/developers/1" }, "self": { "title": "self", "type": "string", - "example": "https://raweb.test/api/v2/developers/1" + "example": "https://api.retroachievements.org/v2/developers/1" } }, "readOnly": true @@ -2639,12 +2779,132 @@ "related": { "title": "related", "type": "string", - "example": "https://raweb.test/api/v2/entries/1" + "example": "https://api.retroachievements.org/v2/entries/1" }, "self": { "title": "self", "type": "string", - "example": "https://raweb.test/api/v2/entries/1" + "example": "https://api.retroachievements.org/v2/entries/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + "resources.player-games.resource.fetch": { + "title": "Resource/Player-game/Fetch", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "player-games", + "type": "string" + }, + "id": { + "type": "string", + "example": "9166" + }, + "attributes": { + "type": "object", + "properties": { + "lastPlayedAt": { + "title": "lastPlayedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:32:54.000000Z" + }, + "firstUnlockAt": { + "title": "firstUnlockAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T04:32:56.000000Z" + }, + "lastUnlockAt": { + "title": "lastUnlockAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:10:24.000000Z" + }, + "lastUnlockHardcoreAt": { + "title": "lastUnlockHardcoreAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:10:24.000000Z" + }, + "beatenAt": { + "title": "beatenAt", + "type": "string", + "readOnly": true + }, + "beatenHardcoreAt": { + "title": "beatenHardcoreAt", + "type": "string", + "readOnly": true + }, + "playtimeTotal": { + "title": "playtimeTotal", + "type": "number", + "readOnly": true, + "example": 8758 + }, + "timeToBeat": { + "title": "timeToBeat", + "type": "number", + "readOnly": true + }, + "timeToBeatHardcore": { + "title": "timeToBeatHardcore", + "type": "number", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievementSets": { + "title": "achievementSets", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/9166" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/9166" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/9166" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/9166" } }, "readOnly": true @@ -2707,6 +2967,23 @@ } } }, + "resources.users.relationship.playerGames.fetch": { + "title": "Resource/User/Relationship/PlayerGames/Fetch", + "type": "object", + "required": ["type", "id"], + "properties": { + "type": { + "title": "type", + "default": "player-games", + "type": "string" + }, + "id": { + "title": "id", + "type": "string", + "example": "9166" + } + } + }, "resources.users.resource.fetch": { "title": "Resource/User/Fetch", "type": "object", @@ -2824,6 +3101,33 @@ "readOnly": true } } + }, + "relationships": { + "type": "object", + "properties": { + "playerGames": { + "title": "playerGames", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y87MWZ3Q9WC9EFFT6JKSNP" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y87MWZ3Q9WC9EFFT6JKSNP" + } + }, + "readOnly": true + } + } + } + } } } } From 41cb3aa9a26be8af22364ce36f62f4a2bdd1162f Mon Sep 17 00:00:00 2001 From: Chew Date: Wed, 25 Feb 2026 15:41:11 -0600 Subject: [PATCH 4/8] update spec with player-achievement-sets --- docs/v2/retroachievements.json | 366 ++++++++++++++++++++++++++++++++- 1 file changed, 359 insertions(+), 7 deletions(-) diff --git a/docs/v2/retroachievements.json b/docs/v2/retroachievements.json index d881baa..472e606 100644 --- a/docs/v2/retroachievements.json +++ b/docs/v2/retroachievements.json @@ -1899,6 +1899,146 @@ } } } + }, + "/users/{user}/player-achievement-sets": { + "get": { + "tags": ["Users"], + "summary": "Show playerAchievementSets", + "description": "", + "operationId": "users.playerAchievementSets", + "parameters": [ + { + "name": "user", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "01K4Y87MWZ3Q9WC9EFFT6JKSNP": { + "value": "01K4Y87MWZ3Q9WC9EFFT6JKSNP" + }, + "01K4Y87VCKZ0HCW9M95BPVZ2T8": { + "value": "01K4Y87VCKZ0HCW9M95BPVZ2T8" + }, + "01K4Y87BXTWJWX795ZTVS0FQBF": { + "value": "01K4Y87BXTWJWX795ZTVS0FQBF" + } + } + } + ], + "responses": { + "200": { + "description": "ShowRelated users", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.player-achievement-sets.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/users/{user}/relationships/player-achievement-sets": { + "get": { + "tags": ["Users"], + "summary": "Show playerAchievementSets relation", + "description": "", + "operationId": "users.playerAchievementSets.show", + "parameters": [ + { + "name": "user", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "01K4Y87MWZ3Q9WC9EFFT6JKSNP": { + "value": "01K4Y87MWZ3Q9WC9EFFT6JKSNP" + }, + "01K4Y87VCKZ0HCW9M95BPVZ2T8": { + "value": "01K4Y87VCKZ0HCW9M95BPVZ2T8" + }, + "01K4Y87BXTWJWX795ZTVS0FQBF": { + "value": "01K4Y87BXTWJWX795ZTVS0FQBF" + } + } + } + ], + "responses": { + "200": { + "description": "Show users", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.users.relationship.playerAchievementSets.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } } }, "components": { @@ -2272,7 +2412,7 @@ "title": "imageTitleUrl", "type": "string", "readOnly": true, - "example": "https://raweb.test/media/Images/000002.png" + "example": "https://raweb.test/media/Images/000010.png" }, "imageIngameUrl": { "title": "imageIngameUrl", @@ -2795,6 +2935,157 @@ } } }, + "resources.player-achievement-sets.resource.fetch": { + "title": "Resource/Player-achievement-set/Fetch", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "player-achievement-sets", + "type": "string" + }, + "id": { + "type": "string", + "example": "17595" + }, + "attributes": { + "type": "object", + "properties": { + "achievementsUnlocked": { + "title": "achievementsUnlocked", + "type": "number", + "readOnly": true, + "example": 2 + }, + "achievementsUnlockedHardcore": { + "title": "achievementsUnlockedHardcore", + "type": "number", + "readOnly": true, + "example": 2 + }, + "points": { + "title": "points", + "type": "number", + "readOnly": true, + "example": 2 + }, + "pointsHardcore": { + "title": "pointsHardcore", + "type": "number", + "readOnly": true, + "example": 2 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 82 + }, + "completionPercentage": { + "title": "completionPercentage", + "type": "number", + "readOnly": true, + "example": "0.500000000" + }, + "completionPercentageHardcore": { + "title": "completionPercentageHardcore", + "type": "number", + "readOnly": true, + "example": "0.500000000" + }, + "lastUnlockAt": { + "title": "lastUnlockAt", + "type": "string", + "readOnly": true, + "example": "2026-02-16T07:58:33.000000Z" + }, + "lastUnlockHardcoreAt": { + "title": "lastUnlockHardcoreAt", + "type": "string", + "readOnly": true, + "example": "2026-02-16T07:58:33.000000Z" + }, + "completedAt": { + "title": "completedAt", + "type": "string", + "readOnly": true + }, + "completedHardcoreAt": { + "title": "completedHardcoreAt", + "type": "string", + "readOnly": true + }, + "timeTakenSeconds": { + "title": "timeTakenSeconds", + "type": "number", + "readOnly": true, + "example": 0 + }, + "timeTakenHardcoreSeconds": { + "title": "timeTakenHardcoreSeconds", + "type": "number", + "readOnly": true, + "example": 0 + }, + "setContext": { + "title": "setContext", + "type": "array", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievementSet": { + "title": "achievementSet", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/17595" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/17595" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/17595" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/17595" + } + }, + "readOnly": true + } + } + } + } + } + } + }, "resources.player-games.resource.fetch": { "title": "Resource/Player-game/Fetch", "type": "object", @@ -2846,19 +3137,19 @@ "type": "string", "readOnly": true }, - "playtimeTotal": { - "title": "playtimeTotal", + "playtimeTotalSeconds": { + "title": "playtimeTotalSeconds", "type": "number", "readOnly": true, "example": 8758 }, - "timeToBeat": { - "title": "timeToBeat", + "timeToBeatSeconds": { + "title": "timeToBeatSeconds", "type": "number", "readOnly": true }, - "timeToBeatHardcore": { - "title": "timeToBeatHardcore", + "timeToBeatHardcoreSeconds": { + "title": "timeToBeatHardcoreSeconds", "type": "number", "readOnly": true } @@ -2910,6 +3201,28 @@ "readOnly": true } } + }, + "playerAchievementSets": { + "title": "playerAchievementSets", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/9166" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/9166" + } + }, + "readOnly": true + } + } } } } @@ -2967,6 +3280,23 @@ } } }, + "resources.users.relationship.playerAchievementSets.fetch": { + "title": "Resource/User/Relationship/PlayerAchievementSets/Fetch", + "type": "object", + "required": ["type", "id"], + "properties": { + "type": { + "title": "type", + "default": "player-achievement-sets", + "type": "string" + }, + "id": { + "title": "id", + "type": "string", + "example": "17595" + } + } + }, "resources.users.relationship.playerGames.fetch": { "title": "Resource/User/Relationship/PlayerGames/Fetch", "type": "object", @@ -3105,6 +3435,28 @@ "relationships": { "type": "object", "properties": { + "playerAchievementSets": { + "title": "playerAchievementSets", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y87MWZ3Q9WC9EFFT6JKSNP" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y87MWZ3Q9WC9EFFT6JKSNP" + } + }, + "readOnly": true + } + } + }, "playerGames": { "title": "playerGames", "type": "object", From 54cec6d5a188cd76545da1fcf419169c59d1d930 Mon Sep 17 00:00:00 2001 From: Chew Date: Thu, 9 Apr 2026 15:13:12 -0400 Subject: [PATCH 5/8] update spec --- docs/v2/retroachievements.json | 1162 +++++++++++++++++++++++++++++--- 1 file changed, 1075 insertions(+), 87 deletions(-) diff --git a/docs/v2/retroachievements.json b/docs/v2/retroachievements.json index 472e606..b7a6846 100644 --- a/docs/v2/retroachievements.json +++ b/docs/v2/retroachievements.json @@ -255,6 +255,146 @@ } } }, + "/achievements/{achievement}/player-achievements": { + "get": { + "tags": ["Achievements"], + "summary": "Show playerAchievements", + "description": "", + "operationId": "achievements.playerAchievements", + "parameters": [ + { + "name": "achievement", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "ShowRelated achievements", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.player-achievements.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/achievements/{achievement}/relationships/player-achievements": { + "get": { + "tags": ["Achievements"], + "summary": "Show playerAchievements relation", + "description": "", + "operationId": "achievements.playerAchievements.show", + "parameters": [ + { + "name": "achievement", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show achievements", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.achievements.relationship.playerAchievements.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, "/achievement-sets/{achievement_set}": { "get": { "tags": ["Achievement-sets"], @@ -322,6 +462,180 @@ } } }, + "/events": { + "get": { + "tags": ["Events"], + "summary": "Get all events", + "description": "", + "operationId": "events.index", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "page[number]", + "in": "query", + "description": "The page number for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "sort", + "in": "query", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "id", + "-id", + "title", + "-title", + "sortTitle", + "-sortTitle", + "activeFrom", + "-activeFrom" + ], + "type": "string" + } + } + }, + { + "name": "filter[id]", + "in": "query", + "description": "A list of ids to filter by.", + "required": false, + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "default": [], + "type": "array", + "items": { + "type": "string" + } + }, + "examples": { + "empty": { + "value": [] + }, + "3": { + "value": ["3"] + } + } + } + ], + "responses": { + "200": { + "description": "Index events", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.events.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/events/{event}": { + "get": { + "tags": ["Events"], + "summary": "Show one event", + "description": "", + "operationId": "events.show", + "parameters": [ + { + "name": "event", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show events", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "$ref": "#/components/schemas/resources.events.resource.fetch" + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, "/games": { "get": { "tags": ["Games"], @@ -534,6 +848,146 @@ } } }, + "/games/{game}/hashes": { + "get": { + "tags": ["Games"], + "summary": "Show hashes", + "description": "", + "operationId": "games.hashes", + "parameters": [ + { + "name": "game", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "ShowRelated games", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.game-hashes.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/games/{game}/relationships/hashes": { + "get": { + "tags": ["Games"], + "summary": "Show hashes relation", + "description": "", + "operationId": "games.hashes.show", + "parameters": [ + { + "name": "game", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show games", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.games.relationship.hashes.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, "/hubs": { "get": { "tags": ["Hubs"], @@ -1644,19 +2098,153 @@ } }, { - "name": "filter[role]", - "in": "query", - "description": "Applies the role scope.", - "required": false, + "name": "filter[role]", + "in": "query", + "description": "Applies the role scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Index users", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.users.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/users/{user}": { + "get": { + "tags": ["Users"], + "summary": "Show one user", + "description": "", + "operationId": "users.show", + "parameters": [ + { + "name": "user", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "01K4Y87MWZ3Q9WC9EFFT6JKSNP": { + "value": "01K4Y87MWZ3Q9WC9EFFT6JKSNP" + }, + "01K4Y87VCKZ0HCW9M95BPVZ2T8": { + "value": "01K4Y87VCKZ0HCW9M95BPVZ2T8" + }, + "01K4Y87BXTWJWX795ZTVS0FQBF": { + "value": "01K4Y87BXTWJWX795ZTVS0FQBF" + } + } + } + ], + "responses": { + "200": { + "description": "Show users", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "$ref": "#/components/schemas/resources.users.resource.fetch" + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/users/{user}/player-achievements": { + "get": { + "tags": ["Users"], + "summary": "Show playerAchievements", + "description": "", + "operationId": "users.playerAchievements", + "parameters": [ + { + "name": "user", + "in": "path", + "required": true, "allowEmptyValue": false, "schema": { - "type": "boolean" + "type": "string" + }, + "examples": { + "01K4Y87MWZ3Q9WC9EFFT6JKSNP": { + "value": "01K4Y87MWZ3Q9WC9EFFT6JKSNP" + }, + "01K4Y87VCKZ0HCW9M95BPVZ2T8": { + "value": "01K4Y87VCKZ0HCW9M95BPVZ2T8" + }, + "01K4Y87BXTWJWX795ZTVS0FQBF": { + "value": "01K4Y87BXTWJWX795ZTVS0FQBF" + } } } ], "responses": { "200": { - "description": "Index users", + "description": "ShowRelated users", "content": { "application/vnd.api+json": { "schema": { @@ -1676,7 +2264,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.users.resource.fetch" + "$ref": "#/components/schemas/resources.player-achievements.resource.fetch" } } } @@ -1689,16 +2277,19 @@ }, "401": { "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" } } } }, - "/users/{user}": { + "/users/{user}/relationships/player-achievements": { "get": { "tags": ["Users"], - "summary": "Show one user", + "summary": "Show playerAchievements relation", "description": "", - "operationId": "users.show", + "operationId": "users.playerAchievements.show", "parameters": [ { "name": "user", @@ -1741,7 +2332,10 @@ } }, "data": { - "$ref": "#/components/schemas/resources.users.resource.fetch" + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.users.relationship.playerAchievements.fetch" + } } } } @@ -1760,12 +2354,12 @@ } } }, - "/users/{user}/player-games": { + "/users/{user}/player-achievement-sets": { "get": { "tags": ["Users"], - "summary": "Show playerGames", + "summary": "Show playerAchievementSets", "description": "", - "operationId": "users.playerGames", + "operationId": "users.playerAchievementSets", "parameters": [ { "name": "user", @@ -1810,7 +2404,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.player-games.resource.fetch" + "$ref": "#/components/schemas/resources.player-achievement-sets.resource.fetch" } } } @@ -1830,12 +2424,12 @@ } } }, - "/users/{user}/relationships/player-games": { + "/users/{user}/relationships/player-achievement-sets": { "get": { "tags": ["Users"], - "summary": "Show playerGames relation", + "summary": "Show playerAchievementSets relation", "description": "", - "operationId": "users.playerGames.show", + "operationId": "users.playerAchievementSets.show", "parameters": [ { "name": "user", @@ -1880,7 +2474,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.users.relationship.playerGames.fetch" + "$ref": "#/components/schemas/resources.users.relationship.playerAchievementSets.fetch" } } } @@ -1900,12 +2494,12 @@ } } }, - "/users/{user}/player-achievement-sets": { + "/users/{user}/player-games": { "get": { "tags": ["Users"], - "summary": "Show playerAchievementSets", + "summary": "Show playerGames", "description": "", - "operationId": "users.playerAchievementSets", + "operationId": "users.playerGames", "parameters": [ { "name": "user", @@ -1950,7 +2544,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.player-achievement-sets.resource.fetch" + "$ref": "#/components/schemas/resources.player-games.resource.fetch" } } } @@ -1970,12 +2564,12 @@ } } }, - "/users/{user}/relationships/player-achievement-sets": { + "/users/{user}/relationships/player-games": { "get": { "tags": ["Users"], - "summary": "Show playerAchievementSets relation", + "summary": "Show playerGames relation", "description": "", - "operationId": "users.playerAchievementSets.show", + "operationId": "users.playerGames.show", "parameters": [ { "name": "user", @@ -2020,7 +2614,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.users.relationship.playerAchievementSets.fetch" + "$ref": "#/components/schemas/resources.users.relationship.playerGames.fetch" } } } @@ -2150,13 +2744,13 @@ "title": "createdAt", "type": "string", "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "example": "2025-09-12T07:01:58.000000Z" }, "updatedAt": { "title": "updatedAt", "type": "string", "readOnly": true, - "example": "2026-01-09T02:06:22.000000Z" + "example": "2026-01-09T03:06:22.000000Z" } } }, @@ -2189,6 +2783,23 @@ } } }, + "resources.achievements.relationship.playerAchievements.fetch": { + "title": "Resource/Achievement/Relationship/PlayerAchievements/Fetch", + "type": "object", + "required": ["type", "id"], + "properties": { + "type": { + "title": "type", + "default": "player-achievements", + "type": "string" + }, + "id": { + "title": "id", + "type": "string", + "example": "71528" + } + } + }, "resources.achievements.resource.fetch": { "title": "Resource/Achievement/Fetch", "type": "object", @@ -2262,45 +2873,203 @@ "title": "unlocksTotal", "type": "number", "readOnly": true, - "example": 81 + "example": 81 + }, + "unlocksHardcore": { + "title": "unlocksHardcore", + "type": "number", + "readOnly": true, + "example": 81 + }, + "unlockPercentage": { + "title": "unlockPercentage", + "type": "number", + "readOnly": true, + "example": 0.987804878 + }, + "unlockHardcorePercentage": { + "title": "unlockHardcorePercentage", + "type": "number", + "readOnly": true, + "example": 0.987804878 + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T07:01:58.000000Z" + }, + "modifiedAt": { + "title": "modifiedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T07:01:58.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "developer": { + "title": "developer", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/developers/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/developers/1" + } + }, + "readOnly": true + } + } + }, + "achievementSet": { + "title": "achievementSet", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + } + }, + "readOnly": true + } + } + }, + "games": { + "title": "games", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + }, + "playerAchievements": { + "title": "playerAchievements", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + "resources.events.resource.fetch": { + "title": "Resource/Event/Fetch", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "events", + "type": "string" + }, + "id": { + "type": "string", + "example": "3" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "readOnly": true + }, + "sortTitle": { + "title": "sortTitle", + "type": "string", + "readOnly": true + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true, + "example": "https://raweb.test/media/Images/000007.png" }, - "unlocksHardcore": { - "title": "unlocksHardcore", - "type": "number", + "state": { + "title": "state", + "type": "string", "readOnly": true, - "example": 81 + "example": "concluded" }, - "unlockPercentage": { - "title": "unlockPercentage", + "playersTotal": { + "title": "playersTotal", "type": "number", - "readOnly": true, - "example": 0.987804878 + "readOnly": true }, - "unlockHardcorePercentage": { - "title": "unlockHardcorePercentage", + "achievementsPublished": { + "title": "achievementsPublished", "type": "number", - "readOnly": true, - "example": 0.987804878 + "readOnly": true }, - "createdAt": { - "title": "createdAt", + "activeFrom": { + "title": "activeFrom", "type": "string", "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "example": "2026-02-07T00:00:00.000000Z" }, - "modifiedAt": { - "title": "modifiedAt", + "activeThrough": { + "title": "activeThrough", "type": "string", "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "example": "2026-02-28T00:00:00.000000Z" } } }, "relationships": { "type": "object", "properties": { - "developer": { - "title": "developer", + "awards": { + "title": "awards", "type": "object", "properties": { "links": { @@ -2309,42 +3078,79 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/developers/1" + "example": "https://api.retroachievements.org/v2/awards/3" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/developers/1" + "example": "https://api.retroachievements.org/v2/awards/3" } }, "readOnly": true } } + } + } + } + } + }, + "resources.game-hashes.resource.fetch": { + "title": "Resource/Game-hash/Fetch", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "game-hashes", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "raMd5": { + "title": "raMd5", + "type": "string", + "readOnly": true, + "example": "eDWamQy5GYZqRxvXkj6P6rjDULfnTddT" }, - "achievementSet": { - "title": "achievementSet", - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "related": { - "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" - }, - "self": { - "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" - } - }, - "readOnly": true - } - } + "name": { + "title": "name", + "type": "string", + "readOnly": true }, - "games": { - "title": "games", + "compatibility": { + "title": "compatibility", + "type": "string", + "readOnly": true + }, + "patchUrl": { + "title": "patchUrl", + "type": "string", + "readOnly": true + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:57.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T07:01:57.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "game": { + "title": "game", "type": "object", "properties": { "links": { @@ -2369,6 +3175,23 @@ } } }, + "resources.games.relationship.hashes.fetch": { + "title": "Resource/Game/Relationship/Hashes/Fetch", + "type": "object", + "required": ["type", "id"], + "properties": { + "type": { + "title": "type", + "default": "game-hashes", + "type": "string" + }, + "id": { + "title": "id", + "type": "string", + "example": "1" + } + } + }, "resources.games.resource.fetch": { "title": "Resource/Game/Fetch", "type": "object", @@ -2525,6 +3348,28 @@ "readOnly": true } } + }, + "hashes": { + "title": "hashes", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/hashes/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/hashes/1" + } + }, + "readOnly": true + } + } } } } @@ -2626,13 +3471,13 @@ "title": "createdAt", "type": "string", "readOnly": true, - "example": "2025-09-12T06:04:29.000000Z" + "example": "2025-09-12T07:04:29.000000Z" }, "updatedAt": { "title": "updatedAt", "type": "string", "readOnly": true, - "example": "2025-09-12T06:04:29.000000Z" + "example": "2025-09-12T07:04:29.000000Z" } } }, @@ -2852,13 +3697,13 @@ "title": "createdAt", "type": "string", "readOnly": true, - "example": "2025-09-12T06:04:12.000000Z" + "example": "2025-09-12T07:04:12.000000Z" }, "updatedAt": { "title": "updatedAt", "type": "string", "readOnly": true, - "example": "2025-09-12T06:04:12.000000Z" + "example": "2025-09-12T07:04:12.000000Z" } } }, @@ -2998,13 +3843,13 @@ "title": "lastUnlockAt", "type": "string", "readOnly": true, - "example": "2026-02-16T07:58:33.000000Z" + "example": "2026-02-16T08:58:33.000000Z" }, "lastUnlockHardcoreAt": { "title": "lastUnlockHardcoreAt", "type": "string", "readOnly": true, - "example": "2026-02-16T07:58:33.000000Z" + "example": "2026-02-16T08:58:33.000000Z" }, "completedAt": { "title": "completedAt", @@ -3086,6 +3931,110 @@ } } }, + "resources.player-achievements.resource.fetch": { + "title": "Resource/Player-achievement/Fetch", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "player-achievements", + "type": "string" + }, + "id": { + "type": "string", + "example": "71528" + }, + "attributes": { + "type": "object", + "properties": { + "unlockedAt": { + "title": "unlockedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T07:10:24.000000Z" + }, + "unlockedHardcoreAt": { + "title": "unlockedHardcoreAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T07:10:24.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievement": { + "title": "achievement", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievements/71528" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievements/71528" + } + }, + "readOnly": true + } + } + }, + "user": { + "title": "user", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/71528" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/71528" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/71528" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/71528" + } + }, + "readOnly": true + } + } + } + } + } + } + }, "resources.player-games.resource.fetch": { "title": "Resource/Player-game/Fetch", "type": "object", @@ -3107,25 +4056,25 @@ "title": "lastPlayedAt", "type": "string", "readOnly": true, - "example": "2025-09-12T06:32:54.000000Z" + "example": "2025-09-12T07:32:54.000000Z" }, "firstUnlockAt": { "title": "firstUnlockAt", "type": "string", "readOnly": true, - "example": "2025-09-12T04:32:56.000000Z" + "example": "2025-09-12T05:32:56.000000Z" }, "lastUnlockAt": { "title": "lastUnlockAt", "type": "string", "readOnly": true, - "example": "2025-09-12T06:10:24.000000Z" + "example": "2025-09-12T07:10:24.000000Z" }, "lastUnlockHardcoreAt": { "title": "lastUnlockHardcoreAt", "type": "string", "readOnly": true, - "example": "2025-09-12T06:10:24.000000Z" + "example": "2025-09-12T07:10:24.000000Z" }, "beatenAt": { "title": "beatenAt", @@ -3297,6 +4246,23 @@ } } }, + "resources.users.relationship.playerAchievements.fetch": { + "title": "Resource/User/Relationship/PlayerAchievements/Fetch", + "type": "object", + "required": ["type", "id"], + "properties": { + "type": { + "title": "type", + "default": "player-achievements", + "type": "string" + }, + "id": { + "title": "id", + "type": "string", + "example": "71528" + } + } + }, "resources.users.relationship.playerGames.fetch": { "title": "Resource/User/Relationship/PlayerGames/Fetch", "type": "object", @@ -3383,13 +4349,13 @@ "title": "joinedAt", "type": "string", "readOnly": true, - "example": "2025-09-12T06:01:51.000000Z" + "example": "2025-09-12T07:01:51.000000Z" }, "lastActivityAt": { "title": "lastActivityAt", "type": "string", "readOnly": true, - "example": "2025-09-12T06:24:12.000000Z" + "example": "2025-09-12T07:24:12.000000Z" }, "deletedAt": { "title": "deletedAt", @@ -3435,6 +4401,28 @@ "relationships": { "type": "object", "properties": { + "playerAchievements": { + "title": "playerAchievements", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y87MWZ3Q9WC9EFFT6JKSNP" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y87MWZ3Q9WC9EFFT6JKSNP" + } + }, + "readOnly": true + } + } + }, "playerAchievementSets": { "title": "playerAchievementSets", "type": "object", From f835a05cad698fcc72a40bb214369e2a452831c4 Mon Sep 17 00:00:00 2001 From: Chew Date: Tue, 5 May 2026 17:46:06 -0500 Subject: [PATCH 6/8] update spec --- docs/v2/retroachievements.json | 7013 ++++++++++++++++++++++++++++++-- 1 file changed, 6676 insertions(+), 337 deletions(-) diff --git a/docs/v2/retroachievements.json b/docs/v2/retroachievements.json index b7a6846..1092d62 100644 --- a/docs/v2/retroachievements.json +++ b/docs/v2/retroachievements.json @@ -73,13 +73,13 @@ } }, { - "name": "filter[id]", + "name": "filter[id][]", "in": "query", "description": "A list of ids to filter by.", "required": false, "allowEmptyValue": false, "style": "form", - "explode": false, + "explode": true, "schema": { "default": [], "type": "array", @@ -123,23 +123,24 @@ } }, { - "name": "filter[type]", + "name": "filter[type][]", "in": "query", "description": "A list of types to filter by.", "required": false, "allowEmptyValue": false, "style": "form", - "explode": false, + "explode": true, "schema": { - "default": { - "value": [] - }, + "default": [], "type": "array", "items": { "type": "string" } }, "examples": { + "empty": { + "value": [] + }, "progression": { "value": "progression" }, @@ -173,6 +174,776 @@ "items": { "$ref": "#/components/schemas/resources.achievements.resource.fetch" } + }, + "included": { + "type": "array", + "items": { + "oneOf": [ + { + "title": "Resource/Developer/Fetch", + "description": "May not be present unless \"developer\" is in the \"include\" header. See `.data[].relationships.developer.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "users", + "type": "string" + }, + "id": { + "type": "string", + "example": "01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "attributes": { + "type": "object", + "properties": { + "displayName": { + "title": "displayName", + "type": "string", + "readOnly": true, + "example": "Root" + }, + "avatarUrl": { + "title": "avatarUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/UserPic/Root.png" + }, + "motto": { + "title": "motto", + "type": "string", + "readOnly": true, + "example": "" + }, + "points": { + "title": "points", + "type": "number", + "readOnly": true, + "example": 1236 + }, + "pointsHardcore": { + "title": "pointsHardcore", + "type": "number", + "readOnly": true, + "example": 7155 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 19749 + }, + "yieldUnlocks": { + "title": "yieldUnlocks", + "type": "number", + "readOnly": true, + "example": 0 + }, + "yieldPoints": { + "title": "yieldPoints", + "type": "number", + "readOnly": true, + "example": 0 + }, + "joinedAt": { + "title": "joinedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:22.000000Z" + }, + "lastActivityAt": { + "title": "lastActivityAt", + "type": "string", + "readOnly": true, + "example": "2026-04-18T03:30:13.000000Z" + }, + "deletedAt": { + "title": "deletedAt", + "type": "string", + "readOnly": true + }, + "isUnranked": { + "title": "isUnranked", + "type": "boolean", + "readOnly": true, + "example": false + }, + "isUserWallActive": { + "title": "isUserWallActive", + "type": "boolean", + "readOnly": true, + "example": true + }, + "richPresence": { + "title": "richPresence", + "type": "string", + "readOnly": true, + "example": "Playing Assumenda Pariatur" + }, + "richPresenceUpdatedAt": { + "title": "richPresenceUpdatedAt", + "type": "string", + "readOnly": true, + "example": "2026-04-18T04:34:36.000000Z" + }, + "visibleRole": { + "title": "visibleRole", + "type": "string", + "readOnly": true, + "example": { + "id": 4, + "name": "game-hash-manager", + "display": 3, + "guard_name": "web", + "created_at": "2025-09-12T06:01:21.000000Z", + "updated_at": "2025-09-12T06:01:21.000000Z", + "pivot": { + "model_type": "user", + "model_id": 1, + "role_id": 4 + } + } + }, + "displayableRoles": { + "title": "displayableRoles", + "type": "array", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "playerAchievements": { + "title": "playerAchievements", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievements\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerAchievementSets": { + "title": "playerAchievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerGames": { + "title": "playerGames", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerGames\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "wallComments": { + "title": "wallComments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"wallComments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "awards": { + "title": "awards", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"awards\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/AchievementSet/Fetch", + "description": "May not be present unless \"achievementSet\" is in the \"include\" header. See `.data[].relationships.achievementSet.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "achievement-sets", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "readOnly": true, + "example": "Quia Impedit Libero Quam" + }, + "pointsTotal": { + "title": "pointsTotal", + "type": "number", + "readOnly": true, + "example": 189 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 341 + }, + "achievementsPublished": { + "title": "achievementsPublished", + "type": "number", + "readOnly": true, + "example": 20 + }, + "achievementsUnpublished": { + "title": "achievementsUnpublished", + "type": "number", + "readOnly": true, + "example": 0 + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true + }, + "achievementsFirstPublishedAt": { + "title": "achievementsFirstPublishedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T07:20:03.000000Z" + }, + "types": { + "title": "types", + "type": "array", + "readOnly": true + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:58.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true, + "example": "2026-01-09T02:06:22.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "games": { + "title": "games", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"games\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Comments/Fetch", + "description": "May not be present unless \"comments\" is in the \"include\" header. See `.data[].relationships.comments.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "comments", + "type": "string" + }, + "id": { + "type": "string", + "example": "3" + }, + "attributes": { + "type": "object", + "properties": { + "body": { + "title": "body", + "type": "string", + "readOnly": true, + "example": "Excited to play this!" + }, + "authorAvatarUrl": { + "title": "authorAvatarUrl", + "type": "string", + "readOnly": true + }, + "authorDisplayName": { + "title": "authorDisplayName", + "type": "string", + "readOnly": true + }, + "authorId": { + "title": "authorId", + "type": "string", + "readOnly": true + }, + "permalink": { + "title": "permalink", + "type": "string", + "readOnly": true, + "example": "" + }, + "submittedAt": { + "title": "submittedAt", + "type": "string", + "readOnly": true, + "example": "2026-05-05T22:41:05.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "author": { + "title": "author", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"author\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/3" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/3" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Games/Fetch", + "description": "May not be present unless \"games\" is in the \"include\" header. See `.data[].relationships.games.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "games", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "example": "Quia Impedit Libero Quam" + }, + "sortTitle": { + "title": "sortTitle", + "type": "string", + "example": "quia impedit libero quam" + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "imageBoxArtUrl": { + "title": "imageBoxArtUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "imageTitleUrl": { + "title": "imageTitleUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000010.png" + }, + "imageIngameUrl": { + "title": "imageIngameUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "releasedAt": { + "title": "releasedAt", + "type": "string" + }, + "releasedAtGranularity": { + "title": "releasedAtGranularity", + "type": "string" + }, + "playersTotal": { + "title": "playersTotal", + "type": "number", + "example": 82 + }, + "playersHardcore": { + "title": "playersHardcore", + "type": "number", + "example": 82 + }, + "achievementsPublished": { + "title": "achievementsPublished", + "type": "number", + "example": 20 + }, + "achievementsUnpublished": { + "title": "achievementsUnpublished", + "type": "number", + "example": 0 + }, + "pointsTotal": { + "title": "pointsTotal", + "type": "number", + "example": 189 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "example": 341 + }, + "timesBeaten": { + "title": "timesBeaten", + "type": "number", + "example": 0 + }, + "timesBeatenHardcore": { + "title": "timesBeatenHardcore", + "type": "number", + "example": 1 + }, + "medianTimeToBeatMinutes": { + "title": "medianTimeToBeatMinutes", + "type": "number" + }, + "medianTimeToBeatHardcoreMinutes": { + "title": "medianTimeToBeatHardcoreMinutes", + "type": "number", + "example": 5153 + } + } + }, + "relationships": { + "type": "object", + "properties": { + "system": { + "title": "system", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"system\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/systems/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/systems/1" + } + }, + "readOnly": true + } + } + }, + "achievementSets": { + "title": "achievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + } + }, + "readOnly": true + } + } + }, + "comments": { + "title": "comments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"comments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + } + }, + "readOnly": true + } + } + }, + "hashes": { + "title": "hashes", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"hashes\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/hashes/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/hashes/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/PlayerAchievements/Fetch", + "description": "May not be present unless \"playerAchievements\" is in the \"include\" header. See `.data[].relationships.playerAchievements.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "player-achievements", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "unlockedAt": { + "title": "unlockedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T07:20:03.000000Z" + }, + "unlockedHardcoreAt": { + "title": "unlockedHardcoreAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T07:20:03.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievement": { + "title": "achievement", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievement\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievements/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievements/1" + } + }, + "readOnly": true + } + } + }, + "user": { + "title": "user", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + } + ] + } } } } @@ -237,6 +1008,916 @@ }, "data": { "$ref": "#/components/schemas/resources.achievements.resource.fetch" + }, + "included": { + "type": "array", + "items": { + "oneOf": [ + { + "title": "Resource/Developer/Fetch", + "description": "May not be present unless \"developer\" is in the \"include\" header. See `.data[].relationships.developer.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "users", + "type": "string" + }, + "id": { + "type": "string", + "example": "01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "attributes": { + "type": "object", + "properties": { + "displayName": { + "title": "displayName", + "type": "string", + "readOnly": true, + "example": "Root" + }, + "avatarUrl": { + "title": "avatarUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/UserPic/Root.png" + }, + "motto": { + "title": "motto", + "type": "string", + "readOnly": true, + "example": "" + }, + "points": { + "title": "points", + "type": "number", + "readOnly": true, + "example": 1236 + }, + "pointsHardcore": { + "title": "pointsHardcore", + "type": "number", + "readOnly": true, + "example": 7155 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 19749 + }, + "yieldUnlocks": { + "title": "yieldUnlocks", + "type": "number", + "readOnly": true, + "example": 0 + }, + "yieldPoints": { + "title": "yieldPoints", + "type": "number", + "readOnly": true, + "example": 0 + }, + "joinedAt": { + "title": "joinedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:22.000000Z" + }, + "lastActivityAt": { + "title": "lastActivityAt", + "type": "string", + "readOnly": true, + "example": "2026-04-18T03:30:13.000000Z" + }, + "deletedAt": { + "title": "deletedAt", + "type": "string", + "readOnly": true + }, + "isUnranked": { + "title": "isUnranked", + "type": "boolean", + "readOnly": true, + "example": false + }, + "isUserWallActive": { + "title": "isUserWallActive", + "type": "boolean", + "readOnly": true, + "example": true + }, + "richPresence": { + "title": "richPresence", + "type": "string", + "readOnly": true, + "example": "Playing Assumenda Pariatur" + }, + "richPresenceUpdatedAt": { + "title": "richPresenceUpdatedAt", + "type": "string", + "readOnly": true, + "example": "2026-04-18T04:34:36.000000Z" + }, + "visibleRole": { + "title": "visibleRole", + "type": "string", + "readOnly": true, + "example": { + "id": 4, + "name": "game-hash-manager", + "display": 3, + "guard_name": "web", + "created_at": "2025-09-12T06:01:21.000000Z", + "updated_at": "2025-09-12T06:01:21.000000Z", + "pivot": { + "model_type": "user", + "model_id": 1, + "role_id": 4 + } + } + }, + "displayableRoles": { + "title": "displayableRoles", + "type": "array", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "playerAchievements": { + "title": "playerAchievements", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievements\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerAchievementSets": { + "title": "playerAchievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerGames": { + "title": "playerGames", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerGames\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "wallComments": { + "title": "wallComments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"wallComments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "awards": { + "title": "awards", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"awards\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/AchievementSet/Fetch", + "description": "May not be present unless \"achievementSet\" is in the \"include\" header. See `.data[].relationships.achievementSet.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "achievement-sets", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "readOnly": true, + "example": "Quia Impedit Libero Quam" + }, + "pointsTotal": { + "title": "pointsTotal", + "type": "number", + "readOnly": true, + "example": 189 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 341 + }, + "achievementsPublished": { + "title": "achievementsPublished", + "type": "number", + "readOnly": true, + "example": 20 + }, + "achievementsUnpublished": { + "title": "achievementsUnpublished", + "type": "number", + "readOnly": true, + "example": 0 + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true + }, + "achievementsFirstPublishedAt": { + "title": "achievementsFirstPublishedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T07:20:03.000000Z" + }, + "types": { + "title": "types", + "type": "array", + "readOnly": true + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:58.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true, + "example": "2026-01-09T02:06:22.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "games": { + "title": "games", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"games\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Comments/Fetch", + "description": "May not be present unless \"comments\" is in the \"include\" header. See `.data[].relationships.comments.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "comments", + "type": "string" + }, + "id": { + "type": "string", + "example": "3" + }, + "attributes": { + "type": "object", + "properties": { + "body": { + "title": "body", + "type": "string", + "readOnly": true, + "example": "Excited to play this!" + }, + "authorAvatarUrl": { + "title": "authorAvatarUrl", + "type": "string", + "readOnly": true + }, + "authorDisplayName": { + "title": "authorDisplayName", + "type": "string", + "readOnly": true + }, + "authorId": { + "title": "authorId", + "type": "string", + "readOnly": true + }, + "permalink": { + "title": "permalink", + "type": "string", + "readOnly": true, + "example": "" + }, + "submittedAt": { + "title": "submittedAt", + "type": "string", + "readOnly": true, + "example": "2026-05-05T22:41:05.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "author": { + "title": "author", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"author\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/3" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/3" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Games/Fetch", + "description": "May not be present unless \"games\" is in the \"include\" header. See `.data[].relationships.games.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "games", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "example": "Quia Impedit Libero Quam" + }, + "sortTitle": { + "title": "sortTitle", + "type": "string", + "example": "quia impedit libero quam" + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "imageBoxArtUrl": { + "title": "imageBoxArtUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "imageTitleUrl": { + "title": "imageTitleUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000010.png" + }, + "imageIngameUrl": { + "title": "imageIngameUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "releasedAt": { + "title": "releasedAt", + "type": "string" + }, + "releasedAtGranularity": { + "title": "releasedAtGranularity", + "type": "string" + }, + "playersTotal": { + "title": "playersTotal", + "type": "number", + "example": 82 + }, + "playersHardcore": { + "title": "playersHardcore", + "type": "number", + "example": 82 + }, + "achievementsPublished": { + "title": "achievementsPublished", + "type": "number", + "example": 20 + }, + "achievementsUnpublished": { + "title": "achievementsUnpublished", + "type": "number", + "example": 0 + }, + "pointsTotal": { + "title": "pointsTotal", + "type": "number", + "example": 189 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "example": 341 + }, + "timesBeaten": { + "title": "timesBeaten", + "type": "number", + "example": 0 + }, + "timesBeatenHardcore": { + "title": "timesBeatenHardcore", + "type": "number", + "example": 1 + }, + "medianTimeToBeatMinutes": { + "title": "medianTimeToBeatMinutes", + "type": "number" + }, + "medianTimeToBeatHardcoreMinutes": { + "title": "medianTimeToBeatHardcoreMinutes", + "type": "number", + "example": 5153 + } + } + }, + "relationships": { + "type": "object", + "properties": { + "system": { + "title": "system", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"system\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/systems/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/systems/1" + } + }, + "readOnly": true + } + } + }, + "achievementSets": { + "title": "achievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + } + }, + "readOnly": true + } + } + }, + "comments": { + "title": "comments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"comments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + } + }, + "readOnly": true + } + } + }, + "hashes": { + "title": "hashes", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"hashes\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/hashes/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/hashes/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/PlayerAchievements/Fetch", + "description": "May not be present unless \"playerAchievements\" is in the \"include\" header. See `.data[].relationships.playerAchievements.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "player-achievements", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "unlockedAt": { + "title": "unlockedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T07:20:03.000000Z" + }, + "unlockedHardcoreAt": { + "title": "unlockedHardcoreAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T07:20:03.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievement": { + "title": "achievement", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievement\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievements/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievements/1" + } + }, + "readOnly": true + } + } + }, + "user": { + "title": "user", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + } + ] + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/achievements/{achievement}/comments": { + "get": { + "tags": ["Achievements"], + "summary": "Show comments", + "description": "", + "operationId": "achievements.comments", + "parameters": [ + { + "name": "achievement", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "ShowRelated achievements", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.comments.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/achievements/{achievement}/relationships/comments": { + "get": { + "tags": ["Achievements"], + "summary": "Show comments relation", + "description": "", + "operationId": "achievements.comments.show", + "parameters": [ + { + "name": "achievement", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show achievements", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.achievements.relationship.comments.fetch" + } } } } @@ -444,6 +2125,223 @@ }, "data": { "$ref": "#/components/schemas/resources.achievement-sets.resource.fetch" + }, + "included": { + "type": "array", + "items": { + "oneOf": [ + { + "title": "Resource/Games/Fetch", + "description": "May not be present unless \"games\" is in the \"include\" header. See `.data[].relationships.games.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "games", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "example": "Quia Impedit Libero Quam" + }, + "sortTitle": { + "title": "sortTitle", + "type": "string", + "example": "quia impedit libero quam" + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "imageBoxArtUrl": { + "title": "imageBoxArtUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "imageTitleUrl": { + "title": "imageTitleUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000010.png" + }, + "imageIngameUrl": { + "title": "imageIngameUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "releasedAt": { + "title": "releasedAt", + "type": "string" + }, + "releasedAtGranularity": { + "title": "releasedAtGranularity", + "type": "string" + }, + "playersTotal": { + "title": "playersTotal", + "type": "number", + "example": 82 + }, + "playersHardcore": { + "title": "playersHardcore", + "type": "number", + "example": 82 + }, + "achievementsPublished": { + "title": "achievementsPublished", + "type": "number", + "example": 20 + }, + "achievementsUnpublished": { + "title": "achievementsUnpublished", + "type": "number", + "example": 0 + }, + "pointsTotal": { + "title": "pointsTotal", + "type": "number", + "example": 189 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "example": 341 + }, + "timesBeaten": { + "title": "timesBeaten", + "type": "number", + "example": 0 + }, + "timesBeatenHardcore": { + "title": "timesBeatenHardcore", + "type": "number", + "example": 1 + }, + "medianTimeToBeatMinutes": { + "title": "medianTimeToBeatMinutes", + "type": "number" + }, + "medianTimeToBeatHardcoreMinutes": { + "title": "medianTimeToBeatHardcoreMinutes", + "type": "number", + "example": 5153 + } + } + }, + "relationships": { + "type": "object", + "properties": { + "system": { + "title": "system", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"system\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/systems/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/systems/1" + } + }, + "readOnly": true + } + } + }, + "achievementSets": { + "title": "achievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + } + }, + "readOnly": true + } + } + }, + "comments": { + "title": "comments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"comments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + } + }, + "readOnly": true + } + } + }, + "hashes": { + "title": "hashes", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"hashes\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/hashes/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/hashes/1" + } + }, + "readOnly": true + } + } + } + } + } + } + } + ] + } } } } @@ -512,13 +2410,13 @@ } }, { - "name": "filter[id]", + "name": "filter[id][]", "in": "query", "description": "A list of ids to filter by.", "required": false, "allowEmptyValue": false, "style": "form", - "explode": false, + "explode": true, "schema": { "default": [], "type": "array", @@ -560,6 +2458,87 @@ "items": { "$ref": "#/components/schemas/resources.events.resource.fetch" } + }, + "included": { + "type": "array", + "items": { + "oneOf": [ + { + "title": "Resource/Awards/Fetch", + "description": "May not be present unless \"awards\" is in the \"include\" header. See `.data[].relationships.awards.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "event-awards", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "tierIndex": { + "title": "tierIndex", + "type": "number", + "readOnly": true, + "example": 1 + }, + "label": { + "title": "label", + "type": "string", + "readOnly": true, + "example": "True" + }, + "pointsRequired": { + "title": "pointsRequired", + "type": "number", + "readOnly": true, + "example": 1 + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000008.png" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "event": { + "title": "event", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"event\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/events/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/events/1" + } + }, + "readOnly": true + } + } + } + } + } + } + } + ] + } } } } @@ -618,6 +2597,87 @@ }, "data": { "$ref": "#/components/schemas/resources.events.resource.fetch" + }, + "included": { + "type": "array", + "items": { + "oneOf": [ + { + "title": "Resource/Awards/Fetch", + "description": "May not be present unless \"awards\" is in the \"include\" header. See `.data[].relationships.awards.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "event-awards", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "tierIndex": { + "title": "tierIndex", + "type": "number", + "readOnly": true, + "example": 1 + }, + "label": { + "title": "label", + "type": "string", + "readOnly": true, + "example": "True" + }, + "pointsRequired": { + "title": "pointsRequired", + "type": "number", + "readOnly": true, + "example": 1 + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000008.png" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "event": { + "title": "event", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"event\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/events/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/events/1" + } + }, + "readOnly": true + } + } + } + } + } + } + } + ] + } } } } @@ -696,13 +2756,13 @@ } }, { - "name": "filter[id]", + "name": "filter[id][]", "in": "query", "description": "A list of ids to filter by.", "required": false, "allowEmptyValue": false, "style": "form", - "explode": false, + "explode": true, "schema": { "default": [], "type": "array", @@ -766,6 +2826,342 @@ "items": { "$ref": "#/components/schemas/resources.games.resource.fetch" } + }, + "included": { + "type": "array", + "items": { + "oneOf": [ + { + "title": "Resource/System/Fetch", + "description": "May not be present unless \"system\" is in the \"include\" header. See `.data[].relationships.system.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "systems", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "title": "name", + "type": "string", + "example": "Genesis/Mega Drive" + }, + "nameFull": { + "title": "nameFull", + "type": "string", + "example": "Sega Genesis/Mega Drive" + }, + "nameShort": { + "title": "nameShort", + "type": "string", + "example": "MD" + }, + "manufacturer": { + "title": "manufacturer", + "type": "string", + "example": "Sega" + }, + "iconUrl": { + "title": "iconUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/assets/images/system/md.png" + }, + "active": { + "title": "active", + "type": "boolean", + "example": true + } + } + } + } + }, + { + "title": "Resource/AchievementSets/Fetch", + "description": "May not be present unless \"achievementSets\" is in the \"include\" header. See `.data[].relationships.achievementSets.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "achievement-sets", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "readOnly": true, + "example": "Quia Impedit Libero Quam" + }, + "pointsTotal": { + "title": "pointsTotal", + "type": "number", + "readOnly": true, + "example": 189 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 341 + }, + "achievementsPublished": { + "title": "achievementsPublished", + "type": "number", + "readOnly": true, + "example": 20 + }, + "achievementsUnpublished": { + "title": "achievementsUnpublished", + "type": "number", + "readOnly": true, + "example": 0 + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true + }, + "achievementsFirstPublishedAt": { + "title": "achievementsFirstPublishedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T07:20:03.000000Z" + }, + "types": { + "title": "types", + "type": "array", + "readOnly": true + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:58.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true, + "example": "2026-01-09T02:06:22.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "games": { + "title": "games", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"games\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Comments/Fetch", + "description": "May not be present unless \"comments\" is in the \"include\" header. See `.data[].relationships.comments.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "comments", + "type": "string" + }, + "id": { + "type": "string", + "example": "3" + }, + "attributes": { + "type": "object", + "properties": { + "body": { + "title": "body", + "type": "string", + "readOnly": true, + "example": "Excited to play this!" + }, + "authorAvatarUrl": { + "title": "authorAvatarUrl", + "type": "string", + "readOnly": true + }, + "authorDisplayName": { + "title": "authorDisplayName", + "type": "string", + "readOnly": true + }, + "authorId": { + "title": "authorId", + "type": "string", + "readOnly": true + }, + "permalink": { + "title": "permalink", + "type": "string", + "readOnly": true, + "example": "" + }, + "submittedAt": { + "title": "submittedAt", + "type": "string", + "readOnly": true, + "example": "2026-05-05T22:41:05.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "author": { + "title": "author", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"author\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/3" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/3" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Hashes/Fetch", + "description": "May not be present unless \"hashes\" is in the \"include\" header. See `.data[].relationships.hashes.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "game-hashes", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "raMd5": { + "title": "raMd5", + "type": "string", + "readOnly": true, + "example": "eDWamQy5GYZqRxvXkj6P6rjDULfnTddT" + }, + "name": { + "title": "name", + "type": "string", + "readOnly": true, + "example": "True" + }, + "compatibility": { + "title": "compatibility", + "type": "string", + "readOnly": true, + "example": "compatible" + }, + "patchUrl": { + "title": "patchUrl", + "type": "string", + "readOnly": true + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:57.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true, + "example": "2026-04-25T20:56:02.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + } + ] + } } } } @@ -830,6 +3226,342 @@ }, "data": { "$ref": "#/components/schemas/resources.games.resource.fetch" + }, + "included": { + "type": "array", + "items": { + "oneOf": [ + { + "title": "Resource/System/Fetch", + "description": "May not be present unless \"system\" is in the \"include\" header. See `.data[].relationships.system.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "systems", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "title": "name", + "type": "string", + "example": "Genesis/Mega Drive" + }, + "nameFull": { + "title": "nameFull", + "type": "string", + "example": "Sega Genesis/Mega Drive" + }, + "nameShort": { + "title": "nameShort", + "type": "string", + "example": "MD" + }, + "manufacturer": { + "title": "manufacturer", + "type": "string", + "example": "Sega" + }, + "iconUrl": { + "title": "iconUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/assets/images/system/md.png" + }, + "active": { + "title": "active", + "type": "boolean", + "example": true + } + } + } + } + }, + { + "title": "Resource/AchievementSets/Fetch", + "description": "May not be present unless \"achievementSets\" is in the \"include\" header. See `.data[].relationships.achievementSets.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "achievement-sets", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "readOnly": true, + "example": "Quia Impedit Libero Quam" + }, + "pointsTotal": { + "title": "pointsTotal", + "type": "number", + "readOnly": true, + "example": 189 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 341 + }, + "achievementsPublished": { + "title": "achievementsPublished", + "type": "number", + "readOnly": true, + "example": 20 + }, + "achievementsUnpublished": { + "title": "achievementsUnpublished", + "type": "number", + "readOnly": true, + "example": 0 + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true + }, + "achievementsFirstPublishedAt": { + "title": "achievementsFirstPublishedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T07:20:03.000000Z" + }, + "types": { + "title": "types", + "type": "array", + "readOnly": true + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:58.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true, + "example": "2026-01-09T02:06:22.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "games": { + "title": "games", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"games\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Comments/Fetch", + "description": "May not be present unless \"comments\" is in the \"include\" header. See `.data[].relationships.comments.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "comments", + "type": "string" + }, + "id": { + "type": "string", + "example": "3" + }, + "attributes": { + "type": "object", + "properties": { + "body": { + "title": "body", + "type": "string", + "readOnly": true, + "example": "Excited to play this!" + }, + "authorAvatarUrl": { + "title": "authorAvatarUrl", + "type": "string", + "readOnly": true + }, + "authorDisplayName": { + "title": "authorDisplayName", + "type": "string", + "readOnly": true + }, + "authorId": { + "title": "authorId", + "type": "string", + "readOnly": true + }, + "permalink": { + "title": "permalink", + "type": "string", + "readOnly": true, + "example": "" + }, + "submittedAt": { + "title": "submittedAt", + "type": "string", + "readOnly": true, + "example": "2026-05-05T22:41:05.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "author": { + "title": "author", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"author\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/3" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/3" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Hashes/Fetch", + "description": "May not be present unless \"hashes\" is in the \"include\" header. See `.data[].relationships.hashes.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "game-hashes", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "raMd5": { + "title": "raMd5", + "type": "string", + "readOnly": true, + "example": "eDWamQy5GYZqRxvXkj6P6rjDULfnTddT" + }, + "name": { + "title": "name", + "type": "string", + "readOnly": true, + "example": "True" + }, + "compatibility": { + "title": "compatibility", + "type": "string", + "readOnly": true, + "example": "compatible" + }, + "patchUrl": { + "title": "patchUrl", + "type": "string", + "readOnly": true + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:57.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true, + "example": "2026-04-25T20:56:02.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + } + ] + } } } } @@ -848,12 +3580,12 @@ } } }, - "/games/{game}/hashes": { + "/games/{game}/comments": { "get": { "tags": ["Games"], - "summary": "Show hashes", + "summary": "Show comments", "description": "", - "operationId": "games.hashes", + "operationId": "games.comments", "parameters": [ { "name": "game", @@ -898,7 +3630,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.game-hashes.resource.fetch" + "$ref": "#/components/schemas/resources.comments.resource.fetch" } } } @@ -918,12 +3650,12 @@ } } }, - "/games/{game}/relationships/hashes": { + "/games/{game}/relationships/comments": { "get": { "tags": ["Games"], - "summary": "Show hashes relation", + "summary": "Show comments relation", "description": "", - "operationId": "games.hashes.show", + "operationId": "games.comments.show", "parameters": [ { "name": "game", @@ -968,7 +3700,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.games.relationship.hashes.fetch" + "$ref": "#/components/schemas/resources.games.relationship.comments.fetch" } } } @@ -988,92 +3720,232 @@ } } }, - "/hubs": { + "/games/{game}/hashes": { "get": { - "tags": ["Hubs"], - "summary": "Get all hubs", + "tags": ["Games"], + "summary": "Show hashes", "description": "", - "operationId": "hubs.index", + "operationId": "games.hashes", "parameters": [ { - "name": "page[size]", - "in": "query", - "description": "The page size for paginated results", - "required": false, - "allowEmptyValue": false, - "schema": { - "type": "integer" - } - }, - { - "name": "page[number]", - "in": "query", - "description": "The page number for paginated results", - "required": false, - "allowEmptyValue": false, - "schema": { - "type": "integer" - } - }, - { - "name": "sort", - "in": "query", - "required": false, - "allowEmptyValue": false, - "schema": { - "type": "array", - "items": { - "enum": [ - "id", - "-id", - "title", - "-title", - "sortTitle", - "-sortTitle", - "createdAt", - "-createdAt", - "updatedAt", - "-updatedAt", - "gamesCount", - "-gamesCount", - "linkedHubsCount", - "-linkedHubsCount", - "gamesCount", - "-gamesCount", - "linkedHubsCount", - "-linkedHubsCount" - ], - "type": "string" - } - } - }, - { - "name": "filter[id]", - "in": "query", - "description": "A list of ids to filter by.", - "required": false, + "name": "game", + "in": "path", + "required": true, "allowEmptyValue": false, - "style": "form", - "explode": false, "schema": { - "default": [], - "type": "array", - "items": { - "type": "string" - } + "type": "string" }, "examples": { - "empty": { - "value": [] - }, "1": { - "value": ["1"] + "value": "1" }, "2": { - "value": ["2"] + "value": "2" }, "3": { - "value": ["3"] + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "ShowRelated games", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.game-hashes.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/games/{game}/relationships/hashes": { + "get": { + "tags": ["Games"], + "summary": "Show hashes relation", + "description": "", + "operationId": "games.hashes.show", + "parameters": [ + { + "name": "game", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show games", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.games.relationship.hashes.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/hubs": { + "get": { + "tags": ["Hubs"], + "summary": "Get all hubs", + "description": "", + "operationId": "hubs.index", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "page[number]", + "in": "query", + "description": "The page number for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "sort", + "in": "query", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "id", + "-id", + "title", + "-title", + "sortTitle", + "-sortTitle", + "createdAt", + "-createdAt", + "updatedAt", + "-updatedAt", + "gamesCount", + "-gamesCount", + "linkedHubsCount", + "-linkedHubsCount", + "gamesCount", + "-gamesCount", + "linkedHubsCount", + "-linkedHubsCount" + ], + "type": "string" + } + } + }, + { + "name": "filter[id][]", + "in": "query", + "description": "A list of ids to filter by.", + "required": false, + "allowEmptyValue": false, + "style": "form", + "explode": true, + "schema": { + "default": [], + "type": "array", + "items": { + "type": "string" + } + }, + "examples": { + "empty": { + "value": [] + }, + "1": { + "value": ["1"] + }, + "2": { + "value": ["2"] + }, + "3": { + "value": ["3"] } } }, @@ -1122,6 +3994,223 @@ "items": { "$ref": "#/components/schemas/resources.hubs.resource.fetch" } + }, + "included": { + "type": "array", + "items": { + "oneOf": [ + { + "title": "Resource/Games/Fetch", + "description": "May not be present unless \"games\" is in the \"include\" header. See `.data[].relationships.games.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "games", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "example": "Quia Impedit Libero Quam" + }, + "sortTitle": { + "title": "sortTitle", + "type": "string", + "example": "quia impedit libero quam" + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "imageBoxArtUrl": { + "title": "imageBoxArtUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "imageTitleUrl": { + "title": "imageTitleUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000010.png" + }, + "imageIngameUrl": { + "title": "imageIngameUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "releasedAt": { + "title": "releasedAt", + "type": "string" + }, + "releasedAtGranularity": { + "title": "releasedAtGranularity", + "type": "string" + }, + "playersTotal": { + "title": "playersTotal", + "type": "number", + "example": 82 + }, + "playersHardcore": { + "title": "playersHardcore", + "type": "number", + "example": 82 + }, + "achievementsPublished": { + "title": "achievementsPublished", + "type": "number", + "example": 20 + }, + "achievementsUnpublished": { + "title": "achievementsUnpublished", + "type": "number", + "example": 0 + }, + "pointsTotal": { + "title": "pointsTotal", + "type": "number", + "example": 189 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "example": 341 + }, + "timesBeaten": { + "title": "timesBeaten", + "type": "number", + "example": 0 + }, + "timesBeatenHardcore": { + "title": "timesBeatenHardcore", + "type": "number", + "example": 1 + }, + "medianTimeToBeatMinutes": { + "title": "medianTimeToBeatMinutes", + "type": "number" + }, + "medianTimeToBeatHardcoreMinutes": { + "title": "medianTimeToBeatHardcoreMinutes", + "type": "number", + "example": 5153 + } + } + }, + "relationships": { + "type": "object", + "properties": { + "system": { + "title": "system", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"system\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/systems/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/systems/1" + } + }, + "readOnly": true + } + } + }, + "achievementSets": { + "title": "achievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + } + }, + "readOnly": true + } + } + }, + "comments": { + "title": "comments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"comments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + } + }, + "readOnly": true + } + } + }, + "hashes": { + "title": "hashes", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"hashes\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/hashes/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/hashes/1" + } + }, + "readOnly": true + } + } + } + } + } + } + } + ] + } } } } @@ -1186,6 +4275,223 @@ }, "data": { "$ref": "#/components/schemas/resources.hubs.resource.fetch" + }, + "included": { + "type": "array", + "items": { + "oneOf": [ + { + "title": "Resource/Games/Fetch", + "description": "May not be present unless \"games\" is in the \"include\" header. See `.data[].relationships.games.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "games", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "example": "Quia Impedit Libero Quam" + }, + "sortTitle": { + "title": "sortTitle", + "type": "string", + "example": "quia impedit libero quam" + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "imageBoxArtUrl": { + "title": "imageBoxArtUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "imageTitleUrl": { + "title": "imageTitleUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000010.png" + }, + "imageIngameUrl": { + "title": "imageIngameUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "releasedAt": { + "title": "releasedAt", + "type": "string" + }, + "releasedAtGranularity": { + "title": "releasedAtGranularity", + "type": "string" + }, + "playersTotal": { + "title": "playersTotal", + "type": "number", + "example": 82 + }, + "playersHardcore": { + "title": "playersHardcore", + "type": "number", + "example": 82 + }, + "achievementsPublished": { + "title": "achievementsPublished", + "type": "number", + "example": 20 + }, + "achievementsUnpublished": { + "title": "achievementsUnpublished", + "type": "number", + "example": 0 + }, + "pointsTotal": { + "title": "pointsTotal", + "type": "number", + "example": 189 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "example": 341 + }, + "timesBeaten": { + "title": "timesBeaten", + "type": "number", + "example": 0 + }, + "timesBeatenHardcore": { + "title": "timesBeatenHardcore", + "type": "number", + "example": 1 + }, + "medianTimeToBeatMinutes": { + "title": "medianTimeToBeatMinutes", + "type": "number" + }, + "medianTimeToBeatHardcoreMinutes": { + "title": "medianTimeToBeatHardcoreMinutes", + "type": "number", + "example": 5153 + } + } + }, + "relationships": { + "type": "object", + "properties": { + "system": { + "title": "system", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"system\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/systems/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/systems/1" + } + }, + "readOnly": true + } + } + }, + "achievementSets": { + "title": "achievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + } + }, + "readOnly": true + } + } + }, + "comments": { + "title": "comments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"comments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + } + }, + "readOnly": true + } + } + }, + "hashes": { + "title": "hashes", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"hashes\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/hashes/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/hashes/1" + } + }, + "readOnly": true + } + } + } + } + } + } + } + ] + } } } } @@ -1536,13 +4842,13 @@ } }, { - "name": "filter[id]", + "name": "filter[id][]", "in": "query", "description": "A list of ids to filter by.", "required": false, "allowEmptyValue": false, "style": "form", - "explode": false, + "explode": true, "schema": { "default": [], "type": "array", @@ -1616,6 +4922,571 @@ "items": { "$ref": "#/components/schemas/resources.leaderboards.resource.fetch" } + }, + "included": { + "type": "array", + "items": { + "oneOf": [ + { + "title": "Resource/Games/Fetch", + "description": "May not be present unless \"games\" is in the \"include\" header. See `.data[].relationships.games.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "games", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "example": "Quia Impedit Libero Quam" + }, + "sortTitle": { + "title": "sortTitle", + "type": "string", + "example": "quia impedit libero quam" + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "imageBoxArtUrl": { + "title": "imageBoxArtUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "imageTitleUrl": { + "title": "imageTitleUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000010.png" + }, + "imageIngameUrl": { + "title": "imageIngameUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "releasedAt": { + "title": "releasedAt", + "type": "string" + }, + "releasedAtGranularity": { + "title": "releasedAtGranularity", + "type": "string" + }, + "playersTotal": { + "title": "playersTotal", + "type": "number", + "example": 82 + }, + "playersHardcore": { + "title": "playersHardcore", + "type": "number", + "example": 82 + }, + "achievementsPublished": { + "title": "achievementsPublished", + "type": "number", + "example": 20 + }, + "achievementsUnpublished": { + "title": "achievementsUnpublished", + "type": "number", + "example": 0 + }, + "pointsTotal": { + "title": "pointsTotal", + "type": "number", + "example": 189 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "example": 341 + }, + "timesBeaten": { + "title": "timesBeaten", + "type": "number", + "example": 0 + }, + "timesBeatenHardcore": { + "title": "timesBeatenHardcore", + "type": "number", + "example": 1 + }, + "medianTimeToBeatMinutes": { + "title": "medianTimeToBeatMinutes", + "type": "number" + }, + "medianTimeToBeatHardcoreMinutes": { + "title": "medianTimeToBeatHardcoreMinutes", + "type": "number", + "example": 5153 + } + } + }, + "relationships": { + "type": "object", + "properties": { + "system": { + "title": "system", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"system\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/systems/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/systems/1" + } + }, + "readOnly": true + } + } + }, + "achievementSets": { + "title": "achievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + } + }, + "readOnly": true + } + } + }, + "comments": { + "title": "comments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"comments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + } + }, + "readOnly": true + } + } + }, + "hashes": { + "title": "hashes", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"hashes\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/hashes/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/hashes/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Developer/Fetch", + "description": "May not be present unless \"developer\" is in the \"include\" header. See `.data[].relationships.developer.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "users", + "type": "string" + }, + "id": { + "type": "string", + "example": "01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "attributes": { + "type": "object", + "properties": { + "displayName": { + "title": "displayName", + "type": "string", + "readOnly": true, + "example": "Root" + }, + "avatarUrl": { + "title": "avatarUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/UserPic/Root.png" + }, + "motto": { + "title": "motto", + "type": "string", + "readOnly": true, + "example": "" + }, + "points": { + "title": "points", + "type": "number", + "readOnly": true, + "example": 1236 + }, + "pointsHardcore": { + "title": "pointsHardcore", + "type": "number", + "readOnly": true, + "example": 7155 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 19749 + }, + "yieldUnlocks": { + "title": "yieldUnlocks", + "type": "number", + "readOnly": true, + "example": 0 + }, + "yieldPoints": { + "title": "yieldPoints", + "type": "number", + "readOnly": true, + "example": 0 + }, + "joinedAt": { + "title": "joinedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:22.000000Z" + }, + "lastActivityAt": { + "title": "lastActivityAt", + "type": "string", + "readOnly": true, + "example": "2026-04-18T03:30:13.000000Z" + }, + "deletedAt": { + "title": "deletedAt", + "type": "string", + "readOnly": true + }, + "isUnranked": { + "title": "isUnranked", + "type": "boolean", + "readOnly": true, + "example": false + }, + "isUserWallActive": { + "title": "isUserWallActive", + "type": "boolean", + "readOnly": true, + "example": true + }, + "richPresence": { + "title": "richPresence", + "type": "string", + "readOnly": true, + "example": "Playing Assumenda Pariatur" + }, + "richPresenceUpdatedAt": { + "title": "richPresenceUpdatedAt", + "type": "string", + "readOnly": true, + "example": "2026-04-18T04:34:36.000000Z" + }, + "visibleRole": { + "title": "visibleRole", + "type": "string", + "readOnly": true, + "example": { + "id": 4, + "name": "game-hash-manager", + "display": 3, + "guard_name": "web", + "created_at": "2025-09-12T06:01:21.000000Z", + "updated_at": "2025-09-12T06:01:21.000000Z", + "pivot": { + "model_type": "user", + "model_id": 1, + "role_id": 4 + } + } + }, + "displayableRoles": { + "title": "displayableRoles", + "type": "array", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "playerAchievements": { + "title": "playerAchievements", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievements\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerAchievementSets": { + "title": "playerAchievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerGames": { + "title": "playerGames", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerGames\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "wallComments": { + "title": "wallComments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"wallComments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "awards": { + "title": "awards", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"awards\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Entries/Fetch", + "description": "May not be present unless \"entries\" is in the \"include\" header. See `.data[].relationships.entries.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "leaderboard-entries", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "score": { + "title": "score", + "type": "number", + "readOnly": true, + "example": 1 + }, + "rank": { + "title": "rank", + "type": "number", + "readOnly": true + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "user": { + "title": "user", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + } + }, + "readOnly": true + } + } + }, + "leaderboard": { + "title": "leaderboard", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"leaderboard\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboards/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboards/1" + } + }, + "readOnly": true + } + } + } + } + } + } + } + ] + } } } } @@ -1680,6 +5551,571 @@ }, "data": { "$ref": "#/components/schemas/resources.leaderboards.resource.fetch" + }, + "included": { + "type": "array", + "items": { + "oneOf": [ + { + "title": "Resource/Games/Fetch", + "description": "May not be present unless \"games\" is in the \"include\" header. See `.data[].relationships.games.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "games", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "example": "Quia Impedit Libero Quam" + }, + "sortTitle": { + "title": "sortTitle", + "type": "string", + "example": "quia impedit libero quam" + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "imageBoxArtUrl": { + "title": "imageBoxArtUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "imageTitleUrl": { + "title": "imageTitleUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000010.png" + }, + "imageIngameUrl": { + "title": "imageIngameUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "releasedAt": { + "title": "releasedAt", + "type": "string" + }, + "releasedAtGranularity": { + "title": "releasedAtGranularity", + "type": "string" + }, + "playersTotal": { + "title": "playersTotal", + "type": "number", + "example": 82 + }, + "playersHardcore": { + "title": "playersHardcore", + "type": "number", + "example": 82 + }, + "achievementsPublished": { + "title": "achievementsPublished", + "type": "number", + "example": 20 + }, + "achievementsUnpublished": { + "title": "achievementsUnpublished", + "type": "number", + "example": 0 + }, + "pointsTotal": { + "title": "pointsTotal", + "type": "number", + "example": 189 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "example": 341 + }, + "timesBeaten": { + "title": "timesBeaten", + "type": "number", + "example": 0 + }, + "timesBeatenHardcore": { + "title": "timesBeatenHardcore", + "type": "number", + "example": 1 + }, + "medianTimeToBeatMinutes": { + "title": "medianTimeToBeatMinutes", + "type": "number" + }, + "medianTimeToBeatHardcoreMinutes": { + "title": "medianTimeToBeatHardcoreMinutes", + "type": "number", + "example": 5153 + } + } + }, + "relationships": { + "type": "object", + "properties": { + "system": { + "title": "system", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"system\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/systems/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/systems/1" + } + }, + "readOnly": true + } + } + }, + "achievementSets": { + "title": "achievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + } + }, + "readOnly": true + } + } + }, + "comments": { + "title": "comments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"comments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + } + }, + "readOnly": true + } + } + }, + "hashes": { + "title": "hashes", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"hashes\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/hashes/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/hashes/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Developer/Fetch", + "description": "May not be present unless \"developer\" is in the \"include\" header. See `.data[].relationships.developer.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "users", + "type": "string" + }, + "id": { + "type": "string", + "example": "01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "attributes": { + "type": "object", + "properties": { + "displayName": { + "title": "displayName", + "type": "string", + "readOnly": true, + "example": "Root" + }, + "avatarUrl": { + "title": "avatarUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/UserPic/Root.png" + }, + "motto": { + "title": "motto", + "type": "string", + "readOnly": true, + "example": "" + }, + "points": { + "title": "points", + "type": "number", + "readOnly": true, + "example": 1236 + }, + "pointsHardcore": { + "title": "pointsHardcore", + "type": "number", + "readOnly": true, + "example": 7155 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 19749 + }, + "yieldUnlocks": { + "title": "yieldUnlocks", + "type": "number", + "readOnly": true, + "example": 0 + }, + "yieldPoints": { + "title": "yieldPoints", + "type": "number", + "readOnly": true, + "example": 0 + }, + "joinedAt": { + "title": "joinedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:22.000000Z" + }, + "lastActivityAt": { + "title": "lastActivityAt", + "type": "string", + "readOnly": true, + "example": "2026-04-18T03:30:13.000000Z" + }, + "deletedAt": { + "title": "deletedAt", + "type": "string", + "readOnly": true + }, + "isUnranked": { + "title": "isUnranked", + "type": "boolean", + "readOnly": true, + "example": false + }, + "isUserWallActive": { + "title": "isUserWallActive", + "type": "boolean", + "readOnly": true, + "example": true + }, + "richPresence": { + "title": "richPresence", + "type": "string", + "readOnly": true, + "example": "Playing Assumenda Pariatur" + }, + "richPresenceUpdatedAt": { + "title": "richPresenceUpdatedAt", + "type": "string", + "readOnly": true, + "example": "2026-04-18T04:34:36.000000Z" + }, + "visibleRole": { + "title": "visibleRole", + "type": "string", + "readOnly": true, + "example": { + "id": 4, + "name": "game-hash-manager", + "display": 3, + "guard_name": "web", + "created_at": "2025-09-12T06:01:21.000000Z", + "updated_at": "2025-09-12T06:01:21.000000Z", + "pivot": { + "model_type": "user", + "model_id": 1, + "role_id": 4 + } + } + }, + "displayableRoles": { + "title": "displayableRoles", + "type": "array", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "playerAchievements": { + "title": "playerAchievements", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievements\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerAchievementSets": { + "title": "playerAchievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerGames": { + "title": "playerGames", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerGames\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "wallComments": { + "title": "wallComments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"wallComments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "awards": { + "title": "awards", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"awards\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Entries/Fetch", + "description": "May not be present unless \"entries\" is in the \"include\" header. See `.data[].relationships.entries.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "leaderboard-entries", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "score": { + "title": "score", + "type": "number", + "readOnly": true, + "example": 1 + }, + "rank": { + "title": "rank", + "type": "number", + "readOnly": true + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "user": { + "title": "user", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + } + }, + "readOnly": true + } + } + }, + "leaderboard": { + "title": "leaderboard", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"leaderboard\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboards/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboards/1" + } + }, + "readOnly": true + } + } + } + } + } + } + } + ] + } } } } @@ -1888,13 +6324,13 @@ } }, { - "name": "filter[id]", + "name": "filter[id][]", "in": "query", "description": "A list of ids to filter by.", "required": false, "allowEmptyValue": false, "style": "form", - "explode": false, + "explode": true, "schema": { "default": [], "type": "array", @@ -1918,25 +6354,1559 @@ } }, { - "name": "filter[active]", - "in": "query", - "description": "Filters the records", - "required": false, + "name": "filter[active]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": "", + "type": "string" + }, + "examples": { + "1": { + "value": true + } + } + } + ], + "responses": { + "200": { + "description": "Index systems", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.systems.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/systems/{system}": { + "get": { + "tags": ["Systems"], + "summary": "Show one system", + "description": "", + "operationId": "systems.show", + "parameters": [ + { + "name": "system", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show systems", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "$ref": "#/components/schemas/resources.systems.resource.fetch" + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/users": { + "get": { + "tags": ["Users"], + "summary": "Get all users", + "description": "", + "operationId": "users.index", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "page[number]", + "in": "query", + "description": "The page number for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "sort", + "in": "query", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "id", + "-id", + "points", + "-points", + "pointsHardcore", + "-pointsHardcore", + "pointsWeighted", + "-pointsWeighted", + "yieldUnlocks", + "-yieldUnlocks", + "yieldPoints", + "-yieldPoints", + "joinedAt", + "-joinedAt", + "lastActivityAt", + "-lastActivityAt" + ], + "type": "string" + } + } + }, + { + "name": "filter[role]", + "in": "query", + "description": "Applies the role scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Index users", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.users.resource.fetch" + } + }, + "included": { + "type": "array", + "items": { + "oneOf": [ + { + "title": "Resource/PlayerAchievements/Fetch", + "description": "May not be present unless \"playerAchievements\" is in the \"include\" header. See `.data[].relationships.playerAchievements.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "player-achievements", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "unlockedAt": { + "title": "unlockedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T07:20:03.000000Z" + }, + "unlockedHardcoreAt": { + "title": "unlockedHardcoreAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T07:20:03.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievement": { + "title": "achievement", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievement\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievements/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievements/1" + } + }, + "readOnly": true + } + } + }, + "user": { + "title": "user", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/PlayerAchievementSets/Fetch", + "description": "May not be present unless \"playerAchievementSets\" is in the \"include\" header. See `.data[].relationships.playerAchievementSets.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "player-achievement-sets", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "achievementsUnlocked": { + "title": "achievementsUnlocked", + "type": "number", + "readOnly": true, + "example": 20 + }, + "achievementsUnlockedHardcore": { + "title": "achievementsUnlockedHardcore", + "type": "number", + "readOnly": true, + "example": 20 + }, + "points": { + "title": "points", + "type": "number", + "readOnly": true, + "example": 189 + }, + "pointsHardcore": { + "title": "pointsHardcore", + "type": "number", + "readOnly": true, + "example": 189 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 8479 + }, + "completionPercentage": { + "title": "completionPercentage", + "type": "number", + "readOnly": true, + "example": "1.000000000" + }, + "completionPercentageHardcore": { + "title": "completionPercentageHardcore", + "type": "number", + "readOnly": true, + "example": "1.000000000" + }, + "lastUnlockAt": { + "title": "lastUnlockAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T10:09:08.000000Z" + }, + "lastUnlockHardcoreAt": { + "title": "lastUnlockHardcoreAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T10:09:08.000000Z" + }, + "completedAt": { + "title": "completedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T10:09:08.000000Z" + }, + "completedHardcoreAt": { + "title": "completedHardcoreAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T10:09:08.000000Z" + }, + "timeTakenSeconds": { + "title": "timeTakenSeconds", + "type": "number", + "readOnly": true, + "example": 0 + }, + "timeTakenHardcoreSeconds": { + "title": "timeTakenHardcoreSeconds", + "type": "number", + "readOnly": true, + "example": 0 + }, + "setContext": { + "title": "setContext", + "type": "array", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievementSet": { + "title": "achievementSet", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSet\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/PlayerGames/Fetch", + "description": "May not be present unless \"playerGames\" is in the \"include\" header. See `.data[].relationships.playerGames.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "player-games", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "lastPlayedAt": { + "title": "lastPlayedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T10:15:57.000000Z" + }, + "firstUnlockAt": { + "title": "firstUnlockAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T07:20:03.000000Z" + }, + "lastUnlockAt": { + "title": "lastUnlockAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T10:09:08.000000Z" + }, + "lastUnlockHardcoreAt": { + "title": "lastUnlockHardcoreAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T10:09:08.000000Z" + }, + "beatenAt": { + "title": "beatenAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T08:19:11.000000Z" + }, + "beatenHardcoreAt": { + "title": "beatenHardcoreAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T08:19:11.000000Z" + }, + "playtimeTotalSeconds": { + "title": "playtimeTotalSeconds", + "type": "number", + "readOnly": true, + "example": 12159 + }, + "timeToBeatSeconds": { + "title": "timeToBeatSeconds", + "type": "number", + "readOnly": true, + "example": 5153 + }, + "timeToBeatHardcoreSeconds": { + "title": "timeToBeatHardcoreSeconds", + "type": "number", + "readOnly": true, + "example": 5153 + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievementSets": { + "title": "achievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + }, + "playerAchievementSets": { + "title": "playerAchievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/WallComments/Fetch", + "description": "May not be present unless \"wallComments\" is in the \"include\" header. See `.data[].relationships.wallComments.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "comments", + "type": "string" + }, + "id": { + "type": "string", + "example": "3" + }, + "attributes": { + "type": "object", + "properties": { + "body": { + "title": "body", + "type": "string", + "readOnly": true, + "example": "Excited to play this!" + }, + "authorAvatarUrl": { + "title": "authorAvatarUrl", + "type": "string", + "readOnly": true + }, + "authorDisplayName": { + "title": "authorDisplayName", + "type": "string", + "readOnly": true + }, + "authorId": { + "title": "authorId", + "type": "string", + "readOnly": true + }, + "permalink": { + "title": "permalink", + "type": "string", + "readOnly": true, + "example": "" + }, + "submittedAt": { + "title": "submittedAt", + "type": "string", + "readOnly": true, + "example": "2026-05-05T22:41:05.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "author": { + "title": "author", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"author\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/3" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/3" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Awards/Fetch", + "description": "May not be present unless \"awards\" is in the \"include\" header. See `.data[].relationships.awards.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "user-awards", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "awardedAt": { + "title": "awardedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T08:19:11.000000Z" + }, + "kind": { + "title": "kind", + "type": "string", + "readOnly": true, + "example": "game_beaten" + }, + "title": { + "title": "title", + "type": "string", + "readOnly": true, + "example": 1 + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true, + "example": 1 + }, + "displayOrder": { + "title": "displayOrder", + "type": "number", + "readOnly": true, + "example": 0 + }, + "context": { + "title": "context", + "type": "object", + "readOnly": true, + "example": 1 + } + } + }, + "relationships": { + "type": "object", + "properties": { + "event": { + "title": "event", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"event\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/events/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/events/1" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + } + ] + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/users/{user}": { + "get": { + "tags": ["Users"], + "summary": "Show one user", + "description": "", + "operationId": "users.show", + "parameters": [ + { + "name": "user", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "01K4Y876RZ4XVE4JA3X9ARV95P": { + "value": "01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "01K4Y8770YSVFGWM6C38BCDQ5F": { + "value": "01K4Y8770YSVFGWM6C38BCDQ5F" + }, + "01K4Y8776Y34QHTCSZ1DEFAEB3": { + "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" + } + } + } + ], + "responses": { + "200": { + "description": "Show users", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "$ref": "#/components/schemas/resources.users.resource.fetch" + }, + "included": { + "type": "array", + "items": { + "oneOf": [ + { + "title": "Resource/PlayerAchievements/Fetch", + "description": "May not be present unless \"playerAchievements\" is in the \"include\" header. See `.data[].relationships.playerAchievements.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "player-achievements", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "unlockedAt": { + "title": "unlockedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T07:20:03.000000Z" + }, + "unlockedHardcoreAt": { + "title": "unlockedHardcoreAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T07:20:03.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievement": { + "title": "achievement", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievement\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievements/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievements/1" + } + }, + "readOnly": true + } + } + }, + "user": { + "title": "user", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/PlayerAchievementSets/Fetch", + "description": "May not be present unless \"playerAchievementSets\" is in the \"include\" header. See `.data[].relationships.playerAchievementSets.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "player-achievement-sets", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "achievementsUnlocked": { + "title": "achievementsUnlocked", + "type": "number", + "readOnly": true, + "example": 20 + }, + "achievementsUnlockedHardcore": { + "title": "achievementsUnlockedHardcore", + "type": "number", + "readOnly": true, + "example": 20 + }, + "points": { + "title": "points", + "type": "number", + "readOnly": true, + "example": 189 + }, + "pointsHardcore": { + "title": "pointsHardcore", + "type": "number", + "readOnly": true, + "example": 189 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 8479 + }, + "completionPercentage": { + "title": "completionPercentage", + "type": "number", + "readOnly": true, + "example": "1.000000000" + }, + "completionPercentageHardcore": { + "title": "completionPercentageHardcore", + "type": "number", + "readOnly": true, + "example": "1.000000000" + }, + "lastUnlockAt": { + "title": "lastUnlockAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T10:09:08.000000Z" + }, + "lastUnlockHardcoreAt": { + "title": "lastUnlockHardcoreAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T10:09:08.000000Z" + }, + "completedAt": { + "title": "completedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T10:09:08.000000Z" + }, + "completedHardcoreAt": { + "title": "completedHardcoreAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T10:09:08.000000Z" + }, + "timeTakenSeconds": { + "title": "timeTakenSeconds", + "type": "number", + "readOnly": true, + "example": 0 + }, + "timeTakenHardcoreSeconds": { + "title": "timeTakenHardcoreSeconds", + "type": "number", + "readOnly": true, + "example": 0 + }, + "setContext": { + "title": "setContext", + "type": "array", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievementSet": { + "title": "achievementSet", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSet\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/PlayerGames/Fetch", + "description": "May not be present unless \"playerGames\" is in the \"include\" header. See `.data[].relationships.playerGames.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "player-games", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "lastPlayedAt": { + "title": "lastPlayedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T10:15:57.000000Z" + }, + "firstUnlockAt": { + "title": "firstUnlockAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T07:20:03.000000Z" + }, + "lastUnlockAt": { + "title": "lastUnlockAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T10:09:08.000000Z" + }, + "lastUnlockHardcoreAt": { + "title": "lastUnlockHardcoreAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T10:09:08.000000Z" + }, + "beatenAt": { + "title": "beatenAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T08:19:11.000000Z" + }, + "beatenHardcoreAt": { + "title": "beatenHardcoreAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T08:19:11.000000Z" + }, + "playtimeTotalSeconds": { + "title": "playtimeTotalSeconds", + "type": "number", + "readOnly": true, + "example": 12159 + }, + "timeToBeatSeconds": { + "title": "timeToBeatSeconds", + "type": "number", + "readOnly": true, + "example": 5153 + }, + "timeToBeatHardcoreSeconds": { + "title": "timeToBeatHardcoreSeconds", + "type": "number", + "readOnly": true, + "example": 5153 + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievementSets": { + "title": "achievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + }, + "playerAchievementSets": { + "title": "playerAchievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/WallComments/Fetch", + "description": "May not be present unless \"wallComments\" is in the \"include\" header. See `.data[].relationships.wallComments.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "comments", + "type": "string" + }, + "id": { + "type": "string", + "example": "3" + }, + "attributes": { + "type": "object", + "properties": { + "body": { + "title": "body", + "type": "string", + "readOnly": true, + "example": "Excited to play this!" + }, + "authorAvatarUrl": { + "title": "authorAvatarUrl", + "type": "string", + "readOnly": true + }, + "authorDisplayName": { + "title": "authorDisplayName", + "type": "string", + "readOnly": true + }, + "authorId": { + "title": "authorId", + "type": "string", + "readOnly": true + }, + "permalink": { + "title": "permalink", + "type": "string", + "readOnly": true, + "example": "" + }, + "submittedAt": { + "title": "submittedAt", + "type": "string", + "readOnly": true, + "example": "2026-05-05T22:41:05.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "author": { + "title": "author", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"author\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/3" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/3" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Awards/Fetch", + "description": "May not be present unless \"awards\" is in the \"include\" header. See `.data[].relationships.awards.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "user-awards", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "awardedAt": { + "title": "awardedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T08:19:11.000000Z" + }, + "kind": { + "title": "kind", + "type": "string", + "readOnly": true, + "example": "game_beaten" + }, + "title": { + "title": "title", + "type": "string", + "readOnly": true, + "example": 1 + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true, + "example": 1 + }, + "displayOrder": { + "title": "displayOrder", + "type": "number", + "readOnly": true, + "example": 0 + }, + "context": { + "title": "context", + "type": "object", + "readOnly": true, + "example": 1 + } + } + }, + "relationships": { + "type": "object", + "properties": { + "event": { + "title": "event", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"event\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/events/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/events/1" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + } + ] + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/users/{user}/awards": { + "get": { + "tags": ["Users"], + "summary": "Show awards", + "description": "", + "operationId": "users.awards", + "parameters": [ + { + "name": "user", + "in": "path", + "required": true, "allowEmptyValue": false, "schema": { - "default": "", "type": "string" }, "examples": { - "1": { - "value": true + "01K4Y876RZ4XVE4JA3X9ARV95P": { + "value": "01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "01K4Y8770YSVFGWM6C38BCDQ5F": { + "value": "01K4Y8770YSVFGWM6C38BCDQ5F" + }, + "01K4Y8776Y34QHTCSZ1DEFAEB3": { + "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" } } } ], "responses": { "200": { - "description": "Index systems", + "description": "ShowRelated users", "content": { "application/vnd.api+json": { "schema": { @@ -1956,7 +7926,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.systems.resource.fetch" + "$ref": "#/components/schemas/resources.user-awards.resource.fetch" } } } @@ -1969,19 +7939,22 @@ }, "401": { "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" } } } }, - "/systems/{system}": { + "/users/{user}/relationships/awards": { "get": { - "tags": ["Systems"], - "summary": "Show one system", + "tags": ["Users"], + "summary": "Show awards relation", "description": "", - "operationId": "systems.show", + "operationId": "users.awards.show", "parameters": [ { - "name": "system", + "name": "user", "in": "path", "required": true, "allowEmptyValue": false, @@ -1989,21 +7962,21 @@ "type": "string" }, "examples": { - "1": { - "value": "1" + "01K4Y876RZ4XVE4JA3X9ARV95P": { + "value": "01K4Y876RZ4XVE4JA3X9ARV95P" }, - "2": { - "value": "2" + "01K4Y8770YSVFGWM6C38BCDQ5F": { + "value": "01K4Y8770YSVFGWM6C38BCDQ5F" }, - "3": { - "value": "3" + "01K4Y8776Y34QHTCSZ1DEFAEB3": { + "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" } } } ], "responses": { "200": { - "description": "Show systems", + "description": "Show users", "content": { "application/vnd.api+json": { "schema": { @@ -2021,7 +7994,10 @@ } }, "data": { - "$ref": "#/components/schemas/resources.systems.resource.fetch" + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.users.relationship.awards.fetch" + } } } } @@ -2040,77 +8016,37 @@ } } }, - "/users": { + "/users/{user}/player-achievements": { "get": { "tags": ["Users"], - "summary": "Get all users", + "summary": "Show playerAchievements", "description": "", - "operationId": "users.index", + "operationId": "users.playerAchievements", "parameters": [ { - "name": "page[size]", - "in": "query", - "description": "The page size for paginated results", - "required": false, - "allowEmptyValue": false, - "schema": { - "type": "integer" - } - }, - { - "name": "page[number]", - "in": "query", - "description": "The page number for paginated results", - "required": false, - "allowEmptyValue": false, - "schema": { - "type": "integer" - } - }, - { - "name": "sort", - "in": "query", - "required": false, + "name": "user", + "in": "path", + "required": true, "allowEmptyValue": false, "schema": { - "type": "array", - "items": { - "enum": [ - "id", - "-id", - "points", - "-points", - "pointsHardcore", - "-pointsHardcore", - "pointsWeighted", - "-pointsWeighted", - "yieldUnlocks", - "-yieldUnlocks", - "yieldPoints", - "-yieldPoints", - "joinedAt", - "-joinedAt", - "lastActivityAt", - "-lastActivityAt" - ], - "type": "string" + "type": "string" + }, + "examples": { + "01K4Y876RZ4XVE4JA3X9ARV95P": { + "value": "01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "01K4Y8770YSVFGWM6C38BCDQ5F": { + "value": "01K4Y8770YSVFGWM6C38BCDQ5F" + }, + "01K4Y8776Y34QHTCSZ1DEFAEB3": { + "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" } } - }, - { - "name": "filter[role]", - "in": "query", - "description": "Applies the role scope.", - "required": false, - "allowEmptyValue": false, - "schema": { - "type": "boolean" - } } ], "responses": { "200": { - "description": "Index users", + "description": "ShowRelated users", "content": { "application/vnd.api+json": { "schema": { @@ -2130,7 +8066,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.users.resource.fetch" + "$ref": "#/components/schemas/resources.player-achievements.resource.fetch" } } } @@ -2143,16 +8079,19 @@ }, "401": { "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" } } } }, - "/users/{user}": { + "/users/{user}/relationships/player-achievements": { "get": { "tags": ["Users"], - "summary": "Show one user", + "summary": "Show playerAchievements relation", "description": "", - "operationId": "users.show", + "operationId": "users.playerAchievements.show", "parameters": [ { "name": "user", @@ -2163,14 +8102,14 @@ "type": "string" }, "examples": { - "01K4Y87MWZ3Q9WC9EFFT6JKSNP": { - "value": "01K4Y87MWZ3Q9WC9EFFT6JKSNP" + "01K4Y876RZ4XVE4JA3X9ARV95P": { + "value": "01K4Y876RZ4XVE4JA3X9ARV95P" }, - "01K4Y87VCKZ0HCW9M95BPVZ2T8": { - "value": "01K4Y87VCKZ0HCW9M95BPVZ2T8" + "01K4Y8770YSVFGWM6C38BCDQ5F": { + "value": "01K4Y8770YSVFGWM6C38BCDQ5F" }, - "01K4Y87BXTWJWX795ZTVS0FQBF": { - "value": "01K4Y87BXTWJWX795ZTVS0FQBF" + "01K4Y8776Y34QHTCSZ1DEFAEB3": { + "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" } } } @@ -2195,7 +8134,10 @@ } }, "data": { - "$ref": "#/components/schemas/resources.users.resource.fetch" + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.users.relationship.playerAchievements.fetch" + } } } } @@ -2214,12 +8156,12 @@ } } }, - "/users/{user}/player-achievements": { + "/users/{user}/player-achievement-sets": { "get": { "tags": ["Users"], - "summary": "Show playerAchievements", + "summary": "Show playerAchievementSets", "description": "", - "operationId": "users.playerAchievements", + "operationId": "users.playerAchievementSets", "parameters": [ { "name": "user", @@ -2230,14 +8172,14 @@ "type": "string" }, "examples": { - "01K4Y87MWZ3Q9WC9EFFT6JKSNP": { - "value": "01K4Y87MWZ3Q9WC9EFFT6JKSNP" + "01K4Y876RZ4XVE4JA3X9ARV95P": { + "value": "01K4Y876RZ4XVE4JA3X9ARV95P" }, - "01K4Y87VCKZ0HCW9M95BPVZ2T8": { - "value": "01K4Y87VCKZ0HCW9M95BPVZ2T8" + "01K4Y8770YSVFGWM6C38BCDQ5F": { + "value": "01K4Y8770YSVFGWM6C38BCDQ5F" }, - "01K4Y87BXTWJWX795ZTVS0FQBF": { - "value": "01K4Y87BXTWJWX795ZTVS0FQBF" + "01K4Y8776Y34QHTCSZ1DEFAEB3": { + "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" } } } @@ -2264,7 +8206,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.player-achievements.resource.fetch" + "$ref": "#/components/schemas/resources.player-achievement-sets.resource.fetch" } } } @@ -2284,12 +8226,12 @@ } } }, - "/users/{user}/relationships/player-achievements": { + "/users/{user}/relationships/player-achievement-sets": { "get": { "tags": ["Users"], - "summary": "Show playerAchievements relation", + "summary": "Show playerAchievementSets relation", "description": "", - "operationId": "users.playerAchievements.show", + "operationId": "users.playerAchievementSets.show", "parameters": [ { "name": "user", @@ -2300,14 +8242,14 @@ "type": "string" }, "examples": { - "01K4Y87MWZ3Q9WC9EFFT6JKSNP": { - "value": "01K4Y87MWZ3Q9WC9EFFT6JKSNP" + "01K4Y876RZ4XVE4JA3X9ARV95P": { + "value": "01K4Y876RZ4XVE4JA3X9ARV95P" }, - "01K4Y87VCKZ0HCW9M95BPVZ2T8": { - "value": "01K4Y87VCKZ0HCW9M95BPVZ2T8" + "01K4Y8770YSVFGWM6C38BCDQ5F": { + "value": "01K4Y8770YSVFGWM6C38BCDQ5F" }, - "01K4Y87BXTWJWX795ZTVS0FQBF": { - "value": "01K4Y87BXTWJWX795ZTVS0FQBF" + "01K4Y8776Y34QHTCSZ1DEFAEB3": { + "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" } } } @@ -2334,7 +8276,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.users.relationship.playerAchievements.fetch" + "$ref": "#/components/schemas/resources.users.relationship.playerAchievementSets.fetch" } } } @@ -2354,12 +8296,12 @@ } } }, - "/users/{user}/player-achievement-sets": { + "/users/{user}/player-games": { "get": { "tags": ["Users"], - "summary": "Show playerAchievementSets", + "summary": "Show playerGames", "description": "", - "operationId": "users.playerAchievementSets", + "operationId": "users.playerGames", "parameters": [ { "name": "user", @@ -2370,14 +8312,14 @@ "type": "string" }, "examples": { - "01K4Y87MWZ3Q9WC9EFFT6JKSNP": { - "value": "01K4Y87MWZ3Q9WC9EFFT6JKSNP" + "01K4Y876RZ4XVE4JA3X9ARV95P": { + "value": "01K4Y876RZ4XVE4JA3X9ARV95P" }, - "01K4Y87VCKZ0HCW9M95BPVZ2T8": { - "value": "01K4Y87VCKZ0HCW9M95BPVZ2T8" + "01K4Y8770YSVFGWM6C38BCDQ5F": { + "value": "01K4Y8770YSVFGWM6C38BCDQ5F" }, - "01K4Y87BXTWJWX795ZTVS0FQBF": { - "value": "01K4Y87BXTWJWX795ZTVS0FQBF" + "01K4Y8776Y34QHTCSZ1DEFAEB3": { + "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" } } } @@ -2404,7 +8346,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.player-achievement-sets.resource.fetch" + "$ref": "#/components/schemas/resources.player-games.resource.fetch" } } } @@ -2424,12 +8366,12 @@ } } }, - "/users/{user}/relationships/player-achievement-sets": { + "/users/{user}/relationships/player-games": { "get": { "tags": ["Users"], - "summary": "Show playerAchievementSets relation", + "summary": "Show playerGames relation", "description": "", - "operationId": "users.playerAchievementSets.show", + "operationId": "users.playerGames.show", "parameters": [ { "name": "user", @@ -2440,14 +8382,14 @@ "type": "string" }, "examples": { - "01K4Y87MWZ3Q9WC9EFFT6JKSNP": { - "value": "01K4Y87MWZ3Q9WC9EFFT6JKSNP" + "01K4Y876RZ4XVE4JA3X9ARV95P": { + "value": "01K4Y876RZ4XVE4JA3X9ARV95P" }, - "01K4Y87VCKZ0HCW9M95BPVZ2T8": { - "value": "01K4Y87VCKZ0HCW9M95BPVZ2T8" + "01K4Y8770YSVFGWM6C38BCDQ5F": { + "value": "01K4Y8770YSVFGWM6C38BCDQ5F" }, - "01K4Y87BXTWJWX795ZTVS0FQBF": { - "value": "01K4Y87BXTWJWX795ZTVS0FQBF" + "01K4Y8776Y34QHTCSZ1DEFAEB3": { + "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" } } } @@ -2474,7 +8416,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.users.relationship.playerAchievementSets.fetch" + "$ref": "#/components/schemas/resources.users.relationship.playerGames.fetch" } } } @@ -2494,12 +8436,12 @@ } } }, - "/users/{user}/player-games": { + "/users/{user}/wall-comments": { "get": { "tags": ["Users"], - "summary": "Show playerGames", + "summary": "Show wallComments", "description": "", - "operationId": "users.playerGames", + "operationId": "users.wallComments", "parameters": [ { "name": "user", @@ -2510,14 +8452,14 @@ "type": "string" }, "examples": { - "01K4Y87MWZ3Q9WC9EFFT6JKSNP": { - "value": "01K4Y87MWZ3Q9WC9EFFT6JKSNP" + "01K4Y876RZ4XVE4JA3X9ARV95P": { + "value": "01K4Y876RZ4XVE4JA3X9ARV95P" }, - "01K4Y87VCKZ0HCW9M95BPVZ2T8": { - "value": "01K4Y87VCKZ0HCW9M95BPVZ2T8" + "01K4Y8770YSVFGWM6C38BCDQ5F": { + "value": "01K4Y8770YSVFGWM6C38BCDQ5F" }, - "01K4Y87BXTWJWX795ZTVS0FQBF": { - "value": "01K4Y87BXTWJWX795ZTVS0FQBF" + "01K4Y8776Y34QHTCSZ1DEFAEB3": { + "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" } } } @@ -2544,7 +8486,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.player-games.resource.fetch" + "$ref": "#/components/schemas/resources.comments.resource.fetch" } } } @@ -2564,12 +8506,12 @@ } } }, - "/users/{user}/relationships/player-games": { + "/users/{user}/relationships/wall-comments": { "get": { "tags": ["Users"], - "summary": "Show playerGames relation", + "summary": "Show wallComments relation", "description": "", - "operationId": "users.playerGames.show", + "operationId": "users.wallComments.show", "parameters": [ { "name": "user", @@ -2580,14 +8522,14 @@ "type": "string" }, "examples": { - "01K4Y87MWZ3Q9WC9EFFT6JKSNP": { - "value": "01K4Y87MWZ3Q9WC9EFFT6JKSNP" + "01K4Y876RZ4XVE4JA3X9ARV95P": { + "value": "01K4Y876RZ4XVE4JA3X9ARV95P" }, - "01K4Y87VCKZ0HCW9M95BPVZ2T8": { - "value": "01K4Y87VCKZ0HCW9M95BPVZ2T8" + "01K4Y8770YSVFGWM6C38BCDQ5F": { + "value": "01K4Y8770YSVFGWM6C38BCDQ5F" }, - "01K4Y87BXTWJWX795ZTVS0FQBF": { - "value": "01K4Y87BXTWJWX795ZTVS0FQBF" + "01K4Y8776Y34QHTCSZ1DEFAEB3": { + "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" } } } @@ -2614,7 +8556,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.users.relationship.playerGames.fetch" + "$ref": "#/components/schemas/resources.users.relationship.wallComments.fetch" } } } @@ -2744,13 +8686,13 @@ "title": "createdAt", "type": "string", "readOnly": true, - "example": "2025-09-12T07:01:58.000000Z" + "example": "2025-09-12T06:01:58.000000Z" }, "updatedAt": { "title": "updatedAt", "type": "string", "readOnly": true, - "example": "2026-01-09T03:06:22.000000Z" + "example": "2026-01-09T02:06:22.000000Z" } } }, @@ -2759,6 +8701,7 @@ "properties": { "games": { "title": "games", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"games\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -2783,6 +8726,23 @@ } } }, + "resources.achievements.relationship.comments.fetch": { + "title": "Resource/Achievement/Relationship/Comments/Fetch", + "type": "object", + "required": ["type", "id"], + "properties": { + "type": { + "title": "type", + "default": "comments", + "type": "string" + }, + "id": { + "title": "id", + "type": "string", + "example": "3" + } + } + }, "resources.achievements.relationship.playerAchievements.fetch": { "title": "Resource/Achievement/Relationship/PlayerAchievements/Fetch", "type": "object", @@ -2796,7 +8756,7 @@ "id": { "title": "id", "type": "string", - "example": "71528" + "example": "1" } } }, @@ -2845,13 +8805,13 @@ "title": "badgeUrl", "type": "string", "readOnly": true, - "example": "https://raweb.test/media/Badge/00001.png" + "example": "https://retroachievements.org/media/Badge/00001.png" }, "badgeLockedUrl": { "title": "badgeLockedUrl", "type": "string", "readOnly": true, - "example": "https://raweb.test/media/Badge/00001_lock.png" + "example": "https://retroachievements.org/media/Badge/00001_lock.png" }, "type": { "title": "type", @@ -2897,13 +8857,13 @@ "title": "createdAt", "type": "string", "readOnly": true, - "example": "2025-09-12T07:01:58.000000Z" + "example": "2025-09-12T06:01:58.000000Z" }, "modifiedAt": { "title": "modifiedAt", "type": "string", "readOnly": true, - "example": "2025-09-12T07:01:58.000000Z" + "example": "2025-09-12T06:01:58.000000Z" } } }, @@ -2912,6 +8872,7 @@ "properties": { "developer": { "title": "developer", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"developer\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -2934,6 +8895,7 @@ }, "achievementSet": { "title": "achievementSet", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSet\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -2954,8 +8916,32 @@ } } }, + "comments": { + "title": "comments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"comments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + } + }, + "readOnly": true + } + } + }, "games": { "title": "games", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"games\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -2976,8 +8962,91 @@ } } }, - "playerAchievements": { - "title": "playerAchievements", + "playerAchievements": { + "title": "playerAchievements", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievements\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + "resources.comments.resource.fetch": { + "title": "Resource/Comment/Fetch", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "comments", + "type": "string" + }, + "id": { + "type": "string", + "example": "3" + }, + "attributes": { + "type": "object", + "properties": { + "body": { + "title": "body", + "type": "string", + "readOnly": true, + "example": "Excited to play this!" + }, + "authorAvatarUrl": { + "title": "authorAvatarUrl", + "type": "string", + "readOnly": true + }, + "authorDisplayName": { + "title": "authorDisplayName", + "type": "string", + "readOnly": true + }, + "authorId": { + "title": "authorId", + "type": "string", + "readOnly": true + }, + "permalink": { + "title": "permalink", + "type": "string", + "readOnly": true, + "example": "" + }, + "submittedAt": { + "title": "submittedAt", + "type": "string", + "readOnly": true, + "example": "2026-05-05T22:41:05.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "author": { + "title": "author", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"author\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -2986,12 +9055,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/1" + "example": "https://api.retroachievements.org/v2/authors/3" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/1" + "example": "https://api.retroachievements.org/v2/authors/3" } }, "readOnly": true @@ -3033,7 +9102,7 @@ "title": "badgeUrl", "type": "string", "readOnly": true, - "example": "https://raweb.test/media/Images/000007.png" + "example": "https://retroachievements.org/media/Images/000007.png" }, "state": { "title": "state", @@ -3070,6 +9139,7 @@ "properties": { "awards": { "title": "awards", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"awards\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -3120,12 +9190,14 @@ "name": { "title": "name", "type": "string", - "readOnly": true + "readOnly": true, + "example": "True" }, "compatibility": { "title": "compatibility", "type": "string", - "readOnly": true + "readOnly": true, + "example": "compatible" }, "patchUrl": { "title": "patchUrl", @@ -3142,7 +9214,7 @@ "title": "updatedAt", "type": "string", "readOnly": true, - "example": "2025-09-12T07:01:57.000000Z" + "example": "2026-04-25T20:56:02.000000Z" } } }, @@ -3151,6 +9223,7 @@ "properties": { "game": { "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -3175,6 +9248,23 @@ } } }, + "resources.games.relationship.comments.fetch": { + "title": "Resource/Game/Relationship/Comments/Fetch", + "type": "object", + "required": ["type", "id"], + "properties": { + "type": { + "title": "type", + "default": "comments", + "type": "string" + }, + "id": { + "title": "id", + "type": "string", + "example": "3" + } + } + }, "resources.games.relationship.hashes.fetch": { "title": "Resource/Game/Relationship/Hashes/Fetch", "type": "object", @@ -3223,25 +9313,25 @@ "title": "badgeUrl", "type": "string", "readOnly": true, - "example": "https://raweb.test/media/Images/000002.png" + "example": "https://retroachievements.org/media/Images/000002.png" }, "imageBoxArtUrl": { "title": "imageBoxArtUrl", "type": "string", "readOnly": true, - "example": "https://raweb.test/media/Images/000002.png" + "example": "https://retroachievements.org/media/Images/000002.png" }, "imageTitleUrl": { "title": "imageTitleUrl", "type": "string", "readOnly": true, - "example": "https://raweb.test/media/Images/000010.png" + "example": "https://retroachievements.org/media/Images/000010.png" }, "imageIngameUrl": { "title": "imageIngameUrl", "type": "string", "readOnly": true, - "example": "https://raweb.test/media/Images/000002.png" + "example": "https://retroachievements.org/media/Images/000002.png" }, "releasedAt": { "title": "releasedAt", @@ -3307,6 +9397,7 @@ "properties": { "system": { "title": "system", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"system\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -3329,6 +9420,7 @@ }, "achievementSets": { "title": "achievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSets\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -3349,8 +9441,32 @@ } } }, + "comments": { + "title": "comments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"comments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + } + }, + "readOnly": true + } + } + }, "hashes": { "title": "hashes", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"hashes\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -3441,7 +9557,7 @@ "title": "badgeUrl", "type": "string", "readOnly": true, - "example": "https://raweb.test/media/Images/000001.png" + "example": "https://retroachievements.org/media/Images/000001.png" }, "hasMatureContent": { "title": "hasMatureContent", @@ -3452,14 +9568,12 @@ "gamesCount": { "title": "gamesCount", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "linkedHubsCount": { "title": "linkedHubsCount", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "isEventHub": { "title": "isEventHub", @@ -3471,13 +9585,13 @@ "title": "createdAt", "type": "string", "readOnly": true, - "example": "2025-09-12T07:04:29.000000Z" + "example": "2025-09-12T06:04:29.000000Z" }, "updatedAt": { "title": "updatedAt", "type": "string", "readOnly": true, - "example": "2025-09-12T07:04:29.000000Z" + "example": "2025-09-12T06:04:29.000000Z" } } }, @@ -3486,6 +9600,7 @@ "properties": { "games": { "title": "games", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"games\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -3508,6 +9623,7 @@ }, "links": { "title": "links", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"links\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -3577,6 +9693,7 @@ "properties": { "user": { "title": "user", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -3599,6 +9716,7 @@ }, "leaderboard": { "title": "leaderboard", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"leaderboard\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -3697,13 +9815,13 @@ "title": "createdAt", "type": "string", "readOnly": true, - "example": "2025-09-12T07:04:12.000000Z" + "example": "2025-09-12T06:04:12.000000Z" }, "updatedAt": { "title": "updatedAt", "type": "string", "readOnly": true, - "example": "2025-09-12T07:04:12.000000Z" + "example": "2025-09-12T06:04:12.000000Z" } } }, @@ -3712,6 +9830,7 @@ "properties": { "games": { "title": "games", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"games\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -3734,6 +9853,7 @@ }, "developer": { "title": "developer", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"developer\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -3756,6 +9876,7 @@ }, "entries": { "title": "entries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"entries\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -3792,7 +9913,7 @@ }, "id": { "type": "string", - "example": "17595" + "example": "1" }, "attributes": { "type": "object", @@ -3801,65 +9922,67 @@ "title": "achievementsUnlocked", "type": "number", "readOnly": true, - "example": 2 + "example": 20 }, "achievementsUnlockedHardcore": { "title": "achievementsUnlockedHardcore", "type": "number", "readOnly": true, - "example": 2 + "example": 20 }, "points": { "title": "points", "type": "number", "readOnly": true, - "example": 2 + "example": 189 }, "pointsHardcore": { "title": "pointsHardcore", "type": "number", "readOnly": true, - "example": 2 + "example": 189 }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", "readOnly": true, - "example": 82 + "example": 8479 }, "completionPercentage": { "title": "completionPercentage", "type": "number", "readOnly": true, - "example": "0.500000000" + "example": "1.000000000" }, "completionPercentageHardcore": { "title": "completionPercentageHardcore", "type": "number", "readOnly": true, - "example": "0.500000000" + "example": "1.000000000" }, "lastUnlockAt": { "title": "lastUnlockAt", "type": "string", "readOnly": true, - "example": "2026-02-16T08:58:33.000000Z" + "example": "2025-09-03T10:09:08.000000Z" }, "lastUnlockHardcoreAt": { "title": "lastUnlockHardcoreAt", "type": "string", "readOnly": true, - "example": "2026-02-16T08:58:33.000000Z" + "example": "2025-09-03T10:09:08.000000Z" }, "completedAt": { "title": "completedAt", "type": "string", - "readOnly": true + "readOnly": true, + "example": "2025-09-03T10:09:08.000000Z" }, "completedHardcoreAt": { "title": "completedHardcoreAt", "type": "string", - "readOnly": true + "readOnly": true, + "example": "2025-09-03T10:09:08.000000Z" }, "timeTakenSeconds": { "title": "timeTakenSeconds", @@ -3885,6 +10008,7 @@ "properties": { "achievementSet": { "title": "achievementSet", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSet\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -3893,12 +10017,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/17595" + "example": "https://api.retroachievements.org/v2/achievement-sets/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/17595" + "example": "https://api.retroachievements.org/v2/achievement-sets/1" } }, "readOnly": true @@ -3907,6 +10031,7 @@ }, "game": { "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -3915,12 +10040,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/games/17595" + "example": "https://api.retroachievements.org/v2/games/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/games/17595" + "example": "https://api.retroachievements.org/v2/games/1" } }, "readOnly": true @@ -3943,7 +10068,7 @@ }, "id": { "type": "string", - "example": "71528" + "example": "1" }, "attributes": { "type": "object", @@ -3952,13 +10077,13 @@ "title": "unlockedAt", "type": "string", "readOnly": true, - "example": "2025-09-12T07:10:24.000000Z" + "example": "2025-09-03T07:20:03.000000Z" }, "unlockedHardcoreAt": { "title": "unlockedHardcoreAt", "type": "string", "readOnly": true, - "example": "2025-09-12T07:10:24.000000Z" + "example": "2025-09-03T07:20:03.000000Z" } } }, @@ -3967,6 +10092,7 @@ "properties": { "achievement": { "title": "achievement", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievement\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -3975,12 +10101,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/71528" + "example": "https://api.retroachievements.org/v2/achievements/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/71528" + "example": "https://api.retroachievements.org/v2/achievements/1" } }, "readOnly": true @@ -3989,6 +10115,7 @@ }, "user": { "title": "user", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -3997,12 +10124,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/users/71528" + "example": "https://api.retroachievements.org/v2/users/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/users/71528" + "example": "https://api.retroachievements.org/v2/users/1" } }, "readOnly": true @@ -4011,6 +10138,7 @@ }, "game": { "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -4019,12 +10147,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/games/71528" + "example": "https://api.retroachievements.org/v2/games/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/games/71528" + "example": "https://api.retroachievements.org/v2/games/1" } }, "readOnly": true @@ -4047,7 +10175,7 @@ }, "id": { "type": "string", - "example": "9166" + "example": "1" }, "attributes": { "type": "object", @@ -4056,51 +10184,55 @@ "title": "lastPlayedAt", "type": "string", "readOnly": true, - "example": "2025-09-12T07:32:54.000000Z" + "example": "2025-09-03T10:15:57.000000Z" }, "firstUnlockAt": { "title": "firstUnlockAt", "type": "string", "readOnly": true, - "example": "2025-09-12T05:32:56.000000Z" + "example": "2025-09-03T07:20:03.000000Z" }, "lastUnlockAt": { "title": "lastUnlockAt", "type": "string", "readOnly": true, - "example": "2025-09-12T07:10:24.000000Z" + "example": "2025-09-03T10:09:08.000000Z" }, "lastUnlockHardcoreAt": { "title": "lastUnlockHardcoreAt", "type": "string", "readOnly": true, - "example": "2025-09-12T07:10:24.000000Z" + "example": "2025-09-03T10:09:08.000000Z" }, "beatenAt": { "title": "beatenAt", "type": "string", - "readOnly": true + "readOnly": true, + "example": "2025-09-03T08:19:11.000000Z" }, "beatenHardcoreAt": { "title": "beatenHardcoreAt", "type": "string", - "readOnly": true + "readOnly": true, + "example": "2025-09-03T08:19:11.000000Z" }, "playtimeTotalSeconds": { "title": "playtimeTotalSeconds", "type": "number", "readOnly": true, - "example": 8758 + "example": 12159 }, "timeToBeatSeconds": { "title": "timeToBeatSeconds", "type": "number", - "readOnly": true + "readOnly": true, + "example": 5153 }, "timeToBeatHardcoreSeconds": { "title": "timeToBeatHardcoreSeconds", "type": "number", - "readOnly": true + "readOnly": true, + "example": 5153 } } }, @@ -4109,6 +10241,7 @@ "properties": { "achievementSets": { "title": "achievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSets\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -4117,12 +10250,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/9166" + "example": "https://api.retroachievements.org/v2/achievement-sets/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/9166" + "example": "https://api.retroachievements.org/v2/achievement-sets/1" } }, "readOnly": true @@ -4131,6 +10264,7 @@ }, "game": { "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -4139,12 +10273,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/games/9166" + "example": "https://api.retroachievements.org/v2/games/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/games/9166" + "example": "https://api.retroachievements.org/v2/games/1" } }, "readOnly": true @@ -4153,6 +10287,7 @@ }, "playerAchievementSets": { "title": "playerAchievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievementSets\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -4161,12 +10296,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/9166" + "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/9166" + "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" } }, "readOnly": true @@ -4218,7 +10353,7 @@ "title": "iconUrl", "type": "string", "readOnly": true, - "example": "https://raweb.test/assets/images/system/md.png" + "example": "https://retroachievements.org/assets/images/system/md.png" }, "active": { "title": "active", @@ -4229,6 +10364,131 @@ } } }, + "resources.user-awards.resource.fetch": { + "title": "Resource/User-award/Fetch", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "user-awards", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "awardedAt": { + "title": "awardedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T08:19:11.000000Z" + }, + "kind": { + "title": "kind", + "type": "string", + "readOnly": true, + "example": "game_beaten" + }, + "title": { + "title": "title", + "type": "string", + "readOnly": true, + "example": 1 + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true, + "example": 1 + }, + "displayOrder": { + "title": "displayOrder", + "type": "number", + "readOnly": true, + "example": 0 + }, + "context": { + "title": "context", + "type": "object", + "readOnly": true, + "example": 1 + } + } + }, + "relationships": { + "type": "object", + "properties": { + "event": { + "title": "event", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"event\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/events/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/events/1" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + "resources.users.relationship.awards.fetch": { + "title": "Resource/User/Relationship/Awards/Fetch", + "type": "object", + "required": ["type", "id"], + "properties": { + "type": { + "title": "type", + "default": "user-awards", + "type": "string" + }, + "id": { + "title": "id", + "type": "string", + "example": "1" + } + } + }, "resources.users.relationship.playerAchievementSets.fetch": { "title": "Resource/User/Relationship/PlayerAchievementSets/Fetch", "type": "object", @@ -4242,7 +10502,7 @@ "id": { "title": "id", "type": "string", - "example": "17595" + "example": "1" } } }, @@ -4259,7 +10519,7 @@ "id": { "title": "id", "type": "string", - "example": "71528" + "example": "1" } } }, @@ -4276,7 +10536,24 @@ "id": { "title": "id", "type": "string", - "example": "9166" + "example": "1" + } + } + }, + "resources.users.relationship.wallComments.fetch": { + "title": "Resource/User/Relationship/WallComments/Fetch", + "type": "object", + "required": ["type", "id"], + "properties": { + "type": { + "title": "type", + "default": "comments", + "type": "string" + }, + "id": { + "title": "id", + "type": "string", + "example": "3" } } }, @@ -4292,7 +10569,7 @@ }, "id": { "type": "string", - "example": "01K4Y87MWZ3Q9WC9EFFT6JKSNP" + "example": "01K4Y876RZ4XVE4JA3X9ARV95P" }, "attributes": { "type": "object", @@ -4301,13 +10578,13 @@ "title": "displayName", "type": "string", "readOnly": true, - "example": "claireboehm" + "example": "Root" }, "avatarUrl": { "title": "avatarUrl", "type": "string", "readOnly": true, - "example": "https://raweb.test/media/UserPic/claireboehm.png" + "example": "https://retroachievements.org/media/UserPic/Root.png" }, "motto": { "title": "motto", @@ -4319,19 +10596,19 @@ "title": "points", "type": "number", "readOnly": true, - "example": 1250 + "example": 1236 }, "pointsHardcore": { "title": "pointsHardcore", "type": "number", "readOnly": true, - "example": 9019 + "example": 7155 }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", "readOnly": true, - "example": 19902 + "example": 19749 }, "yieldUnlocks": { "title": "yieldUnlocks", @@ -4349,13 +10626,13 @@ "title": "joinedAt", "type": "string", "readOnly": true, - "example": "2025-09-12T07:01:51.000000Z" + "example": "2025-09-12T06:01:22.000000Z" }, "lastActivityAt": { "title": "lastActivityAt", "type": "string", "readOnly": true, - "example": "2025-09-12T07:24:12.000000Z" + "example": "2026-04-18T03:30:13.000000Z" }, "deletedAt": { "title": "deletedAt", @@ -4378,18 +10655,31 @@ "title": "richPresence", "type": "string", "readOnly": true, - "example": "Playing Alias Et" + "example": "Playing Assumenda Pariatur" }, "richPresenceUpdatedAt": { "title": "richPresenceUpdatedAt", "type": "string", "readOnly": true, - "example": "2025-09-12T06:24:12.000000Z" + "example": "2026-04-18T04:34:36.000000Z" }, "visibleRole": { "title": "visibleRole", "type": "string", - "readOnly": true + "readOnly": true, + "example": { + "id": 4, + "name": "game-hash-manager", + "display": 3, + "guard_name": "web", + "created_at": "2025-09-12T06:01:21.000000Z", + "updated_at": "2025-09-12T06:01:21.000000Z", + "pivot": { + "model_type": "user", + "model_id": 1, + "role_id": 4 + } + } }, "displayableRoles": { "title": "displayableRoles", @@ -4403,6 +10693,7 @@ "properties": { "playerAchievements": { "title": "playerAchievements", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievements\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -4411,12 +10702,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y87MWZ3Q9WC9EFFT6JKSNP" + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y87MWZ3Q9WC9EFFT6JKSNP" + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" } }, "readOnly": true @@ -4425,6 +10716,7 @@ }, "playerAchievementSets": { "title": "playerAchievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievementSets\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -4433,12 +10725,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y87MWZ3Q9WC9EFFT6JKSNP" + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y87MWZ3Q9WC9EFFT6JKSNP" + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" } }, "readOnly": true @@ -4447,6 +10739,53 @@ }, "playerGames": { "title": "playerGames", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerGames\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "wallComments": { + "title": "wallComments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"wallComments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "awards": { + "title": "awards", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"awards\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -4455,12 +10794,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y87MWZ3Q9WC9EFFT6JKSNP" + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y87MWZ3Q9WC9EFFT6JKSNP" + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" } }, "readOnly": true From 7a4fca46b180a296e5ab762a0ae8f4f2c083328f Mon Sep 17 00:00:00 2001 From: Chew Date: Wed, 13 May 2026 17:38:57 -0500 Subject: [PATCH 7/8] update spec with achievement-set-claims --- docs/v2/retroachievements.json | 2330 ++++++++++++++++++++++++++++++-- 1 file changed, 2246 insertions(+), 84 deletions(-) diff --git a/docs/v2/retroachievements.json b/docs/v2/retroachievements.json index 1092d62..c96eb6a 100644 --- a/docs/v2/retroachievements.json +++ b/docs/v2/retroachievements.json @@ -314,6 +314,29 @@ "relationships": { "type": "object", "properties": { + "achievementSetClaims": { + "title": "achievementSetClaims", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetClaims\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, "playerAchievements": { "title": "playerAchievements", "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievements\" to the \"include\" query parameter; results will be found in `.included`.", @@ -784,6 +807,29 @@ } } }, + "achievementSetClaims": { + "title": "achievementSetClaims", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetClaims\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + } + }, + "readOnly": true + } + } + }, "comments": { "title": "comments", "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"comments\" to the \"include\" query parameter; results will be found in `.included`.", @@ -1148,6 +1194,29 @@ "relationships": { "type": "object", "properties": { + "achievementSetClaims": { + "title": "achievementSetClaims", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetClaims\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, "playerAchievements": { "title": "playerAchievements", "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievements\" to the \"include\" query parameter; results will be found in `.included`.", @@ -1618,6 +1687,29 @@ } } }, + "achievementSetClaims": { + "title": "achievementSetClaims", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetClaims\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + } + }, + "readOnly": true + } + } + }, "comments": { "title": "comments", "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"comments\" to the \"include\" query parameter; results will be found in `.included`.", @@ -2290,6 +2382,29 @@ } } }, + "achievementSetClaims": { + "title": "achievementSetClaims", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetClaims\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + } + }, + "readOnly": true + } + } + }, "comments": { "title": "comments", "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"comments\" to the \"include\" query parameter; results will be found in `.included`.", @@ -2360,12 +2475,12 @@ } } }, - "/events": { + "/achievement-set-claims": { "get": { - "tags": ["Events"], - "summary": "Get all events", + "tags": ["Achievement-set-claims"], + "summary": "Get all achievement-set-claims", "description": "", - "operationId": "events.index", + "operationId": "achievement-set-claims.index", "parameters": [ { "name": "page[size]", @@ -2398,12 +2513,30 @@ "enum": [ "id", "-id", - "title", - "-title", - "sortTitle", - "-sortTitle", - "activeFrom", - "-activeFrom" + "claimedAt", + "-claimedAt", + "finishedAt", + "-finishedAt", + "updatedAt", + "-updatedAt", + "status", + "-status", + "claimType", + "-claimType", + "setType", + "-setType", + "specialType", + "-specialType", + "extensionsCount", + "-extensionsCount", + "gameTitle", + "-gameTitle", + "userDisplayName", + "-userDisplayName", + "gameTitle", + "-gameTitle", + "userDisplayName", + "-userDisplayName" ], "type": "string" } @@ -2428,15 +2561,97 @@ "empty": { "value": [] }, + "1": { + "value": ["1"] + }, + "2": { + "value": ["2"] + }, "3": { "value": ["3"] } } + }, + { + "name": "filter[gameId]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": "", + "type": "string" + }, + "examples": { + "1": { + "value": 1 + } + } + }, + { + "name": "filter[status]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter[claimType]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter[setType]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter[specialType]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter[expired]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter[user]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } } ], "responses": { "200": { - "description": "Index events", + "description": "Index achievement-set-claims", "content": { "application/vnd.api+json": { "schema": { @@ -2456,7 +2671,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.events.resource.fetch" + "$ref": "#/components/schemas/resources.achievement-set-claims.resource.fetch" } }, "included": { @@ -2464,61 +2679,691 @@ "items": { "oneOf": [ { - "title": "Resource/Awards/Fetch", - "description": "May not be present unless \"awards\" is in the \"include\" header. See `.data[].relationships.awards.data` for the lists of IDs which have been included here.", + "title": "Resource/User/Fetch", + "description": "May not be present unless \"user\" is in the \"include\" header. See `.data[].relationships.user.data` for the lists of IDs which have been included here.", "type": "object", "required": ["type", "id", "attributes"], "properties": { "type": { "title": "type", - "default": "event-awards", + "default": "users", "type": "string" }, "id": { "type": "string", - "example": "1" + "example": "01K4Y876RZ4XVE4JA3X9ARV95P" }, "attributes": { "type": "object", "properties": { - "tierIndex": { - "title": "tierIndex", - "type": "number", + "displayName": { + "title": "displayName", + "type": "string", "readOnly": true, - "example": 1 + "example": "Root" }, - "label": { - "title": "label", + "avatarUrl": { + "title": "avatarUrl", "type": "string", "readOnly": true, - "example": "True" + "example": "https://retroachievements.org/media/UserPic/Root.png" }, - "pointsRequired": { - "title": "pointsRequired", + "motto": { + "title": "motto", + "type": "string", + "readOnly": true, + "example": "" + }, + "points": { + "title": "points", "type": "number", "readOnly": true, - "example": 1 + "example": 1236 }, - "badgeUrl": { - "title": "badgeUrl", + "pointsHardcore": { + "title": "pointsHardcore", + "type": "number", + "readOnly": true, + "example": 7155 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 19749 + }, + "yieldUnlocks": { + "title": "yieldUnlocks", + "type": "number", + "readOnly": true, + "example": 0 + }, + "yieldPoints": { + "title": "yieldPoints", + "type": "number", + "readOnly": true, + "example": 0 + }, + "joinedAt": { + "title": "joinedAt", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000008.png" - } - } - }, - "relationships": { - "type": "object", - "properties": { - "event": { - "title": "event", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"event\" to the \"include\" query parameter; results will be found in `.included`.", - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "related": { + "example": "2025-09-12T06:01:22.000000Z" + }, + "lastActivityAt": { + "title": "lastActivityAt", + "type": "string", + "readOnly": true, + "example": "2026-04-18T03:30:13.000000Z" + }, + "deletedAt": { + "title": "deletedAt", + "type": "string", + "readOnly": true + }, + "isUnranked": { + "title": "isUnranked", + "type": "boolean", + "readOnly": true, + "example": false + }, + "isUserWallActive": { + "title": "isUserWallActive", + "type": "boolean", + "readOnly": true, + "example": true + }, + "richPresence": { + "title": "richPresence", + "type": "string", + "readOnly": true, + "example": "Playing Assumenda Pariatur" + }, + "richPresenceUpdatedAt": { + "title": "richPresenceUpdatedAt", + "type": "string", + "readOnly": true, + "example": "2026-04-18T04:34:36.000000Z" + }, + "visibleRole": { + "title": "visibleRole", + "type": "string", + "readOnly": true, + "example": { + "id": 4, + "name": "game-hash-manager", + "display": 3, + "guard_name": "web", + "created_at": "2025-09-12T06:01:21.000000Z", + "updated_at": "2025-09-12T06:01:21.000000Z", + "pivot": { + "model_type": "user", + "model_id": 1, + "role_id": 4 + } + } + }, + "displayableRoles": { + "title": "displayableRoles", + "type": "array", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievementSetClaims": { + "title": "achievementSetClaims", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetClaims\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerAchievements": { + "title": "playerAchievements", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievements\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerAchievementSets": { + "title": "playerAchievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerGames": { + "title": "playerGames", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerGames\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "wallComments": { + "title": "wallComments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"wallComments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "awards": { + "title": "awards", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"awards\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Game/Fetch", + "description": "May not be present unless \"game\" is in the \"include\" header. See `.data[].relationships.game.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "games", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "example": "Quia Impedit Libero Quam" + }, + "sortTitle": { + "title": "sortTitle", + "type": "string", + "example": "quia impedit libero quam" + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "imageBoxArtUrl": { + "title": "imageBoxArtUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "imageTitleUrl": { + "title": "imageTitleUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000010.png" + }, + "imageIngameUrl": { + "title": "imageIngameUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000002.png" + }, + "releasedAt": { + "title": "releasedAt", + "type": "string" + }, + "releasedAtGranularity": { + "title": "releasedAtGranularity", + "type": "string" + }, + "playersTotal": { + "title": "playersTotal", + "type": "number", + "example": 82 + }, + "playersHardcore": { + "title": "playersHardcore", + "type": "number", + "example": 82 + }, + "achievementsPublished": { + "title": "achievementsPublished", + "type": "number", + "example": 20 + }, + "achievementsUnpublished": { + "title": "achievementsUnpublished", + "type": "number", + "example": 0 + }, + "pointsTotal": { + "title": "pointsTotal", + "type": "number", + "example": 189 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "example": 341 + }, + "timesBeaten": { + "title": "timesBeaten", + "type": "number", + "example": 0 + }, + "timesBeatenHardcore": { + "title": "timesBeatenHardcore", + "type": "number", + "example": 1 + }, + "medianTimeToBeatMinutes": { + "title": "medianTimeToBeatMinutes", + "type": "number" + }, + "medianTimeToBeatHardcoreMinutes": { + "title": "medianTimeToBeatHardcoreMinutes", + "type": "number", + "example": 5153 + } + } + }, + "relationships": { + "type": "object", + "properties": { + "system": { + "title": "system", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"system\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/systems/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/systems/1" + } + }, + "readOnly": true + } + } + }, + "achievementSets": { + "title": "achievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + } + }, + "readOnly": true + } + } + }, + "achievementSetClaims": { + "title": "achievementSetClaims", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetClaims\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + } + }, + "readOnly": true + } + } + }, + "comments": { + "title": "comments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"comments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + } + }, + "readOnly": true + } + } + }, + "hashes": { + "title": "hashes", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"hashes\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/hashes/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/hashes/1" + } + }, + "readOnly": true + } + } + } + } + } + } + } + ] + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/events": { + "get": { + "tags": ["Events"], + "summary": "Get all events", + "description": "", + "operationId": "events.index", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "page[number]", + "in": "query", + "description": "The page number for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "sort", + "in": "query", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "id", + "-id", + "title", + "-title", + "sortTitle", + "-sortTitle", + "activeFrom", + "-activeFrom" + ], + "type": "string" + } + } + }, + { + "name": "filter[id][]", + "in": "query", + "description": "A list of ids to filter by.", + "required": false, + "allowEmptyValue": false, + "style": "form", + "explode": true, + "schema": { + "default": [], + "type": "array", + "items": { + "type": "string" + } + }, + "examples": { + "empty": { + "value": [] + }, + "3": { + "value": ["3"] + } + } + } + ], + "responses": { + "200": { + "description": "Index events", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.events.resource.fetch" + } + }, + "included": { + "type": "array", + "items": { + "oneOf": [ + { + "title": "Resource/Awards/Fetch", + "description": "May not be present unless \"awards\" is in the \"include\" header. See `.data[].relationships.awards.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "event-awards", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "tierIndex": { + "title": "tierIndex", + "type": "number", + "readOnly": true, + "example": 1 + }, + "label": { + "title": "label", + "type": "string", + "readOnly": true, + "example": "True" + }, + "pointsRequired": { + "title": "pointsRequired", + "type": "number", + "readOnly": true, + "example": 1 + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true, + "example": "https://retroachievements.org/media/Images/000008.png" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "event": { + "title": "event", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"event\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { "title": "related", "type": "string", "example": "https://api.retroachievements.org/v2/events/1" @@ -2885,14 +3730,122 @@ } }, { - "title": "Resource/AchievementSets/Fetch", - "description": "May not be present unless \"achievementSets\" is in the \"include\" header. See `.data[].relationships.achievementSets.data` for the lists of IDs which have been included here.", + "title": "Resource/AchievementSets/Fetch", + "description": "May not be present unless \"achievementSets\" is in the \"include\" header. See `.data[].relationships.achievementSets.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "achievement-sets", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "readOnly": true, + "example": "Quia Impedit Libero Quam" + }, + "pointsTotal": { + "title": "pointsTotal", + "type": "number", + "readOnly": true, + "example": 189 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 341 + }, + "achievementsPublished": { + "title": "achievementsPublished", + "type": "number", + "readOnly": true, + "example": 20 + }, + "achievementsUnpublished": { + "title": "achievementsUnpublished", + "type": "number", + "readOnly": true, + "example": 0 + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true + }, + "achievementsFirstPublishedAt": { + "title": "achievementsFirstPublishedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T07:20:03.000000Z" + }, + "types": { + "title": "types", + "type": "array", + "readOnly": true + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:58.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true, + "example": "2026-01-09T02:06:22.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "games": { + "title": "games", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"games\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/AchievementSetClaims/Fetch", + "description": "May not be present unless \"achievementSetClaims\" is in the \"include\" header. See `.data[].relationships.achievementSetClaims.data` for the lists of IDs which have been included here.", "type": "object", "required": ["type", "id", "attributes"], "properties": { "type": { "title": "type", - "default": "achievement-sets", + "default": "achievement-set-claims", "type": "string" }, "id": { @@ -2902,72 +3855,128 @@ "attributes": { "type": "object", "properties": { - "title": { - "title": "title", + "claimedAt": { + "title": "claimedAt", "type": "string", "readOnly": true, - "example": "Quia Impedit Libero Quam" + "example": "2025-09-12T06:24:26.000000Z" }, - "pointsTotal": { - "title": "pointsTotal", - "type": "number", + "finishedAt": { + "title": "finishedAt", + "type": "string", "readOnly": true, - "example": 189 + "example": "2025-12-12T06:24:26.000000Z" }, - "pointsWeighted": { - "title": "pointsWeighted", - "type": "number", + "updatedAt": { + "title": "updatedAt", + "type": "string", "readOnly": true, - "example": 341 + "example": "2025-09-12T06:24:26.000000Z" }, - "achievementsPublished": { - "title": "achievementsPublished", - "type": "number", + "status": { + "title": "status", + "type": "string", "readOnly": true, - "example": 20 + "example": "complete" }, - "achievementsUnpublished": { - "title": "achievementsUnpublished", + "claimType": { + "title": "claimType", + "type": "string", + "readOnly": true, + "example": "primary" + }, + "setType": { + "title": "setType", + "type": "string", + "readOnly": true, + "example": "new_set" + }, + "specialType": { + "title": "specialType", + "type": "string", + "readOnly": true, + "example": "none" + }, + "extensionsCount": { + "title": "extensionsCount", "type": "number", "readOnly": true, "example": 0 }, - "badgeUrl": { - "title": "badgeUrl", + "minutesLeft": { + "title": "minutesLeft", + "type": "number", + "readOnly": true, + "example": 219849 + }, + "userId": { + "title": "userId", "type": "string", - "readOnly": true + "readOnly": true, + "example": 91 }, - "achievementsFirstPublishedAt": { - "title": "achievementsFirstPublishedAt", + "userDisplayName": { + "title": "userDisplayName", "type": "string", + "readOnly": true + }, + "gameId": { + "title": "gameId", + "type": "number", "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" + "example": 1 }, - "types": { - "title": "types", - "type": "array", + "gameTitle": { + "title": "gameTitle", + "type": "string", "readOnly": true }, - "createdAt": { - "title": "createdAt", + "gameIconUrl": { + "title": "gameIconUrl", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "readOnly": true }, - "updatedAt": { - "title": "updatedAt", + "systemId": { + "title": "systemId", + "type": "number", + "readOnly": true + }, + "systemName": { + "title": "systemName", "type": "string", - "readOnly": true, - "example": "2026-01-09T02:06:22.000000Z" + "readOnly": true } } }, "relationships": { "type": "object", "properties": { - "games": { - "title": "games", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"games\" to the \"include\" query parameter; results will be found in `.included`.", + "user": { + "title": "user", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -3392,6 +4401,170 @@ } } }, + { + "title": "Resource/AchievementSetClaims/Fetch", + "description": "May not be present unless \"achievementSetClaims\" is in the \"include\" header. See `.data[].relationships.achievementSetClaims.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "achievement-set-claims", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "claimedAt": { + "title": "claimedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:24:26.000000Z" + }, + "finishedAt": { + "title": "finishedAt", + "type": "string", + "readOnly": true, + "example": "2025-12-12T06:24:26.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:24:26.000000Z" + }, + "status": { + "title": "status", + "type": "string", + "readOnly": true, + "example": "complete" + }, + "claimType": { + "title": "claimType", + "type": "string", + "readOnly": true, + "example": "primary" + }, + "setType": { + "title": "setType", + "type": "string", + "readOnly": true, + "example": "new_set" + }, + "specialType": { + "title": "specialType", + "type": "string", + "readOnly": true, + "example": "none" + }, + "extensionsCount": { + "title": "extensionsCount", + "type": "number", + "readOnly": true, + "example": 0 + }, + "minutesLeft": { + "title": "minutesLeft", + "type": "number", + "readOnly": true, + "example": 219849 + }, + "userId": { + "title": "userId", + "type": "string", + "readOnly": true, + "example": 91 + }, + "userDisplayName": { + "title": "userDisplayName", + "type": "string", + "readOnly": true + }, + "gameId": { + "title": "gameId", + "type": "number", + "readOnly": true, + "example": 1 + }, + "gameTitle": { + "title": "gameTitle", + "type": "string", + "readOnly": true + }, + "gameIconUrl": { + "title": "gameIconUrl", + "type": "string", + "readOnly": true + }, + "systemId": { + "title": "systemId", + "type": "number", + "readOnly": true + }, + "systemName": { + "title": "systemName", + "type": "string", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "user": { + "title": "user", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, { "title": "Resource/Comments/Fetch", "description": "May not be present unless \"comments\" is in the \"include\" header. See `.data[].relationships.comments.data` for the lists of IDs which have been included here.", @@ -3580,6 +4753,146 @@ } } }, + "/games/{game}/achievement-set-claims": { + "get": { + "tags": ["Games"], + "summary": "Show achievementSetClaims", + "description": "", + "operationId": "games.achievementSetClaims", + "parameters": [ + { + "name": "game", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "ShowRelated games", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.achievement-set-claims.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/games/{game}/relationships/achievement-set-claims": { + "get": { + "tags": ["Games"], + "summary": "Show achievementSetClaims relation", + "description": "", + "operationId": "games.achievementSetClaims.show", + "parameters": [ + { + "name": "game", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show games", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.games.relationship.achievementSetClaims.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, "/games/{game}/comments": { "get": { "tags": ["Games"], @@ -4159,6 +5472,29 @@ } } }, + "achievementSetClaims": { + "title": "achievementSetClaims", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetClaims\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + } + }, + "readOnly": true + } + } + }, "comments": { "title": "comments", "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"comments\" to the \"include\" query parameter; results will be found in `.included`.", @@ -4440,6 +5776,29 @@ } } }, + "achievementSetClaims": { + "title": "achievementSetClaims", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetClaims\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + } + }, + "readOnly": true + } + } + }, "comments": { "title": "comments", "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"comments\" to the \"include\" query parameter; results will be found in `.included`.", @@ -5087,6 +6446,29 @@ } } }, + "achievementSetClaims": { + "title": "achievementSetClaims", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetClaims\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + } + }, + "readOnly": true + } + } + }, "comments": { "title": "comments", "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"comments\" to the \"include\" query parameter; results will be found in `.included`.", @@ -5272,6 +6654,29 @@ "relationships": { "type": "object", "properties": { + "achievementSetClaims": { + "title": "achievementSetClaims", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetClaims\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, "playerAchievements": { "title": "playerAchievements", "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievements\" to the \"include\" query parameter; results will be found in `.included`.", @@ -5716,6 +7121,29 @@ } } }, + "achievementSetClaims": { + "title": "achievementSetClaims", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetClaims\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + } + }, + "readOnly": true + } + } + }, "comments": { "title": "comments", "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"comments\" to the \"include\" query parameter; results will be found in `.included`.", @@ -5901,6 +7329,29 @@ "relationships": { "type": "object", "properties": { + "achievementSetClaims": { + "title": "achievementSetClaims", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetClaims\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, "playerAchievements": { "title": "playerAchievements", "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievements\" to the \"include\" query parameter; results will be found in `.included`.", @@ -6573,6 +8024,170 @@ "type": "array", "items": { "oneOf": [ + { + "title": "Resource/AchievementSetClaims/Fetch", + "description": "May not be present unless \"achievementSetClaims\" is in the \"include\" header. See `.data[].relationships.achievementSetClaims.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "achievement-set-claims", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "claimedAt": { + "title": "claimedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:24:26.000000Z" + }, + "finishedAt": { + "title": "finishedAt", + "type": "string", + "readOnly": true, + "example": "2025-12-12T06:24:26.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:24:26.000000Z" + }, + "status": { + "title": "status", + "type": "string", + "readOnly": true, + "example": "complete" + }, + "claimType": { + "title": "claimType", + "type": "string", + "readOnly": true, + "example": "primary" + }, + "setType": { + "title": "setType", + "type": "string", + "readOnly": true, + "example": "new_set" + }, + "specialType": { + "title": "specialType", + "type": "string", + "readOnly": true, + "example": "none" + }, + "extensionsCount": { + "title": "extensionsCount", + "type": "number", + "readOnly": true, + "example": 0 + }, + "minutesLeft": { + "title": "minutesLeft", + "type": "number", + "readOnly": true, + "example": 219849 + }, + "userId": { + "title": "userId", + "type": "string", + "readOnly": true, + "example": 91 + }, + "userDisplayName": { + "title": "userDisplayName", + "type": "string", + "readOnly": true + }, + "gameId": { + "title": "gameId", + "type": "number", + "readOnly": true, + "example": 1 + }, + "gameTitle": { + "title": "gameTitle", + "type": "string", + "readOnly": true + }, + "gameIconUrl": { + "title": "gameIconUrl", + "type": "string", + "readOnly": true + }, + "systemId": { + "title": "systemId", + "type": "number", + "readOnly": true + }, + "systemName": { + "title": "systemName", + "type": "string", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "user": { + "title": "user", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, { "title": "Resource/PlayerAchievements/Fetch", "description": "May not be present unless \"playerAchievements\" is in the \"include\" header. See `.data[].relationships.playerAchievements.data` for the lists of IDs which have been included here.", @@ -7250,6 +8865,170 @@ "type": "array", "items": { "oneOf": [ + { + "title": "Resource/AchievementSetClaims/Fetch", + "description": "May not be present unless \"achievementSetClaims\" is in the \"include\" header. See `.data[].relationships.achievementSetClaims.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "achievement-set-claims", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "claimedAt": { + "title": "claimedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:24:26.000000Z" + }, + "finishedAt": { + "title": "finishedAt", + "type": "string", + "readOnly": true, + "example": "2025-12-12T06:24:26.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:24:26.000000Z" + }, + "status": { + "title": "status", + "type": "string", + "readOnly": true, + "example": "complete" + }, + "claimType": { + "title": "claimType", + "type": "string", + "readOnly": true, + "example": "primary" + }, + "setType": { + "title": "setType", + "type": "string", + "readOnly": true, + "example": "new_set" + }, + "specialType": { + "title": "specialType", + "type": "string", + "readOnly": true, + "example": "none" + }, + "extensionsCount": { + "title": "extensionsCount", + "type": "number", + "readOnly": true, + "example": 0 + }, + "minutesLeft": { + "title": "minutesLeft", + "type": "number", + "readOnly": true, + "example": 219849 + }, + "userId": { + "title": "userId", + "type": "string", + "readOnly": true, + "example": 91 + }, + "userDisplayName": { + "title": "userDisplayName", + "type": "string", + "readOnly": true + }, + "gameId": { + "title": "gameId", + "type": "number", + "readOnly": true, + "example": 1 + }, + "gameTitle": { + "title": "gameTitle", + "type": "string", + "readOnly": true + }, + "gameIconUrl": { + "title": "gameIconUrl", + "type": "string", + "readOnly": true + }, + "systemId": { + "title": "systemId", + "type": "number", + "readOnly": true + }, + "systemName": { + "title": "systemName", + "type": "string", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "user": { + "title": "user", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, { "title": "Resource/PlayerAchievements/Fetch", "description": "May not be present unless \"playerAchievements\" is in the \"include\" header. See `.data[].relationships.playerAchievements.data` for the lists of IDs which have been included here.", @@ -7876,6 +9655,146 @@ } } }, + "/users/{user}/achievement-set-claims": { + "get": { + "tags": ["Users"], + "summary": "Show achievementSetClaims", + "description": "", + "operationId": "users.achievementSetClaims", + "parameters": [ + { + "name": "user", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "01K4Y876RZ4XVE4JA3X9ARV95P": { + "value": "01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "01K4Y8770YSVFGWM6C38BCDQ5F": { + "value": "01K4Y8770YSVFGWM6C38BCDQ5F" + }, + "01K4Y8776Y34QHTCSZ1DEFAEB3": { + "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" + } + } + } + ], + "responses": { + "200": { + "description": "ShowRelated users", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.achievement-set-claims.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/users/{user}/relationships/achievement-set-claims": { + "get": { + "tags": ["Users"], + "summary": "Show achievementSetClaims relation", + "description": "", + "operationId": "users.achievementSetClaims.show", + "parameters": [ + { + "name": "user", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "01K4Y876RZ4XVE4JA3X9ARV95P": { + "value": "01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "01K4Y8770YSVFGWM6C38BCDQ5F": { + "value": "01K4Y8770YSVFGWM6C38BCDQ5F" + }, + "01K4Y8776Y34QHTCSZ1DEFAEB3": { + "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" + } + } + } + ], + "responses": { + "200": { + "description": "Show users", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.users.relationship.achievementSetClaims.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, "/users/{user}/awards": { "get": { "tags": ["Users"], @@ -8619,6 +10538,169 @@ } } }, + "resources.achievement-set-claims.resource.fetch": { + "title": "Resource/Achievement-set-claim/Fetch", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "achievement-set-claims", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "claimedAt": { + "title": "claimedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:24:26.000000Z" + }, + "finishedAt": { + "title": "finishedAt", + "type": "string", + "readOnly": true, + "example": "2025-12-12T06:24:26.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:24:26.000000Z" + }, + "status": { + "title": "status", + "type": "string", + "readOnly": true, + "example": "complete" + }, + "claimType": { + "title": "claimType", + "type": "string", + "readOnly": true, + "example": "primary" + }, + "setType": { + "title": "setType", + "type": "string", + "readOnly": true, + "example": "new_set" + }, + "specialType": { + "title": "specialType", + "type": "string", + "readOnly": true, + "example": "none" + }, + "extensionsCount": { + "title": "extensionsCount", + "type": "number", + "readOnly": true, + "example": 0 + }, + "minutesLeft": { + "title": "minutesLeft", + "type": "number", + "readOnly": true, + "example": 219849 + }, + "userId": { + "title": "userId", + "type": "string", + "readOnly": true, + "example": 91 + }, + "userDisplayName": { + "title": "userDisplayName", + "type": "string", + "readOnly": true + }, + "gameId": { + "title": "gameId", + "type": "number", + "readOnly": true, + "example": 1 + }, + "gameTitle": { + "title": "gameTitle", + "type": "string", + "readOnly": true + }, + "gameIconUrl": { + "title": "gameIconUrl", + "type": "string", + "readOnly": true + }, + "systemId": { + "title": "systemId", + "type": "number", + "readOnly": true + }, + "systemName": { + "title": "systemName", + "type": "string", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "user": { + "title": "user", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, "resources.achievement-sets.resource.fetch": { "title": "Resource/Achievement-set/Fetch", "type": "object", @@ -9248,6 +11330,23 @@ } } }, + "resources.games.relationship.achievementSetClaims.fetch": { + "title": "Resource/Game/Relationship/AchievementSetClaims/Fetch", + "type": "object", + "required": ["type", "id"], + "properties": { + "type": { + "title": "type", + "default": "achievement-set-claims", + "type": "string" + }, + "id": { + "title": "id", + "type": "string", + "example": "1" + } + } + }, "resources.games.relationship.comments.fetch": { "title": "Resource/Game/Relationship/Comments/Fetch", "type": "object", @@ -9441,6 +11540,29 @@ } } }, + "achievementSetClaims": { + "title": "achievementSetClaims", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetClaims\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + } + }, + "readOnly": true + } + } + }, "comments": { "title": "comments", "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"comments\" to the \"include\" query parameter; results will be found in `.included`.", @@ -10472,6 +12594,23 @@ } } }, + "resources.users.relationship.achievementSetClaims.fetch": { + "title": "Resource/User/Relationship/AchievementSetClaims/Fetch", + "type": "object", + "required": ["type", "id"], + "properties": { + "type": { + "title": "type", + "default": "achievement-set-claims", + "type": "string" + }, + "id": { + "title": "id", + "type": "string", + "example": "1" + } + } + }, "resources.users.relationship.awards.fetch": { "title": "Resource/User/Relationship/Awards/Fetch", "type": "object", @@ -10691,6 +12830,29 @@ "relationships": { "type": "object", "properties": { + "achievementSetClaims": { + "title": "achievementSetClaims", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetClaims\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, "playerAchievements": { "title": "playerAchievements", "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievements\" to the \"include\" query parameter; results will be found in `.included`.", From 9b1aa8f1ec1f65830d4d7104333c137ff6f4d673 Mon Sep 17 00:00:00 2001 From: Chew Date: Tue, 7 Jul 2026 16:09:32 -0500 Subject: [PATCH 8/8] update spec --- docs/v2/retroachievements.json | 11197 +++++++++++++++++++++++++++---- 1 file changed, 9751 insertions(+), 1446 deletions(-) diff --git a/docs/v2/retroachievements.json b/docs/v2/retroachievements.json index c96eb6a..b1ed1b2 100644 --- a/docs/v2/retroachievements.json +++ b/docs/v2/retroachievements.json @@ -43,6 +43,8 @@ "in": "query", "required": false, "allowEmptyValue": false, + "style": "form", + "explode": false, "schema": { "type": "array", "items": { @@ -68,7 +70,29 @@ "unlockHardcorePercentage", "-unlockHardcorePercentage" ], - "type": "string" + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "title": "By title, ascending", + "-title": "By title, descending", + "points": "By points, ascending", + "-points": "By points, descending", + "pointsWeighted": "By pointsWeighted, ascending", + "-pointsWeighted": "By pointsWeighted, descending", + "type": "By type, ascending", + "-type": "By type, descending", + "orderColumn": "By orderColumn, ascending", + "-orderColumn": "By orderColumn, descending", + "unlocksTotal": "By unlocksTotal, ascending", + "-unlocksTotal": "By unlocksTotal, descending", + "unlocksHardcore": "By unlocksHardcore, ascending", + "-unlocksHardcore": "By unlocksHardcore, descending", + "unlockPercentage": "By unlockPercentage, ascending", + "-unlockPercentage": "By unlockPercentage, descending", + "unlockHardcorePercentage": "By unlockHardcorePercentage, ascending", + "-unlockHardcorePercentage": "By unlockHardcorePercentage, descending" + } } } }, @@ -148,6 +172,168 @@ "value": "missable" } } + }, + { + "name": "fields[achievements]", + "in": "query", + "description": "Only return these fields for the \"achievements\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "title", + "description", + "points", + "pointsWeighted", + "badgeUrl", + "badgeLockedUrl", + "type", + "state", + "orderColumn", + "unlocksTotal", + "unlocksHardcore", + "unlockPercentage", + "unlockHardcorePercentage", + "createdAt", + "modifiedAt", + "developer", + "achievementSet", + "comments", + "games", + "playerAchievements", + "tickets" + ], + "type": "string" + } + } + }, + { + "name": "fields[users]", + "in": "query", + "description": "Only return these fields for the \"users\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "displayName", + "avatarUrl", + "motto", + "points", + "pointsHardcore", + "pointsWeighted", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "wallComments", + "awards", + "followers", + "following" + ], + "type": "string" + } + } + }, + { + "name": "fields[achievement-sets]", + "in": "query", + "description": "Only return these fields for the \"achievement-sets\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "title", + "pointsTotal", + "pointsWeighted", + "achievementsPublished", + "achievementsUnpublished", + "badgeUrl", + "achievementsFirstPublishedAt", + "types", + "createdAt", + "updatedAt", + "games", + "achievementSetVersions" + ], + "type": "string" + } + } + }, + { + "name": "fields[games]", + "in": "query", + "description": "Only return these fields for the \"games\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "title", + "sortTitle", + "badgeUrl", + "imageBoxArtUrl", + "imageTitleUrl", + "imageIngameUrl", + "releasedAt", + "releasedAtGranularity", + "playersTotal", + "playersHardcore", + "achievementsPublished", + "achievementsUnpublished", + "pointsTotal", + "pointsWeighted", + "timesBeaten", + "timesBeatenHardcore", + "medianTimeToBeatMinutes", + "medianTimeToBeatHardcoreMinutes", + "system", + "achievementSets", + "achievementSetClaims", + "comments", + "hashes", + "tickets" + ], + "type": "string" + } + } + }, + { + "name": "include", + "in": "query", + "description": "Additionally fetch these related resources. Each related resources will be placed in the .included key of the root document, and the main resource each relates to will list the related IDs in its \"relationships\" section.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": ["developer", "achievementSet", "games"], + "type": "string" + } + } } ], "responses": { @@ -178,7 +364,7 @@ "included": { "type": "array", "items": { - "oneOf": [ + "anyOf": [ { "title": "Resource/Developer/Fetch", "description": "May not be present unless \"developer\" is in the \"include\" header. See `.data[].relationships.developer.data` for the lists of IDs which have been included here.", @@ -207,7 +393,7 @@ "title": "avatarUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/UserPic/Root.png" + "example": "https://media.retroachievements.org/UserPic/Root.png" }, "motto": { "title": "motto", @@ -225,13 +411,13 @@ "title": "pointsHardcore", "type": "number", "readOnly": true, - "example": 7155 + "example": 7130 }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", "readOnly": true, - "example": 19749 + "example": 15687 }, "yieldUnlocks": { "title": "yieldUnlocks", @@ -255,7 +441,7 @@ "title": "lastActivityAt", "type": "string", "readOnly": true, - "example": "2026-04-18T03:30:13.000000Z" + "example": "2026-07-07T21:05:33.000000Z" }, "deletedAt": { "title": "deletedAt", @@ -406,6 +592,29 @@ } } }, + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, "wallComments": { "title": "wallComments", "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"wallComments\" to the \"include\" query parameter; results will be found in `.included`.", @@ -451,6 +660,52 @@ "readOnly": true } } + }, + "followers": { + "title": "followers", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"followers\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "following": { + "title": "following", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"following\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } } } } @@ -559,6 +814,29 @@ "readOnly": true } } + }, + "achievementSetVersions": { + "title": "achievementSetVersions", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetVersions\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" + } + }, + "readOnly": true + } + } } } } @@ -679,25 +957,25 @@ "title": "badgeUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "imageBoxArtUrl": { "title": "imageBoxArtUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "imageTitleUrl": { "title": "imageTitleUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000010.png" + "example": "https://media.retroachievements.org/Images/000010.png" }, "imageIngameUrl": { "title": "imageIngameUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "releasedAt": { "title": "releasedAt", @@ -875,6 +1153,29 @@ "readOnly": true } } + }, + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/1" + } + }, + "readOnly": true + } + } } } } @@ -987,78 +1288,277 @@ } } } - } - ] - } - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - } - } - } - }, - "/achievements/{achievement}": { - "get": { - "tags": ["Achievements"], - "summary": "Show one achievement", - "description": "", - "operationId": "achievements.show", - "parameters": [ - { - "name": "achievement", - "in": "path", - "required": true, - "allowEmptyValue": false, - "schema": { - "type": "string" - }, - "examples": { - "1": { - "value": "1" - }, - "2": { - "value": "2" - }, - "3": { - "value": "3" - } - } - } - ], - "responses": { - "200": { - "description": "Show achievements", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "required": ["jsonapi", "data"], - "properties": { - "jsonapi": { - "type": "object", - "properties": { - "version": { - "title": "version", - "type": "string", - "example": "1.0" - } - } - }, - "data": { - "$ref": "#/components/schemas/resources.achievements.resource.fetch" - }, + }, + { + "title": "Resource/Tickets/Fetch", + "description": "May not be present unless \"tickets\" is in the \"include\" header. See `.data[].relationships.tickets.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "tickets", + "type": "string" + }, + "id": { + "type": "string", + "example": "5" + }, + "attributes": { + "type": "object", + "properties": { + "state": { + "title": "state", + "type": "string", + "readOnly": true, + "example": "open" + }, + "type": { + "title": "type", + "type": "string", + "readOnly": true, + "example": "did_not_trigger" + }, + "body": { + "title": "body", + "type": "string", + "readOnly": true, + "example": "bruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh moment" + }, + "hardcore": { + "title": "hardcore", + "type": "boolean", + "readOnly": true, + "example": 1 + }, + "reportedAt": { + "title": "reportedAt", + "type": "string", + "readOnly": true, + "example": "2026-06-05T19:41:03.000000Z" + }, + "resolvedAt": { + "title": "resolvedAt", + "type": "string", + "readOnly": true + }, + "ticketableType": { + "title": "ticketableType", + "type": "string", + "readOnly": true, + "example": "achievement" + }, + "ticketableId": { + "title": "ticketableId", + "type": "number", + "readOnly": true, + "example": 3801 + }, + "gameIconUrl": { + "title": "gameIconUrl", + "type": "string", + "readOnly": true + }, + "systemName": { + "title": "systemName", + "type": "string", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievement": { + "title": "achievement", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievement\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievements/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievements/5" + } + }, + "readOnly": true + } + } + }, + "leaderboard": { + "title": "leaderboard", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"leaderboard\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboards/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboards/5" + } + }, + "readOnly": true + } + } + }, + "reporter": { + "title": "reporter", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"reporter\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/reporters/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/reporters/5" + } + }, + "readOnly": true + } + } + }, + "resolver": { + "title": "resolver", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"resolver\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/resolvers/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/resolvers/5" + } + }, + "readOnly": true + } + } + }, + "author": { + "title": "author", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"author\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/5" + } + }, + "readOnly": true + } + } + } + } + } + } + } + ] + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/achievements/{achievement}": { + "get": { + "tags": ["Achievements"], + "summary": "Show one achievement", + "description": "", + "operationId": "achievements.show", + "parameters": [ + { + "name": "achievement", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show achievements", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "$ref": "#/components/schemas/resources.achievements.resource.fetch" + }, "included": { "type": "array", "items": { - "oneOf": [ + "anyOf": [ { "title": "Resource/Developer/Fetch", "description": "May not be present unless \"developer\" is in the \"include\" header. See `.data[].relationships.developer.data` for the lists of IDs which have been included here.", @@ -1087,7 +1587,7 @@ "title": "avatarUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/UserPic/Root.png" + "example": "https://media.retroachievements.org/UserPic/Root.png" }, "motto": { "title": "motto", @@ -1105,13 +1605,13 @@ "title": "pointsHardcore", "type": "number", "readOnly": true, - "example": 7155 + "example": 7130 }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", "readOnly": true, - "example": 19749 + "example": 15687 }, "yieldUnlocks": { "title": "yieldUnlocks", @@ -1135,7 +1635,7 @@ "title": "lastActivityAt", "type": "string", "readOnly": true, - "example": "2026-04-18T03:30:13.000000Z" + "example": "2026-07-07T21:05:33.000000Z" }, "deletedAt": { "title": "deletedAt", @@ -1286,6 +1786,29 @@ } } }, + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, "wallComments": { "title": "wallComments", "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"wallComments\" to the \"include\" query parameter; results will be found in `.included`.", @@ -1331,17 +1854,63 @@ "readOnly": true } } - } - } - } - } - }, - { - "title": "Resource/AchievementSet/Fetch", - "description": "May not be present unless \"achievementSet\" is in the \"include\" header. See `.data[].relationships.achievementSet.data` for the lists of IDs which have been included here.", - "type": "object", - "required": ["type", "id", "attributes"], - "properties": { + }, + "followers": { + "title": "followers", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"followers\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "following": { + "title": "following", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"following\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/AchievementSet/Fetch", + "description": "May not be present unless \"achievementSet\" is in the \"include\" header. See `.data[].relationships.achievementSet.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { "type": { "title": "type", "default": "achievement-sets", @@ -1439,6 +2008,29 @@ "readOnly": true } } + }, + "achievementSetVersions": { + "title": "achievementSetVersions", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetVersions\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" + } + }, + "readOnly": true + } + } } } } @@ -1559,25 +2151,25 @@ "title": "badgeUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "imageBoxArtUrl": { "title": "imageBoxArtUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "imageTitleUrl": { "title": "imageTitleUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000010.png" + "example": "https://media.retroachievements.org/Images/000010.png" }, "imageIngameUrl": { "title": "imageIngameUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "releasedAt": { "title": "releasedAt", @@ -1755,6 +2347,29 @@ "readOnly": true } } + }, + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/1" + } + }, + "readOnly": true + } + } } } } @@ -1867,6 +2482,205 @@ } } } + }, + { + "title": "Resource/Tickets/Fetch", + "description": "May not be present unless \"tickets\" is in the \"include\" header. See `.data[].relationships.tickets.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "tickets", + "type": "string" + }, + "id": { + "type": "string", + "example": "5" + }, + "attributes": { + "type": "object", + "properties": { + "state": { + "title": "state", + "type": "string", + "readOnly": true, + "example": "open" + }, + "type": { + "title": "type", + "type": "string", + "readOnly": true, + "example": "did_not_trigger" + }, + "body": { + "title": "body", + "type": "string", + "readOnly": true, + "example": "bruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh moment" + }, + "hardcore": { + "title": "hardcore", + "type": "boolean", + "readOnly": true, + "example": 1 + }, + "reportedAt": { + "title": "reportedAt", + "type": "string", + "readOnly": true, + "example": "2026-06-05T19:41:03.000000Z" + }, + "resolvedAt": { + "title": "resolvedAt", + "type": "string", + "readOnly": true + }, + "ticketableType": { + "title": "ticketableType", + "type": "string", + "readOnly": true, + "example": "achievement" + }, + "ticketableId": { + "title": "ticketableId", + "type": "number", + "readOnly": true, + "example": 3801 + }, + "gameIconUrl": { + "title": "gameIconUrl", + "type": "string", + "readOnly": true + }, + "systemName": { + "title": "systemName", + "type": "string", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievement": { + "title": "achievement", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievement\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievements/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievements/5" + } + }, + "readOnly": true + } + } + }, + "leaderboard": { + "title": "leaderboard", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"leaderboard\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboards/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboards/5" + } + }, + "readOnly": true + } + } + }, + "reporter": { + "title": "reporter", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"reporter\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/reporters/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/reporters/5" + } + }, + "readOnly": true + } + } + }, + "resolver": { + "title": "resolver", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"resolver\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/resolvers/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/resolvers/5" + } + }, + "readOnly": true + } + } + }, + "author": { + "title": "author", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"author\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/5" + } + }, + "readOnly": true + } + } + } + } + } + } } ] } @@ -2168,15 +2982,15 @@ } } }, - "/achievement-sets/{achievement_set}": { + "/achievements/{achievement}/tickets": { "get": { - "tags": ["Achievement-sets"], - "summary": "Show one achievement-set", + "tags": ["Achievements"], + "summary": "Show tickets", "description": "", - "operationId": "achievement-sets.show", + "operationId": "achievements.tickets", "parameters": [ { - "name": "achievement_set", + "name": "achievement", "in": "path", "required": true, "allowEmptyValue": false, @@ -2198,7 +3012,7 @@ ], "responses": { "200": { - "description": "Show achievement-sets", + "description": "ShowRelated achievements", "content": { "application/vnd.api+json": { "schema": { @@ -2216,14 +3030,154 @@ } }, "data": { - "$ref": "#/components/schemas/resources.achievement-sets.resource.fetch" - }, - "included": { "type": "array", "items": { - "oneOf": [ - { - "title": "Resource/Games/Fetch", + "$ref": "#/components/schemas/resources.tickets.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/achievements/{achievement}/relationships/tickets": { + "get": { + "tags": ["Achievements"], + "summary": "Show tickets relation", + "description": "", + "operationId": "achievements.tickets.show", + "parameters": [ + { + "name": "achievement", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show achievements", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.achievements.relationship.tickets.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/achievement-sets/{achievement_set}": { + "get": { + "tags": ["Achievement-sets"], + "summary": "Show one achievement-set", + "description": "", + "operationId": "achievement-sets.show", + "parameters": [ + { + "name": "achievement_set", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show achievement-sets", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "$ref": "#/components/schemas/resources.achievement-sets.resource.fetch" + }, + "included": { + "type": "array", + "items": { + "anyOf": [ + { + "title": "Resource/Games/Fetch", "description": "May not be present unless \"games\" is in the \"include\" header. See `.data[].relationships.games.data` for the lists of IDs which have been included here.", "type": "object", "required": ["type", "id", "attributes"], @@ -2254,25 +3208,25 @@ "title": "badgeUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "imageBoxArtUrl": { "title": "imageBoxArtUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "imageTitleUrl": { "title": "imageTitleUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000010.png" + "example": "https://media.retroachievements.org/Images/000010.png" }, "imageIngameUrl": { "title": "imageIngameUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "releasedAt": { "title": "releasedAt", @@ -2450,6 +3404,133 @@ "readOnly": true } } + }, + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/AchievementSetVersions/Fetch", + "description": "May not be present unless \"achievementSetVersions\" is in the \"include\" header. See `.data[].relationships.achievementSetVersions.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "achievement-set-versions", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "number", + "readOnly": true, + "example": 1 + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2026-05-31T20:21:52.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true, + "example": "2026-06-10T20:57:02.000000Z" + }, + "playersTotal": { + "title": "playersTotal", + "type": "number", + "readOnly": true, + "example": 83 + }, + "playersHardcore": { + "title": "playersHardcore", + "type": "number", + "readOnly": true, + "example": 83 + }, + "achievementsPublished": { + "title": "achievementsPublished", + "type": "number", + "readOnly": true, + "example": 10 + }, + "achievementsUnpublished": { + "title": "achievementsUnpublished", + "type": "number", + "readOnly": true, + "example": 0 + }, + "pointsTotal": { + "title": "pointsTotal", + "type": "number", + "readOnly": true, + "example": 101 + }, + "achievementSetId": { + "title": "achievementSetId", + "type": "string", + "readOnly": true, + "example": 215 + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievementSet": { + "title": "achievementSet", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSet\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + } + }, + "readOnly": true + } + } } } } @@ -2475,17 +3556,157 @@ } } }, - "/achievement-set-claims": { + "/achievement-sets/{achievement_set}/achievement-set-versions": { "get": { - "tags": ["Achievement-set-claims"], - "summary": "Get all achievement-set-claims", + "tags": ["Achievement-sets"], + "summary": "Show achievementSetVersions", "description": "", - "operationId": "achievement-set-claims.index", + "operationId": "achievement-sets.achievementSetVersions", "parameters": [ { - "name": "page[size]", - "in": "query", - "description": "The page size for paginated results", + "name": "achievement_set", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "ShowRelated achievement-sets", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.achievement-set-versions.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/achievement-sets/{achievement_set}/relationships/achievement-set-versions": { + "get": { + "tags": ["Achievement-sets"], + "summary": "Show achievementSetVersions relation", + "description": "", + "operationId": "achievement-sets.achievementSetVersions.show", + "parameters": [ + { + "name": "achievement_set", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show achievement-sets", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.achievement-sets.relationship.achievementSetVersions.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/achievement-set-claims": { + "get": { + "tags": ["Achievement-set-claims"], + "summary": "Get all achievement-set-claims", + "description": "", + "operationId": "achievement-set-claims.index", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", "required": false, "allowEmptyValue": false, "schema": { @@ -2507,6 +3728,8 @@ "in": "query", "required": false, "allowEmptyValue": false, + "style": "form", + "explode": false, "schema": { "type": "array", "items": { @@ -2532,13 +3755,33 @@ "gameTitle", "-gameTitle", "userDisplayName", - "-userDisplayName", - "gameTitle", - "-gameTitle", - "userDisplayName", "-userDisplayName" ], - "type": "string" + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "claimedAt": "By claimedAt, ascending", + "-claimedAt": "By claimedAt, descending", + "finishedAt": "By finishedAt, ascending", + "-finishedAt": "By finishedAt, descending", + "updatedAt": "By updatedAt, ascending", + "-updatedAt": "By updatedAt, descending", + "status": "By status, ascending", + "-status": "By status, descending", + "claimType": "By claimType, ascending", + "-claimType": "By claimType, descending", + "setType": "By setType, ascending", + "-setType": "By setType, descending", + "specialType": "By specialType, ascending", + "-specialType": "By specialType, descending", + "extensionsCount": "By extensionsCount, ascending", + "-extensionsCount": "By extensionsCount, descending", + "gameTitle": "By gameTitle, ascending", + "-gameTitle": "By gameTitle, descending", + "userDisplayName": "By userDisplayName, ascending", + "-userDisplayName": "By userDisplayName, descending" + } } } }, @@ -2647,6 +3890,137 @@ "schema": { "type": "string" } + }, + { + "name": "fields[achievement-set-claims]", + "in": "query", + "description": "Only return these fields for the \"achievement-set-claims\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "claimedAt", + "finishedAt", + "updatedAt", + "status", + "claimType", + "setType", + "specialType", + "extensionsCount", + "minutesLeft", + "userId", + "userDisplayName", + "gameId", + "gameTitle", + "gameIconUrl", + "systemId", + "systemName", + "user", + "game" + ], + "type": "string" + } + } + }, + { + "name": "fields[users]", + "in": "query", + "description": "Only return these fields for the \"users\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "displayName", + "avatarUrl", + "motto", + "points", + "pointsHardcore", + "pointsWeighted", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "wallComments", + "awards", + "followers", + "following" + ], + "type": "string" + } + } + }, + { + "name": "fields[games]", + "in": "query", + "description": "Only return these fields for the \"games\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "title", + "sortTitle", + "badgeUrl", + "imageBoxArtUrl", + "imageTitleUrl", + "imageIngameUrl", + "releasedAt", + "releasedAtGranularity", + "playersTotal", + "playersHardcore", + "achievementsPublished", + "achievementsUnpublished", + "pointsTotal", + "pointsWeighted", + "timesBeaten", + "timesBeatenHardcore", + "medianTimeToBeatMinutes", + "medianTimeToBeatHardcoreMinutes", + "system", + "achievementSets", + "achievementSetClaims", + "comments", + "hashes", + "tickets" + ], + "type": "string" + } + } + }, + { + "name": "include", + "in": "query", + "description": "Additionally fetch these related resources. Each related resources will be placed in the .included key of the root document, and the main resource each relates to will list the related IDs in its \"relationships\" section.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": ["user", "game"], + "type": "string" + } + } } ], "responses": { @@ -2677,7 +4051,7 @@ "included": { "type": "array", "items": { - "oneOf": [ + "anyOf": [ { "title": "Resource/User/Fetch", "description": "May not be present unless \"user\" is in the \"include\" header. See `.data[].relationships.user.data` for the lists of IDs which have been included here.", @@ -2706,7 +4080,7 @@ "title": "avatarUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/UserPic/Root.png" + "example": "https://media.retroachievements.org/UserPic/Root.png" }, "motto": { "title": "motto", @@ -2724,13 +4098,13 @@ "title": "pointsHardcore", "type": "number", "readOnly": true, - "example": 7155 + "example": 7130 }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", "readOnly": true, - "example": 19749 + "example": 15687 }, "yieldUnlocks": { "title": "yieldUnlocks", @@ -2754,7 +4128,7 @@ "title": "lastActivityAt", "type": "string", "readOnly": true, - "example": "2026-04-18T03:30:13.000000Z" + "example": "2026-07-07T21:05:33.000000Z" }, "deletedAt": { "title": "deletedAt", @@ -2905,6 +4279,29 @@ } } }, + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, "wallComments": { "title": "wallComments", "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"wallComments\" to the \"include\" query parameter; results will be found in `.included`.", @@ -2950,25 +4347,71 @@ "readOnly": true } } - } - } - } - } - }, - { - "title": "Resource/Game/Fetch", - "description": "May not be present unless \"game\" is in the \"include\" header. See `.data[].relationships.game.data` for the lists of IDs which have been included here.", - "type": "object", - "required": ["type", "id", "attributes"], - "properties": { - "type": { - "title": "type", - "default": "games", - "type": "string" - }, - "id": { - "type": "string", - "example": "1" + }, + "followers": { + "title": "followers", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"followers\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "following": { + "title": "following", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"following\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Game/Fetch", + "description": "May not be present unless \"game\" is in the \"include\" header. See `.data[].relationships.game.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "games", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" }, "attributes": { "type": "object", @@ -2987,25 +4430,25 @@ "title": "badgeUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "imageBoxArtUrl": { "title": "imageBoxArtUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "imageTitleUrl": { "title": "imageTitleUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000010.png" + "example": "https://media.retroachievements.org/Images/000010.png" }, "imageIngameUrl": { "title": "imageIngameUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "releasedAt": { "title": "releasedAt", @@ -3183,6 +4626,29 @@ "readOnly": true } } + }, + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/1" + } + }, + "readOnly": true + } + } } } } @@ -3205,12 +4671,12 @@ } } }, - "/events": { + "/achievement-set-versions": { "get": { - "tags": ["Events"], - "summary": "Get all events", + "tags": ["Achievement-set-versions"], + "summary": "Get all achievement-set-versions", "description": "", - "operationId": "events.index", + "operationId": "achievement-set-versions.index", "parameters": [ { "name": "page[size]", @@ -3237,20 +4703,28 @@ "in": "query", "required": false, "allowEmptyValue": false, + "style": "form", + "explode": false, "schema": { "type": "array", "items": { "enum": [ "id", "-id", - "title", - "-title", - "sortTitle", - "-sortTitle", - "activeFrom", - "-activeFrom" + "createdAt", + "-createdAt", + "updatedAt", + "-updatedAt" ], - "type": "string" + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "createdAt": "By createdAt, ascending", + "-createdAt": "By createdAt, descending", + "updatedAt": "By updatedAt, ascending", + "-updatedAt": "By updatedAt, descending" + } } } }, @@ -3273,15 +4747,112 @@ "empty": { "value": [] }, + "1": { + "value": ["1"] + }, + "2": { + "value": ["2"] + }, "3": { "value": ["3"] } } + }, + { + "name": "filter[achievementSetId]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": "", + "type": "string" + }, + "examples": { + "215": { + "value": 215 + }, + "303": { + "value": 303 + }, + "306": { + "value": 306 + } + } + }, + { + "name": "fields[achievement-set-versions]", + "in": "query", + "description": "Only return these fields for the \"achievement-set-versions\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "version", + "createdAt", + "updatedAt", + "playersTotal", + "playersHardcore", + "achievementsPublished", + "achievementsUnpublished", + "pointsTotal", + "achievementSetId", + "achievementSet" + ], + "type": "string" + } + } + }, + { + "name": "fields[achievement-sets]", + "in": "query", + "description": "Only return these fields for the \"achievement-sets\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "title", + "pointsTotal", + "pointsWeighted", + "achievementsPublished", + "achievementsUnpublished", + "badgeUrl", + "achievementsFirstPublishedAt", + "types", + "createdAt", + "updatedAt", + "games", + "achievementSetVersions" + ], + "type": "string" + } + } + }, + { + "name": "include", + "in": "query", + "description": "Additionally fetch these related resources. Each related resources will be placed in the .included key of the root document, and the main resource each relates to will list the related IDs in its \"relationships\" section.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": ["achievementSet", "achievementSet.games"], + "type": "string" + } + } } ], "responses": { "200": { - "description": "Index events", + "description": "Index achievement-set-versions", "content": { "application/vnd.api+json": { "schema": { @@ -3301,22 +4872,22 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.events.resource.fetch" + "$ref": "#/components/schemas/resources.achievement-set-versions.resource.fetch" } }, "included": { "type": "array", "items": { - "oneOf": [ + "anyOf": [ { - "title": "Resource/Awards/Fetch", - "description": "May not be present unless \"awards\" is in the \"include\" header. See `.data[].relationships.awards.data` for the lists of IDs which have been included here.", + "title": "Resource/AchievementSet/Fetch", + "description": "May not be present unless \"achievementSet\" is in the \"include\" header. See `.data[].relationships.achievementSet.data` for the lists of IDs which have been included here.", "type": "object", "required": ["type", "id", "attributes"], "properties": { "type": { "title": "type", - "default": "event-awards", + "default": "achievement-sets", "type": "string" }, "id": { @@ -3326,38 +4897,72 @@ "attributes": { "type": "object", "properties": { - "tierIndex": { - "title": "tierIndex", + "title": { + "title": "title", + "type": "string", + "readOnly": true, + "example": "Quia Impedit Libero Quam" + }, + "pointsTotal": { + "title": "pointsTotal", "type": "number", "readOnly": true, - "example": 1 + "example": 189 }, - "label": { - "title": "label", - "type": "string", + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", "readOnly": true, - "example": "True" + "example": 341 }, - "pointsRequired": { - "title": "pointsRequired", + "achievementsPublished": { + "title": "achievementsPublished", "type": "number", "readOnly": true, - "example": 1 + "example": 20 + }, + "achievementsUnpublished": { + "title": "achievementsUnpublished", + "type": "number", + "readOnly": true, + "example": 0 }, "badgeUrl": { "title": "badgeUrl", "type": "string", + "readOnly": true + }, + "achievementsFirstPublishedAt": { + "title": "achievementsFirstPublishedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T07:20:03.000000Z" + }, + "types": { + "title": "types", + "type": "array", + "readOnly": true + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:58.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000008.png" + "example": "2026-01-09T02:06:22.000000Z" } } }, "relationships": { "type": "object", "properties": { - "event": { - "title": "event", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"event\" to the \"include\" query parameter; results will be found in `.included`.", + "games": { + "title": "games", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"games\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -3366,12 +4971,35 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "example": "https://api.retroachievements.org/v2/games/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + }, + "achievementSetVersions": { + "title": "achievementSetVersions", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetVersions\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" } }, "readOnly": true @@ -3399,10 +5027,277 @@ } } }, - "/events/{event}": { + "/events": { "get": { "tags": ["Events"], - "summary": "Show one event", + "summary": "Get all events", + "description": "", + "operationId": "events.index", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "page[number]", + "in": "query", + "description": "The page number for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "sort", + "in": "query", + "required": false, + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "id", + "-id", + "title", + "-title", + "sortTitle", + "-sortTitle", + "activeFrom", + "-activeFrom" + ], + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "title": "By title, ascending", + "-title": "By title, descending", + "sortTitle": "By sortTitle, ascending", + "-sortTitle": "By sortTitle, descending", + "activeFrom": "By activeFrom, ascending", + "-activeFrom": "By activeFrom, descending" + } + } + } + }, + { + "name": "filter[id][]", + "in": "query", + "description": "A list of ids to filter by.", + "required": false, + "allowEmptyValue": false, + "style": "form", + "explode": true, + "schema": { + "default": [], + "type": "array", + "items": { + "type": "string" + } + }, + "examples": { + "empty": { + "value": [] + }, + "3": { + "value": ["3"] + } + } + }, + { + "name": "fields[events]", + "in": "query", + "description": "Only return these fields for the \"events\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "title", + "sortTitle", + "badgeUrl", + "state", + "playersTotal", + "achievementsPublished", + "activeFrom", + "activeThrough", + "awards" + ], + "type": "string" + } + } + }, + { + "name": "fields[event-awards]", + "in": "query", + "description": "Only return these fields for the \"event-awards\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "tierIndex", + "label", + "pointsRequired", + "badgeUrl", + "event" + ], + "type": "string" + } + } + }, + { + "name": "include", + "in": "query", + "description": "Additionally fetch these related resources. Each related resources will be placed in the .included key of the root document, and the main resource each relates to will list the related IDs in its \"relationships\" section.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": ["awards"], + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Index events", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.events.resource.fetch" + } + }, + "included": { + "type": "array", + "items": { + "anyOf": [ + { + "title": "Resource/Awards/Fetch", + "description": "May not be present unless \"awards\" is in the \"include\" header. See `.data[].relationships.awards.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "event-awards", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "tierIndex": { + "title": "tierIndex", + "type": "number", + "readOnly": true, + "example": 1 + }, + "label": { + "title": "label", + "type": "string", + "readOnly": true, + "example": "True" + }, + "pointsRequired": { + "title": "pointsRequired", + "type": "number", + "readOnly": true, + "example": 1 + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true, + "example": "https://media.retroachievements.org/Images/000008.png" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "event": { + "title": "event", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"event\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/events/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/events/1" + } + }, + "readOnly": true + } + } + } + } + } + } + } + ] + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/events/{event}": { + "get": { + "tags": ["Events"], + "summary": "Show one event", "description": "", "operationId": "events.show", "parameters": [ @@ -3446,7 +5341,7 @@ "included": { "type": "array", "items": { - "oneOf": [ + "anyOf": [ { "title": "Resource/Awards/Fetch", "description": "May not be present unless \"awards\" is in the \"include\" header. See `.data[].relationships.awards.data` for the lists of IDs which have been included here.", @@ -3487,7 +5382,7 @@ "title": "badgeUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000008.png" + "example": "https://media.retroachievements.org/Images/000008.png" } } }, @@ -3573,6 +5468,8 @@ "in": "query", "required": false, "allowEmptyValue": false, + "style": "form", + "explode": false, "schema": { "type": "array", "items": { @@ -3596,7 +5493,27 @@ "pointsWeighted", "-pointsWeighted" ], - "type": "string" + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "title": "By title, ascending", + "-title": "By title, descending", + "sortTitle": "By sortTitle, ascending", + "-sortTitle": "By sortTitle, descending", + "releasedAt": "By releasedAt, ascending", + "-releasedAt": "By releasedAt, descending", + "playersTotal": "By playersTotal, ascending", + "-playersTotal": "By playersTotal, descending", + "playersHardcore": "By playersHardcore, ascending", + "-playersHardcore": "By playersHardcore, descending", + "achievementsPublished": "By achievementsPublished, ascending", + "-achievementsPublished": "By achievementsPublished, descending", + "pointsTotal": "By pointsTotal, ascending", + "-pointsTotal": "By pointsTotal, descending", + "pointsWeighted": "By pointsWeighted, ascending", + "-pointsWeighted": "By pointsWeighted, descending" + } } } }, @@ -3645,22 +5562,150 @@ "value": 1 } } - } - ], - "responses": { - "200": { - "description": "Index games", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "required": ["jsonapi", "data"], - "properties": { - "jsonapi": { - "type": "object", - "properties": { - "version": { - "title": "version", + }, + { + "name": "fields[games]", + "in": "query", + "description": "Only return these fields for the \"games\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "title", + "sortTitle", + "badgeUrl", + "imageBoxArtUrl", + "imageTitleUrl", + "imageIngameUrl", + "releasedAt", + "releasedAtGranularity", + "playersTotal", + "playersHardcore", + "achievementsPublished", + "achievementsUnpublished", + "pointsTotal", + "pointsWeighted", + "timesBeaten", + "timesBeatenHardcore", + "medianTimeToBeatMinutes", + "medianTimeToBeatHardcoreMinutes", + "system", + "achievementSets", + "achievementSetClaims", + "comments", + "hashes", + "tickets" + ], + "type": "string" + } + } + }, + { + "name": "fields[systems]", + "in": "query", + "description": "Only return these fields for the \"systems\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "name", + "nameFull", + "nameShort", + "manufacturer", + "iconUrl", + "active" + ], + "type": "string" + } + } + }, + { + "name": "fields[achievement-sets]", + "in": "query", + "description": "Only return these fields for the \"achievement-sets\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "title", + "pointsTotal", + "pointsWeighted", + "achievementsPublished", + "achievementsUnpublished", + "badgeUrl", + "achievementsFirstPublishedAt", + "types", + "createdAt", + "updatedAt", + "games", + "achievementSetVersions" + ], + "type": "string" + } + } + }, + { + "name": "fields[game-hashes]", + "in": "query", + "description": "Only return these fields for the \"game-hashes\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "raMd5", + "name", + "compatibility", + "patchUrl", + "createdAt", + "updatedAt", + "game" + ], + "type": "string" + } + } + }, + { + "name": "include", + "in": "query", + "description": "Additionally fetch these related resources. Each related resources will be placed in the .included key of the root document, and the main resource each relates to will list the related IDs in its \"relationships\" section.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": ["system", "achievementSets", "hashes"], + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Index games", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", "type": "string", "example": "1.0" } @@ -3675,7 +5720,7 @@ "included": { "type": "array", "items": { - "oneOf": [ + "anyOf": [ { "title": "Resource/System/Fetch", "description": "May not be present unless \"system\" is in the \"include\" header. See `.data[].relationships.system.data` for the lists of IDs which have been included here.", @@ -3718,7 +5763,7 @@ "title": "iconUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/assets/images/system/md.png" + "example": "https://static.retroachievements.org/assets/images/system/md.png" }, "active": { "title": "active", @@ -3832,6 +5877,29 @@ "readOnly": true } } + }, + "achievementSetVersions": { + "title": "achievementSetVersions", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetVersions\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" + } + }, + "readOnly": true + } + } } } } @@ -3907,7 +5975,7 @@ "title": "minutesLeft", "type": "number", "readOnly": true, - "example": 219849 + "example": 298961 }, "userId": { "title": "userId", @@ -4168,215 +6236,90 @@ } } } - } - ] - } - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - } - } - } - }, - "/games/{game}": { - "get": { - "tags": ["Games"], - "summary": "Show one game", - "description": "", - "operationId": "games.show", - "parameters": [ - { - "name": "game", - "in": "path", - "required": true, - "allowEmptyValue": false, - "schema": { - "type": "string" - }, - "examples": { - "1": { - "value": "1" - }, - "2": { - "value": "2" - }, - "3": { - "value": "3" - } - } - } - ], - "responses": { - "200": { - "description": "Show games", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "required": ["jsonapi", "data"], - "properties": { - "jsonapi": { - "type": "object", - "properties": { - "version": { - "title": "version", - "type": "string", - "example": "1.0" - } - } - }, - "data": { - "$ref": "#/components/schemas/resources.games.resource.fetch" - }, - "included": { - "type": "array", - "items": { - "oneOf": [ + }, { - "title": "Resource/System/Fetch", - "description": "May not be present unless \"system\" is in the \"include\" header. See `.data[].relationships.system.data` for the lists of IDs which have been included here.", + "title": "Resource/Tickets/Fetch", + "description": "May not be present unless \"tickets\" is in the \"include\" header. See `.data[].relationships.tickets.data` for the lists of IDs which have been included here.", "type": "object", "required": ["type", "id", "attributes"], "properties": { "type": { "title": "type", - "default": "systems", + "default": "tickets", "type": "string" }, "id": { "type": "string", - "example": "1" + "example": "5" }, "attributes": { "type": "object", "properties": { - "name": { - "title": "name", + "state": { + "title": "state", "type": "string", - "example": "Genesis/Mega Drive" + "readOnly": true, + "example": "open" }, - "nameFull": { - "title": "nameFull", + "type": { + "title": "type", "type": "string", - "example": "Sega Genesis/Mega Drive" + "readOnly": true, + "example": "did_not_trigger" }, - "nameShort": { - "title": "nameShort", + "body": { + "title": "body", "type": "string", - "example": "MD" + "readOnly": true, + "example": "bruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh moment" }, - "manufacturer": { - "title": "manufacturer", - "type": "string", - "example": "Sega" + "hardcore": { + "title": "hardcore", + "type": "boolean", + "readOnly": true, + "example": 1 }, - "iconUrl": { - "title": "iconUrl", + "reportedAt": { + "title": "reportedAt", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/assets/images/system/md.png" + "example": "2026-06-05T19:41:03.000000Z" }, - "active": { - "title": "active", - "type": "boolean", - "example": true - } - } - } - } - }, - { - "title": "Resource/AchievementSets/Fetch", - "description": "May not be present unless \"achievementSets\" is in the \"include\" header. See `.data[].relationships.achievementSets.data` for the lists of IDs which have been included here.", - "type": "object", - "required": ["type", "id", "attributes"], - "properties": { - "type": { - "title": "type", - "default": "achievement-sets", - "type": "string" - }, - "id": { - "type": "string", - "example": "1" - }, - "attributes": { - "type": "object", - "properties": { - "title": { - "title": "title", + "resolvedAt": { + "title": "resolvedAt", "type": "string", - "readOnly": true, - "example": "Quia Impedit Libero Quam" + "readOnly": true }, - "pointsTotal": { - "title": "pointsTotal", - "type": "number", + "ticketableType": { + "title": "ticketableType", + "type": "string", "readOnly": true, - "example": 189 + "example": "achievement" }, - "pointsWeighted": { - "title": "pointsWeighted", + "ticketableId": { + "title": "ticketableId", "type": "number", "readOnly": true, - "example": 341 + "example": 3801 }, - "achievementsPublished": { - "title": "achievementsPublished", - "type": "number", - "readOnly": true, - "example": 20 - }, - "achievementsUnpublished": { - "title": "achievementsUnpublished", - "type": "number", - "readOnly": true, - "example": 0 - }, - "badgeUrl": { - "title": "badgeUrl", + "gameIconUrl": { + "title": "gameIconUrl", "type": "string", "readOnly": true }, - "achievementsFirstPublishedAt": { - "title": "achievementsFirstPublishedAt", + "systemName": { + "title": "systemName", "type": "string", - "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" - }, - "types": { - "title": "types", - "type": "array", "readOnly": true - }, - "createdAt": { - "title": "createdAt", - "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" - }, - "updatedAt": { - "title": "updatedAt", - "type": "string", - "readOnly": true, - "example": "2026-01-09T02:06:22.000000Z" } } }, "relationships": { "type": "object", "properties": { - "games": { - "title": "games", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"games\" to the \"include\" query parameter; results will be found in `.included`.", + "achievement": { + "title": "achievement", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievement\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -4385,139 +6328,21 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/achievements/5" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/achievements/5" } }, "readOnly": true } } - } - } - } - } - }, - { - "title": "Resource/AchievementSetClaims/Fetch", - "description": "May not be present unless \"achievementSetClaims\" is in the \"include\" header. See `.data[].relationships.achievementSetClaims.data` for the lists of IDs which have been included here.", - "type": "object", - "required": ["type", "id", "attributes"], - "properties": { - "type": { - "title": "type", - "default": "achievement-set-claims", - "type": "string" - }, - "id": { - "type": "string", - "example": "1" - }, - "attributes": { - "type": "object", - "properties": { - "claimedAt": { - "title": "claimedAt", - "type": "string", - "readOnly": true, - "example": "2025-09-12T06:24:26.000000Z" - }, - "finishedAt": { - "title": "finishedAt", - "type": "string", - "readOnly": true, - "example": "2025-12-12T06:24:26.000000Z" - }, - "updatedAt": { - "title": "updatedAt", - "type": "string", - "readOnly": true, - "example": "2025-09-12T06:24:26.000000Z" - }, - "status": { - "title": "status", - "type": "string", - "readOnly": true, - "example": "complete" - }, - "claimType": { - "title": "claimType", - "type": "string", - "readOnly": true, - "example": "primary" - }, - "setType": { - "title": "setType", - "type": "string", - "readOnly": true, - "example": "new_set" - }, - "specialType": { - "title": "specialType", - "type": "string", - "readOnly": true, - "example": "none" - }, - "extensionsCount": { - "title": "extensionsCount", - "type": "number", - "readOnly": true, - "example": 0 - }, - "minutesLeft": { - "title": "minutesLeft", - "type": "number", - "readOnly": true, - "example": 219849 - }, - "userId": { - "title": "userId", - "type": "string", - "readOnly": true, - "example": 91 - }, - "userDisplayName": { - "title": "userDisplayName", - "type": "string", - "readOnly": true - }, - "gameId": { - "title": "gameId", - "type": "number", - "readOnly": true, - "example": 1 - }, - "gameTitle": { - "title": "gameTitle", - "type": "string", - "readOnly": true - }, - "gameIconUrl": { - "title": "gameIconUrl", - "type": "string", - "readOnly": true - }, - "systemId": { - "title": "systemId", - "type": "number", - "readOnly": true }, - "systemName": { - "title": "systemName", - "type": "string", - "readOnly": true - } - } - }, - "relationships": { - "type": "object", - "properties": { - "user": { - "title": "user", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", + "leaderboard": { + "title": "leaderboard", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"leaderboard\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -4526,21 +6351,21 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "example": "https://api.retroachievements.org/v2/leaderboards/5" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "example": "https://api.retroachievements.org/v2/leaderboards/5" } }, "readOnly": true } } }, - "game": { - "title": "game", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "reporter": { + "title": "reporter", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"reporter\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -4549,78 +6374,41 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/reporters/5" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/reporters/5" } }, "readOnly": true } } - } - } - } - } - }, - { - "title": "Resource/Comments/Fetch", - "description": "May not be present unless \"comments\" is in the \"include\" header. See `.data[].relationships.comments.data` for the lists of IDs which have been included here.", - "type": "object", - "required": ["type", "id", "attributes"], - "properties": { - "type": { - "title": "type", - "default": "comments", - "type": "string" - }, - "id": { - "type": "string", - "example": "3" - }, - "attributes": { - "type": "object", - "properties": { - "body": { - "title": "body", - "type": "string", - "readOnly": true, - "example": "Excited to play this!" - }, - "authorAvatarUrl": { - "title": "authorAvatarUrl", - "type": "string", - "readOnly": true - }, - "authorDisplayName": { - "title": "authorDisplayName", - "type": "string", - "readOnly": true - }, - "authorId": { - "title": "authorId", - "type": "string", - "readOnly": true }, - "permalink": { - "title": "permalink", - "type": "string", - "readOnly": true, - "example": "" + "resolver": { + "title": "resolver", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"resolver\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/resolvers/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/resolvers/5" + } + }, + "readOnly": true + } + } }, - "submittedAt": { - "title": "submittedAt", - "type": "string", - "readOnly": true, - "example": "2026-05-05T22:41:05.000000Z" - } - } - }, - "relationships": { - "type": "object", - "properties": { "author": { "title": "author", "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"author\" to the \"include\" query parameter; results will be found in `.included`.", @@ -4632,97 +6420,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/authors/3" + "example": "https://api.retroachievements.org/v2/authors/5" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/authors/3" - } - }, - "readOnly": true - } - } - } - } - } - } - }, - { - "title": "Resource/Hashes/Fetch", - "description": "May not be present unless \"hashes\" is in the \"include\" header. See `.data[].relationships.hashes.data` for the lists of IDs which have been included here.", - "type": "object", - "required": ["type", "id", "attributes"], - "properties": { - "type": { - "title": "type", - "default": "game-hashes", - "type": "string" - }, - "id": { - "type": "string", - "example": "1" - }, - "attributes": { - "type": "object", - "properties": { - "raMd5": { - "title": "raMd5", - "type": "string", - "readOnly": true, - "example": "eDWamQy5GYZqRxvXkj6P6rjDULfnTddT" - }, - "name": { - "title": "name", - "type": "string", - "readOnly": true, - "example": "True" - }, - "compatibility": { - "title": "compatibility", - "type": "string", - "readOnly": true, - "example": "compatible" - }, - "patchUrl": { - "title": "patchUrl", - "type": "string", - "readOnly": true - }, - "createdAt": { - "title": "createdAt", - "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:57.000000Z" - }, - "updatedAt": { - "title": "updatedAt", - "type": "string", - "readOnly": true, - "example": "2026-04-25T20:56:02.000000Z" - } - } - }, - "relationships": { - "type": "object", - "properties": { - "game": { - "title": "game", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "related": { - "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" - }, - "self": { - "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/authors/5" } }, "readOnly": true @@ -4746,89 +6449,16 @@ }, "401": { "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - }, - "/games/{game}/achievement-set-claims": { - "get": { - "tags": ["Games"], - "summary": "Show achievementSetClaims", - "description": "", - "operationId": "games.achievementSetClaims", - "parameters": [ - { - "name": "game", - "in": "path", - "required": true, - "allowEmptyValue": false, - "schema": { - "type": "string" - }, - "examples": { - "1": { - "value": "1" - }, - "2": { - "value": "2" - }, - "3": { - "value": "3" - } - } - } - ], - "responses": { - "200": { - "description": "ShowRelated games", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "required": ["jsonapi", "data"], - "properties": { - "jsonapi": { - "type": "object", - "properties": { - "version": { - "title": "version", - "type": "string", - "example": "1.0" - } - } - }, - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/resources.achievement-set-claims.resource.fetch" - } - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" } } } }, - "/games/{game}/relationships/achievement-set-claims": { + "/games/{game}": { "get": { "tags": ["Games"], - "summary": "Show achievementSetClaims relation", + "summary": "Show one game", "description": "", - "operationId": "games.achievementSetClaims.show", + "operationId": "games.show", "parameters": [ { "name": "game", @@ -4871,101 +6501,960 @@ } }, "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/resources.games.relationship.achievementSetClaims.fetch" - } - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - }, - "/games/{game}/comments": { - "get": { - "tags": ["Games"], - "summary": "Show comments", - "description": "", - "operationId": "games.comments", - "parameters": [ - { - "name": "game", - "in": "path", - "required": true, - "allowEmptyValue": false, - "schema": { - "type": "string" - }, - "examples": { - "1": { - "value": "1" - }, - "2": { - "value": "2" - }, - "3": { - "value": "3" - } - } - } - ], - "responses": { - "200": { - "description": "ShowRelated games", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "required": ["jsonapi", "data"], - "properties": { - "jsonapi": { - "type": "object", - "properties": { - "version": { - "title": "version", - "type": "string", - "example": "1.0" - } - } + "$ref": "#/components/schemas/resources.games.resource.fetch" }, - "data": { + "included": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.comments.resource.fetch" - } - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - }, - "/games/{game}/relationships/comments": { - "get": { - "tags": ["Games"], + "anyOf": [ + { + "title": "Resource/System/Fetch", + "description": "May not be present unless \"system\" is in the \"include\" header. See `.data[].relationships.system.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "systems", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "title": "name", + "type": "string", + "example": "Genesis/Mega Drive" + }, + "nameFull": { + "title": "nameFull", + "type": "string", + "example": "Sega Genesis/Mega Drive" + }, + "nameShort": { + "title": "nameShort", + "type": "string", + "example": "MD" + }, + "manufacturer": { + "title": "manufacturer", + "type": "string", + "example": "Sega" + }, + "iconUrl": { + "title": "iconUrl", + "type": "string", + "readOnly": true, + "example": "https://static.retroachievements.org/assets/images/system/md.png" + }, + "active": { + "title": "active", + "type": "boolean", + "example": true + } + } + } + } + }, + { + "title": "Resource/AchievementSets/Fetch", + "description": "May not be present unless \"achievementSets\" is in the \"include\" header. See `.data[].relationships.achievementSets.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "achievement-sets", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "readOnly": true, + "example": "Quia Impedit Libero Quam" + }, + "pointsTotal": { + "title": "pointsTotal", + "type": "number", + "readOnly": true, + "example": 189 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 341 + }, + "achievementsPublished": { + "title": "achievementsPublished", + "type": "number", + "readOnly": true, + "example": 20 + }, + "achievementsUnpublished": { + "title": "achievementsUnpublished", + "type": "number", + "readOnly": true, + "example": 0 + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true + }, + "achievementsFirstPublishedAt": { + "title": "achievementsFirstPublishedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T07:20:03.000000Z" + }, + "types": { + "title": "types", + "type": "array", + "readOnly": true + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:58.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true, + "example": "2026-01-09T02:06:22.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "games": { + "title": "games", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"games\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + }, + "achievementSetVersions": { + "title": "achievementSetVersions", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetVersions\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/AchievementSetClaims/Fetch", + "description": "May not be present unless \"achievementSetClaims\" is in the \"include\" header. See `.data[].relationships.achievementSetClaims.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "achievement-set-claims", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "claimedAt": { + "title": "claimedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:24:26.000000Z" + }, + "finishedAt": { + "title": "finishedAt", + "type": "string", + "readOnly": true, + "example": "2025-12-12T06:24:26.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:24:26.000000Z" + }, + "status": { + "title": "status", + "type": "string", + "readOnly": true, + "example": "complete" + }, + "claimType": { + "title": "claimType", + "type": "string", + "readOnly": true, + "example": "primary" + }, + "setType": { + "title": "setType", + "type": "string", + "readOnly": true, + "example": "new_set" + }, + "specialType": { + "title": "specialType", + "type": "string", + "readOnly": true, + "example": "none" + }, + "extensionsCount": { + "title": "extensionsCount", + "type": "number", + "readOnly": true, + "example": 0 + }, + "minutesLeft": { + "title": "minutesLeft", + "type": "number", + "readOnly": true, + "example": 298961 + }, + "userId": { + "title": "userId", + "type": "string", + "readOnly": true, + "example": 91 + }, + "userDisplayName": { + "title": "userDisplayName", + "type": "string", + "readOnly": true + }, + "gameId": { + "title": "gameId", + "type": "number", + "readOnly": true, + "example": 1 + }, + "gameTitle": { + "title": "gameTitle", + "type": "string", + "readOnly": true + }, + "gameIconUrl": { + "title": "gameIconUrl", + "type": "string", + "readOnly": true + }, + "systemId": { + "title": "systemId", + "type": "number", + "readOnly": true + }, + "systemName": { + "title": "systemName", + "type": "string", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "user": { + "title": "user", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Comments/Fetch", + "description": "May not be present unless \"comments\" is in the \"include\" header. See `.data[].relationships.comments.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "comments", + "type": "string" + }, + "id": { + "type": "string", + "example": "3" + }, + "attributes": { + "type": "object", + "properties": { + "body": { + "title": "body", + "type": "string", + "readOnly": true, + "example": "Excited to play this!" + }, + "authorAvatarUrl": { + "title": "authorAvatarUrl", + "type": "string", + "readOnly": true + }, + "authorDisplayName": { + "title": "authorDisplayName", + "type": "string", + "readOnly": true + }, + "authorId": { + "title": "authorId", + "type": "string", + "readOnly": true + }, + "permalink": { + "title": "permalink", + "type": "string", + "readOnly": true, + "example": "" + }, + "submittedAt": { + "title": "submittedAt", + "type": "string", + "readOnly": true, + "example": "2026-05-05T22:41:05.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "author": { + "title": "author", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"author\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/3" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/3" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Hashes/Fetch", + "description": "May not be present unless \"hashes\" is in the \"include\" header. See `.data[].relationships.hashes.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "game-hashes", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "raMd5": { + "title": "raMd5", + "type": "string", + "readOnly": true, + "example": "eDWamQy5GYZqRxvXkj6P6rjDULfnTddT" + }, + "name": { + "title": "name", + "type": "string", + "readOnly": true, + "example": "True" + }, + "compatibility": { + "title": "compatibility", + "type": "string", + "readOnly": true, + "example": "compatible" + }, + "patchUrl": { + "title": "patchUrl", + "type": "string", + "readOnly": true + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:57.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true, + "example": "2026-04-25T20:56:02.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Tickets/Fetch", + "description": "May not be present unless \"tickets\" is in the \"include\" header. See `.data[].relationships.tickets.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "tickets", + "type": "string" + }, + "id": { + "type": "string", + "example": "5" + }, + "attributes": { + "type": "object", + "properties": { + "state": { + "title": "state", + "type": "string", + "readOnly": true, + "example": "open" + }, + "type": { + "title": "type", + "type": "string", + "readOnly": true, + "example": "did_not_trigger" + }, + "body": { + "title": "body", + "type": "string", + "readOnly": true, + "example": "bruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh moment" + }, + "hardcore": { + "title": "hardcore", + "type": "boolean", + "readOnly": true, + "example": 1 + }, + "reportedAt": { + "title": "reportedAt", + "type": "string", + "readOnly": true, + "example": "2026-06-05T19:41:03.000000Z" + }, + "resolvedAt": { + "title": "resolvedAt", + "type": "string", + "readOnly": true + }, + "ticketableType": { + "title": "ticketableType", + "type": "string", + "readOnly": true, + "example": "achievement" + }, + "ticketableId": { + "title": "ticketableId", + "type": "number", + "readOnly": true, + "example": 3801 + }, + "gameIconUrl": { + "title": "gameIconUrl", + "type": "string", + "readOnly": true + }, + "systemName": { + "title": "systemName", + "type": "string", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievement": { + "title": "achievement", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievement\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievements/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievements/5" + } + }, + "readOnly": true + } + } + }, + "leaderboard": { + "title": "leaderboard", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"leaderboard\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboards/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboards/5" + } + }, + "readOnly": true + } + } + }, + "reporter": { + "title": "reporter", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"reporter\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/reporters/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/reporters/5" + } + }, + "readOnly": true + } + } + }, + "resolver": { + "title": "resolver", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"resolver\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/resolvers/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/resolvers/5" + } + }, + "readOnly": true + } + } + }, + "author": { + "title": "author", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"author\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/5" + } + }, + "readOnly": true + } + } + } + } + } + } + } + ] + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/games/{game}/achievement-set-claims": { + "get": { + "tags": ["Games"], + "summary": "Show achievementSetClaims", + "description": "", + "operationId": "games.achievementSetClaims", + "parameters": [ + { + "name": "game", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "ShowRelated games", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.achievement-set-claims.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/games/{game}/relationships/achievement-set-claims": { + "get": { + "tags": ["Games"], + "summary": "Show achievementSetClaims relation", + "description": "", + "operationId": "games.achievementSetClaims.show", + "parameters": [ + { + "name": "game", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show games", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.games.relationship.achievementSetClaims.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/games/{game}/comments": { + "get": { + "tags": ["Games"], + "summary": "Show comments", + "description": "", + "operationId": "games.comments", + "parameters": [ + { + "name": "game", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "ShowRelated games", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.comments.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/games/{game}/relationships/comments": { + "get": { + "tags": ["Games"], "summary": "Show comments relation", "description": "", "operationId": "games.comments.show", @@ -5173,6 +7662,146 @@ } } }, + "/games/{game}/tickets": { + "get": { + "tags": ["Games"], + "summary": "Show tickets", + "description": "", + "operationId": "games.tickets", + "parameters": [ + { + "name": "game", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "ShowRelated games", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.tickets.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/games/{game}/relationships/tickets": { + "get": { + "tags": ["Games"], + "summary": "Show tickets relation", + "description": "", + "operationId": "games.tickets.show", + "parameters": [ + { + "name": "game", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show games", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.games.relationship.tickets.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, "/hubs": { "get": { "tags": ["Hubs"], @@ -5205,6 +7834,8 @@ "in": "query", "required": false, "allowEmptyValue": false, + "style": "form", + "explode": false, "schema": { "type": "array", "items": { @@ -5222,13 +7853,25 @@ "gamesCount", "-gamesCount", "linkedHubsCount", - "-linkedHubsCount", - "gamesCount", - "-gamesCount", - "linkedHubsCount", "-linkedHubsCount" ], - "type": "string" + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "title": "By title, ascending", + "-title": "By title, descending", + "sortTitle": "By sortTitle, ascending", + "-sortTitle": "By sortTitle, descending", + "createdAt": "By createdAt, ascending", + "-createdAt": "By createdAt, descending", + "updatedAt": "By updatedAt, ascending", + "-updatedAt": "By updatedAt, descending", + "gamesCount": "By gamesCount, ascending", + "-gamesCount": "By gamesCount, descending", + "linkedHubsCount": "By linkedHubsCount, ascending", + "-linkedHubsCount": "By linkedHubsCount, descending" + } } } }, @@ -5281,6 +7924,47 @@ "schema": { "type": "boolean" } + }, + { + "name": "fields[hubs]", + "in": "query", + "description": "Only return these fields for the \"hubs\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "title", + "sortTitle", + "badgeUrl", + "hasMatureContent", + "gamesCount", + "linkedHubsCount", + "isEventHub", + "createdAt", + "updatedAt", + "games", + "links" + ], + "type": "string" + } + } + }, + { + "name": "include", + "in": "query", + "description": "Additionally fetch these related resources. Each related resources will be placed in the .included key of the root document, and the main resource each relates to will list the related IDs in its \"relationships\" section.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { @@ -5311,7 +7995,7 @@ "included": { "type": "array", "items": { - "oneOf": [ + "anyOf": [ { "title": "Resource/Games/Fetch", "description": "May not be present unless \"games\" is in the \"include\" header. See `.data[].relationships.games.data` for the lists of IDs which have been included here.", @@ -5344,25 +8028,25 @@ "title": "badgeUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "imageBoxArtUrl": { "title": "imageBoxArtUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "imageTitleUrl": { "title": "imageTitleUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000010.png" + "example": "https://media.retroachievements.org/Images/000010.png" }, "imageIngameUrl": { "title": "imageIngameUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "releasedAt": { "title": "releasedAt", @@ -5540,6 +8224,29 @@ "readOnly": true } } + }, + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/1" + } + }, + "readOnly": true + } + } } } } @@ -5615,7 +8322,7 @@ "included": { "type": "array", "items": { - "oneOf": [ + "anyOf": [ { "title": "Resource/Games/Fetch", "description": "May not be present unless \"games\" is in the \"include\" header. See `.data[].relationships.games.data` for the lists of IDs which have been included here.", @@ -5648,25 +8355,25 @@ "title": "badgeUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "imageBoxArtUrl": { "title": "imageBoxArtUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "imageTitleUrl": { "title": "imageTitleUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000010.png" + "example": "https://media.retroachievements.org/Images/000010.png" }, "imageIngameUrl": { "title": "imageIngameUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "releasedAt": { "title": "releasedAt", @@ -5799,9 +8506,32 @@ } } }, - "comments": { - "title": "comments", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"comments\" to the \"include\" query parameter; results will be found in `.included`.", + "comments": { + "title": "comments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"comments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + } + }, + "readOnly": true + } + } + }, + "hashes": { + "title": "hashes", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"hashes\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -5810,21 +8540,21 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "example": "https://api.retroachievements.org/v2/hashes/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "example": "https://api.retroachievements.org/v2/hashes/1" } }, "readOnly": true } } }, - "hashes": { - "title": "hashes", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"hashes\" to the \"include\" query parameter; results will be found in `.included`.", + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -5833,12 +8563,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "example": "https://api.retroachievements.org/v2/tickets/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "example": "https://api.retroachievements.org/v2/tickets/1" } }, "readOnly": true @@ -6181,6 +8911,8 @@ "in": "query", "required": false, "allowEmptyValue": false, + "style": "form", + "explode": false, "schema": { "type": "array", "items": { @@ -6196,7 +8928,19 @@ "updatedAt", "-updatedAt" ], - "type": "string" + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "title": "By title, ascending", + "-title": "By title, descending", + "orderColumn": "By orderColumn, ascending", + "-orderColumn": "By orderColumn, descending", + "createdAt": "By createdAt, ascending", + "-createdAt": "By createdAt, descending", + "updatedAt": "By updatedAt, ascending", + "-updatedAt": "By updatedAt, descending" + } } } }, @@ -6255,6 +8999,152 @@ "schema": { "type": "boolean" } + }, + { + "name": "fields[leaderboards]", + "in": "query", + "description": "Only return these fields for the \"leaderboards\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "title", + "description", + "format", + "rankAsc", + "state", + "orderColumn", + "createdAt", + "updatedAt", + "games", + "developer", + "entries" + ], + "type": "string" + } + } + }, + { + "name": "fields[games]", + "in": "query", + "description": "Only return these fields for the \"games\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "title", + "sortTitle", + "badgeUrl", + "imageBoxArtUrl", + "imageTitleUrl", + "imageIngameUrl", + "releasedAt", + "releasedAtGranularity", + "playersTotal", + "playersHardcore", + "achievementsPublished", + "achievementsUnpublished", + "pointsTotal", + "pointsWeighted", + "timesBeaten", + "timesBeatenHardcore", + "medianTimeToBeatMinutes", + "medianTimeToBeatHardcoreMinutes", + "system", + "achievementSets", + "achievementSetClaims", + "comments", + "hashes", + "tickets" + ], + "type": "string" + } + } + }, + { + "name": "fields[users]", + "in": "query", + "description": "Only return these fields for the \"users\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "displayName", + "avatarUrl", + "motto", + "points", + "pointsHardcore", + "pointsWeighted", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "wallComments", + "awards", + "followers", + "following" + ], + "type": "string" + } + } + }, + { + "name": "fields[leaderboard-entries]", + "in": "query", + "description": "Only return these fields for the \"leaderboard-entries\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "score", + "rank", + "createdAt", + "updatedAt", + "user", + "leaderboard" + ], + "type": "string" + } + } + }, + { + "name": "include", + "in": "query", + "description": "Additionally fetch these related resources. Each related resources will be placed in the .included key of the root document, and the main resource each relates to will list the related IDs in its \"relationships\" section.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": ["games", "developer", "entries"], + "type": "string" + } + } } ], "responses": { @@ -6285,7 +9175,7 @@ "included": { "type": "array", "items": { - "oneOf": [ + "anyOf": [ { "title": "Resource/Games/Fetch", "description": "May not be present unless \"games\" is in the \"include\" header. See `.data[].relationships.games.data` for the lists of IDs which have been included here.", @@ -6318,25 +9208,25 @@ "title": "badgeUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "imageBoxArtUrl": { "title": "imageBoxArtUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "imageTitleUrl": { "title": "imageTitleUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000010.png" + "example": "https://media.retroachievements.org/Images/000010.png" }, "imageIngameUrl": { "title": "imageIngameUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "releasedAt": { "title": "releasedAt", @@ -6514,6 +9404,29 @@ "readOnly": true } } + }, + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/1" + } + }, + "readOnly": true + } + } } } } @@ -6547,7 +9460,7 @@ "title": "avatarUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/UserPic/Root.png" + "example": "https://media.retroachievements.org/UserPic/Root.png" }, "motto": { "title": "motto", @@ -6565,13 +9478,13 @@ "title": "pointsHardcore", "type": "number", "readOnly": true, - "example": 7155 + "example": 7130 }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", "readOnly": true, - "example": 19749 + "example": 15687 }, "yieldUnlocks": { "title": "yieldUnlocks", @@ -6595,7 +9508,7 @@ "title": "lastActivityAt", "type": "string", "readOnly": true, - "example": "2026-04-18T03:30:13.000000Z" + "example": "2026-07-07T21:05:33.000000Z" }, "deletedAt": { "title": "deletedAt", @@ -6746,6 +9659,29 @@ } } }, + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, "wallComments": { "title": "wallComments", "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"wallComments\" to the \"include\" query parameter; results will be found in `.included`.", @@ -6791,6 +9727,52 @@ "readOnly": true } } + }, + "followers": { + "title": "followers", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"followers\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "following": { + "title": "following", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"following\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } } } } @@ -6960,7 +9942,7 @@ "included": { "type": "array", "items": { - "oneOf": [ + "anyOf": [ { "title": "Resource/Games/Fetch", "description": "May not be present unless \"games\" is in the \"include\" header. See `.data[].relationships.games.data` for the lists of IDs which have been included here.", @@ -6993,25 +9975,25 @@ "title": "badgeUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "imageBoxArtUrl": { "title": "imageBoxArtUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "imageTitleUrl": { "title": "imageTitleUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000010.png" + "example": "https://media.retroachievements.org/Images/000010.png" }, "imageIngameUrl": { "title": "imageIngameUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "releasedAt": { "title": "releasedAt", @@ -7189,6 +10171,29 @@ "readOnly": true } } + }, + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/1" + } + }, + "readOnly": true + } + } } } } @@ -7222,7 +10227,7 @@ "title": "avatarUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/UserPic/Root.png" + "example": "https://media.retroachievements.org/UserPic/Root.png" }, "motto": { "title": "motto", @@ -7240,13 +10245,13 @@ "title": "pointsHardcore", "type": "number", "readOnly": true, - "example": 7155 + "example": 7130 }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", "readOnly": true, - "example": 19749 + "example": 15687 }, "yieldUnlocks": { "title": "yieldUnlocks", @@ -7270,7 +10275,7 @@ "title": "lastActivityAt", "type": "string", "readOnly": true, - "example": "2026-04-18T03:30:13.000000Z" + "example": "2026-07-07T21:05:33.000000Z" }, "deletedAt": { "title": "deletedAt", @@ -7391,16 +10396,85 @@ "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerGames": { + "title": "playerGames", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerGames\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "wallComments": { + "title": "wallComments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"wallComments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" } }, "readOnly": true } } }, - "playerGames": { - "title": "playerGames", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerGames\" to the \"include\" query parameter; results will be found in `.included`.", + "awards": { + "title": "awards", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"awards\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -7409,21 +10483,21 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" } }, "readOnly": true } } }, - "wallComments": { - "title": "wallComments", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"wallComments\" to the \"include\" query parameter; results will be found in `.included`.", + "followers": { + "title": "followers", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"followers\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -7432,21 +10506,21 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" } }, "readOnly": true } } }, - "awards": { - "title": "awards", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"awards\" to the \"include\" query parameter; results will be found in `.included`.", + "following": { + "title": "following", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"following\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -7455,12 +10529,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" } }, "readOnly": true @@ -7573,49 +10647,305 @@ } } }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - }, - "/leaderboards/{leaderboard}/entries": { - "get": { - "tags": ["Leaderboards"], - "summary": "Show entries", - "description": "", - "operationId": "leaderboards.entries", - "parameters": [ + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/leaderboards/{leaderboard}/entries": { + "get": { + "tags": ["Leaderboards"], + "summary": "Show entries", + "description": "", + "operationId": "leaderboards.entries", + "parameters": [ + { + "name": "leaderboard", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "ShowRelated leaderboards", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.leaderboard-entries.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/leaderboards/{leaderboard}/relationships/entries": { + "get": { + "tags": ["Leaderboards"], + "summary": "Show entries relation", + "description": "", + "operationId": "leaderboards.entries.show", + "parameters": [ + { + "name": "leaderboard", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show leaderboards", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.leaderboards.relationship.entries.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/systems": { + "get": { + "tags": ["Systems"], + "summary": "Get all systems", + "description": "", + "operationId": "systems.index", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "page[number]", + "in": "query", + "description": "The page number for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "integer" + } + }, + { + "name": "sort", + "in": "query", + "required": false, + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "id", + "-id", + "name", + "-name", + "nameFull", + "-nameFull", + "nameShort", + "-nameShort" + ], + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "name": "By name, ascending", + "-name": "By name, descending", + "nameFull": "By nameFull, ascending", + "-nameFull": "By nameFull, descending", + "nameShort": "By nameShort, ascending", + "-nameShort": "By nameShort, descending" + } + } + } + }, + { + "name": "filter[id][]", + "in": "query", + "description": "A list of ids to filter by.", + "required": false, + "allowEmptyValue": false, + "style": "form", + "explode": true, + "schema": { + "default": [], + "type": "array", + "items": { + "type": "string" + } + }, + "examples": { + "empty": { + "value": [] + }, + "1": { + "value": ["1"] + }, + "2": { + "value": ["2"] + }, + "3": { + "value": ["3"] + } + } + }, { - "name": "leaderboard", - "in": "path", - "required": true, + "name": "filter[active]", + "in": "query", + "description": "Filters the records", + "required": false, "allowEmptyValue": false, "schema": { + "default": "", "type": "string" }, "examples": { "1": { - "value": "1" - }, - "2": { - "value": "2" - }, - "3": { - "value": "3" + "value": true + } + } + }, + { + "name": "fields[systems]", + "in": "query", + "description": "Only return these fields for the \"systems\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "name", + "nameFull", + "nameShort", + "manufacturer", + "iconUrl", + "active" + ], + "type": "string" + } + } + }, + { + "name": "include", + "in": "query", + "description": "Additionally fetch these related resources. Each related resources will be placed in the .included key of the root document, and the main resource each relates to will list the related IDs in its \"relationships\" section.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } } ], "responses": { "200": { - "description": "ShowRelated leaderboards", + "description": "Index systems", "content": { "application/vnd.api+json": { "schema": { @@ -7635,7 +10965,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.leaderboard-entries.resource.fetch" + "$ref": "#/components/schemas/resources.systems.resource.fetch" } } } @@ -7648,22 +10978,19 @@ }, "401": { "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" } } } }, - "/leaderboards/{leaderboard}/relationships/entries": { + "/systems/{system}": { "get": { - "tags": ["Leaderboards"], - "summary": "Show entries relation", + "tags": ["Systems"], + "summary": "Show one system", "description": "", - "operationId": "leaderboards.entries.show", + "operationId": "systems.show", "parameters": [ { - "name": "leaderboard", + "name": "system", "in": "path", "required": true, "allowEmptyValue": false, @@ -7685,7 +11012,7 @@ ], "responses": { "200": { - "description": "Show leaderboards", + "description": "Show systems", "content": { "application/vnd.api+json": { "schema": { @@ -7703,10 +11030,7 @@ } }, "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/resources.leaderboards.relationship.entries.fetch" - } + "$ref": "#/components/schemas/resources.systems.resource.fetch" } } } @@ -7725,12 +11049,12 @@ } } }, - "/systems": { + "/tickets": { "get": { - "tags": ["Systems"], - "summary": "Get all systems", + "tags": ["Tickets"], + "summary": "Get all tickets", "description": "", - "operationId": "systems.index", + "operationId": "tickets.index", "parameters": [ { "name": "page[size]", @@ -7757,20 +11081,32 @@ "in": "query", "required": false, "allowEmptyValue": false, + "style": "form", + "explode": false, "schema": { "type": "array", "items": { "enum": [ "id", "-id", - "name", - "-name", - "nameFull", - "-nameFull", - "nameShort", - "-nameShort" + "state", + "-state", + "reportedAt", + "-reportedAt", + "resolvedAt", + "-resolvedAt" ], - "type": "string" + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "state": "By state, ascending", + "-state": "By state, descending", + "reportedAt": "By reportedAt, ascending", + "-reportedAt": "By reportedAt, descending", + "resolvedAt": "By resolvedAt, ascending", + "-resolvedAt": "By resolvedAt, descending" + } } } }, @@ -7793,37 +11129,259 @@ "empty": { "value": [] }, - "1": { - "value": ["1"] - }, - "2": { - "value": ["2"] - }, - "3": { - "value": ["3"] + "5": { + "value": ["5"] } } }, { - "name": "filter[active]", + "name": "filter[state]", "in": "query", "description": "Filters the records", "required": false, "allowEmptyValue": false, "schema": { - "default": "", "type": "string" - }, - "examples": { - "1": { - "value": true + } + }, + { + "name": "filter[type]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter[ticketableType]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter[reporterUserId]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter[resolverUserId]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter[achievementId]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter[leaderboardId]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter[gameId]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "name": "fields[tickets]", + "in": "query", + "description": "Only return these fields for the \"tickets\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "state", + "type", + "body", + "hardcore", + "reportedAt", + "resolvedAt", + "ticketableType", + "ticketableId", + "gameIconUrl", + "systemName", + "achievement", + "leaderboard", + "reporter", + "resolver", + "author" + ], + "type": "string" + } + } + }, + { + "name": "fields[achievements]", + "in": "query", + "description": "Only return these fields for the \"achievements\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "title", + "description", + "points", + "pointsWeighted", + "badgeUrl", + "badgeLockedUrl", + "type", + "state", + "orderColumn", + "unlocksTotal", + "unlocksHardcore", + "unlockPercentage", + "unlockHardcorePercentage", + "createdAt", + "modifiedAt", + "developer", + "achievementSet", + "comments", + "games", + "playerAchievements", + "tickets" + ], + "type": "string" + } + } + }, + { + "name": "fields[leaderboards]", + "in": "query", + "description": "Only return these fields for the \"leaderboards\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "title", + "description", + "format", + "rankAsc", + "state", + "orderColumn", + "createdAt", + "updatedAt", + "games", + "developer", + "entries" + ], + "type": "string" + } + } + }, + { + "name": "fields[users]", + "in": "query", + "description": "Only return these fields for the \"users\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "displayName", + "avatarUrl", + "motto", + "points", + "pointsHardcore", + "pointsWeighted", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "wallComments", + "awards", + "followers", + "following" + ], + "type": "string" + } + } + }, + { + "name": "include", + "in": "query", + "description": "Additionally fetch these related resources. Each related resources will be placed in the .included key of the root document, and the main resource each relates to will list the related IDs in its \"relationships\" section.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "achievement", + "achievement.developer", + "achievement.achievementSet", + "achievement.games", + "leaderboard", + "leaderboard.games", + "leaderboard.developer", + "leaderboard.entries", + "reporter", + "resolver", + "author" + ], + "type": "string" } } } ], "responses": { "200": { - "description": "Index systems", + "description": "Index tickets", "content": { "application/vnd.api+json": { "schema": { @@ -7843,7 +11401,1449 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.systems.resource.fetch" + "$ref": "#/components/schemas/resources.tickets.resource.fetch" + } + }, + "included": { + "type": "array", + "items": { + "anyOf": [ + { + "title": "Resource/Achievement/Fetch", + "description": "May not be present unless \"achievement\" is in the \"include\" header. See `.data[].relationships.achievement.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "achievements", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "readOnly": true, + "example": "Soluta Quasi!" + }, + "description": { + "title": "description", + "type": "string", + "readOnly": true, + "example": "Nisi et sit labore reprehenderit aliquam aspernatur explicabo. True." + }, + "points": { + "title": "points", + "type": "number", + "readOnly": true, + "example": 1 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 1 + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true, + "example": "https://media.retroachievements.org/Badge/00001.png" + }, + "badgeLockedUrl": { + "title": "badgeLockedUrl", + "type": "string", + "readOnly": true, + "example": "https://media.retroachievements.org/Badge/00001_lock.png" + }, + "type": { + "title": "type", + "type": "string", + "readOnly": true + }, + "state": { + "title": "state", + "type": "string", + "readOnly": true + }, + "orderColumn": { + "title": "orderColumn", + "type": "number", + "readOnly": true, + "example": 1 + }, + "unlocksTotal": { + "title": "unlocksTotal", + "type": "number", + "readOnly": true, + "example": 81 + }, + "unlocksHardcore": { + "title": "unlocksHardcore", + "type": "number", + "readOnly": true, + "example": 81 + }, + "unlockPercentage": { + "title": "unlockPercentage", + "type": "number", + "readOnly": true, + "example": 0.987804878 + }, + "unlockHardcorePercentage": { + "title": "unlockHardcorePercentage", + "type": "number", + "readOnly": true, + "example": 0.987804878 + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:58.000000Z" + }, + "modifiedAt": { + "title": "modifiedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:58.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "developer": { + "title": "developer", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"developer\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/developers/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/developers/1" + } + }, + "readOnly": true + } + } + }, + "achievementSet": { + "title": "achievementSet", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSet\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + } + }, + "readOnly": true + } + } + }, + "comments": { + "title": "comments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"comments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + } + }, + "readOnly": true + } + } + }, + "games": { + "title": "games", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"games\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + }, + "playerAchievements": { + "title": "playerAchievements", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievements\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/1" + } + }, + "readOnly": true + } + } + }, + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Leaderboard/Fetch", + "description": "May not be present unless \"leaderboard\" is in the \"include\" header. See `.data[].relationships.leaderboard.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "leaderboards", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "readOnly": true, + "example": "Totam Unde" + }, + "description": { + "title": "description", + "type": "string", + "readOnly": true, + "example": "Modi vitae commodi possimus animi." + }, + "format": { + "title": "format", + "type": "string", + "readOnly": true, + "example": "VALUE" + }, + "rankAsc": { + "title": "rankAsc", + "type": "boolean", + "readOnly": true, + "example": false + }, + "state": { + "title": "state", + "type": "string", + "readOnly": true, + "example": "active" + }, + "orderColumn": { + "title": "orderColumn", + "type": "number", + "readOnly": true, + "example": 64 + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:04:12.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:04:12.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "games": { + "title": "games", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"games\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + }, + "developer": { + "title": "developer", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"developer\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/developers/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/developers/1" + } + }, + "readOnly": true + } + } + }, + "entries": { + "title": "entries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"entries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/entries/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/entries/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Reporter/Fetch", + "description": "May not be present unless \"reporter\" is in the \"include\" header. See `.data[].relationships.reporter.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "users", + "type": "string" + }, + "id": { + "type": "string", + "example": "01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "attributes": { + "type": "object", + "properties": { + "displayName": { + "title": "displayName", + "type": "string", + "readOnly": true, + "example": "Root" + }, + "avatarUrl": { + "title": "avatarUrl", + "type": "string", + "readOnly": true, + "example": "https://media.retroachievements.org/UserPic/Root.png" + }, + "motto": { + "title": "motto", + "type": "string", + "readOnly": true, + "example": "" + }, + "points": { + "title": "points", + "type": "number", + "readOnly": true, + "example": 1236 + }, + "pointsHardcore": { + "title": "pointsHardcore", + "type": "number", + "readOnly": true, + "example": 7130 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 15687 + }, + "yieldUnlocks": { + "title": "yieldUnlocks", + "type": "number", + "readOnly": true, + "example": 0 + }, + "yieldPoints": { + "title": "yieldPoints", + "type": "number", + "readOnly": true, + "example": 0 + }, + "joinedAt": { + "title": "joinedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:22.000000Z" + }, + "lastActivityAt": { + "title": "lastActivityAt", + "type": "string", + "readOnly": true, + "example": "2026-07-07T21:05:33.000000Z" + }, + "deletedAt": { + "title": "deletedAt", + "type": "string", + "readOnly": true + }, + "isUnranked": { + "title": "isUnranked", + "type": "boolean", + "readOnly": true, + "example": false + }, + "isUserWallActive": { + "title": "isUserWallActive", + "type": "boolean", + "readOnly": true, + "example": true + }, + "richPresence": { + "title": "richPresence", + "type": "string", + "readOnly": true, + "example": "Playing Assumenda Pariatur" + }, + "richPresenceUpdatedAt": { + "title": "richPresenceUpdatedAt", + "type": "string", + "readOnly": true, + "example": "2026-04-18T04:34:36.000000Z" + }, + "visibleRole": { + "title": "visibleRole", + "type": "string", + "readOnly": true, + "example": { + "id": 4, + "name": "game-hash-manager", + "display": 3, + "guard_name": "web", + "created_at": "2025-09-12T06:01:21.000000Z", + "updated_at": "2025-09-12T06:01:21.000000Z", + "pivot": { + "model_type": "user", + "model_id": 1, + "role_id": 4 + } + } + }, + "displayableRoles": { + "title": "displayableRoles", + "type": "array", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievementSetClaims": { + "title": "achievementSetClaims", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetClaims\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerAchievements": { + "title": "playerAchievements", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievements\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerAchievementSets": { + "title": "playerAchievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerGames": { + "title": "playerGames", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerGames\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "wallComments": { + "title": "wallComments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"wallComments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "awards": { + "title": "awards", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"awards\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "followers": { + "title": "followers", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"followers\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "following": { + "title": "following", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"following\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Resolver/Fetch", + "description": "May not be present unless \"resolver\" is in the \"include\" header. See `.data[].relationships.resolver.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "users", + "type": "string" + }, + "id": { + "type": "string", + "example": "01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "attributes": { + "type": "object", + "properties": { + "displayName": { + "title": "displayName", + "type": "string", + "readOnly": true, + "example": "Root" + }, + "avatarUrl": { + "title": "avatarUrl", + "type": "string", + "readOnly": true, + "example": "https://media.retroachievements.org/UserPic/Root.png" + }, + "motto": { + "title": "motto", + "type": "string", + "readOnly": true, + "example": "" + }, + "points": { + "title": "points", + "type": "number", + "readOnly": true, + "example": 1236 + }, + "pointsHardcore": { + "title": "pointsHardcore", + "type": "number", + "readOnly": true, + "example": 7130 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 15687 + }, + "yieldUnlocks": { + "title": "yieldUnlocks", + "type": "number", + "readOnly": true, + "example": 0 + }, + "yieldPoints": { + "title": "yieldPoints", + "type": "number", + "readOnly": true, + "example": 0 + }, + "joinedAt": { + "title": "joinedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:22.000000Z" + }, + "lastActivityAt": { + "title": "lastActivityAt", + "type": "string", + "readOnly": true, + "example": "2026-07-07T21:05:33.000000Z" + }, + "deletedAt": { + "title": "deletedAt", + "type": "string", + "readOnly": true + }, + "isUnranked": { + "title": "isUnranked", + "type": "boolean", + "readOnly": true, + "example": false + }, + "isUserWallActive": { + "title": "isUserWallActive", + "type": "boolean", + "readOnly": true, + "example": true + }, + "richPresence": { + "title": "richPresence", + "type": "string", + "readOnly": true, + "example": "Playing Assumenda Pariatur" + }, + "richPresenceUpdatedAt": { + "title": "richPresenceUpdatedAt", + "type": "string", + "readOnly": true, + "example": "2026-04-18T04:34:36.000000Z" + }, + "visibleRole": { + "title": "visibleRole", + "type": "string", + "readOnly": true, + "example": { + "id": 4, + "name": "game-hash-manager", + "display": 3, + "guard_name": "web", + "created_at": "2025-09-12T06:01:21.000000Z", + "updated_at": "2025-09-12T06:01:21.000000Z", + "pivot": { + "model_type": "user", + "model_id": 1, + "role_id": 4 + } + } + }, + "displayableRoles": { + "title": "displayableRoles", + "type": "array", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievementSetClaims": { + "title": "achievementSetClaims", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetClaims\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerAchievements": { + "title": "playerAchievements", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievements\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerAchievementSets": { + "title": "playerAchievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerGames": { + "title": "playerGames", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerGames\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "wallComments": { + "title": "wallComments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"wallComments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "awards": { + "title": "awards", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"awards\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "followers": { + "title": "followers", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"followers\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "following": { + "title": "following", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"following\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Author/Fetch", + "description": "May not be present unless \"author\" is in the \"include\" header. See `.data[].relationships.author.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "users", + "type": "string" + }, + "id": { + "type": "string", + "example": "01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "attributes": { + "type": "object", + "properties": { + "displayName": { + "title": "displayName", + "type": "string", + "readOnly": true, + "example": "Root" + }, + "avatarUrl": { + "title": "avatarUrl", + "type": "string", + "readOnly": true, + "example": "https://media.retroachievements.org/UserPic/Root.png" + }, + "motto": { + "title": "motto", + "type": "string", + "readOnly": true, + "example": "" + }, + "points": { + "title": "points", + "type": "number", + "readOnly": true, + "example": 1236 + }, + "pointsHardcore": { + "title": "pointsHardcore", + "type": "number", + "readOnly": true, + "example": 7130 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 15687 + }, + "yieldUnlocks": { + "title": "yieldUnlocks", + "type": "number", + "readOnly": true, + "example": 0 + }, + "yieldPoints": { + "title": "yieldPoints", + "type": "number", + "readOnly": true, + "example": 0 + }, + "joinedAt": { + "title": "joinedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:22.000000Z" + }, + "lastActivityAt": { + "title": "lastActivityAt", + "type": "string", + "readOnly": true, + "example": "2026-07-07T21:05:33.000000Z" + }, + "deletedAt": { + "title": "deletedAt", + "type": "string", + "readOnly": true + }, + "isUnranked": { + "title": "isUnranked", + "type": "boolean", + "readOnly": true, + "example": false + }, + "isUserWallActive": { + "title": "isUserWallActive", + "type": "boolean", + "readOnly": true, + "example": true + }, + "richPresence": { + "title": "richPresence", + "type": "string", + "readOnly": true, + "example": "Playing Assumenda Pariatur" + }, + "richPresenceUpdatedAt": { + "title": "richPresenceUpdatedAt", + "type": "string", + "readOnly": true, + "example": "2026-04-18T04:34:36.000000Z" + }, + "visibleRole": { + "title": "visibleRole", + "type": "string", + "readOnly": true, + "example": { + "id": 4, + "name": "game-hash-manager", + "display": 3, + "guard_name": "web", + "created_at": "2025-09-12T06:01:21.000000Z", + "updated_at": "2025-09-12T06:01:21.000000Z", + "pivot": { + "model_type": "user", + "model_id": 1, + "role_id": 4 + } + } + }, + "displayableRoles": { + "title": "displayableRoles", + "type": "array", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievementSetClaims": { + "title": "achievementSetClaims", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetClaims\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerAchievements": { + "title": "playerAchievements", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievements\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerAchievementSets": { + "title": "playerAchievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerGames": { + "title": "playerGames", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerGames\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "wallComments": { + "title": "wallComments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"wallComments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "awards": { + "title": "awards", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"awards\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "followers": { + "title": "followers", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"followers\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "following": { + "title": "following", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"following\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + } + } + } + } + } + ] } } } @@ -7860,15 +12860,15 @@ } } }, - "/systems/{system}": { + "/tickets/{ticket}": { "get": { - "tags": ["Systems"], - "summary": "Show one system", + "tags": ["Tickets"], + "summary": "Show one ticket", "description": "", - "operationId": "systems.show", + "operationId": "tickets.show", "parameters": [ { - "name": "system", + "name": "ticket", "in": "path", "required": true, "allowEmptyValue": false, @@ -7876,21 +12876,15 @@ "type": "string" }, "examples": { - "1": { - "value": "1" - }, - "2": { - "value": "2" - }, - "3": { - "value": "3" + "5": { + "value": "5" } } } ], "responses": { "200": { - "description": "Show systems", + "description": "Show tickets", "content": { "application/vnd.api+json": { "schema": { @@ -7906,9 +12900,1451 @@ "example": "1.0" } } - }, - "data": { - "$ref": "#/components/schemas/resources.systems.resource.fetch" + }, + "data": { + "$ref": "#/components/schemas/resources.tickets.resource.fetch" + }, + "included": { + "type": "array", + "items": { + "anyOf": [ + { + "title": "Resource/Achievement/Fetch", + "description": "May not be present unless \"achievement\" is in the \"include\" header. See `.data[].relationships.achievement.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "achievements", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "readOnly": true, + "example": "Soluta Quasi!" + }, + "description": { + "title": "description", + "type": "string", + "readOnly": true, + "example": "Nisi et sit labore reprehenderit aliquam aspernatur explicabo. True." + }, + "points": { + "title": "points", + "type": "number", + "readOnly": true, + "example": 1 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 1 + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true, + "example": "https://media.retroachievements.org/Badge/00001.png" + }, + "badgeLockedUrl": { + "title": "badgeLockedUrl", + "type": "string", + "readOnly": true, + "example": "https://media.retroachievements.org/Badge/00001_lock.png" + }, + "type": { + "title": "type", + "type": "string", + "readOnly": true + }, + "state": { + "title": "state", + "type": "string", + "readOnly": true + }, + "orderColumn": { + "title": "orderColumn", + "type": "number", + "readOnly": true, + "example": 1 + }, + "unlocksTotal": { + "title": "unlocksTotal", + "type": "number", + "readOnly": true, + "example": 81 + }, + "unlocksHardcore": { + "title": "unlocksHardcore", + "type": "number", + "readOnly": true, + "example": 81 + }, + "unlockPercentage": { + "title": "unlockPercentage", + "type": "number", + "readOnly": true, + "example": 0.987804878 + }, + "unlockHardcorePercentage": { + "title": "unlockHardcorePercentage", + "type": "number", + "readOnly": true, + "example": 0.987804878 + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:58.000000Z" + }, + "modifiedAt": { + "title": "modifiedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:58.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "developer": { + "title": "developer", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"developer\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/developers/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/developers/1" + } + }, + "readOnly": true + } + } + }, + "achievementSet": { + "title": "achievementSet", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSet\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + } + }, + "readOnly": true + } + } + }, + "comments": { + "title": "comments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"comments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/comments/1" + } + }, + "readOnly": true + } + } + }, + "games": { + "title": "games", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"games\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + }, + "playerAchievements": { + "title": "playerAchievements", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievements\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/1" + } + }, + "readOnly": true + } + } + }, + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Leaderboard/Fetch", + "description": "May not be present unless \"leaderboard\" is in the \"include\" header. See `.data[].relationships.leaderboard.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "leaderboards", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string", + "readOnly": true, + "example": "Totam Unde" + }, + "description": { + "title": "description", + "type": "string", + "readOnly": true, + "example": "Modi vitae commodi possimus animi." + }, + "format": { + "title": "format", + "type": "string", + "readOnly": true, + "example": "VALUE" + }, + "rankAsc": { + "title": "rankAsc", + "type": "boolean", + "readOnly": true, + "example": false + }, + "state": { + "title": "state", + "type": "string", + "readOnly": true, + "example": "active" + }, + "orderColumn": { + "title": "orderColumn", + "type": "number", + "readOnly": true, + "example": 64 + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:04:12.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:04:12.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "games": { + "title": "games", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"games\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + }, + "developer": { + "title": "developer", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"developer\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/developers/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/developers/1" + } + }, + "readOnly": true + } + } + }, + "entries": { + "title": "entries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"entries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/entries/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/entries/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Reporter/Fetch", + "description": "May not be present unless \"reporter\" is in the \"include\" header. See `.data[].relationships.reporter.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "users", + "type": "string" + }, + "id": { + "type": "string", + "example": "01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "attributes": { + "type": "object", + "properties": { + "displayName": { + "title": "displayName", + "type": "string", + "readOnly": true, + "example": "Root" + }, + "avatarUrl": { + "title": "avatarUrl", + "type": "string", + "readOnly": true, + "example": "https://media.retroachievements.org/UserPic/Root.png" + }, + "motto": { + "title": "motto", + "type": "string", + "readOnly": true, + "example": "" + }, + "points": { + "title": "points", + "type": "number", + "readOnly": true, + "example": 1236 + }, + "pointsHardcore": { + "title": "pointsHardcore", + "type": "number", + "readOnly": true, + "example": 7130 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 15687 + }, + "yieldUnlocks": { + "title": "yieldUnlocks", + "type": "number", + "readOnly": true, + "example": 0 + }, + "yieldPoints": { + "title": "yieldPoints", + "type": "number", + "readOnly": true, + "example": 0 + }, + "joinedAt": { + "title": "joinedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:22.000000Z" + }, + "lastActivityAt": { + "title": "lastActivityAt", + "type": "string", + "readOnly": true, + "example": "2026-07-07T21:05:33.000000Z" + }, + "deletedAt": { + "title": "deletedAt", + "type": "string", + "readOnly": true + }, + "isUnranked": { + "title": "isUnranked", + "type": "boolean", + "readOnly": true, + "example": false + }, + "isUserWallActive": { + "title": "isUserWallActive", + "type": "boolean", + "readOnly": true, + "example": true + }, + "richPresence": { + "title": "richPresence", + "type": "string", + "readOnly": true, + "example": "Playing Assumenda Pariatur" + }, + "richPresenceUpdatedAt": { + "title": "richPresenceUpdatedAt", + "type": "string", + "readOnly": true, + "example": "2026-04-18T04:34:36.000000Z" + }, + "visibleRole": { + "title": "visibleRole", + "type": "string", + "readOnly": true, + "example": { + "id": 4, + "name": "game-hash-manager", + "display": 3, + "guard_name": "web", + "created_at": "2025-09-12T06:01:21.000000Z", + "updated_at": "2025-09-12T06:01:21.000000Z", + "pivot": { + "model_type": "user", + "model_id": 1, + "role_id": 4 + } + } + }, + "displayableRoles": { + "title": "displayableRoles", + "type": "array", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievementSetClaims": { + "title": "achievementSetClaims", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetClaims\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerAchievements": { + "title": "playerAchievements", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievements\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerAchievementSets": { + "title": "playerAchievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerGames": { + "title": "playerGames", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerGames\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "wallComments": { + "title": "wallComments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"wallComments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "awards": { + "title": "awards", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"awards\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "followers": { + "title": "followers", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"followers\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "following": { + "title": "following", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"following\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Resolver/Fetch", + "description": "May not be present unless \"resolver\" is in the \"include\" header. See `.data[].relationships.resolver.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "users", + "type": "string" + }, + "id": { + "type": "string", + "example": "01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "attributes": { + "type": "object", + "properties": { + "displayName": { + "title": "displayName", + "type": "string", + "readOnly": true, + "example": "Root" + }, + "avatarUrl": { + "title": "avatarUrl", + "type": "string", + "readOnly": true, + "example": "https://media.retroachievements.org/UserPic/Root.png" + }, + "motto": { + "title": "motto", + "type": "string", + "readOnly": true, + "example": "" + }, + "points": { + "title": "points", + "type": "number", + "readOnly": true, + "example": 1236 + }, + "pointsHardcore": { + "title": "pointsHardcore", + "type": "number", + "readOnly": true, + "example": 7130 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 15687 + }, + "yieldUnlocks": { + "title": "yieldUnlocks", + "type": "number", + "readOnly": true, + "example": 0 + }, + "yieldPoints": { + "title": "yieldPoints", + "type": "number", + "readOnly": true, + "example": 0 + }, + "joinedAt": { + "title": "joinedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:22.000000Z" + }, + "lastActivityAt": { + "title": "lastActivityAt", + "type": "string", + "readOnly": true, + "example": "2026-07-07T21:05:33.000000Z" + }, + "deletedAt": { + "title": "deletedAt", + "type": "string", + "readOnly": true + }, + "isUnranked": { + "title": "isUnranked", + "type": "boolean", + "readOnly": true, + "example": false + }, + "isUserWallActive": { + "title": "isUserWallActive", + "type": "boolean", + "readOnly": true, + "example": true + }, + "richPresence": { + "title": "richPresence", + "type": "string", + "readOnly": true, + "example": "Playing Assumenda Pariatur" + }, + "richPresenceUpdatedAt": { + "title": "richPresenceUpdatedAt", + "type": "string", + "readOnly": true, + "example": "2026-04-18T04:34:36.000000Z" + }, + "visibleRole": { + "title": "visibleRole", + "type": "string", + "readOnly": true, + "example": { + "id": 4, + "name": "game-hash-manager", + "display": 3, + "guard_name": "web", + "created_at": "2025-09-12T06:01:21.000000Z", + "updated_at": "2025-09-12T06:01:21.000000Z", + "pivot": { + "model_type": "user", + "model_id": 1, + "role_id": 4 + } + } + }, + "displayableRoles": { + "title": "displayableRoles", + "type": "array", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievementSetClaims": { + "title": "achievementSetClaims", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetClaims\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerAchievements": { + "title": "playerAchievements", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievements\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerAchievementSets": { + "title": "playerAchievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerGames": { + "title": "playerGames", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerGames\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "wallComments": { + "title": "wallComments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"wallComments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "awards": { + "title": "awards", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"awards\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "followers": { + "title": "followers", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"followers\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "following": { + "title": "following", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"following\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Author/Fetch", + "description": "May not be present unless \"author\" is in the \"include\" header. See `.data[].relationships.author.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "users", + "type": "string" + }, + "id": { + "type": "string", + "example": "01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "attributes": { + "type": "object", + "properties": { + "displayName": { + "title": "displayName", + "type": "string", + "readOnly": true, + "example": "Root" + }, + "avatarUrl": { + "title": "avatarUrl", + "type": "string", + "readOnly": true, + "example": "https://media.retroachievements.org/UserPic/Root.png" + }, + "motto": { + "title": "motto", + "type": "string", + "readOnly": true, + "example": "" + }, + "points": { + "title": "points", + "type": "number", + "readOnly": true, + "example": 1236 + }, + "pointsHardcore": { + "title": "pointsHardcore", + "type": "number", + "readOnly": true, + "example": 7130 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 15687 + }, + "yieldUnlocks": { + "title": "yieldUnlocks", + "type": "number", + "readOnly": true, + "example": 0 + }, + "yieldPoints": { + "title": "yieldPoints", + "type": "number", + "readOnly": true, + "example": 0 + }, + "joinedAt": { + "title": "joinedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:01:22.000000Z" + }, + "lastActivityAt": { + "title": "lastActivityAt", + "type": "string", + "readOnly": true, + "example": "2026-07-07T21:05:33.000000Z" + }, + "deletedAt": { + "title": "deletedAt", + "type": "string", + "readOnly": true + }, + "isUnranked": { + "title": "isUnranked", + "type": "boolean", + "readOnly": true, + "example": false + }, + "isUserWallActive": { + "title": "isUserWallActive", + "type": "boolean", + "readOnly": true, + "example": true + }, + "richPresence": { + "title": "richPresence", + "type": "string", + "readOnly": true, + "example": "Playing Assumenda Pariatur" + }, + "richPresenceUpdatedAt": { + "title": "richPresenceUpdatedAt", + "type": "string", + "readOnly": true, + "example": "2026-04-18T04:34:36.000000Z" + }, + "visibleRole": { + "title": "visibleRole", + "type": "string", + "readOnly": true, + "example": { + "id": 4, + "name": "game-hash-manager", + "display": 3, + "guard_name": "web", + "created_at": "2025-09-12T06:01:21.000000Z", + "updated_at": "2025-09-12T06:01:21.000000Z", + "pivot": { + "model_type": "user", + "model_id": 1, + "role_id": 4 + } + } + }, + "displayableRoles": { + "title": "displayableRoles", + "type": "array", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievementSetClaims": { + "title": "achievementSetClaims", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetClaims\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerAchievements": { + "title": "playerAchievements", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievements\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerAchievementSets": { + "title": "playerAchievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "playerGames": { + "title": "playerGames", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerGames\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "wallComments": { + "title": "wallComments", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"wallComments\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "awards": { + "title": "awards", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"awards\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "followers": { + "title": "followers", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"followers\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "following": { + "title": "following", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"following\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + } + } + } + } + } + ] + } } } } @@ -7959,6 +14395,8 @@ "in": "query", "required": false, "allowEmptyValue": false, + "style": "form", + "explode": false, "schema": { "type": "array", "items": { @@ -7980,7 +14418,25 @@ "lastActivityAt", "-lastActivityAt" ], - "type": "string" + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "points": "By points, ascending", + "-points": "By points, descending", + "pointsHardcore": "By pointsHardcore, ascending", + "-pointsHardcore": "By pointsHardcore, descending", + "pointsWeighted": "By pointsWeighted, ascending", + "-pointsWeighted": "By pointsWeighted, descending", + "yieldUnlocks": "By yieldUnlocks, ascending", + "-yieldUnlocks": "By yieldUnlocks, descending", + "yieldPoints": "By yieldPoints, ascending", + "-yieldPoints": "By yieldPoints, descending", + "joinedAt": "By joinedAt, ascending", + "-joinedAt": "By joinedAt, descending", + "lastActivityAt": "By lastActivityAt, ascending", + "-lastActivityAt": "By lastActivityAt, descending" + } } } }, @@ -7993,6 +14449,62 @@ "schema": { "type": "boolean" } + }, + { + "name": "fields[users]", + "in": "query", + "description": "Only return these fields for the \"users\" resource. The .data field will be empty if none of the fields are set on a resource.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "displayName", + "avatarUrl", + "motto", + "points", + "pointsHardcore", + "pointsWeighted", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "wallComments", + "awards", + "followers", + "following" + ], + "type": "string" + } + } + }, + { + "name": "include", + "in": "query", + "description": "Additionally fetch these related resources. Each related resources will be placed in the .included key of the root document, and the main resource each relates to will list the related IDs in its \"relationships\" section.", + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { @@ -8023,16 +14535,444 @@ "included": { "type": "array", "items": { - "oneOf": [ + "anyOf": [ + { + "title": "Resource/AchievementSetClaims/Fetch", + "description": "May not be present unless \"achievementSetClaims\" is in the \"include\" header. See `.data[].relationships.achievementSetClaims.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "achievement-set-claims", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "claimedAt": { + "title": "claimedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:24:26.000000Z" + }, + "finishedAt": { + "title": "finishedAt", + "type": "string", + "readOnly": true, + "example": "2025-12-12T06:24:26.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-12T06:24:26.000000Z" + }, + "status": { + "title": "status", + "type": "string", + "readOnly": true, + "example": "complete" + }, + "claimType": { + "title": "claimType", + "type": "string", + "readOnly": true, + "example": "primary" + }, + "setType": { + "title": "setType", + "type": "string", + "readOnly": true, + "example": "new_set" + }, + "specialType": { + "title": "specialType", + "type": "string", + "readOnly": true, + "example": "none" + }, + "extensionsCount": { + "title": "extensionsCount", + "type": "number", + "readOnly": true, + "example": 0 + }, + "minutesLeft": { + "title": "minutesLeft", + "type": "number", + "readOnly": true, + "example": 298961 + }, + "userId": { + "title": "userId", + "type": "string", + "readOnly": true, + "example": 91 + }, + "userDisplayName": { + "title": "userDisplayName", + "type": "string", + "readOnly": true + }, + "gameId": { + "title": "gameId", + "type": "number", + "readOnly": true, + "example": 1 + }, + "gameTitle": { + "title": "gameTitle", + "type": "string", + "readOnly": true + }, + "gameIconUrl": { + "title": "gameIconUrl", + "type": "string", + "readOnly": true + }, + "systemId": { + "title": "systemId", + "type": "number", + "readOnly": true + }, + "systemName": { + "title": "systemName", + "type": "string", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "user": { + "title": "user", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/PlayerAchievements/Fetch", + "description": "May not be present unless \"playerAchievements\" is in the \"include\" header. See `.data[].relationships.playerAchievements.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "player-achievements", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "unlockedAt": { + "title": "unlockedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T07:20:03.000000Z" + }, + "unlockedHardcoreAt": { + "title": "unlockedHardcoreAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T07:20:03.000000Z" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievement": { + "title": "achievement", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievement\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievements/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievements/1" + } + }, + "readOnly": true + } + } + }, + "user": { + "title": "user", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/1" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/PlayerAchievementSets/Fetch", + "description": "May not be present unless \"playerAchievementSets\" is in the \"include\" header. See `.data[].relationships.playerAchievementSets.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "player-achievement-sets", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "achievementsUnlocked": { + "title": "achievementsUnlocked", + "type": "number", + "readOnly": true, + "example": 20 + }, + "achievementsUnlockedHardcore": { + "title": "achievementsUnlockedHardcore", + "type": "number", + "readOnly": true, + "example": 20 + }, + "points": { + "title": "points", + "type": "number", + "readOnly": true, + "example": 189 + }, + "pointsHardcore": { + "title": "pointsHardcore", + "type": "number", + "readOnly": true, + "example": 189 + }, + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "readOnly": true, + "example": 8479 + }, + "completionPercentage": { + "title": "completionPercentage", + "type": "number", + "readOnly": true, + "example": "1.000000000" + }, + "completionPercentageHardcore": { + "title": "completionPercentageHardcore", + "type": "number", + "readOnly": true, + "example": "1.000000000" + }, + "lastUnlockAt": { + "title": "lastUnlockAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T10:09:08.000000Z" + }, + "lastUnlockHardcoreAt": { + "title": "lastUnlockHardcoreAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T10:09:08.000000Z" + }, + "completedAt": { + "title": "completedAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T10:09:08.000000Z" + }, + "completedHardcoreAt": { + "title": "completedHardcoreAt", + "type": "string", + "readOnly": true, + "example": "2025-09-03T10:09:08.000000Z" + }, + "timeTakenSeconds": { + "title": "timeTakenSeconds", + "type": "number", + "readOnly": true, + "example": 0 + }, + "timeTakenHardcoreSeconds": { + "title": "timeTakenHardcoreSeconds", + "type": "number", + "readOnly": true, + "example": 0 + }, + "setContext": { + "title": "setContext", + "type": "array", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievementSet": { + "title": "achievementSet", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSet\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, { - "title": "Resource/AchievementSetClaims/Fetch", - "description": "May not be present unless \"achievementSetClaims\" is in the \"include\" header. See `.data[].relationships.achievementSetClaims.data` for the lists of IDs which have been included here.", + "title": "Resource/PlayerGames/Fetch", + "description": "May not be present unless \"playerGames\" is in the \"include\" header. See `.data[].relationships.playerGames.data` for the lists of IDs which have been included here.", "type": "object", "required": ["type", "id", "attributes"], "properties": { "type": { "title": "type", - "default": "achievement-set-claims", + "default": "player-games", "type": "string" }, "id": { @@ -8042,105 +14982,68 @@ "attributes": { "type": "object", "properties": { - "claimedAt": { - "title": "claimedAt", - "type": "string", - "readOnly": true, - "example": "2025-09-12T06:24:26.000000Z" - }, - "finishedAt": { - "title": "finishedAt", + "lastPlayedAt": { + "title": "lastPlayedAt", "type": "string", "readOnly": true, - "example": "2025-12-12T06:24:26.000000Z" + "example": "2025-09-03T10:15:57.000000Z" }, - "updatedAt": { - "title": "updatedAt", + "firstUnlockAt": { + "title": "firstUnlockAt", "type": "string", "readOnly": true, - "example": "2025-09-12T06:24:26.000000Z" + "example": "2025-09-03T07:20:03.000000Z" }, - "status": { - "title": "status", + "lastUnlockAt": { + "title": "lastUnlockAt", "type": "string", "readOnly": true, - "example": "complete" + "example": "2025-09-03T10:09:08.000000Z" }, - "claimType": { - "title": "claimType", + "lastUnlockHardcoreAt": { + "title": "lastUnlockHardcoreAt", "type": "string", "readOnly": true, - "example": "primary" + "example": "2025-09-03T10:09:08.000000Z" }, - "setType": { - "title": "setType", + "beatenAt": { + "title": "beatenAt", "type": "string", "readOnly": true, - "example": "new_set" + "example": "2025-09-03T08:19:11.000000Z" }, - "specialType": { - "title": "specialType", + "beatenHardcoreAt": { + "title": "beatenHardcoreAt", "type": "string", "readOnly": true, - "example": "none" + "example": "2025-09-03T08:19:11.000000Z" }, - "extensionsCount": { - "title": "extensionsCount", + "playtimeTotalSeconds": { + "title": "playtimeTotalSeconds", "type": "number", "readOnly": true, - "example": 0 + "example": 12159 }, - "minutesLeft": { - "title": "minutesLeft", + "timeToBeatSeconds": { + "title": "timeToBeatSeconds", "type": "number", "readOnly": true, - "example": 219849 - }, - "userId": { - "title": "userId", - "type": "string", - "readOnly": true, - "example": 91 - }, - "userDisplayName": { - "title": "userDisplayName", - "type": "string", - "readOnly": true + "example": 5153 }, - "gameId": { - "title": "gameId", + "timeToBeatHardcoreSeconds": { + "title": "timeToBeatHardcoreSeconds", "type": "number", "readOnly": true, - "example": 1 - }, - "gameTitle": { - "title": "gameTitle", - "type": "string", - "readOnly": true - }, - "gameIconUrl": { - "title": "gameIconUrl", - "type": "string", - "readOnly": true - }, - "systemId": { - "title": "systemId", - "type": "number", - "readOnly": true - }, - "systemName": { - "title": "systemName", - "type": "string", - "readOnly": true + "example": 5153 } } }, "relationships": { "type": "object", "properties": { - "user": { - "title": "user", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", + "achievementSets": { + "title": "achievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSets\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -8149,12 +15052,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "example": "https://api.retroachievements.org/v2/achievement-sets/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "example": "https://api.retroachievements.org/v2/achievement-sets/1" } }, "readOnly": true @@ -8183,40 +15086,108 @@ "readOnly": true } } + }, + "playerAchievementSets": { + "title": "playerAchievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" + } + }, + "readOnly": true + } + } } } } } }, { - "title": "Resource/PlayerAchievements/Fetch", - "description": "May not be present unless \"playerAchievements\" is in the \"include\" header. See `.data[].relationships.playerAchievements.data` for the lists of IDs which have been included here.", + "title": "Resource/Tickets/Fetch", + "description": "May not be present unless \"tickets\" is in the \"include\" header. See `.data[].relationships.tickets.data` for the lists of IDs which have been included here.", "type": "object", "required": ["type", "id", "attributes"], "properties": { "type": { "title": "type", - "default": "player-achievements", + "default": "tickets", "type": "string" }, "id": { "type": "string", - "example": "1" + "example": "5" }, "attributes": { "type": "object", "properties": { - "unlockedAt": { - "title": "unlockedAt", + "state": { + "title": "state", "type": "string", "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" + "example": "open" }, - "unlockedHardcoreAt": { - "title": "unlockedHardcoreAt", + "type": { + "title": "type", "type": "string", "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" + "example": "did_not_trigger" + }, + "body": { + "title": "body", + "type": "string", + "readOnly": true, + "example": "bruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh moment" + }, + "hardcore": { + "title": "hardcore", + "type": "boolean", + "readOnly": true, + "example": 1 + }, + "reportedAt": { + "title": "reportedAt", + "type": "string", + "readOnly": true, + "example": "2026-06-05T19:41:03.000000Z" + }, + "resolvedAt": { + "title": "resolvedAt", + "type": "string", + "readOnly": true + }, + "ticketableType": { + "title": "ticketableType", + "type": "string", + "readOnly": true, + "example": "achievement" + }, + "ticketableId": { + "title": "ticketableId", + "type": "number", + "readOnly": true, + "example": 3801 + }, + "gameIconUrl": { + "title": "gameIconUrl", + "type": "string", + "readOnly": true + }, + "systemName": { + "title": "systemName", + "type": "string", + "readOnly": true } } }, @@ -8234,21 +15205,21 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/1" + "example": "https://api.retroachievements.org/v2/achievements/5" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/1" + "example": "https://api.retroachievements.org/v2/achievements/5" } }, "readOnly": true } } }, - "user": { - "title": "user", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", + "leaderboard": { + "title": "leaderboard", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"leaderboard\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -8257,21 +15228,21 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "example": "https://api.retroachievements.org/v2/leaderboards/5" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "example": "https://api.retroachievements.org/v2/leaderboards/5" } }, "readOnly": true } } }, - "game": { - "title": "game", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "reporter": { + "title": "reporter", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"reporter\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -8280,12 +15251,58 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/reporters/5" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/reporters/5" + } + }, + "readOnly": true + } + } + }, + "resolver": { + "title": "resolver", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"resolver\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/resolvers/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/resolvers/5" + } + }, + "readOnly": true + } + } + }, + "author": { + "title": "author", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"author\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/5" } }, "readOnly": true @@ -8297,137 +15314,64 @@ } }, { - "title": "Resource/PlayerAchievementSets/Fetch", - "description": "May not be present unless \"playerAchievementSets\" is in the \"include\" header. See `.data[].relationships.playerAchievementSets.data` for the lists of IDs which have been included here.", + "title": "Resource/WallComments/Fetch", + "description": "May not be present unless \"wallComments\" is in the \"include\" header. See `.data[].relationships.wallComments.data` for the lists of IDs which have been included here.", "type": "object", "required": ["type", "id", "attributes"], "properties": { "type": { "title": "type", - "default": "player-achievement-sets", + "default": "comments", "type": "string" }, "id": { "type": "string", - "example": "1" + "example": "3" }, "attributes": { "type": "object", "properties": { - "achievementsUnlocked": { - "title": "achievementsUnlocked", - "type": "number", - "readOnly": true, - "example": 20 - }, - "achievementsUnlockedHardcore": { - "title": "achievementsUnlockedHardcore", - "type": "number", - "readOnly": true, - "example": 20 - }, - "points": { - "title": "points", - "type": "number", - "readOnly": true, - "example": 189 - }, - "pointsHardcore": { - "title": "pointsHardcore", - "type": "number", - "readOnly": true, - "example": 189 - }, - "pointsWeighted": { - "title": "pointsWeighted", - "type": "number", - "readOnly": true, - "example": 8479 - }, - "completionPercentage": { - "title": "completionPercentage", - "type": "number", - "readOnly": true, - "example": "1.000000000" - }, - "completionPercentageHardcore": { - "title": "completionPercentageHardcore", - "type": "number", - "readOnly": true, - "example": "1.000000000" - }, - "lastUnlockAt": { - "title": "lastUnlockAt", + "body": { + "title": "body", "type": "string", "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "example": "Excited to play this!" }, - "lastUnlockHardcoreAt": { - "title": "lastUnlockHardcoreAt", + "authorAvatarUrl": { + "title": "authorAvatarUrl", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "readOnly": true }, - "completedAt": { - "title": "completedAt", + "authorDisplayName": { + "title": "authorDisplayName", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "readOnly": true }, - "completedHardcoreAt": { - "title": "completedHardcoreAt", + "authorId": { + "title": "authorId", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "readOnly": true }, - "timeTakenSeconds": { - "title": "timeTakenSeconds", - "type": "number", + "permalink": { + "title": "permalink", + "type": "string", "readOnly": true, - "example": 0 + "example": "" }, - "timeTakenHardcoreSeconds": { - "title": "timeTakenHardcoreSeconds", - "type": "number", + "submittedAt": { + "title": "submittedAt", + "type": "string", "readOnly": true, - "example": 0 - }, - "setContext": { - "title": "setContext", - "type": "array", - "readOnly": true + "example": "2026-05-05T22:41:05.000000Z" } } }, "relationships": { "type": "object", "properties": { - "achievementSet": { - "title": "achievementSet", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSet\" to the \"include\" query parameter; results will be found in `.included`.", - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "related": { - "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" - }, - "self": { - "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" - } - }, - "readOnly": true - } - } - }, - "game": { - "title": "game", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "author": { + "title": "author", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"author\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -8436,12 +15380,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/authors/3" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/authors/3" } }, "readOnly": true @@ -8453,14 +15397,14 @@ } }, { - "title": "Resource/PlayerGames/Fetch", - "description": "May not be present unless \"playerGames\" is in the \"include\" header. See `.data[].relationships.playerGames.data` for the lists of IDs which have been included here.", + "title": "Resource/Awards/Fetch", + "description": "May not be present unless \"awards\" is in the \"include\" header. See `.data[].relationships.awards.data` for the lists of IDs which have been included here.", "type": "object", "required": ["type", "id", "attributes"], "properties": { "type": { "title": "type", - "default": "player-games", + "default": "user-awards", "type": "string" }, "id": { @@ -8470,68 +15414,50 @@ "attributes": { "type": "object", "properties": { - "lastPlayedAt": { - "title": "lastPlayedAt", - "type": "string", - "readOnly": true, - "example": "2025-09-03T10:15:57.000000Z" - }, - "firstUnlockAt": { - "title": "firstUnlockAt", - "type": "string", - "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" - }, - "lastUnlockAt": { - "title": "lastUnlockAt", + "awardedAt": { + "title": "awardedAt", "type": "string", "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "example": "2025-09-03T08:19:11.000000Z" }, - "lastUnlockHardcoreAt": { - "title": "lastUnlockHardcoreAt", + "kind": { + "title": "kind", "type": "string", "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "example": "game_beaten" }, - "beatenAt": { - "title": "beatenAt", + "title": { + "title": "title", "type": "string", "readOnly": true, - "example": "2025-09-03T08:19:11.000000Z" + "example": 1 }, - "beatenHardcoreAt": { - "title": "beatenHardcoreAt", + "badgeUrl": { + "title": "badgeUrl", "type": "string", "readOnly": true, - "example": "2025-09-03T08:19:11.000000Z" - }, - "playtimeTotalSeconds": { - "title": "playtimeTotalSeconds", - "type": "number", - "readOnly": true, - "example": 12159 + "example": 1 }, - "timeToBeatSeconds": { - "title": "timeToBeatSeconds", + "displayOrder": { + "title": "displayOrder", "type": "number", "readOnly": true, - "example": 5153 + "example": 0 }, - "timeToBeatHardcoreSeconds": { - "title": "timeToBeatHardcoreSeconds", - "type": "number", + "context": { + "title": "context", + "type": "object", "readOnly": true, - "example": 5153 + "example": 1 } } }, "relationships": { "type": "object", "properties": { - "achievementSets": { - "title": "achievementSets", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "event": { + "title": "event", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"event\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -8540,12 +15466,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "example": "https://api.retroachievements.org/v2/events/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "example": "https://api.retroachievements.org/v2/events/1" } }, "readOnly": true @@ -8574,93 +15500,74 @@ "readOnly": true } } - }, - "playerAchievementSets": { - "title": "playerAchievementSets", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievementSets\" to the \"include\" query parameter; results will be found in `.included`.", - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "related": { - "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" - }, - "self": { - "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" - } - }, - "readOnly": true - } - } } } } } }, { - "title": "Resource/WallComments/Fetch", - "description": "May not be present unless \"wallComments\" is in the \"include\" header. See `.data[].relationships.wallComments.data` for the lists of IDs which have been included here.", + "title": "Resource/Followers/Fetch", + "description": "May not be present unless \"followers\" is in the \"include\" header. See `.data[].relationships.followers.data` for the lists of IDs which have been included here.", "type": "object", "required": ["type", "id", "attributes"], "properties": { "type": { "title": "type", - "default": "comments", + "default": "user-follows", "type": "string" }, "id": { "type": "string", - "example": "3" + "example": "2" }, "attributes": { "type": "object", "properties": { - "body": { - "title": "body", + "followedAt": { + "title": "followedAt", "type": "string", "readOnly": true, - "example": "Excited to play this!" + "example": "2026-07-07T21:05:33.000000Z" }, - "authorAvatarUrl": { - "title": "authorAvatarUrl", + "userId": { + "title": "userId", "type": "string", - "readOnly": true + "readOnly": true, + "example": 1 }, - "authorDisplayName": { - "title": "authorDisplayName", + "displayName": { + "title": "displayName", "type": "string", "readOnly": true }, - "authorId": { - "title": "authorId", + "avatarUrl": { + "title": "avatarUrl", "type": "string", "readOnly": true }, - "permalink": { - "title": "permalink", - "type": "string", - "readOnly": true, - "example": "" + "points": { + "title": "points", + "type": "number", + "readOnly": true + }, + "pointsHardcore": { + "title": "pointsHardcore", + "type": "number", + "readOnly": true }, - "submittedAt": { - "title": "submittedAt", - "type": "string", - "readOnly": true, - "example": "2026-05-05T22:41:05.000000Z" + "isMutual": { + "title": "isMutual", + "type": "boolean", + "readOnly": true } } }, "relationships": { "type": "object", "properties": { - "author": { - "title": "author", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"author\" to the \"include\" query parameter; results will be found in `.included`.", + "user": { + "title": "user", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -8669,12 +15576,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/authors/3" + "example": "https://api.retroachievements.org/v2/users/2" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/authors/3" + "example": "https://api.retroachievements.org/v2/users/2" } }, "readOnly": true @@ -8686,90 +15593,68 @@ } }, { - "title": "Resource/Awards/Fetch", - "description": "May not be present unless \"awards\" is in the \"include\" header. See `.data[].relationships.awards.data` for the lists of IDs which have been included here.", + "title": "Resource/Following/Fetch", + "description": "May not be present unless \"following\" is in the \"include\" header. See `.data[].relationships.following.data` for the lists of IDs which have been included here.", "type": "object", "required": ["type", "id", "attributes"], "properties": { "type": { "title": "type", - "default": "user-awards", + "default": "user-follows", "type": "string" }, "id": { "type": "string", - "example": "1" + "example": "2" }, "attributes": { "type": "object", "properties": { - "awardedAt": { - "title": "awardedAt", + "followedAt": { + "title": "followedAt", "type": "string", "readOnly": true, - "example": "2025-09-03T08:19:11.000000Z" + "example": "2026-07-07T21:05:33.000000Z" }, - "kind": { - "title": "kind", + "userId": { + "title": "userId", "type": "string", "readOnly": true, - "example": "game_beaten" + "example": 1 }, - "title": { - "title": "title", + "displayName": { + "title": "displayName", "type": "string", - "readOnly": true, - "example": 1 + "readOnly": true }, - "badgeUrl": { - "title": "badgeUrl", + "avatarUrl": { + "title": "avatarUrl", "type": "string", - "readOnly": true, - "example": 1 + "readOnly": true }, - "displayOrder": { - "title": "displayOrder", + "points": { + "title": "points", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, - "context": { - "title": "context", - "type": "object", - "readOnly": true, - "example": 1 + "pointsHardcore": { + "title": "pointsHardcore", + "type": "number", + "readOnly": true + }, + "isMutual": { + "title": "isMutual", + "type": "boolean", + "readOnly": true } } }, "relationships": { "type": "object", "properties": { - "event": { - "title": "event", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"event\" to the \"include\" query parameter; results will be found in `.included`.", - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "related": { - "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" - }, - "self": { - "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" - } - }, - "readOnly": true - } - } - }, - "game": { - "title": "game", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "user": { + "title": "user", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -8778,12 +15663,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/users/2" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/users/2" } }, "readOnly": true @@ -8864,7 +15749,7 @@ "included": { "type": "array", "items": { - "oneOf": [ + "anyOf": [ { "title": "Resource/AchievementSetClaims/Fetch", "description": "May not be present unless \"achievementSetClaims\" is in the \"include\" header. See `.data[].relationships.achievementSetClaims.data` for the lists of IDs which have been included here.", @@ -8935,7 +15820,7 @@ "title": "minutesLeft", "type": "number", "readOnly": true, - "example": 219849 + "example": 298961 }, "userId": { "title": "userId", @@ -9427,12 +16312,211 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" + "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Tickets/Fetch", + "description": "May not be present unless \"tickets\" is in the \"include\" header. See `.data[].relationships.tickets.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "tickets", + "type": "string" + }, + "id": { + "type": "string", + "example": "5" + }, + "attributes": { + "type": "object", + "properties": { + "state": { + "title": "state", + "type": "string", + "readOnly": true, + "example": "open" + }, + "type": { + "title": "type", + "type": "string", + "readOnly": true, + "example": "did_not_trigger" + }, + "body": { + "title": "body", + "type": "string", + "readOnly": true, + "example": "bruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh moment" + }, + "hardcore": { + "title": "hardcore", + "type": "boolean", + "readOnly": true, + "example": 1 + }, + "reportedAt": { + "title": "reportedAt", + "type": "string", + "readOnly": true, + "example": "2026-06-05T19:41:03.000000Z" + }, + "resolvedAt": { + "title": "resolvedAt", + "type": "string", + "readOnly": true + }, + "ticketableType": { + "title": "ticketableType", + "type": "string", + "readOnly": true, + "example": "achievement" + }, + "ticketableId": { + "title": "ticketableId", + "type": "number", + "readOnly": true, + "example": 3801 + }, + "gameIconUrl": { + "title": "gameIconUrl", + "type": "string", + "readOnly": true + }, + "systemName": { + "title": "systemName", + "type": "string", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievement": { + "title": "achievement", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievement\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievements/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievements/5" + } + }, + "readOnly": true + } + } + }, + "leaderboard": { + "title": "leaderboard", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"leaderboard\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboards/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboards/5" + } + }, + "readOnly": true + } + } + }, + "reporter": { + "title": "reporter", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"reporter\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/reporters/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/reporters/5" + } + }, + "readOnly": true + } + } + }, + "resolver": { + "title": "resolver", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"resolver\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/resolvers/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/resolvers/5" + } + }, + "readOnly": true + } + } + }, + "author": { + "title": "author", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"author\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/5" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" + "example": "https://api.retroachievements.org/v2/authors/5" } }, "readOnly": true @@ -9634,6 +16718,180 @@ } } } + }, + { + "title": "Resource/Followers/Fetch", + "description": "May not be present unless \"followers\" is in the \"include\" header. See `.data[].relationships.followers.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "user-follows", + "type": "string" + }, + "id": { + "type": "string", + "example": "2" + }, + "attributes": { + "type": "object", + "properties": { + "followedAt": { + "title": "followedAt", + "type": "string", + "readOnly": true, + "example": "2026-07-07T21:05:33.000000Z" + }, + "userId": { + "title": "userId", + "type": "string", + "readOnly": true, + "example": 1 + }, + "displayName": { + "title": "displayName", + "type": "string", + "readOnly": true + }, + "avatarUrl": { + "title": "avatarUrl", + "type": "string", + "readOnly": true + }, + "points": { + "title": "points", + "type": "number", + "readOnly": true + }, + "pointsHardcore": { + "title": "pointsHardcore", + "type": "number", + "readOnly": true + }, + "isMutual": { + "title": "isMutual", + "type": "boolean", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "user": { + "title": "user", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/2" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/2" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/Following/Fetch", + "description": "May not be present unless \"following\" is in the \"include\" header. See `.data[].relationships.following.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "user-follows", + "type": "string" + }, + "id": { + "type": "string", + "example": "2" + }, + "attributes": { + "type": "object", + "properties": { + "followedAt": { + "title": "followedAt", + "type": "string", + "readOnly": true, + "example": "2026-07-07T21:05:33.000000Z" + }, + "userId": { + "title": "userId", + "type": "string", + "readOnly": true, + "example": 1 + }, + "displayName": { + "title": "displayName", + "type": "string", + "readOnly": true + }, + "avatarUrl": { + "title": "avatarUrl", + "type": "string", + "readOnly": true + }, + "points": { + "title": "points", + "type": "number", + "readOnly": true + }, + "pointsHardcore": { + "title": "pointsHardcore", + "type": "number", + "readOnly": true + }, + "isMutual": { + "title": "isMutual", + "type": "boolean", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "user": { + "title": "user", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/2" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/2" + } + }, + "readOnly": true + } + } + } + } + } + } } ] } @@ -9655,12 +16913,432 @@ } } }, - "/users/{user}/achievement-set-claims": { + "/users/{user}/achievement-set-claims": { + "get": { + "tags": ["Users"], + "summary": "Show achievementSetClaims", + "description": "", + "operationId": "users.achievementSetClaims", + "parameters": [ + { + "name": "user", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "01K4Y876RZ4XVE4JA3X9ARV95P": { + "value": "01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "01K4Y8770YSVFGWM6C38BCDQ5F": { + "value": "01K4Y8770YSVFGWM6C38BCDQ5F" + }, + "01K4Y8776Y34QHTCSZ1DEFAEB3": { + "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" + } + } + } + ], + "responses": { + "200": { + "description": "ShowRelated users", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.achievement-set-claims.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/users/{user}/relationships/achievement-set-claims": { + "get": { + "tags": ["Users"], + "summary": "Show achievementSetClaims relation", + "description": "", + "operationId": "users.achievementSetClaims.show", + "parameters": [ + { + "name": "user", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "01K4Y876RZ4XVE4JA3X9ARV95P": { + "value": "01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "01K4Y8770YSVFGWM6C38BCDQ5F": { + "value": "01K4Y8770YSVFGWM6C38BCDQ5F" + }, + "01K4Y8776Y34QHTCSZ1DEFAEB3": { + "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" + } + } + } + ], + "responses": { + "200": { + "description": "Show users", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.users.relationship.achievementSetClaims.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/users/{user}/awards": { + "get": { + "tags": ["Users"], + "summary": "Show awards", + "description": "", + "operationId": "users.awards", + "parameters": [ + { + "name": "user", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "01K4Y876RZ4XVE4JA3X9ARV95P": { + "value": "01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "01K4Y8770YSVFGWM6C38BCDQ5F": { + "value": "01K4Y8770YSVFGWM6C38BCDQ5F" + }, + "01K4Y8776Y34QHTCSZ1DEFAEB3": { + "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" + } + } + } + ], + "responses": { + "200": { + "description": "ShowRelated users", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.user-awards.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/users/{user}/relationships/awards": { + "get": { + "tags": ["Users"], + "summary": "Show awards relation", + "description": "", + "operationId": "users.awards.show", + "parameters": [ + { + "name": "user", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "01K4Y876RZ4XVE4JA3X9ARV95P": { + "value": "01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "01K4Y8770YSVFGWM6C38BCDQ5F": { + "value": "01K4Y8770YSVFGWM6C38BCDQ5F" + }, + "01K4Y8776Y34QHTCSZ1DEFAEB3": { + "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" + } + } + } + ], + "responses": { + "200": { + "description": "Show users", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.users.relationship.awards.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/users/{user}/followers": { + "get": { + "tags": ["Users"], + "summary": "Show followers", + "description": "", + "operationId": "users.followers", + "parameters": [ + { + "name": "user", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "01K4Y876RZ4XVE4JA3X9ARV95P": { + "value": "01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "01K4Y8770YSVFGWM6C38BCDQ5F": { + "value": "01K4Y8770YSVFGWM6C38BCDQ5F" + }, + "01K4Y8776Y34QHTCSZ1DEFAEB3": { + "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" + } + } + } + ], + "responses": { + "200": { + "description": "ShowRelated users", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.user-follows.resource.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/users/{user}/relationships/followers": { + "get": { + "tags": ["Users"], + "summary": "Show followers relation", + "description": "", + "operationId": "users.followers.show", + "parameters": [ + { + "name": "user", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "01K4Y876RZ4XVE4JA3X9ARV95P": { + "value": "01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "01K4Y8770YSVFGWM6C38BCDQ5F": { + "value": "01K4Y8770YSVFGWM6C38BCDQ5F" + }, + "01K4Y8776Y34QHTCSZ1DEFAEB3": { + "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" + } + } + } + ], + "responses": { + "200": { + "description": "Show users", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string", + "example": "1.0" + } + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resources.users.relationship.followers.fetch" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/users/{user}/following": { "get": { "tags": ["Users"], - "summary": "Show achievementSetClaims", + "summary": "Show following", "description": "", - "operationId": "users.achievementSetClaims", + "operationId": "users.following", "parameters": [ { "name": "user", @@ -9705,7 +17383,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.achievement-set-claims.resource.fetch" + "$ref": "#/components/schemas/resources.user-follows.resource.fetch" } } } @@ -9725,12 +17403,12 @@ } } }, - "/users/{user}/relationships/achievement-set-claims": { + "/users/{user}/relationships/following": { "get": { "tags": ["Users"], - "summary": "Show achievementSetClaims relation", + "summary": "Show following relation", "description": "", - "operationId": "users.achievementSetClaims.show", + "operationId": "users.following.show", "parameters": [ { "name": "user", @@ -9775,7 +17453,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.users.relationship.achievementSetClaims.fetch" + "$ref": "#/components/schemas/resources.users.relationship.following.fetch" } } } @@ -9795,12 +17473,12 @@ } } }, - "/users/{user}/awards": { + "/users/{user}/player-achievements": { "get": { "tags": ["Users"], - "summary": "Show awards", + "summary": "Show playerAchievements", "description": "", - "operationId": "users.awards", + "operationId": "users.playerAchievements", "parameters": [ { "name": "user", @@ -9845,7 +17523,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.user-awards.resource.fetch" + "$ref": "#/components/schemas/resources.player-achievements.resource.fetch" } } } @@ -9865,12 +17543,12 @@ } } }, - "/users/{user}/relationships/awards": { + "/users/{user}/relationships/player-achievements": { "get": { "tags": ["Users"], - "summary": "Show awards relation", + "summary": "Show playerAchievements relation", "description": "", - "operationId": "users.awards.show", + "operationId": "users.playerAchievements.show", "parameters": [ { "name": "user", @@ -9915,7 +17593,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.users.relationship.awards.fetch" + "$ref": "#/components/schemas/resources.users.relationship.playerAchievements.fetch" } } } @@ -9935,12 +17613,12 @@ } } }, - "/users/{user}/player-achievements": { + "/users/{user}/player-achievement-sets": { "get": { "tags": ["Users"], - "summary": "Show playerAchievements", + "summary": "Show playerAchievementSets", "description": "", - "operationId": "users.playerAchievements", + "operationId": "users.playerAchievementSets", "parameters": [ { "name": "user", @@ -9985,7 +17663,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.player-achievements.resource.fetch" + "$ref": "#/components/schemas/resources.player-achievement-sets.resource.fetch" } } } @@ -10005,12 +17683,12 @@ } } }, - "/users/{user}/relationships/player-achievements": { + "/users/{user}/relationships/player-achievement-sets": { "get": { "tags": ["Users"], - "summary": "Show playerAchievements relation", + "summary": "Show playerAchievementSets relation", "description": "", - "operationId": "users.playerAchievements.show", + "operationId": "users.playerAchievementSets.show", "parameters": [ { "name": "user", @@ -10055,7 +17733,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.users.relationship.playerAchievements.fetch" + "$ref": "#/components/schemas/resources.users.relationship.playerAchievementSets.fetch" } } } @@ -10075,12 +17753,12 @@ } } }, - "/users/{user}/player-achievement-sets": { + "/users/{user}/player-games": { "get": { "tags": ["Users"], - "summary": "Show playerAchievementSets", + "summary": "Show playerGames", "description": "", - "operationId": "users.playerAchievementSets", + "operationId": "users.playerGames", "parameters": [ { "name": "user", @@ -10125,7 +17803,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.player-achievement-sets.resource.fetch" + "$ref": "#/components/schemas/resources.player-games.resource.fetch" } } } @@ -10145,12 +17823,12 @@ } } }, - "/users/{user}/relationships/player-achievement-sets": { + "/users/{user}/relationships/player-games": { "get": { "tags": ["Users"], - "summary": "Show playerAchievementSets relation", + "summary": "Show playerGames relation", "description": "", - "operationId": "users.playerAchievementSets.show", + "operationId": "users.playerGames.show", "parameters": [ { "name": "user", @@ -10195,7 +17873,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.users.relationship.playerAchievementSets.fetch" + "$ref": "#/components/schemas/resources.users.relationship.playerGames.fetch" } } } @@ -10215,12 +17893,12 @@ } } }, - "/users/{user}/player-games": { + "/users/{user}/tickets": { "get": { "tags": ["Users"], - "summary": "Show playerGames", + "summary": "Show tickets", "description": "", - "operationId": "users.playerGames", + "operationId": "users.tickets", "parameters": [ { "name": "user", @@ -10265,7 +17943,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.player-games.resource.fetch" + "$ref": "#/components/schemas/resources.tickets.resource.fetch" } } } @@ -10285,12 +17963,12 @@ } } }, - "/users/{user}/relationships/player-games": { + "/users/{user}/relationships/tickets": { "get": { "tags": ["Users"], - "summary": "Show playerGames relation", + "summary": "Show tickets relation", "description": "", - "operationId": "users.playerGames.show", + "operationId": "users.tickets.show", "parameters": [ { "name": "user", @@ -10335,7 +18013,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.users.relationship.playerGames.fetch" + "$ref": "#/components/schemas/resources.users.relationship.tickets.fetch" } } } @@ -10607,7 +18285,7 @@ "title": "minutesLeft", "type": "number", "readOnly": true, - "example": 219849 + "example": 298961 }, "userId": { "title": "userId", @@ -10701,6 +18379,126 @@ } } }, + "resources.achievement-set-versions.resource.fetch": { + "title": "Resource/Achievement-set-version/Fetch", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "achievement-set-versions", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "number", + "readOnly": true, + "example": 1 + }, + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2026-05-31T20:21:52.000000Z" + }, + "updatedAt": { + "title": "updatedAt", + "type": "string", + "readOnly": true, + "example": "2026-06-10T20:57:02.000000Z" + }, + "playersTotal": { + "title": "playersTotal", + "type": "number", + "readOnly": true, + "example": 83 + }, + "playersHardcore": { + "title": "playersHardcore", + "type": "number", + "readOnly": true, + "example": 83 + }, + "achievementsPublished": { + "title": "achievementsPublished", + "type": "number", + "readOnly": true, + "example": 10 + }, + "achievementsUnpublished": { + "title": "achievementsUnpublished", + "type": "number", + "readOnly": true, + "example": 0 + }, + "pointsTotal": { + "title": "pointsTotal", + "type": "number", + "readOnly": true, + "example": 101 + }, + "achievementSetId": { + "title": "achievementSetId", + "type": "string", + "readOnly": true, + "example": 215 + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievementSet": { + "title": "achievementSet", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSet\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + "resources.achievement-sets.relationship.achievementSetVersions.fetch": { + "title": "Resource/Achievement-set/Relationship/AchievementSetVersions/Fetch", + "type": "object", + "required": ["type", "id"], + "properties": { + "type": { + "title": "type", + "default": "achievement-set-versions", + "type": "string" + }, + "id": { + "title": "id", + "type": "string", + "example": "1" + } + } + }, "resources.achievement-sets.resource.fetch": { "title": "Resource/Achievement-set/Fetch", "type": "object", @@ -10803,6 +18601,29 @@ "readOnly": true } } + }, + "achievementSetVersions": { + "title": "achievementSetVersions", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievementSetVersions\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" + } + }, + "readOnly": true + } + } } } } @@ -10815,30 +18636,47 @@ "properties": { "type": { "title": "type", - "default": "comments", + "default": "comments", + "type": "string" + }, + "id": { + "title": "id", + "type": "string", + "example": "3" + } + } + }, + "resources.achievements.relationship.playerAchievements.fetch": { + "title": "Resource/Achievement/Relationship/PlayerAchievements/Fetch", + "type": "object", + "required": ["type", "id"], + "properties": { + "type": { + "title": "type", + "default": "player-achievements", "type": "string" }, "id": { "title": "id", "type": "string", - "example": "3" + "example": "1" } } }, - "resources.achievements.relationship.playerAchievements.fetch": { - "title": "Resource/Achievement/Relationship/PlayerAchievements/Fetch", + "resources.achievements.relationship.tickets.fetch": { + "title": "Resource/Achievement/Relationship/Tickets/Fetch", "type": "object", "required": ["type", "id"], "properties": { "type": { "title": "type", - "default": "player-achievements", + "default": "tickets", "type": "string" }, "id": { "title": "id", "type": "string", - "example": "1" + "example": "5" } } }, @@ -10887,13 +18725,13 @@ "title": "badgeUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Badge/00001.png" + "example": "https://media.retroachievements.org/Badge/00001.png" }, "badgeLockedUrl": { "title": "badgeLockedUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Badge/00001_lock.png" + "example": "https://media.retroachievements.org/Badge/00001_lock.png" }, "type": { "title": "type", @@ -11066,6 +18904,29 @@ "readOnly": true } } + }, + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/1" + } + }, + "readOnly": true + } + } } } } @@ -11184,7 +19045,7 @@ "title": "badgeUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000007.png" + "example": "https://media.retroachievements.org/Images/000007.png" }, "state": { "title": "state", @@ -11381,6 +19242,23 @@ } } }, + "resources.games.relationship.tickets.fetch": { + "title": "Resource/Game/Relationship/Tickets/Fetch", + "type": "object", + "required": ["type", "id"], + "properties": { + "type": { + "title": "type", + "default": "tickets", + "type": "string" + }, + "id": { + "title": "id", + "type": "string", + "example": "5" + } + } + }, "resources.games.resource.fetch": { "title": "Resource/Game/Fetch", "type": "object", @@ -11412,25 +19290,25 @@ "title": "badgeUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "imageBoxArtUrl": { "title": "imageBoxArtUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "imageTitleUrl": { "title": "imageTitleUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000010.png" + "example": "https://media.retroachievements.org/Images/000010.png" }, "imageIngameUrl": { "title": "imageIngameUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000002.png" + "example": "https://media.retroachievements.org/Images/000002.png" }, "releasedAt": { "title": "releasedAt", @@ -11608,6 +19486,29 @@ "readOnly": true } } + }, + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/1" + } + }, + "readOnly": true + } + } } } } @@ -11679,7 +19580,7 @@ "title": "badgeUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/Images/000001.png" + "example": "https://media.retroachievements.org/Images/000001.png" }, "hasMatureContent": { "title": "hasMatureContent", @@ -12372,21 +20273,248 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-sets/1" + } + }, + "readOnly": true + } + } + }, + "game": { + "title": "game", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/games/1" + } + }, + "readOnly": true + } + } + }, + "playerAchievementSets": { + "title": "playerAchievementSets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + "resources.systems.resource.fetch": { + "title": "Resource/System/Fetch", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "systems", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "title": "name", + "type": "string", + "example": "Genesis/Mega Drive" + }, + "nameFull": { + "title": "nameFull", + "type": "string", + "example": "Sega Genesis/Mega Drive" + }, + "nameShort": { + "title": "nameShort", + "type": "string", + "example": "MD" + }, + "manufacturer": { + "title": "manufacturer", + "type": "string", + "example": "Sega" + }, + "iconUrl": { + "title": "iconUrl", + "type": "string", + "readOnly": true, + "example": "https://static.retroachievements.org/assets/images/system/md.png" + }, + "active": { + "title": "active", + "type": "boolean", + "example": true + } + } + } + } + }, + "resources.tickets.resource.fetch": { + "title": "Resource/Ticket/Fetch", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "tickets", + "type": "string" + }, + "id": { + "type": "string", + "example": "5" + }, + "attributes": { + "type": "object", + "properties": { + "state": { + "title": "state", + "type": "string", + "readOnly": true, + "example": "open" + }, + "type": { + "title": "type", + "type": "string", + "readOnly": true, + "example": "did_not_trigger" + }, + "body": { + "title": "body", + "type": "string", + "readOnly": true, + "example": "bruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh momentbruh moment bruh moment" + }, + "hardcore": { + "title": "hardcore", + "type": "boolean", + "readOnly": true, + "example": 1 + }, + "reportedAt": { + "title": "reportedAt", + "type": "string", + "readOnly": true, + "example": "2026-06-05T19:41:03.000000Z" + }, + "resolvedAt": { + "title": "resolvedAt", + "type": "string", + "readOnly": true + }, + "ticketableType": { + "title": "ticketableType", + "type": "string", + "readOnly": true, + "example": "achievement" + }, + "ticketableId": { + "title": "ticketableId", + "type": "number", + "readOnly": true, + "example": 3801 + }, + "gameIconUrl": { + "title": "gameIconUrl", + "type": "string", + "readOnly": true + }, + "systemName": { + "title": "systemName", + "type": "string", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "achievement": { + "title": "achievement", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"achievement\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievements/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievements/5" + } + }, + "readOnly": true + } + } + }, + "leaderboard": { + "title": "leaderboard", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"leaderboard\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboards/5" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "example": "https://api.retroachievements.org/v2/leaderboards/5" } }, "readOnly": true } } }, - "game": { - "title": "game", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"game\" to the \"include\" query parameter; results will be found in `.included`.", + "reporter": { + "title": "reporter", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"reporter\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -12395,21 +20523,21 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/reporters/5" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/reporters/5" } }, "readOnly": true } } }, - "playerAchievementSets": { - "title": "playerAchievementSets", - "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"playerAchievementSets\" to the \"include\" query parameter; results will be found in `.included`.", + "resolver": { + "title": "resolver", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"resolver\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -12418,69 +20546,40 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" + "example": "https://api.retroachievements.org/v2/resolvers/5" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" + "example": "https://api.retroachievements.org/v2/resolvers/5" } }, "readOnly": true } } - } - } - } - } - }, - "resources.systems.resource.fetch": { - "title": "Resource/System/Fetch", - "type": "object", - "required": ["type", "id", "attributes"], - "properties": { - "type": { - "title": "type", - "default": "systems", - "type": "string" - }, - "id": { - "type": "string", - "example": "1" - }, - "attributes": { - "type": "object", - "properties": { - "name": { - "title": "name", - "type": "string", - "example": "Genesis/Mega Drive" - }, - "nameFull": { - "title": "nameFull", - "type": "string", - "example": "Sega Genesis/Mega Drive" - }, - "nameShort": { - "title": "nameShort", - "type": "string", - "example": "MD" - }, - "manufacturer": { - "title": "manufacturer", - "type": "string", - "example": "Sega" - }, - "iconUrl": { - "title": "iconUrl", - "type": "string", - "readOnly": true, - "example": "https://retroachievements.org/assets/images/system/md.png" }, - "active": { - "title": "active", - "type": "boolean", - "example": true + "author": { + "title": "author", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"author\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/5" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/authors/5" + } + }, + "readOnly": true + } + } } } } @@ -12594,6 +20693,92 @@ } } }, + "resources.user-follows.resource.fetch": { + "title": "Resource/User-follow/Fetch", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "user-follows", + "type": "string" + }, + "id": { + "type": "string", + "example": "2" + }, + "attributes": { + "type": "object", + "properties": { + "followedAt": { + "title": "followedAt", + "type": "string", + "readOnly": true, + "example": "2026-07-07T21:05:33.000000Z" + }, + "userId": { + "title": "userId", + "type": "string", + "readOnly": true, + "example": 1 + }, + "displayName": { + "title": "displayName", + "type": "string", + "readOnly": true + }, + "avatarUrl": { + "title": "avatarUrl", + "type": "string", + "readOnly": true + }, + "points": { + "title": "points", + "type": "number", + "readOnly": true + }, + "pointsHardcore": { + "title": "pointsHardcore", + "type": "number", + "readOnly": true + }, + "isMutual": { + "title": "isMutual", + "type": "boolean", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "user": { + "title": "user", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"user\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/2" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/users/2" + } + }, + "readOnly": true + } + } + } + } + } + } + }, "resources.users.relationship.achievementSetClaims.fetch": { "title": "Resource/User/Relationship/AchievementSetClaims/Fetch", "type": "object", @@ -12628,6 +20813,40 @@ } } }, + "resources.users.relationship.followers.fetch": { + "title": "Resource/User/Relationship/Followers/Fetch", + "type": "object", + "required": ["type", "id"], + "properties": { + "type": { + "title": "type", + "default": "user-follows", + "type": "string" + }, + "id": { + "title": "id", + "type": "string", + "example": "2" + } + } + }, + "resources.users.relationship.following.fetch": { + "title": "Resource/User/Relationship/Following/Fetch", + "type": "object", + "required": ["type", "id"], + "properties": { + "type": { + "title": "type", + "default": "user-follows", + "type": "string" + }, + "id": { + "title": "id", + "type": "string", + "example": "2" + } + } + }, "resources.users.relationship.playerAchievementSets.fetch": { "title": "Resource/User/Relationship/PlayerAchievementSets/Fetch", "type": "object", @@ -12679,6 +20898,23 @@ } } }, + "resources.users.relationship.tickets.fetch": { + "title": "Resource/User/Relationship/Tickets/Fetch", + "type": "object", + "required": ["type", "id"], + "properties": { + "type": { + "title": "type", + "default": "tickets", + "type": "string" + }, + "id": { + "title": "id", + "type": "string", + "example": "5" + } + } + }, "resources.users.relationship.wallComments.fetch": { "title": "Resource/User/Relationship/WallComments/Fetch", "type": "object", @@ -12723,7 +20959,7 @@ "title": "avatarUrl", "type": "string", "readOnly": true, - "example": "https://retroachievements.org/media/UserPic/Root.png" + "example": "https://media.retroachievements.org/UserPic/Root.png" }, "motto": { "title": "motto", @@ -12741,13 +20977,13 @@ "title": "pointsHardcore", "type": "number", "readOnly": true, - "example": 7155 + "example": 7130 }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", "readOnly": true, - "example": 19749 + "example": 15687 }, "yieldUnlocks": { "title": "yieldUnlocks", @@ -12771,7 +21007,7 @@ "title": "lastActivityAt", "type": "string", "readOnly": true, - "example": "2026-04-18T03:30:13.000000Z" + "example": "2026-07-07T21:05:33.000000Z" }, "deletedAt": { "title": "deletedAt", @@ -12922,6 +21158,29 @@ } } }, + "tickets": { + "title": "tickets", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"tickets\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, "wallComments": { "title": "wallComments", "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"wallComments\" to the \"include\" query parameter; results will be found in `.included`.", @@ -12967,6 +21226,52 @@ "readOnly": true } } + }, + "followers": { + "title": "followers", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"followers\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "following": { + "title": "following", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"following\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } } } }