From 520cac386dfe20a967f57cc5e47d693868ad58f0 Mon Sep 17 00:00:00 2001 From: Chew Date: Tue, 3 Feb 2026 20:59:35 -0600 Subject: [PATCH 01/10] 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 02/10] 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 03/10] 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 04/10] 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 05/10] 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 06/10] 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 07/10] 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 08/10] 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 + } + } } } } From 27c1d08eadc569aea044dab71e11a5dcd060374d Mon Sep 17 00:00:00 2001 From: Chew Date: Thu, 6 Aug 2026 15:17:12 -0500 Subject: [PATCH 09/10] update spec --- docs/v2/retroachievements.json | 9559 ++++++++++++++++++++++---------- 1 file changed, 6774 insertions(+), 2785 deletions(-) diff --git a/docs/v2/retroachievements.json b/docs/v2/retroachievements.json index b1ed1b2..734d93d 100644 --- a/docs/v2/retroachievements.json +++ b/docs/v2/retroachievements.json @@ -197,6 +197,10 @@ "unlocksHardcore", "unlockPercentage", "unlockHardcorePercentage", + "medianTimeToUnlockSeconds", + "medianTimeToUnlockHardcoreSeconds", + "medianTimeToUnlockSamples", + "medianTimeToUnlockHardcoreSamples", "createdAt", "modifiedAt", "developer", @@ -227,6 +231,8 @@ "points", "pointsHardcore", "pointsWeighted", + "rankHardcore", + "rankCasual", "yieldUnlocks", "yieldPoints", "joinedAt", @@ -236,13 +242,16 @@ "isUserWallActive", "richPresence", "richPresenceUpdatedAt", + "lastGame", "visibleRole", "displayableRoles", "achievementSetClaims", + "leaderboardEntries", "playerAchievements", "playerAchievementSets", "playerGames", "tickets", + "userGameListEntries", "wallComments", "awards", "followers", @@ -268,6 +277,10 @@ "pointsWeighted", "achievementsPublished", "achievementsUnpublished", + "timesCompleted", + "timesMastered", + "medianTimeToCompleteSeconds", + "medianTimeToMasterSeconds", "badgeUrl", "achievementsFirstPublishedAt", "types", @@ -307,8 +320,8 @@ "pointsWeighted", "timesBeaten", "timesBeatenHardcore", - "medianTimeToBeatMinutes", - "medianTimeToBeatHardcoreMinutes", + "medianTimeToBeatSeconds", + "medianTimeToBeatHardcoreSeconds", "system", "achievementSets", "achievementSetClaims", @@ -393,7 +406,7 @@ "title": "avatarUrl", "type": "string", "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png" + "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" }, "motto": { "title": "motto", @@ -419,6 +432,16 @@ "readOnly": true, "example": 15687 }, + "rankHardcore": { + "title": "rankHardcore", + "type": "number", + "readOnly": true + }, + "rankCasual": { + "title": "rankCasual", + "type": "number", + "readOnly": true + }, "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", @@ -441,7 +464,7 @@ "title": "lastActivityAt", "type": "string", "readOnly": true, - "example": "2026-07-07T21:05:33.000000Z" + "example": "2026-08-06T03:46:59.000000Z" }, "deletedAt": { "title": "deletedAt", @@ -500,6 +523,29 @@ "relationships": { "type": "object", "properties": { + "lastGame": { + "title": "lastGame", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"lastGame\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "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`.", @@ -523,6 +569,29 @@ } } }, + "leaderboardEntries": { + "title": "leaderboardEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"leaderboardEntries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboard-entries/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`.", @@ -615,6 +684,29 @@ } } }, + "userGameListEntries": { + "title": "userGameListEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"userGameListEntries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/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`.", @@ -759,6 +851,29 @@ "readOnly": true, "example": 0 }, + "timesCompleted": { + "title": "timesCompleted", + "type": "number", + "readOnly": true, + "example": 0 + }, + "timesMastered": { + "title": "timesMastered", + "type": "number", + "readOnly": true, + "example": 2 + }, + "medianTimeToCompleteSeconds": { + "title": "medianTimeToCompleteSeconds", + "type": "number", + "readOnly": true + }, + "medianTimeToMasterSeconds": { + "title": "medianTimeToMasterSeconds", + "type": "number", + "readOnly": true, + "example": 0 + }, "badgeUrl": { "title": "badgeUrl", "type": "string", @@ -1025,12 +1140,12 @@ "type": "number", "example": 1 }, - "medianTimeToBeatMinutes": { - "title": "medianTimeToBeatMinutes", + "medianTimeToBeatSeconds": { + "title": "medianTimeToBeatSeconds", "type": "number" }, - "medianTimeToBeatHardcoreMinutes": { - "title": "medianTimeToBeatHardcoreMinutes", + "medianTimeToBeatHardcoreSeconds": { + "title": "medianTimeToBeatHardcoreSeconds", "type": "number", "example": 5153 } @@ -1587,7 +1702,7 @@ "title": "avatarUrl", "type": "string", "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png" + "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" }, "motto": { "title": "motto", @@ -1613,6 +1728,16 @@ "readOnly": true, "example": 15687 }, + "rankHardcore": { + "title": "rankHardcore", + "type": "number", + "readOnly": true + }, + "rankCasual": { + "title": "rankCasual", + "type": "number", + "readOnly": true + }, "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", @@ -1635,7 +1760,7 @@ "title": "lastActivityAt", "type": "string", "readOnly": true, - "example": "2026-07-07T21:05:33.000000Z" + "example": "2026-08-06T03:46:59.000000Z" }, "deletedAt": { "title": "deletedAt", @@ -1694,6 +1819,29 @@ "relationships": { "type": "object", "properties": { + "lastGame": { + "title": "lastGame", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"lastGame\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "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`.", @@ -1717,6 +1865,29 @@ } } }, + "leaderboardEntries": { + "title": "leaderboardEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"leaderboardEntries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboard-entries/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`.", @@ -1809,6 +1980,29 @@ } } }, + "userGameListEntries": { + "title": "userGameListEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"userGameListEntries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/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`.", @@ -1953,6 +2147,29 @@ "readOnly": true, "example": 0 }, + "timesCompleted": { + "title": "timesCompleted", + "type": "number", + "readOnly": true, + "example": 0 + }, + "timesMastered": { + "title": "timesMastered", + "type": "number", + "readOnly": true, + "example": 2 + }, + "medianTimeToCompleteSeconds": { + "title": "medianTimeToCompleteSeconds", + "type": "number", + "readOnly": true + }, + "medianTimeToMasterSeconds": { + "title": "medianTimeToMasterSeconds", + "type": "number", + "readOnly": true, + "example": 0 + }, "badgeUrl": { "title": "badgeUrl", "type": "string", @@ -2219,12 +2436,12 @@ "type": "number", "example": 1 }, - "medianTimeToBeatMinutes": { - "title": "medianTimeToBeatMinutes", + "medianTimeToBeatSeconds": { + "title": "medianTimeToBeatSeconds", "type": "number" }, - "medianTimeToBeatHardcoreMinutes": { - "title": "medianTimeToBeatHardcoreMinutes", + "medianTimeToBeatHardcoreSeconds": { + "title": "medianTimeToBeatHardcoreSeconds", "type": "number", "example": 5153 } @@ -2772,76 +2989,6 @@ } } }, - "/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" - } - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - }, "/achievements/{achievement}/player-achievements": { "get": { "tags": ["Achievements"], @@ -2912,12 +3059,12 @@ } } }, - "/achievements/{achievement}/relationships/player-achievements": { + "/achievements/{achievement}/tickets": { "get": { "tags": ["Achievements"], - "summary": "Show playerAchievements relation", + "summary": "Show tickets", "description": "", - "operationId": "achievements.playerAchievements.show", + "operationId": "achievements.tickets", "parameters": [ { "name": "achievement", @@ -2942,7 +3089,7 @@ ], "responses": { "200": { - "description": "Show achievements", + "description": "ShowRelated achievements", "content": { "application/vnd.api+json": { "schema": { @@ -2962,7 +3109,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.achievements.relationship.playerAchievements.fetch" + "$ref": "#/components/schemas/resources.tickets.resource.fetch" } } } @@ -2982,15 +3129,15 @@ } } }, - "/achievements/{achievement}/tickets": { + "/achievement-sets/{achievement_set}": { "get": { - "tags": ["Achievements"], - "summary": "Show tickets", + "tags": ["Achievement-sets"], + "summary": "Show one achievement-set", "description": "", - "operationId": "achievements.tickets", + "operationId": "achievement-sets.show", "parameters": [ { - "name": "achievement", + "name": "achievement_set", "in": "path", "required": true, "allowEmptyValue": false, @@ -3012,7 +3159,7 @@ ], "responses": { "200": { - "description": "ShowRelated achievements", + "description": "Show achievement-sets", "content": { "application/vnd.api+json": { "schema": { @@ -3030,149 +3177,9 @@ } }, "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" - } - } - } - }, - "/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": { + "$ref": "#/components/schemas/resources.achievement-sets.resource.fetch" + }, + "included": { "type": "array", "items": { "anyOf": [ @@ -3276,12 +3283,12 @@ "type": "number", "example": 1 }, - "medianTimeToBeatMinutes": { - "title": "medianTimeToBeatMinutes", + "medianTimeToBeatSeconds": { + "title": "medianTimeToBeatSeconds", "type": "number" }, - "medianTimeToBeatHardcoreMinutes": { - "title": "medianTimeToBeatHardcoreMinutes", + "medianTimeToBeatHardcoreSeconds": { + "title": "medianTimeToBeatHardcoreSeconds", "type": "number", "example": 5153 } @@ -3626,76 +3633,6 @@ } } }, - "/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"], @@ -3942,6 +3879,8 @@ "points", "pointsHardcore", "pointsWeighted", + "rankHardcore", + "rankCasual", "yieldUnlocks", "yieldPoints", "joinedAt", @@ -3951,13 +3890,16 @@ "isUserWallActive", "richPresence", "richPresenceUpdatedAt", + "lastGame", "visibleRole", "displayableRoles", "achievementSetClaims", + "leaderboardEntries", "playerAchievements", "playerAchievementSets", "playerGames", "tickets", + "userGameListEntries", "wallComments", "awards", "followers", @@ -3994,8 +3936,8 @@ "pointsWeighted", "timesBeaten", "timesBeatenHardcore", - "medianTimeToBeatMinutes", - "medianTimeToBeatHardcoreMinutes", + "medianTimeToBeatSeconds", + "medianTimeToBeatHardcoreSeconds", "system", "achievementSets", "achievementSetClaims", @@ -4080,7 +4022,7 @@ "title": "avatarUrl", "type": "string", "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png" + "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" }, "motto": { "title": "motto", @@ -4106,6 +4048,16 @@ "readOnly": true, "example": 15687 }, + "rankHardcore": { + "title": "rankHardcore", + "type": "number", + "readOnly": true + }, + "rankCasual": { + "title": "rankCasual", + "type": "number", + "readOnly": true + }, "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", @@ -4128,7 +4080,7 @@ "title": "lastActivityAt", "type": "string", "readOnly": true, - "example": "2026-07-07T21:05:33.000000Z" + "example": "2026-08-06T03:46:59.000000Z" }, "deletedAt": { "title": "deletedAt", @@ -4187,6 +4139,29 @@ "relationships": { "type": "object", "properties": { + "lastGame": { + "title": "lastGame", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"lastGame\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "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`.", @@ -4210,6 +4185,29 @@ } } }, + "leaderboardEntries": { + "title": "leaderboardEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"leaderboardEntries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboard-entries/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`.", @@ -4302,6 +4300,29 @@ } } }, + "userGameListEntries": { + "title": "userGameListEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"userGameListEntries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/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`.", @@ -4498,12 +4519,12 @@ "type": "number", "example": 1 }, - "medianTimeToBeatMinutes": { - "title": "medianTimeToBeatMinutes", + "medianTimeToBeatSeconds": { + "title": "medianTimeToBeatSeconds", "type": "number" }, - "medianTimeToBeatHardcoreMinutes": { - "title": "medianTimeToBeatHardcoreMinutes", + "medianTimeToBeatHardcoreSeconds": { + "title": "medianTimeToBeatHardcoreSeconds", "type": "number", "example": 5153 } @@ -4822,6 +4843,10 @@ "pointsWeighted", "achievementsPublished", "achievementsUnpublished", + "timesCompleted", + "timesMastered", + "medianTimeToCompleteSeconds", + "medianTimeToMasterSeconds", "badgeUrl", "achievementsFirstPublishedAt", "types", @@ -4927,14 +4952,37 @@ "readOnly": true, "example": 0 }, - "badgeUrl": { - "title": "badgeUrl", - "type": "string", - "readOnly": true - }, - "achievementsFirstPublishedAt": { - "title": "achievementsFirstPublishedAt", - "type": "string", + "timesCompleted": { + "title": "timesCompleted", + "type": "number", + "readOnly": true, + "example": 0 + }, + "timesMastered": { + "title": "timesMastered", + "type": "number", + "readOnly": true, + "example": 2 + }, + "medianTimeToCompleteSeconds": { + "title": "medianTimeToCompleteSeconds", + "type": "number", + "readOnly": true + }, + "medianTimeToMasterSeconds": { + "title": "medianTimeToMasterSeconds", + "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" }, @@ -5027,12 +5075,12 @@ } } }, - "/events": { + "/event-achievements": { "get": { - "tags": ["Events"], - "summary": "Get all events", + "tags": ["Event-achievements"], + "summary": "Get all event-achievements", "description": "", - "operationId": "events.index", + "operationId": "event-achievements.index", "parameters": [ { "name": "page[size]", @@ -5067,23 +5115,19 @@ "enum": [ "id", "-id", - "title", - "-title", - "sortTitle", - "-sortTitle", "activeFrom", - "-activeFrom" + "-activeFrom", + "activeUntil", + "-activeUntil" ], "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" + "-activeFrom": "By activeFrom, descending", + "activeUntil": "By activeUntil, ascending", + "-activeUntil": "By activeUntil, descending" } } } @@ -5107,11 +5151,69 @@ "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": { + "type": "string" + } + }, + { + "name": "filter[eventId]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter[evergreen]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "name": "fields[event-achievements]", + "in": "query", + "description": "Only return these fields for the \"event-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": [ + "activeFrom", + "activeUntil", + "decorator", + "event", + "sourceAchievement", + "eventAchievement" + ], + "type": "string" + } + } + }, { "name": "fields[events]", "in": "query", @@ -5131,16 +5233,17 @@ "achievementsPublished", "activeFrom", "activeThrough", - "awards" + "awards", + "eventAchievements" ], "type": "string" } } }, { - "name": "fields[event-awards]", + "name": "fields[achievements]", "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.", + "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, @@ -5148,11 +5251,31 @@ "type": "array", "items": { "enum": [ - "tierIndex", - "label", - "pointsRequired", + "title", + "description", + "points", + "pointsWeighted", "badgeUrl", - "event" + "badgeLockedUrl", + "type", + "state", + "orderColumn", + "unlocksTotal", + "unlocksHardcore", + "unlockPercentage", + "unlockHardcorePercentage", + "medianTimeToUnlockSeconds", + "medianTimeToUnlockHardcoreSeconds", + "medianTimeToUnlockSamples", + "medianTimeToUnlockHardcoreSamples", + "createdAt", + "modifiedAt", + "developer", + "achievementSet", + "comments", + "games", + "playerAchievements", + "tickets" ], "type": "string" } @@ -5168,7 +5291,7 @@ "schema": { "type": "array", "items": { - "enum": ["awards"], + "enum": ["event", "sourceAchievement", "eventAchievement"], "type": "string" } } @@ -5176,7 +5299,7 @@ ], "responses": { "200": { - "description": "Index events", + "description": "Index event-achievements", "content": { "application/vnd.api+json": { "schema": { @@ -5196,7 +5319,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.events.resource.fetch" + "$ref": "#/components/schemas/resources.event-achievements.resource.fetch" } }, "included": { @@ -5204,55 +5327,75 @@ "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.", + "title": "Resource/Event/Fetch", + "description": "May not be present unless \"event\" is in the \"include\" header. See `.data[].relationships.event.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": "events", "type": "string" }, "id": { "type": "string", - "example": "1" + "example": "3" }, "attributes": { "type": "object", "properties": { - "tierIndex": { - "title": "tierIndex", - "type": "number", + "title": { + "title": "title", + "type": "string", + "readOnly": true + }, + "sortTitle": { + "title": "sortTitle", + "type": "string", + "readOnly": true + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", "readOnly": true, - "example": 1 + "example": "https://media.retroachievements.org/Images/000007.png" }, - "label": { - "title": "label", + "state": { + "title": "state", "type": "string", "readOnly": true, - "example": "True" + "example": "concluded" }, - "pointsRequired": { - "title": "pointsRequired", + "playersTotal": { + "title": "playersTotal", + "type": "number", + "readOnly": true + }, + "achievementsPublished": { + "title": "achievementsPublished", "type": "number", + "readOnly": true + }, + "activeFrom": { + "title": "activeFrom", + "type": "string", "readOnly": true, - "example": 1 + "example": "2026-02-07T00:00:00.000000Z" }, - "badgeUrl": { - "title": "badgeUrl", + "activeThrough": { + "title": "activeThrough", "type": "string", "readOnly": true, - "example": "https://media.retroachievements.org/Images/000008.png" + "example": "2026-02-28T00:00:00.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`.", + "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": { @@ -5261,12 +5404,35 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "example": "https://api.retroachievements.org/v2/awards/3" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "example": "https://api.retroachievements.org/v2/awards/3" + } + }, + "readOnly": true + } + } + }, + "eventAchievements": { + "title": "eventAchievements", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"eventAchievements\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/event-achievements/3" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/event-achievements/3" } }, "readOnly": true @@ -5276,81 +5442,16 @@ } } } - } - ] - } - } - } - } - } - } - }, - "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" - }, - "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.", + "title": "Resource/SourceAchievement/Fetch", + "description": "May not be present unless \"sourceAchievement\" is in the \"include\" header. See `.data[].relationships.sourceAchievement.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": "achievements", "type": "string" }, "id": { @@ -5360,20 +5461,26 @@ "attributes": { "type": "object", "properties": { - "tierIndex": { - "title": "tierIndex", - "type": "number", + "title": { + "title": "title", + "type": "string", "readOnly": true, - "example": 1 + "example": "Soluta Quasi!" }, - "label": { - "title": "label", + "description": { + "title": "description", "type": "string", "readOnly": true, - "example": "True" + "example": "Nisi et sit labore reprehenderit aliquam aspernatur explicabo. True." }, - "pointsRequired": { - "title": "pointsRequired", + "points": { + "title": "points", + "type": "number", + "readOnly": true, + "example": 1 + }, + "pointsWeighted": { + "title": "pointsWeighted", "type": "number", "readOnly": true, "example": 1 @@ -5382,16 +5489,94 @@ "title": "badgeUrl", "type": "string", "readOnly": true, - "example": "https://media.retroachievements.org/Images/000008.png" + "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 + }, + "medianTimeToUnlockSeconds": { + "title": "medianTimeToUnlockSeconds", + "type": "number", + "readOnly": true + }, + "medianTimeToUnlockHardcoreSeconds": { + "title": "medianTimeToUnlockHardcoreSeconds", + "type": "number", + "readOnly": true + }, + "medianTimeToUnlockSamples": { + "title": "medianTimeToUnlockSamples", + "type": "number", + "readOnly": true + }, + "medianTimeToUnlockHardcoreSamples": { + "title": "medianTimeToUnlockHardcoreSamples", + "type": "number", + "readOnly": true + }, + "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": { - "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`.", + "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": { @@ -5400,12 +5585,127 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "example": "https://api.retroachievements.org/v2/developers/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "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 @@ -5415,42 +5715,1767 @@ } } } - } - ] - } - } - } - } - } - } - }, - "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" + }, + { + "title": "Resource/EventAchievement/Fetch", + "description": "May not be present unless \"eventAchievement\" is in the \"include\" header. See `.data[].relationships.eventAchievement.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 + }, + "medianTimeToUnlockSeconds": { + "title": "medianTimeToUnlockSeconds", + "type": "number", + "readOnly": true + }, + "medianTimeToUnlockHardcoreSeconds": { + "title": "medianTimeToUnlockHardcoreSeconds", + "type": "number", + "readOnly": true + }, + "medianTimeToUnlockSamples": { + "title": "medianTimeToUnlockSamples", + "type": "number", + "readOnly": true + }, + "medianTimeToUnlockHardcoreSamples": { + "title": "medianTimeToUnlockHardcoreSamples", + "type": "number", + "readOnly": true + }, + "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 + } + } + } + } + } + } + } + ] + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/event-achievements/{event_achievement}": { + "get": { + "tags": ["Event-achievements"], + "summary": "Show one event-achievement", + "description": "", + "operationId": "event-achievements.show", + "parameters": [ + { + "name": "event_achievement", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "1": { + "value": "1" + }, + "2": { + "value": "2" + }, + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "Show event-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.event-achievements.resource.fetch" + }, + "included": { + "type": "array", + "items": { + "anyOf": [ + { + "title": "Resource/Event/Fetch", + "description": "May not be present unless \"event\" is in the \"include\" header. See `.data[].relationships.event.data` for the lists of IDs which have been included here.", + "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://media.retroachievements.org/Images/000007.png" + }, + "state": { + "title": "state", + "type": "string", + "readOnly": true, + "example": "concluded" + }, + "playersTotal": { + "title": "playersTotal", + "type": "number", + "readOnly": true + }, + "achievementsPublished": { + "title": "achievementsPublished", + "type": "number", + "readOnly": true + }, + "activeFrom": { + "title": "activeFrom", + "type": "string", + "readOnly": true, + "example": "2026-02-07T00:00:00.000000Z" + }, + "activeThrough": { + "title": "activeThrough", + "type": "string", + "readOnly": true, + "example": "2026-02-28T00:00:00.000000Z" + } + } + }, + "relationships": { + "type": "object", + "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": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/3" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/3" + } + }, + "readOnly": true + } + } + }, + "eventAchievements": { + "title": "eventAchievements", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"eventAchievements\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/event-achievements/3" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/event-achievements/3" + } + }, + "readOnly": true + } + } + } + } + } + } + }, + { + "title": "Resource/SourceAchievement/Fetch", + "description": "May not be present unless \"sourceAchievement\" is in the \"include\" header. See `.data[].relationships.sourceAchievement.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 + }, + "medianTimeToUnlockSeconds": { + "title": "medianTimeToUnlockSeconds", + "type": "number", + "readOnly": true + }, + "medianTimeToUnlockHardcoreSeconds": { + "title": "medianTimeToUnlockHardcoreSeconds", + "type": "number", + "readOnly": true + }, + "medianTimeToUnlockSamples": { + "title": "medianTimeToUnlockSamples", + "type": "number", + "readOnly": true + }, + "medianTimeToUnlockHardcoreSamples": { + "title": "medianTimeToUnlockHardcoreSamples", + "type": "number", + "readOnly": true + }, + "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/EventAchievement/Fetch", + "description": "May not be present unless \"eventAchievement\" is in the \"include\" header. See `.data[].relationships.eventAchievement.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 + }, + "medianTimeToUnlockSeconds": { + "title": "medianTimeToUnlockSeconds", + "type": "number", + "readOnly": true + }, + "medianTimeToUnlockHardcoreSeconds": { + "title": "medianTimeToUnlockHardcoreSeconds", + "type": "number", + "readOnly": true + }, + "medianTimeToUnlockSamples": { + "title": "medianTimeToUnlockSamples", + "type": "number", + "readOnly": true + }, + "medianTimeToUnlockHardcoreSamples": { + "title": "medianTimeToUnlockHardcoreSamples", + "type": "number", + "readOnly": true + }, + "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 + } + } + } + } + } + } + } + ] + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/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, + "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", + "eventAchievements" + ], + "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": "fields[event-achievements]", + "in": "query", + "description": "Only return these fields for the \"event-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": [ + "activeFrom", + "activeUntil", + "decorator", + "event", + "sourceAchievement", + "eventAchievement" + ], + "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", "eventAchievements"], + "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 + } + } + } + } + } + } + }, + { + "title": "Resource/EventAchievements/Fetch", + "description": "May not be present unless \"eventAchievements\" is in the \"include\" header. See `.data[].relationships.eventAchievements.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "event-achievements", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "activeFrom": { + "title": "activeFrom", + "type": "string", + "readOnly": true + }, + "activeUntil": { + "title": "activeUntil", + "type": "string", + "readOnly": true + }, + "decorator": { + "title": "decorator", + "type": "string", + "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 + } + } + }, + "sourceAchievement": { + "title": "sourceAchievement", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"sourceAchievement\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/source-achievements/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/source-achievements/1" + } + }, + "readOnly": true + } + } + }, + "eventAchievement": { + "title": "eventAchievement", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"eventAchievement\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/event-achievements/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/event-achievements/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": [ + { + "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" + }, + "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 + } + } + } + } + } + } + }, + { + "title": "Resource/EventAchievements/Fetch", + "description": "May not be present unless \"eventAchievements\" is in the \"include\" header. See `.data[].relationships.eventAchievements.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "event-achievements", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "activeFrom": { + "title": "activeFrom", + "type": "string", + "readOnly": true + }, + "activeUntil": { + "title": "activeUntil", + "type": "string", + "readOnly": true + }, + "decorator": { + "title": "decorator", + "type": "string", + "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 + } + } + }, + "sourceAchievement": { + "title": "sourceAchievement", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"sourceAchievement\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/source-achievements/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/source-achievements/1" + } + }, + "readOnly": true + } + } + }, + "eventAchievement": { + "title": "eventAchievement", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"eventAchievement\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/event-achievements/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/event-achievements/1" + } + }, + "readOnly": true + } + } + } + } + } + } + } + ] + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/events/{event}/event-achievements": { + "get": { + "tags": ["Events"], + "summary": "Show eventAchievements", + "description": "", + "operationId": "events.eventAchievements", + "parameters": [ + { + "name": "event", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + }, + "examples": { + "3": { + "value": "3" + } + } + } + ], + "responses": { + "200": { + "description": "ShowRelated 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.event-achievements.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" } }, { @@ -5590,8 +7615,8 @@ "pointsWeighted", "timesBeaten", "timesBeatenHardcore", - "medianTimeToBeatMinutes", - "medianTimeToBeatHardcoreMinutes", + "medianTimeToBeatSeconds", + "medianTimeToBeatHardcoreSeconds", "system", "achievementSets", "achievementSetClaims", @@ -5641,6 +7666,10 @@ "pointsWeighted", "achievementsPublished", "achievementsUnpublished", + "timesCompleted", + "timesMastered", + "medianTimeToCompleteSeconds", + "medianTimeToMasterSeconds", "badgeUrl", "achievementsFirstPublishedAt", "types", @@ -5763,7 +7792,7 @@ "title": "iconUrl", "type": "string", "readOnly": true, - "example": "https://static.retroachievements.org/assets/images/system/md.png" + "example": "https://raweb.test/assets/images/system/md.png" }, "active": { "title": "active", @@ -5813,11 +7842,34 @@ "achievementsPublished": { "title": "achievementsPublished", "type": "number", - "readOnly": true, - "example": 20 + "readOnly": true, + "example": 20 + }, + "achievementsUnpublished": { + "title": "achievementsUnpublished", + "type": "number", + "readOnly": true, + "example": 0 + }, + "timesCompleted": { + "title": "timesCompleted", + "type": "number", + "readOnly": true, + "example": 0 + }, + "timesMastered": { + "title": "timesMastered", + "type": "number", + "readOnly": true, + "example": 2 + }, + "medianTimeToCompleteSeconds": { + "title": "medianTimeToCompleteSeconds", + "type": "number", + "readOnly": true }, - "achievementsUnpublished": { - "title": "achievementsUnpublished", + "medianTimeToMasterSeconds": { + "title": "medianTimeToMasterSeconds", "type": "number", "readOnly": true, "example": 0 @@ -5975,7 +8027,7 @@ "title": "minutesLeft", "type": "number", "readOnly": true, - "example": 298961 + "example": 342109 }, "userId": { "title": "userId", @@ -6549,7 +8601,7 @@ "title": "iconUrl", "type": "string", "readOnly": true, - "example": "https://static.retroachievements.org/assets/images/system/md.png" + "example": "https://raweb.test/assets/images/system/md.png" }, "active": { "title": "active", @@ -6608,6 +8660,29 @@ "readOnly": true, "example": 0 }, + "timesCompleted": { + "title": "timesCompleted", + "type": "number", + "readOnly": true, + "example": 0 + }, + "timesMastered": { + "title": "timesMastered", + "type": "number", + "readOnly": true, + "example": 2 + }, + "medianTimeToCompleteSeconds": { + "title": "medianTimeToCompleteSeconds", + "type": "number", + "readOnly": true + }, + "medianTimeToMasterSeconds": { + "title": "medianTimeToMasterSeconds", + "type": "number", + "readOnly": true, + "example": 0 + }, "badgeUrl": { "title": "badgeUrl", "type": "string", @@ -6761,7 +8836,7 @@ "title": "minutesLeft", "type": "number", "readOnly": true, - "example": 298961 + "example": 342109 }, "userId": { "title": "userId", @@ -7192,247 +9267,37 @@ } }, "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" + } + } + }, + "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 + } + } + } + } + } + } + } + ] } } } @@ -7452,12 +9317,12 @@ } } }, - "/games/{game}/relationships/comments": { + "/games/{game}/achievement-set-claims": { "get": { "tags": ["Games"], - "summary": "Show comments relation", + "summary": "Show achievementSetClaims", "description": "", - "operationId": "games.comments.show", + "operationId": "games.achievementSetClaims", "parameters": [ { "name": "game", @@ -7482,7 +9347,7 @@ ], "responses": { "200": { - "description": "Show games", + "description": "ShowRelated games", "content": { "application/vnd.api+json": { "schema": { @@ -7502,7 +9367,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.games.relationship.comments.fetch" + "$ref": "#/components/schemas/resources.achievement-set-claims.resource.fetch" } } } @@ -7522,12 +9387,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", @@ -7572,7 +9437,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.game-hashes.resource.fetch" + "$ref": "#/components/schemas/resources.comments.resource.fetch" } } } @@ -7592,12 +9457,12 @@ } } }, - "/games/{game}/relationships/hashes": { + "/games/{game}/hashes": { "get": { "tags": ["Games"], - "summary": "Show hashes relation", + "summary": "Show hashes", "description": "", - "operationId": "games.hashes.show", + "operationId": "games.hashes", "parameters": [ { "name": "game", @@ -7622,7 +9487,7 @@ ], "responses": { "200": { - "description": "Show games", + "description": "ShowRelated games", "content": { "application/vnd.api+json": { "schema": { @@ -7642,7 +9507,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.games.relationship.hashes.fetch" + "$ref": "#/components/schemas/resources.game-hashes.resource.fetch" } } } @@ -7732,76 +9597,6 @@ } } }, - "/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"], @@ -8096,12 +9891,12 @@ "type": "number", "example": 1 }, - "medianTimeToBeatMinutes": { - "title": "medianTimeToBeatMinutes", + "medianTimeToBeatSeconds": { + "title": "medianTimeToBeatSeconds", "type": "number" }, - "medianTimeToBeatHardcoreMinutes": { - "title": "medianTimeToBeatHardcoreMinutes", + "medianTimeToBeatHardcoreSeconds": { + "title": "medianTimeToBeatHardcoreSeconds", "type": "number", "example": 5153 } @@ -8423,12 +10218,12 @@ "type": "number", "example": 1 }, - "medianTimeToBeatMinutes": { - "title": "medianTimeToBeatMinutes", + "medianTimeToBeatSeconds": { + "title": "medianTimeToBeatSeconds", "type": "number" }, - "medianTimeToBeatHardcoreMinutes": { - "title": "medianTimeToBeatHardcoreMinutes", + "medianTimeToBeatHardcoreSeconds": { + "title": "medianTimeToBeatHardcoreSeconds", "type": "number", "example": 5153 } @@ -8669,76 +10464,6 @@ } } }, - "/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"], @@ -8809,76 +10534,6 @@ } } }, - "/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"], @@ -9054,8 +10709,8 @@ "pointsWeighted", "timesBeaten", "timesBeatenHardcore", - "medianTimeToBeatMinutes", - "medianTimeToBeatHardcoreMinutes", + "medianTimeToBeatSeconds", + "medianTimeToBeatHardcoreSeconds", "system", "achievementSets", "achievementSetClaims", @@ -9084,6 +10739,8 @@ "points", "pointsHardcore", "pointsWeighted", + "rankHardcore", + "rankCasual", "yieldUnlocks", "yieldPoints", "joinedAt", @@ -9093,13 +10750,16 @@ "isUserWallActive", "richPresence", "richPresenceUpdatedAt", + "lastGame", "visibleRole", "displayableRoles", "achievementSetClaims", + "leaderboardEntries", "playerAchievements", "playerAchievementSets", "playerGames", "tickets", + "userGameListEntries", "wallComments", "awards", "followers", @@ -9276,12 +10936,12 @@ "type": "number", "example": 1 }, - "medianTimeToBeatMinutes": { - "title": "medianTimeToBeatMinutes", + "medianTimeToBeatSeconds": { + "title": "medianTimeToBeatSeconds", "type": "number" }, - "medianTimeToBeatHardcoreMinutes": { - "title": "medianTimeToBeatHardcoreMinutes", + "medianTimeToBeatHardcoreSeconds": { + "title": "medianTimeToBeatHardcoreSeconds", "type": "number", "example": 5153 } @@ -9460,7 +11120,7 @@ "title": "avatarUrl", "type": "string", "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png" + "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" }, "motto": { "title": "motto", @@ -9483,8 +11143,18 @@ "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 15687 + "readOnly": true, + "example": 15687 + }, + "rankHardcore": { + "title": "rankHardcore", + "type": "number", + "readOnly": true + }, + "rankCasual": { + "title": "rankCasual", + "type": "number", + "readOnly": true }, "yieldUnlocks": { "title": "yieldUnlocks", @@ -9508,7 +11178,7 @@ "title": "lastActivityAt", "type": "string", "readOnly": true, - "example": "2026-07-07T21:05:33.000000Z" + "example": "2026-08-06T03:46:59.000000Z" }, "deletedAt": { "title": "deletedAt", @@ -9567,6 +11237,29 @@ "relationships": { "type": "object", "properties": { + "lastGame": { + "title": "lastGame", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"lastGame\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "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`.", @@ -9590,6 +11283,29 @@ } } }, + "leaderboardEntries": { + "title": "leaderboardEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"leaderboardEntries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboard-entries/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`.", @@ -9682,6 +11398,29 @@ } } }, + "userGameListEntries": { + "title": "userGameListEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"userGameListEntries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/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`.", @@ -10043,12 +11782,12 @@ "type": "number", "example": 1 }, - "medianTimeToBeatMinutes": { - "title": "medianTimeToBeatMinutes", + "medianTimeToBeatSeconds": { + "title": "medianTimeToBeatSeconds", "type": "number" }, - "medianTimeToBeatHardcoreMinutes": { - "title": "medianTimeToBeatHardcoreMinutes", + "medianTimeToBeatHardcoreSeconds": { + "title": "medianTimeToBeatHardcoreSeconds", "type": "number", "example": 5153 } @@ -10227,7 +11966,7 @@ "title": "avatarUrl", "type": "string", "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png" + "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" }, "motto": { "title": "motto", @@ -10253,6 +11992,16 @@ "readOnly": true, "example": 15687 }, + "rankHardcore": { + "title": "rankHardcore", + "type": "number", + "readOnly": true + }, + "rankCasual": { + "title": "rankCasual", + "type": "number", + "readOnly": true + }, "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", @@ -10275,7 +12024,7 @@ "title": "lastActivityAt", "type": "string", "readOnly": true, - "example": "2026-07-07T21:05:33.000000Z" + "example": "2026-08-06T03:46:59.000000Z" }, "deletedAt": { "title": "deletedAt", @@ -10334,6 +12083,29 @@ "relationships": { "type": "object", "properties": { + "lastGame": { + "title": "lastGame", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"lastGame\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "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`.", @@ -10357,6 +12129,29 @@ } } }, + "leaderboardEntries": { + "title": "leaderboardEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"leaderboardEntries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboard-entries/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`.", @@ -10449,6 +12244,29 @@ } } }, + "userGameListEntries": { + "title": "userGameListEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"userGameListEntries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/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`.", @@ -10729,76 +12547,6 @@ } } }, - "/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"], @@ -11269,6 +13017,10 @@ "unlocksHardcore", "unlockPercentage", "unlockHardcorePercentage", + "medianTimeToUnlockSeconds", + "medianTimeToUnlockHardcoreSeconds", + "medianTimeToUnlockSamples", + "medianTimeToUnlockHardcoreSamples", "createdAt", "modifiedAt", "developer", @@ -11326,6 +13078,8 @@ "points", "pointsHardcore", "pointsWeighted", + "rankHardcore", + "rankCasual", "yieldUnlocks", "yieldPoints", "joinedAt", @@ -11335,13 +13089,16 @@ "isUserWallActive", "richPresence", "richPresenceUpdatedAt", + "lastGame", "visibleRole", "displayableRoles", "achievementSetClaims", + "leaderboardEntries", "playerAchievements", "playerAchievementSets", "playerGames", "tickets", + "userGameListEntries", "wallComments", "awards", "followers", @@ -11371,8 +13128,11 @@ "leaderboard.developer", "leaderboard.entries", "reporter", + "reporter.lastGame", "resolver", - "author" + "resolver.lastGame", + "author", + "author.lastGame" ], "type": "string" } @@ -11502,6 +13262,26 @@ "readOnly": true, "example": 0.987804878 }, + "medianTimeToUnlockSeconds": { + "title": "medianTimeToUnlockSeconds", + "type": "number", + "readOnly": true + }, + "medianTimeToUnlockHardcoreSeconds": { + "title": "medianTimeToUnlockHardcoreSeconds", + "type": "number", + "readOnly": true + }, + "medianTimeToUnlockSamples": { + "title": "medianTimeToUnlockSamples", + "type": "number", + "readOnly": true + }, + "medianTimeToUnlockHardcoreSamples": { + "title": "medianTimeToUnlockHardcoreSamples", + "type": "number", + "readOnly": true + }, "createdAt": { "title": "createdAt", "type": "string", @@ -11833,7 +13613,7 @@ "title": "avatarUrl", "type": "string", "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png" + "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" }, "motto": { "title": "motto", @@ -11859,6 +13639,16 @@ "readOnly": true, "example": 15687 }, + "rankHardcore": { + "title": "rankHardcore", + "type": "number", + "readOnly": true + }, + "rankCasual": { + "title": "rankCasual", + "type": "number", + "readOnly": true + }, "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", @@ -11881,7 +13671,7 @@ "title": "lastActivityAt", "type": "string", "readOnly": true, - "example": "2026-07-07T21:05:33.000000Z" + "example": "2026-08-06T03:46:59.000000Z" }, "deletedAt": { "title": "deletedAt", @@ -11930,19 +13720,65 @@ } } }, - "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`.", + "displayableRoles": { + "title": "displayableRoles", + "type": "array", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "lastGame": { + "title": "lastGame", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"lastGame\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "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/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "readOnly": true + } + } + }, + "leaderboardEntries": { + "title": "leaderboardEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"leaderboardEntries\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -11951,12 +13787,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" } }, "readOnly": true @@ -12055,6 +13891,29 @@ } } }, + "userGameListEntries": { + "title": "userGameListEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"userGameListEntries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/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`.", @@ -12179,7 +14038,7 @@ "title": "avatarUrl", "type": "string", "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png" + "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" }, "motto": { "title": "motto", @@ -12205,6 +14064,16 @@ "readOnly": true, "example": 15687 }, + "rankHardcore": { + "title": "rankHardcore", + "type": "number", + "readOnly": true + }, + "rankCasual": { + "title": "rankCasual", + "type": "number", + "readOnly": true + }, "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", @@ -12227,7 +14096,7 @@ "title": "lastActivityAt", "type": "string", "readOnly": true, - "example": "2026-07-07T21:05:33.000000Z" + "example": "2026-08-06T03:46:59.000000Z" }, "deletedAt": { "title": "deletedAt", @@ -12286,6 +14155,29 @@ "relationships": { "type": "object", "properties": { + "lastGame": { + "title": "lastGame", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"lastGame\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "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`.", @@ -12309,6 +14201,29 @@ } } }, + "leaderboardEntries": { + "title": "leaderboardEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"leaderboardEntries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboard-entries/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`.", @@ -12401,6 +14316,29 @@ } } }, + "userGameListEntries": { + "title": "userGameListEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"userGameListEntries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/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`.", @@ -12525,7 +14463,7 @@ "title": "avatarUrl", "type": "string", "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png" + "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" }, "motto": { "title": "motto", @@ -12551,6 +14489,16 @@ "readOnly": true, "example": 15687 }, + "rankHardcore": { + "title": "rankHardcore", + "type": "number", + "readOnly": true + }, + "rankCasual": { + "title": "rankCasual", + "type": "number", + "readOnly": true + }, "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", @@ -12573,7 +14521,7 @@ "title": "lastActivityAt", "type": "string", "readOnly": true, - "example": "2026-07-07T21:05:33.000000Z" + "example": "2026-08-06T03:46:59.000000Z" }, "deletedAt": { "title": "deletedAt", @@ -12632,6 +14580,29 @@ "relationships": { "type": "object", "properties": { + "lastGame": { + "title": "lastGame", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"lastGame\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "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`.", @@ -12655,6 +14626,29 @@ } } }, + "leaderboardEntries": { + "title": "leaderboardEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"leaderboardEntries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboard-entries/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`.", @@ -12747,6 +14741,29 @@ } } }, + "userGameListEntries": { + "title": "userGameListEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"userGameListEntries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/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`.", @@ -13002,6 +15019,26 @@ "readOnly": true, "example": 0.987804878 }, + "medianTimeToUnlockSeconds": { + "title": "medianTimeToUnlockSeconds", + "type": "number", + "readOnly": true + }, + "medianTimeToUnlockHardcoreSeconds": { + "title": "medianTimeToUnlockHardcoreSeconds", + "type": "number", + "readOnly": true + }, + "medianTimeToUnlockSamples": { + "title": "medianTimeToUnlockSamples", + "type": "number", + "readOnly": true + }, + "medianTimeToUnlockHardcoreSamples": { + "title": "medianTimeToUnlockHardcoreSamples", + "type": "number", + "readOnly": true + }, "createdAt": { "title": "createdAt", "type": "string", @@ -13333,7 +15370,7 @@ "title": "avatarUrl", "type": "string", "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png" + "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" }, "motto": { "title": "motto", @@ -13359,6 +15396,16 @@ "readOnly": true, "example": 15687 }, + "rankHardcore": { + "title": "rankHardcore", + "type": "number", + "readOnly": true + }, + "rankCasual": { + "title": "rankCasual", + "type": "number", + "readOnly": true + }, "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", @@ -13381,7 +15428,7 @@ "title": "lastActivityAt", "type": "string", "readOnly": true, - "example": "2026-07-07T21:05:33.000000Z" + "example": "2026-08-06T03:46:59.000000Z" }, "deletedAt": { "title": "deletedAt", @@ -13440,6 +15487,29 @@ "relationships": { "type": "object", "properties": { + "lastGame": { + "title": "lastGame", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"lastGame\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "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`.", @@ -13463,6 +15533,29 @@ } } }, + "leaderboardEntries": { + "title": "leaderboardEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"leaderboardEntries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboard-entries/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`.", @@ -13555,6 +15648,29 @@ } } }, + "userGameListEntries": { + "title": "userGameListEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"userGameListEntries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/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`.", @@ -13679,7 +15795,7 @@ "title": "avatarUrl", "type": "string", "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png" + "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" }, "motto": { "title": "motto", @@ -13705,6 +15821,16 @@ "readOnly": true, "example": 15687 }, + "rankHardcore": { + "title": "rankHardcore", + "type": "number", + "readOnly": true + }, + "rankCasual": { + "title": "rankCasual", + "type": "number", + "readOnly": true + }, "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", @@ -13727,7 +15853,7 @@ "title": "lastActivityAt", "type": "string", "readOnly": true, - "example": "2026-07-07T21:05:33.000000Z" + "example": "2026-08-06T03:46:59.000000Z" }, "deletedAt": { "title": "deletedAt", @@ -13776,16 +15902,39 @@ } } }, - "displayableRoles": { - "title": "displayableRoles", - "type": "array", - "readOnly": true - } - } - }, - "relationships": { - "type": "object", - "properties": { + "displayableRoles": { + "title": "displayableRoles", + "type": "array", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "lastGame": { + "title": "lastGame", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"lastGame\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "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`.", @@ -13809,6 +15958,29 @@ } } }, + "leaderboardEntries": { + "title": "leaderboardEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"leaderboardEntries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboard-entries/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`.", @@ -13901,6 +16073,29 @@ } } }, + "userGameListEntries": { + "title": "userGameListEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"userGameListEntries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/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`.", @@ -14025,7 +16220,7 @@ "title": "avatarUrl", "type": "string", "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png" + "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" }, "motto": { "title": "motto", @@ -14051,6 +16246,16 @@ "readOnly": true, "example": 15687 }, + "rankHardcore": { + "title": "rankHardcore", + "type": "number", + "readOnly": true + }, + "rankCasual": { + "title": "rankCasual", + "type": "number", + "readOnly": true + }, "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", @@ -14073,7 +16278,7 @@ "title": "lastActivityAt", "type": "string", "readOnly": true, - "example": "2026-07-07T21:05:33.000000Z" + "example": "2026-08-06T03:46:59.000000Z" }, "deletedAt": { "title": "deletedAt", @@ -14132,6 +16337,29 @@ "relationships": { "type": "object", "properties": { + "lastGame": { + "title": "lastGame", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"lastGame\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "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`.", @@ -14155,6 +16383,29 @@ } } }, + "leaderboardEntries": { + "title": "leaderboardEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"leaderboardEntries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboard-entries/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`.", @@ -14247,6 +16498,29 @@ } } }, + "userGameListEntries": { + "title": "userGameListEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"userGameListEntries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/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`.", @@ -14363,12 +16637,12 @@ } } }, - "/users": { + "/user-awards": { "get": { - "tags": ["Users"], - "summary": "Get all users", + "tags": ["User-awards"], + "summary": "Get all user-awards", "description": "", - "operationId": "users.index", + "operationId": "user-awards.index", "parameters": [ { "name": "page[size]", @@ -14403,51 +16677,204 @@ "enum": [ "id", "-id", - "points", - "-points", - "pointsHardcore", - "-pointsHardcore", - "pointsWeighted", - "-pointsWeighted", - "yieldUnlocks", - "-yieldUnlocks", - "yieldPoints", - "-yieldPoints", - "joinedAt", - "-joinedAt", - "lastActivityAt", - "-lastActivityAt" + "awardedAt", + "-awardedAt", + "displayOrder", + "-displayOrder" + ], + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "awardedAt": "By awardedAt, ascending", + "-awardedAt": "By awardedAt, descending", + "displayOrder": "By displayOrder, ascending", + "-displayOrder": "By displayOrder, 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": "filter[awardedFrom]", + "in": "query", + "description": "Applies the awardedFrom scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "filter[awardedTo]", + "in": "query", + "description": "Applies the awardedTo scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "filter[eventId]", + "in": "query", + "description": "Applies the eventId 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[gameAwardTier]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter[kind]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "name": "fields[user-awards]", + "in": "query", + "description": "Only return these fields for the \"user-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": [ + "awardedAt", + "kind", + "title", + "badgeUrl", + "displayOrder", + "context", + "userDisplayName", + "userId", + "event", + "game", + "user" + ], + "type": "string" + } + } + }, + { + "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", + "eventAchievements" ], - "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" - } + "type": "string" } } }, { - "name": "filter[role]", + "name": "fields[games]", "in": "query", - "description": "Applies the role scope.", - "required": false, + "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": "boolean" + "type": "array", + "items": { + "enum": [ + "title", + "sortTitle", + "badgeUrl", + "imageBoxArtUrl", + "imageTitleUrl", + "imageIngameUrl", + "releasedAt", + "releasedAtGranularity", + "playersTotal", + "playersHardcore", + "achievementsPublished", + "achievementsUnpublished", + "pointsTotal", + "pointsWeighted", + "timesBeaten", + "timesBeatenHardcore", + "medianTimeToBeatSeconds", + "medianTimeToBeatHardcoreSeconds", + "system", + "achievementSets", + "achievementSetClaims", + "comments", + "hashes", + "tickets" + ], + "type": "string" + } } }, { @@ -14467,6 +16894,8 @@ "points", "pointsHardcore", "pointsWeighted", + "rankHardcore", + "rankCasual", "yieldUnlocks", "yieldPoints", "joinedAt", @@ -14476,13 +16905,16 @@ "isUserWallActive", "richPresence", "richPresenceUpdatedAt", + "lastGame", "visibleRole", "displayableRoles", "achievementSetClaims", + "leaderboardEntries", "playerAchievements", "playerAchievementSets", "playerGames", "tickets", + "userGameListEntries", "wallComments", "awards", "followers", @@ -14502,6 +16934,17 @@ "schema": { "type": "array", "items": { + "enum": [ + "event", + "event.awards", + "event.eventAchievements", + "game", + "game.system", + "game.achievementSets", + "game.hashes", + "user", + "user.lastGame" + ], "type": "string" } } @@ -14509,7 +16952,7 @@ ], "responses": { "200": { - "description": "Index users", + "description": "Index user-awards", "content": { "application/vnd.api+json": { "schema": { @@ -14529,7 +16972,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.users.resource.fetch" + "$ref": "#/components/schemas/resources.user-awards.resource.fetch" } }, "included": { @@ -14537,122 +16980,239 @@ "items": { "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.", + "title": "Resource/Event/Fetch", + "description": "May not be present unless \"event\" is in the \"include\" header. See `.data[].relationships.event.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": "events", "type": "string" }, "id": { "type": "string", - "example": "1" + "example": "3" }, "attributes": { "type": "object", "properties": { - "claimedAt": { - "title": "claimedAt", + "title": { + "title": "title", + "type": "string", + "readOnly": true + }, + "sortTitle": { + "title": "sortTitle", + "type": "string", + "readOnly": true + }, + "badgeUrl": { + "title": "badgeUrl", "type": "string", "readOnly": true, - "example": "2025-09-12T06:24:26.000000Z" + "example": "https://media.retroachievements.org/Images/000007.png" }, - "finishedAt": { - "title": "finishedAt", + "state": { + "title": "state", "type": "string", "readOnly": true, - "example": "2025-12-12T06:24:26.000000Z" + "example": "concluded" }, - "updatedAt": { - "title": "updatedAt", + "playersTotal": { + "title": "playersTotal", + "type": "number", + "readOnly": true + }, + "achievementsPublished": { + "title": "achievementsPublished", + "type": "number", + "readOnly": true + }, + "activeFrom": { + "title": "activeFrom", "type": "string", "readOnly": true, - "example": "2025-09-12T06:24:26.000000Z" + "example": "2026-02-07T00:00:00.000000Z" }, - "status": { - "title": "status", + "activeThrough": { + "title": "activeThrough", "type": "string", "readOnly": true, - "example": "complete" + "example": "2026-02-28T00:00:00.000000Z" + } + } + }, + "relationships": { + "type": "object", + "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": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/3" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/awards/3" + } + }, + "readOnly": true + } + } }, - "claimType": { - "title": "claimType", + "eventAchievements": { + "title": "eventAchievements", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"eventAchievements\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/event-achievements/3" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/event-achievements/3" + } + }, + "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": "primary" + "example": "https://media.retroachievements.org/Images/000002.png" }, - "setType": { - "title": "setType", + "imageBoxArtUrl": { + "title": "imageBoxArtUrl", "type": "string", "readOnly": true, - "example": "new_set" + "example": "https://media.retroachievements.org/Images/000002.png" }, - "specialType": { - "title": "specialType", + "imageTitleUrl": { + "title": "imageTitleUrl", "type": "string", "readOnly": true, - "example": "none" + "example": "https://media.retroachievements.org/Images/000010.png" }, - "extensionsCount": { - "title": "extensionsCount", - "type": "number", + "imageIngameUrl": { + "title": "imageIngameUrl", + "type": "string", "readOnly": true, + "example": "https://media.retroachievements.org/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 }, - "minutesLeft": { - "title": "minutesLeft", + "pointsTotal": { + "title": "pointsTotal", "type": "number", - "readOnly": true, - "example": 298961 + "example": 189 }, - "userId": { - "title": "userId", - "type": "string", - "readOnly": true, - "example": 91 + "pointsWeighted": { + "title": "pointsWeighted", + "type": "number", + "example": 341 }, - "userDisplayName": { - "title": "userDisplayName", - "type": "string", - "readOnly": true + "timesBeaten": { + "title": "timesBeaten", + "type": "number", + "example": 0 }, - "gameId": { - "title": "gameId", + "timesBeatenHardcore": { + "title": "timesBeatenHardcore", "type": "number", - "readOnly": true, "example": 1 }, - "gameTitle": { - "title": "gameTitle", - "type": "string", - "readOnly": true - }, - "gameIconUrl": { - "title": "gameIconUrl", - "type": "string", - "readOnly": true + "medianTimeToBeatSeconds": { + "title": "medianTimeToBeatSeconds", + "type": "number" }, - "systemId": { - "title": "systemId", + "medianTimeToBeatHardcoreSeconds": { + "title": "medianTimeToBeatHardcoreSeconds", "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`.", + "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": { @@ -14661,21 +17221,21 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "example": "https://api.retroachievements.org/v2/systems/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "example": "https://api.retroachievements.org/v2/systems/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`.", + "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": { @@ -14684,60 +17244,21 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/achievement-sets/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/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.", - "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`.", + "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": { @@ -14746,21 +17267,21 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/1" + "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/1" + "example": "https://api.retroachievements.org/v2/achievement-set-claims/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`.", + "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": { @@ -14769,21 +17290,21 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "example": "https://api.retroachievements.org/v2/comments/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "example": "https://api.retroachievements.org/v2/comments/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`.", + "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": { @@ -14792,12 +17313,35 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/hashes/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/hashes/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 @@ -14809,103 +17353,142 @@ } }, { - "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/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": "player-achievement-sets", + "default": "users", "type": "string" }, "id": { "type": "string", - "example": "1" + "example": "01K4Y876RZ4XVE4JA3X9ARV95P" }, "attributes": { "type": "object", "properties": { - "achievementsUnlocked": { - "title": "achievementsUnlocked", - "type": "number", + "displayName": { + "title": "displayName", + "type": "string", "readOnly": true, - "example": 20 + "example": "Root" }, - "achievementsUnlockedHardcore": { - "title": "achievementsUnlockedHardcore", - "type": "number", + "avatarUrl": { + "title": "avatarUrl", + "type": "string", "readOnly": true, - "example": 20 + "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" + }, + "motto": { + "title": "motto", + "type": "string", + "readOnly": true, + "example": "" }, "points": { "title": "points", "type": "number", "readOnly": true, - "example": 189 + "example": 1236 }, "pointsHardcore": { "title": "pointsHardcore", "type": "number", "readOnly": true, - "example": 189 + "example": 7130 }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", "readOnly": true, - "example": 8479 + "example": 15687 }, - "completionPercentage": { - "title": "completionPercentage", + "rankHardcore": { + "title": "rankHardcore", + "type": "number", + "readOnly": true + }, + "rankCasual": { + "title": "rankCasual", + "type": "number", + "readOnly": true + }, + "yieldUnlocks": { + "title": "yieldUnlocks", "type": "number", "readOnly": true, - "example": "1.000000000" + "example": 0 }, - "completionPercentageHardcore": { - "title": "completionPercentageHardcore", + "yieldPoints": { + "title": "yieldPoints", "type": "number", "readOnly": true, - "example": "1.000000000" + "example": 0 }, - "lastUnlockAt": { - "title": "lastUnlockAt", + "joinedAt": { + "title": "joinedAt", "type": "string", "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "example": "2025-09-12T06:01:22.000000Z" }, - "lastUnlockHardcoreAt": { - "title": "lastUnlockHardcoreAt", + "lastActivityAt": { + "title": "lastActivityAt", "type": "string", "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "example": "2026-08-06T03:46:59.000000Z" }, - "completedAt": { - "title": "completedAt", + "deletedAt": { + "title": "deletedAt", "type": "string", + "readOnly": true + }, + "isUnranked": { + "title": "isUnranked", + "type": "boolean", "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "example": false }, - "completedHardcoreAt": { - "title": "completedHardcoreAt", + "isUserWallActive": { + "title": "isUserWallActive", + "type": "boolean", + "readOnly": true, + "example": true + }, + "richPresence": { + "title": "richPresence", "type": "string", "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "example": "Playing Assumenda Pariatur" }, - "timeTakenSeconds": { - "title": "timeTakenSeconds", - "type": "number", + "richPresenceUpdatedAt": { + "title": "richPresenceUpdatedAt", + "type": "string", "readOnly": true, - "example": 0 + "example": "2026-04-18T04:34:36.000000Z" }, - "timeTakenHardcoreSeconds": { - "title": "timeTakenHardcoreSeconds", - "type": "number", + "visibleRole": { + "title": "visibleRole", + "type": "string", "readOnly": true, - "example": 0 + "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 + } + } }, - "setContext": { - "title": "setContext", + "displayableRoles": { + "title": "displayableRoles", "type": "array", "readOnly": true } @@ -14914,9 +17497,9 @@ "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`.", + "lastGame": { + "title": "lastGame", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"lastGame\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -14925,21 +17508,21 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" } }, "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`.", + "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": { @@ -14948,102 +17531,21 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" } }, "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`.", + "leaderboardEntries": { + "title": "leaderboardEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"leaderboardEntries\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -15052,21 +17554,21 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" } }, "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`.", + "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": { @@ -15075,12 +17577,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" } }, "readOnly": true @@ -15098,105 +17600,67 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" + "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" } }, "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 + "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 + } + } }, - "gameIconUrl": { - "title": "gameIconUrl", - "type": "string", - "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 + } + } }, - "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`.", + "userGameListEntries": { + "title": "userGameListEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"userGameListEntries\" to the \"include\" query parameter; results will be found in `.included`.", "type": "object", "properties": { "links": { @@ -15205,21 +17669,21 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/5" + "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/5" + "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" } }, "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`.", + "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": { @@ -15228,21 +17692,21 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/5" + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/5" + "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" } }, "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`.", + "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": { @@ -15251,21 +17715,21 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/reporters/5" + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/reporters/5" + "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" } }, "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`.", + "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": { @@ -15274,21 +17738,21 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/resolvers/5" + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/resolvers/5" + "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" } }, "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`.", + "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": { @@ -15297,12 +17761,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/authors/5" + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/authors/5" + "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" } }, "readOnly": true @@ -15312,152 +17776,370 @@ } } } - }, + } + ] + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/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, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "id", + "-id", + "points", + "-points", + "pointsHardcore", + "-pointsHardcore", + "pointsWeighted", + "-pointsWeighted", + "yieldUnlocks", + "-yieldUnlocks", + "yieldPoints", + "-yieldPoints", + "joinedAt", + "-joinedAt", + "lastActivityAt", + "-lastActivityAt" + ], + "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" + } + } + } + }, + { + "name": "filter[role]", + "in": "query", + "description": "Applies the role scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "filter[ranked]", + "in": "query", + "description": "Only includes records where ranked is null.", + "required": false, + "allowEmptyValue": false, + "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", + "rankHardcore", + "rankCasual", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "lastGame", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "leaderboardEntries", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "userGameListEntries", + "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", + "medianTimeToBeatSeconds", + "medianTimeToBeatHardcoreSeconds", + "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": ["lastGame"], + "type": "string" + } + } + } + ], + "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": { + "anyOf": [ { - "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/LastGame/Fetch", + "description": "May not be present unless \"lastGame\" is in the \"include\" header. See `.data[].relationships.lastGame.data` for the lists of IDs which have been included here.", "type": "object", "required": ["type", "id", "attributes"], "properties": { "type": { "title": "type", - "default": "comments", + "default": "games", "type": "string" }, "id": { "type": "string", - "example": "3" + "example": "1" }, "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", + "title": { + "title": "title", "type": "string", - "readOnly": true + "example": "Quia Impedit Libero Quam" }, - "authorId": { - "title": "authorId", + "sortTitle": { + "title": "sortTitle", "type": "string", - "readOnly": true + "example": "quia impedit libero quam" }, - "permalink": { - "title": "permalink", + "badgeUrl": { + "title": "badgeUrl", "type": "string", "readOnly": true, - "example": "" + "example": "https://media.retroachievements.org/Images/000002.png" }, - "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", + "imageBoxArtUrl": { + "title": "imageBoxArtUrl", "type": "string", "readOnly": true, - "example": "2025-09-03T08:19:11.000000Z" + "example": "https://media.retroachievements.org/Images/000002.png" }, - "kind": { - "title": "kind", + "imageTitleUrl": { + "title": "imageTitleUrl", "type": "string", "readOnly": true, - "example": "game_beaten" + "example": "https://media.retroachievements.org/Images/000010.png" }, - "title": { - "title": "title", + "imageIngameUrl": { + "title": "imageIngameUrl", "type": "string", "readOnly": true, - "example": 1 + "example": "https://media.retroachievements.org/Images/000002.png" }, - "badgeUrl": { - "title": "badgeUrl", - "type": "string", - "readOnly": true, - "example": 1 + "releasedAt": { + "title": "releasedAt", + "type": "string" }, - "displayOrder": { - "title": "displayOrder", + "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", - "readOnly": true, "example": 0 }, - "context": { - "title": "context", - "type": "object", - "readOnly": true, + "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 + }, + "medianTimeToBeatSeconds": { + "title": "medianTimeToBeatSeconds", + "type": "number" + }, + "medianTimeToBeatHardcoreSeconds": { + "title": "medianTimeToBeatHardcoreSeconds", + "type": "number", + "example": 5153 } } }, "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`.", + "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": { @@ -15466,21 +18148,21 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "example": "https://api.retroachievements.org/v2/systems/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "example": "https://api.retroachievements.org/v2/systems/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`.", + "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": { @@ -15489,85 +18171,21 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/achievement-sets/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/achievement-sets/1" } }, "readOnly": true } } - } - } - } - } - }, - { - "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`.", + "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": { @@ -15576,85 +18194,67 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/users/2" + "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/users/2" + "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" } }, "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 + "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 + } + } }, - "pointsHardcore": { - "title": "pointsHardcore", - "type": "number", - "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 + } + } }, - "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`.", + "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": { @@ -15663,12 +18263,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/users/2" + "example": "https://api.retroachievements.org/v2/tickets/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/users/2" + "example": "https://api.retroachievements.org/v2/tickets/1" } }, "readOnly": true @@ -15678,78 +18278,7 @@ } } } - } - ] - } - } - } - } - } - } - }, - "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": { - "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.", @@ -15820,7 +18349,7 @@ "title": "minutesLeft", "type": "number", "readOnly": true, - "example": 298961 + "example": 342109 }, "userId": { "title": "userId", @@ -15833,29 +18362,123 @@ "type": "string", "readOnly": true }, - "gameId": { - "title": "gameId", + "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/LeaderboardEntries/Fetch", + "description": "May not be present unless \"leaderboardEntries\" is in the \"include\" header. See `.data[].relationships.leaderboardEntries.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 }, - "gameTitle": { - "title": "gameTitle", - "type": "string", + "rank": { + "title": "rank", + "type": "number", "readOnly": true }, - "gameIconUrl": { - "title": "gameIconUrl", + "createdAt": { + "title": "createdAt", "type": "string", "readOnly": true }, - "systemId": { - "title": "systemId", - "type": "number", - "readOnly": true - }, - "systemName": { - "title": "systemName", + "updatedAt": { + "title": "updatedAt", "type": "string", "readOnly": true } @@ -15887,9 +18510,9 @@ } } }, - "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`.", + "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": { @@ -15898,12 +18521,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/leaderboards/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/leaderboards/1" } }, "readOnly": true @@ -16527,6 +19150,98 @@ } } }, + { + "title": "Resource/UserGameListEntries/Fetch", + "description": "May not be present unless \"userGameListEntries\" is in the \"include\" header. See `.data[].relationships.userGameListEntries.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "user-game-list-entries", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2025-09-28T01:08:51.000000Z" + }, + "gameId": { + "title": "gameId", + "type": "number", + "readOnly": true, + "example": 668 + }, + "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 + }, + "pointsTotal": { + "title": "pointsTotal", + "type": "number", + "readOnly": true + }, + "achievementsPublished": { + "title": "achievementsPublished", + "type": "number", + "readOnly": true + } + } + }, + "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/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.", @@ -16663,6 +19378,17 @@ "type": "object", "readOnly": true, "example": 1 + }, + "userDisplayName": { + "title": "userDisplayName", + "type": "string", + "readOnly": true + }, + "userId": { + "title": "userId", + "type": "string", + "readOnly": true, + "example": 14 } } }, @@ -16692,93 +19418,29 @@ } } }, - "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/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 + "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 + } + } }, - "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`.", @@ -16790,12 +19452,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/users/2" + "example": "https://api.retroachievements.org/v2/users/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/users/2" + "example": "https://api.retroachievements.org/v2/users/1" } }, "readOnly": true @@ -16807,8 +19469,8 @@ } }, { - "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.", + "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": { @@ -16884,226 +19546,103 @@ "type": "string", "example": "https://api.retroachievements.org/v2/users/2" } - }, - "readOnly": true - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - }, - "/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" + }, + "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 + } + } + } + } + } + } + } + ] } } } @@ -17116,19 +19655,16 @@ }, "401": { "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" } } } }, - "/users/{user}/relationships/awards": { + "/users/{user}": { "get": { "tags": ["Users"], - "summary": "Show awards relation", + "summary": "Show one user", "description": "", - "operationId": "users.awards.show", + "operationId": "users.show", "parameters": [ { "name": "user", @@ -17171,149 +19707,1632 @@ } }, "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" - } - } + "$ref": "#/components/schemas/resources.users.resource.fetch" }, - "data": { + "included": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.users.relationship.followers.fetch" + "anyOf": [ + { + "title": "Resource/LastGame/Fetch", + "description": "May not be present unless \"lastGame\" is in the \"include\" header. See `.data[].relationships.lastGame.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://media.retroachievements.org/Images/000002.png" + }, + "imageBoxArtUrl": { + "title": "imageBoxArtUrl", + "type": "string", + "readOnly": true, + "example": "https://media.retroachievements.org/Images/000002.png" + }, + "imageTitleUrl": { + "title": "imageTitleUrl", + "type": "string", + "readOnly": true, + "example": "https://media.retroachievements.org/Images/000010.png" + }, + "imageIngameUrl": { + "title": "imageIngameUrl", + "type": "string", + "readOnly": true, + "example": "https://media.retroachievements.org/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 + }, + "medianTimeToBeatSeconds": { + "title": "medianTimeToBeatSeconds", + "type": "number" + }, + "medianTimeToBeatHardcoreSeconds": { + "title": "medianTimeToBeatHardcoreSeconds", + "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 + } + } + }, + "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/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": 342109 + }, + "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/LeaderboardEntries/Fetch", + "description": "May not be present unless \"leaderboardEntries\" is in the \"include\" header. See `.data[].relationships.leaderboardEntries.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 + } + } + } + } + } + } + }, + { + "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/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 + } + } + } + } + } + } + }, + { + "title": "Resource/UserGameListEntries/Fetch", + "description": "May not be present unless \"userGameListEntries\" is in the \"include\" header. See `.data[].relationships.userGameListEntries.data` for the lists of IDs which have been included here.", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "user-game-list-entries", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2025-09-28T01:08:51.000000Z" + }, + "gameId": { + "title": "gameId", + "type": "number", + "readOnly": true, + "example": 668 + }, + "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 + }, + "pointsTotal": { + "title": "pointsTotal", + "type": "number", + "readOnly": true + }, + "achievementsPublished": { + "title": "achievementsPublished", + "type": "number", + "readOnly": true + } + } + }, + "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/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 + }, + "userDisplayName": { + "title": "userDisplayName", + "type": "string", + "readOnly": true + }, + "userId": { + "title": "userId", + "type": "string", + "readOnly": true, + "example": 14 + } + } + }, + "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 + } + } + }, + "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 + } + } + } + } + } + } + }, + { + "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 + } + } + } + } + } + } + } + ] } } } @@ -17333,12 +21352,12 @@ } } }, - "/users/{user}/following": { + "/users/{user}/achievement-set-claims": { "get": { "tags": ["Users"], - "summary": "Show following", + "summary": "Show achievementSetClaims", "description": "", - "operationId": "users.following", + "operationId": "users.achievementSetClaims", "parameters": [ { "name": "user", @@ -17383,7 +21402,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.user-follows.resource.fetch" + "$ref": "#/components/schemas/resources.achievement-set-claims.resource.fetch" } } } @@ -17403,12 +21422,12 @@ } } }, - "/users/{user}/relationships/following": { + "/users/{user}/awards": { "get": { "tags": ["Users"], - "summary": "Show following relation", + "summary": "Show awards", "description": "", - "operationId": "users.following.show", + "operationId": "users.awards", "parameters": [ { "name": "user", @@ -17433,7 +21452,7 @@ ], "responses": { "200": { - "description": "Show users", + "description": "ShowRelated users", "content": { "application/vnd.api+json": { "schema": { @@ -17453,7 +21472,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.users.relationship.following.fetch" + "$ref": "#/components/schemas/resources.user-awards.resource.fetch" } } } @@ -17473,12 +21492,12 @@ } } }, - "/users/{user}/player-achievements": { + "/users/{user}/followers": { "get": { "tags": ["Users"], - "summary": "Show playerAchievements", + "summary": "Show followers", "description": "", - "operationId": "users.playerAchievements", + "operationId": "users.followers", "parameters": [ { "name": "user", @@ -17523,7 +21542,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.player-achievements.resource.fetch" + "$ref": "#/components/schemas/resources.user-follows.resource.fetch" } } } @@ -17543,12 +21562,12 @@ } } }, - "/users/{user}/relationships/player-achievements": { + "/users/{user}/following": { "get": { "tags": ["Users"], - "summary": "Show playerAchievements relation", + "summary": "Show following", "description": "", - "operationId": "users.playerAchievements.show", + "operationId": "users.following", "parameters": [ { "name": "user", @@ -17573,7 +21592,7 @@ ], "responses": { "200": { - "description": "Show users", + "description": "ShowRelated users", "content": { "application/vnd.api+json": { "schema": { @@ -17593,7 +21612,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.users.relationship.playerAchievements.fetch" + "$ref": "#/components/schemas/resources.user-follows.resource.fetch" } } } @@ -17613,12 +21632,12 @@ } } }, - "/users/{user}/player-achievement-sets": { + "/users/{user}/leaderboard-entries": { "get": { "tags": ["Users"], - "summary": "Show playerAchievementSets", + "summary": "Show leaderboardEntries", "description": "", - "operationId": "users.playerAchievementSets", + "operationId": "users.leaderboardEntries", "parameters": [ { "name": "user", @@ -17663,7 +21682,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.player-achievement-sets.resource.fetch" + "$ref": "#/components/schemas/resources.leaderboard-entries.resource.fetch" } } } @@ -17683,12 +21702,12 @@ } } }, - "/users/{user}/relationships/player-achievement-sets": { + "/users/{user}/player-achievements": { "get": { "tags": ["Users"], - "summary": "Show playerAchievementSets relation", + "summary": "Show playerAchievements", "description": "", - "operationId": "users.playerAchievementSets.show", + "operationId": "users.playerAchievements", "parameters": [ { "name": "user", @@ -17713,7 +21732,7 @@ ], "responses": { "200": { - "description": "Show users", + "description": "ShowRelated users", "content": { "application/vnd.api+json": { "schema": { @@ -17733,7 +21752,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.users.relationship.playerAchievementSets.fetch" + "$ref": "#/components/schemas/resources.player-achievements.resource.fetch" } } } @@ -17753,12 +21772,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", @@ -17803,7 +21822,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.player-games.resource.fetch" + "$ref": "#/components/schemas/resources.player-achievement-sets.resource.fetch" } } } @@ -17823,12 +21842,12 @@ } } }, - "/users/{user}/relationships/player-games": { + "/users/{user}/player-games": { "get": { "tags": ["Users"], - "summary": "Show playerGames relation", + "summary": "Show playerGames", "description": "", - "operationId": "users.playerGames.show", + "operationId": "users.playerGames", "parameters": [ { "name": "user", @@ -17853,7 +21872,7 @@ ], "responses": { "200": { - "description": "Show users", + "description": "ShowRelated users", "content": { "application/vnd.api+json": { "schema": { @@ -17873,7 +21892,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.users.relationship.playerGames.fetch" + "$ref": "#/components/schemas/resources.player-games.resource.fetch" } } } @@ -17963,12 +21982,12 @@ } } }, - "/users/{user}/relationships/tickets": { + "/users/{user}/user-game-list-entries": { "get": { "tags": ["Users"], - "summary": "Show tickets relation", + "summary": "Show userGameListEntries", "description": "", - "operationId": "users.tickets.show", + "operationId": "users.userGameListEntries", "parameters": [ { "name": "user", @@ -17993,7 +22012,7 @@ ], "responses": { "200": { - "description": "Show users", + "description": "ShowRelated users", "content": { "application/vnd.api+json": { "schema": { @@ -18013,7 +22032,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.users.relationship.tickets.fetch" + "$ref": "#/components/schemas/resources.user-game-list-entries.resource.fetch" } } } @@ -18102,76 +22121,6 @@ } } } - }, - "/users/{user}/relationships/wall-comments": { - "get": { - "tags": ["Users"], - "summary": "Show wallComments relation", - "description": "", - "operationId": "users.wallComments.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.wallComments.fetch" - } - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - } } }, "components": { @@ -18285,7 +22234,7 @@ "title": "minutesLeft", "type": "number", "readOnly": true, - "example": 298961 + "example": 342109 }, "userId": { "title": "userId", @@ -18482,23 +22431,6 @@ } } }, - "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", @@ -18546,6 +22478,29 @@ "readOnly": true, "example": 0 }, + "timesCompleted": { + "title": "timesCompleted", + "type": "number", + "readOnly": true, + "example": 0 + }, + "timesMastered": { + "title": "timesMastered", + "type": "number", + "readOnly": true, + "example": 2 + }, + "medianTimeToCompleteSeconds": { + "title": "medianTimeToCompleteSeconds", + "type": "number", + "readOnly": true + }, + "medianTimeToMasterSeconds": { + "title": "medianTimeToMasterSeconds", + "type": "number", + "readOnly": true, + "example": 0 + }, "badgeUrl": { "title": "badgeUrl", "type": "string", @@ -18611,72 +22566,21 @@ "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 - } - } - } - } - } - } - }, - "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", - "required": ["type", "id"], - "properties": { - "type": { - "title": "type", - "default": "player-achievements", - "type": "string" - }, - "id": { - "title": "id", - "type": "string", - "example": "1" - } - } - }, - "resources.achievements.relationship.tickets.fetch": { - "title": "Resource/Achievement/Relationship/Tickets/Fetch", - "type": "object", - "required": ["type", "id"], - "properties": { - "type": { - "title": "type", - "default": "tickets", - "type": "string" - }, - "id": { - "title": "id", - "type": "string", - "example": "5" + "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 + } + } + } + } } } }, @@ -18773,6 +22677,26 @@ "readOnly": true, "example": 0.987804878 }, + "medianTimeToUnlockSeconds": { + "title": "medianTimeToUnlockSeconds", + "type": "number", + "readOnly": true + }, + "medianTimeToUnlockHardcoreSeconds": { + "title": "medianTimeToUnlockHardcoreSeconds", + "type": "number", + "readOnly": true + }, + "medianTimeToUnlockSamples": { + "title": "medianTimeToUnlockSamples", + "type": "number", + "readOnly": true + }, + "medianTimeToUnlockHardcoreSamples": { + "title": "medianTimeToUnlockHardcoreSamples", + "type": "number", + "readOnly": true + }, "createdAt": { "title": "createdAt", "type": "string", @@ -19014,6 +22938,116 @@ } } }, + "resources.event-achievements.resource.fetch": { + "title": "Resource/Event-achievement/Fetch", + "type": "object", + "required": ["type", "id", "attributes"], + "properties": { + "type": { + "title": "type", + "default": "event-achievements", + "type": "string" + }, + "id": { + "type": "string", + "example": "1" + }, + "attributes": { + "type": "object", + "properties": { + "activeFrom": { + "title": "activeFrom", + "type": "string", + "readOnly": true + }, + "activeUntil": { + "title": "activeUntil", + "type": "string", + "readOnly": true + }, + "decorator": { + "title": "decorator", + "type": "string", + "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 + } + } + }, + "sourceAchievement": { + "title": "sourceAchievement", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"sourceAchievement\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/source-achievements/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/source-achievements/1" + } + }, + "readOnly": true + } + } + }, + "eventAchievement": { + "title": "eventAchievement", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"eventAchievement\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/event-achievements/1" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/event-achievements/1" + } + }, + "readOnly": true + } + } + } + } + } + } + }, "resources.events.resource.fetch": { "title": "Resource/Event/Fetch", "type": "object", @@ -19102,6 +23136,29 @@ "readOnly": true } } + }, + "eventAchievements": { + "title": "eventAchievements", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"eventAchievements\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/event-achievements/3" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/event-achievements/3" + } + }, + "readOnly": true + } + } } } } @@ -19191,74 +23248,6 @@ } } }, - "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", - "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", - "required": ["type", "id"], - "properties": { - "type": { - "title": "type", - "default": "game-hashes", - "type": "string" - }, - "id": { - "title": "id", - "type": "string", - "example": "1" - } - } - }, - "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", @@ -19358,12 +23347,12 @@ "type": "number", "example": 1 }, - "medianTimeToBeatMinutes": { - "title": "medianTimeToBeatMinutes", + "medianTimeToBeatSeconds": { + "title": "medianTimeToBeatSeconds", "type": "number" }, - "medianTimeToBeatHardcoreMinutes": { - "title": "medianTimeToBeatHardcoreMinutes", + "medianTimeToBeatHardcoreSeconds": { + "title": "medianTimeToBeatHardcoreSeconds", "type": "number", "example": 5153 } @@ -19514,40 +23503,6 @@ } } }, - "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", @@ -19764,23 +23719,6 @@ } } }, - "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", @@ -20376,7 +24314,7 @@ "title": "iconUrl", "type": "string", "readOnly": true, - "example": "https://static.retroachievements.org/assets/images/system/md.png" + "example": "https://raweb.test/assets/images/system/md.png" }, "active": { "title": "active", @@ -20637,6 +24575,17 @@ "type": "object", "readOnly": true, "example": 1 + }, + "userDisplayName": { + "title": "userDisplayName", + "type": "string", + "readOnly": true + }, + "userId": { + "title": "userId", + "type": "string", + "readOnly": true, + "example": 14 } } }, @@ -20654,21 +24603,44 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "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/events/1" + "example": "https://api.retroachievements.org/v2/games/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": { @@ -20677,12 +24649,12 @@ "related": { "title": "related", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/users/1" }, "self": { "title": "self", "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "example": "https://api.retroachievements.org/v2/users/1" } }, "readOnly": true @@ -20779,156 +24751,94 @@ } } }, - "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", - "required": ["type", "id"], - "properties": { - "type": { - "title": "type", - "default": "user-awards", - "type": "string" - }, - "id": { - "title": "id", - "type": "string", - "example": "1" - } - } - }, - "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", - "required": ["type", "id"], - "properties": { - "type": { - "title": "type", - "default": "player-achievement-sets", - "type": "string" - }, - "id": { - "title": "id", - "type": "string", - "example": "1" - } - } - }, - "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": "1" - } - } - }, - "resources.users.relationship.playerGames.fetch": { - "title": "Resource/User/Relationship/PlayerGames/Fetch", + "resources.user-game-list-entries.resource.fetch": { + "title": "Resource/User-game-list-entry/Fetch", "type": "object", - "required": ["type", "id"], + "required": ["type", "id", "attributes"], "properties": { "type": { "title": "type", - "default": "player-games", + "default": "user-game-list-entries", "type": "string" }, "id": { - "title": "id", "type": "string", "example": "1" - } - } - }, - "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", - "required": ["type", "id"], - "properties": { - "type": { - "title": "type", - "default": "comments", - "type": "string" + "attributes": { + "type": "object", + "properties": { + "createdAt": { + "title": "createdAt", + "type": "string", + "readOnly": true, + "example": "2025-09-28T01:08:51.000000Z" + }, + "gameId": { + "title": "gameId", + "type": "number", + "readOnly": true, + "example": 668 + }, + "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 + }, + "pointsTotal": { + "title": "pointsTotal", + "type": "number", + "readOnly": true + }, + "achievementsPublished": { + "title": "achievementsPublished", + "type": "number", + "readOnly": true + } + } }, - "id": { - "title": "id", - "type": "string", - "example": "3" + "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 + } + } + } + } } } }, @@ -20959,7 +24869,7 @@ "title": "avatarUrl", "type": "string", "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png" + "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" }, "motto": { "title": "motto", @@ -20985,6 +24895,16 @@ "readOnly": true, "example": 15687 }, + "rankHardcore": { + "title": "rankHardcore", + "type": "number", + "readOnly": true + }, + "rankCasual": { + "title": "rankCasual", + "type": "number", + "readOnly": true + }, "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", @@ -21007,7 +24927,7 @@ "title": "lastActivityAt", "type": "string", "readOnly": true, - "example": "2026-07-07T21:05:33.000000Z" + "example": "2026-08-06T03:46:59.000000Z" }, "deletedAt": { "title": "deletedAt", @@ -21066,6 +24986,29 @@ "relationships": { "type": "object", "properties": { + "lastGame": { + "title": "lastGame", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"lastGame\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + } + }, + "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`.", @@ -21089,6 +25032,29 @@ } } }, + "leaderboardEntries": { + "title": "leaderboardEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"leaderboardEntries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/leaderboard-entries/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`.", @@ -21181,6 +25147,29 @@ } } }, + "userGameListEntries": { + "title": "userGameListEntries", + "description": "May include a list of IDs of relevant items in the `data` field. To retrieve these listed items as well, add \"userGameListEntries\" to the \"include\" query parameter; results will be found in `.included`.", + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "title": "related", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + }, + "self": { + "title": "self", + "type": "string", + "example": "https://api.retroachievements.org/v2/user-game-list-entries/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`.", From 82bb97fa71571f759226c145f2e29085cb9702b3 Mon Sep 17 00:00:00 2001 From: Chew Date: Thu, 6 Aug 2026 15:24:54 -0500 Subject: [PATCH 10/10] update spec (and use our fork now) --- docs/v2/retroachievements.json | 14114 +++++++++++++++++++------------ 1 file changed, 8827 insertions(+), 5287 deletions(-) diff --git a/docs/v2/retroachievements.json b/docs/v2/retroachievements.json index 734d93d..3e0f77c 100644 --- a/docs/v2/retroachievements.json +++ b/docs/v2/retroachievements.json @@ -25,6 +25,7 @@ "required": false, "allowEmptyValue": false, "schema": { + "default": 50, "type": "integer" } }, @@ -110,20 +111,6 @@ "items": { "type": "string" } - }, - "examples": { - "empty": { - "value": [] - }, - "1": { - "value": ["1"] - }, - "2": { - "value": ["2"] - }, - "3": { - "value": ["3"] - } } }, { @@ -160,17 +147,6 @@ "items": { "type": "string" } - }, - "examples": { - "empty": { - "value": [] - }, - "progression": { - "value": "progression" - }, - "missable": { - "value": "missable" - } } }, { @@ -363,8 +339,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -390,8 +365,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "attributes": { "type": "object", @@ -399,38 +373,32 @@ "displayName": { "title": "displayName", "type": "string", - "readOnly": true, - "example": "Root" + "readOnly": true }, "avatarUrl": { "title": "avatarUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" + "readOnly": true }, "motto": { "title": "motto", "type": "string", - "readOnly": true, - "example": "" + "readOnly": true }, "points": { "title": "points", "type": "number", - "readOnly": true, - "example": 1236 + "readOnly": true }, "pointsHardcore": { "title": "pointsHardcore", "type": "number", - "readOnly": true, - "example": 7130 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 15687 + "readOnly": true }, "rankHardcore": { "title": "rankHardcore", @@ -445,26 +413,22 @@ "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "yieldPoints": { "title": "yieldPoints", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "joinedAt": { "title": "joinedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:22.000000Z" + "readOnly": true }, "lastActivityAt": { "title": "lastActivityAt", "type": "string", - "readOnly": true, - "example": "2026-08-06T03:46:59.000000Z" + "readOnly": true }, "deletedAt": { "title": "deletedAt", @@ -474,44 +438,27 @@ "isUnranked": { "title": "isUnranked", "type": "boolean", - "readOnly": true, - "example": false + "readOnly": true }, "isUserWallActive": { "title": "isUserWallActive", "type": "boolean", - "readOnly": true, - "example": true + "readOnly": true }, "richPresence": { "title": "richPresence", "type": "string", - "readOnly": true, - "example": "Playing Assumenda Pariatur" + "readOnly": true }, "richPresenceUpdatedAt": { "title": "richPresenceUpdatedAt", "type": "string", - "readOnly": true, - "example": "2026-04-18T04:34:36.000000Z" + "readOnly": true }, "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 - } - } + "readOnly": true }, "displayableRoles": { "title": "displayableRoles", @@ -533,13 +480,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -556,13 +501,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -579,13 +522,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -602,13 +543,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -625,13 +564,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -648,13 +585,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -671,13 +606,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -694,13 +627,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -717,13 +648,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -740,13 +669,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -763,13 +690,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -786,13 +711,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -815,8 +738,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -824,44 +746,37 @@ "title": { "title": "title", "type": "string", - "readOnly": true, - "example": "Quia Impedit Libero Quam" + "readOnly": true }, "pointsTotal": { "title": "pointsTotal", "type": "number", - "readOnly": true, - "example": 189 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 341 + "readOnly": true }, "achievementsPublished": { "title": "achievementsPublished", "type": "number", - "readOnly": true, - "example": 20 + "readOnly": true }, "achievementsUnpublished": { "title": "achievementsUnpublished", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "timesCompleted": { "title": "timesCompleted", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "timesMastered": { "title": "timesMastered", "type": "number", - "readOnly": true, - "example": 2 + "readOnly": true }, "medianTimeToCompleteSeconds": { "title": "medianTimeToCompleteSeconds", @@ -871,8 +786,7 @@ "medianTimeToMasterSeconds": { "title": "medianTimeToMasterSeconds", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "badgeUrl": { "title": "badgeUrl", @@ -882,8 +796,7 @@ "achievementsFirstPublishedAt": { "title": "achievementsFirstPublishedAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" + "readOnly": true }, "types": { "title": "types", @@ -893,14 +806,12 @@ "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "readOnly": true }, "updatedAt": { "title": "updatedAt", "type": "string", - "readOnly": true, - "example": "2026-01-09T02:06:22.000000Z" + "readOnly": true } } }, @@ -917,13 +828,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -940,13 +849,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" + "type": "string" } }, "readOnly": true @@ -969,8 +876,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "3" + "type": "string" }, "attributes": { "type": "object", @@ -978,8 +884,7 @@ "body": { "title": "body", "type": "string", - "readOnly": true, - "example": "Excited to play this!" + "readOnly": true }, "authorAvatarUrl": { "title": "authorAvatarUrl", @@ -999,14 +904,12 @@ "permalink": { "title": "permalink", "type": "string", - "readOnly": true, - "example": "" + "readOnly": true }, "submittedAt": { "title": "submittedAt", "type": "string", - "readOnly": true, - "example": "2026-05-05T22:41:05.000000Z" + "readOnly": true } } }, @@ -1023,13 +926,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/3" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/3" + "type": "string" } }, "readOnly": true @@ -1052,45 +953,38 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", "properties": { "title": { "title": "title", - "type": "string", - "example": "Quia Impedit Libero Quam" + "type": "string" }, "sortTitle": { "title": "sortTitle", - "type": "string", - "example": "quia impedit libero quam" + "type": "string" }, "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "imageBoxArtUrl": { "title": "imageBoxArtUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "imageTitleUrl": { "title": "imageTitleUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000010.png" + "readOnly": true }, "imageIngameUrl": { "title": "imageIngameUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "releasedAt": { "title": "releasedAt", @@ -1102,43 +996,35 @@ }, "playersTotal": { "title": "playersTotal", - "type": "number", - "example": 82 + "type": "number" }, "playersHardcore": { "title": "playersHardcore", - "type": "number", - "example": 82 + "type": "number" }, "achievementsPublished": { "title": "achievementsPublished", - "type": "number", - "example": 20 + "type": "number" }, "achievementsUnpublished": { "title": "achievementsUnpublished", - "type": "number", - "example": 0 + "type": "number" }, "pointsTotal": { "title": "pointsTotal", - "type": "number", - "example": 189 + "type": "number" }, "pointsWeighted": { "title": "pointsWeighted", - "type": "number", - "example": 341 + "type": "number" }, "timesBeaten": { "title": "timesBeaten", - "type": "number", - "example": 0 + "type": "number" }, "timesBeatenHardcore": { "title": "timesBeatenHardcore", - "type": "number", - "example": 1 + "type": "number" }, "medianTimeToBeatSeconds": { "title": "medianTimeToBeatSeconds", @@ -1146,8 +1032,7 @@ }, "medianTimeToBeatHardcoreSeconds": { "title": "medianTimeToBeatHardcoreSeconds", - "type": "number", - "example": 5153 + "type": "number" } } }, @@ -1164,13 +1049,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" } }, "readOnly": true @@ -1187,13 +1070,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -1210,13 +1091,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" } }, "readOnly": true @@ -1233,13 +1112,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" } }, "readOnly": true @@ -1256,13 +1133,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" } }, "readOnly": true @@ -1279,13 +1154,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" } }, "readOnly": true @@ -1308,8 +1181,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -1317,14 +1189,12 @@ "unlockedAt": { "title": "unlockedAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" + "readOnly": true }, "unlockedHardcoreAt": { "title": "unlockedHardcoreAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" + "readOnly": true } } }, @@ -1341,13 +1211,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/1" + "type": "string" } }, "readOnly": true @@ -1364,13 +1232,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" } }, "readOnly": true @@ -1387,13 +1253,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -1416,8 +1280,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "5" + "type": "string" }, "attributes": { "type": "object", @@ -1425,32 +1288,27 @@ "state": { "title": "state", "type": "string", - "readOnly": true, - "example": "open" + "readOnly": true }, "type": { "title": "type", "type": "string", - "readOnly": true, - "example": "did_not_trigger" + "readOnly": true }, "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" + "readOnly": true }, "hardcore": { "title": "hardcore", "type": "boolean", - "readOnly": true, - "example": 1 + "readOnly": true }, "reportedAt": { "title": "reportedAt", "type": "string", - "readOnly": true, - "example": "2026-06-05T19:41:03.000000Z" + "readOnly": true }, "resolvedAt": { "title": "resolvedAt", @@ -1460,14 +1318,12 @@ "ticketableType": { "title": "ticketableType", "type": "string", - "readOnly": true, - "example": "achievement" + "readOnly": true }, "ticketableId": { "title": "ticketableId", "type": "number", - "readOnly": true, - "example": 3801 + "readOnly": true }, "gameIconUrl": { "title": "gameIconUrl", @@ -1494,13 +1350,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/5" + "type": "string" } }, "readOnly": true @@ -1517,13 +1371,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/5" + "type": "string" } }, "readOnly": true @@ -1540,13 +1392,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/reporters/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/reporters/5" + "type": "string" } }, "readOnly": true @@ -1563,13 +1413,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/resolvers/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/resolvers/5" + "type": "string" } }, "readOnly": true @@ -1586,13 +1434,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/5" + "type": "string" } }, "readOnly": true @@ -1627,6 +1473,181 @@ "description": "", "operationId": "achievements.show", "parameters": [ + { + "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", + "medianTimeToUnlockSeconds", + "medianTimeToUnlockHardcoreSeconds", + "medianTimeToUnlockSamples", + "medianTimeToUnlockHardcoreSamples", + "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", + "rankHardcore", + "rankCasual", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "lastGame", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "leaderboardEntries", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "userGameListEntries", + "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", + "timesCompleted", + "timesMastered", + "medianTimeToCompleteSeconds", + "medianTimeToMasterSeconds", + "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", + "medianTimeToBeatSeconds", + "medianTimeToBeatHardcoreSeconds", + "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" + } + } + }, { "name": "achievement", "in": "path", @@ -1634,17 +1655,6 @@ "allowEmptyValue": false, "schema": { "type": "string" - }, - "examples": { - "1": { - "value": "1" - }, - "2": { - "value": "2" - }, - "3": { - "value": "3" - } } } ], @@ -1662,8 +1672,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -1686,8 +1695,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "attributes": { "type": "object", @@ -1695,38 +1703,32 @@ "displayName": { "title": "displayName", "type": "string", - "readOnly": true, - "example": "Root" + "readOnly": true }, "avatarUrl": { "title": "avatarUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" + "readOnly": true }, "motto": { "title": "motto", "type": "string", - "readOnly": true, - "example": "" + "readOnly": true }, "points": { "title": "points", "type": "number", - "readOnly": true, - "example": 1236 + "readOnly": true }, "pointsHardcore": { "title": "pointsHardcore", "type": "number", - "readOnly": true, - "example": 7130 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 15687 + "readOnly": true }, "rankHardcore": { "title": "rankHardcore", @@ -1741,26 +1743,22 @@ "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "yieldPoints": { "title": "yieldPoints", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "joinedAt": { "title": "joinedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:22.000000Z" + "readOnly": true }, "lastActivityAt": { "title": "lastActivityAt", "type": "string", - "readOnly": true, - "example": "2026-08-06T03:46:59.000000Z" + "readOnly": true }, "deletedAt": { "title": "deletedAt", @@ -1770,44 +1768,27 @@ "isUnranked": { "title": "isUnranked", "type": "boolean", - "readOnly": true, - "example": false + "readOnly": true }, "isUserWallActive": { "title": "isUserWallActive", "type": "boolean", - "readOnly": true, - "example": true + "readOnly": true }, "richPresence": { "title": "richPresence", "type": "string", - "readOnly": true, - "example": "Playing Assumenda Pariatur" + "readOnly": true }, "richPresenceUpdatedAt": { "title": "richPresenceUpdatedAt", "type": "string", - "readOnly": true, - "example": "2026-04-18T04:34:36.000000Z" + "readOnly": true }, "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 - } - } + "readOnly": true }, "displayableRoles": { "title": "displayableRoles", @@ -1829,13 +1810,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -1852,13 +1831,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -1875,13 +1852,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -1898,13 +1873,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -1921,13 +1894,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -1944,13 +1915,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -1967,13 +1936,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -1990,13 +1957,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -2013,13 +1978,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -2036,13 +1999,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -2059,13 +2020,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -2082,13 +2041,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -2111,8 +2068,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -2120,44 +2076,37 @@ "title": { "title": "title", "type": "string", - "readOnly": true, - "example": "Quia Impedit Libero Quam" + "readOnly": true }, "pointsTotal": { "title": "pointsTotal", "type": "number", - "readOnly": true, - "example": 189 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 341 + "readOnly": true }, "achievementsPublished": { "title": "achievementsPublished", "type": "number", - "readOnly": true, - "example": 20 + "readOnly": true }, "achievementsUnpublished": { "title": "achievementsUnpublished", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "timesCompleted": { "title": "timesCompleted", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "timesMastered": { "title": "timesMastered", "type": "number", - "readOnly": true, - "example": 2 + "readOnly": true }, "medianTimeToCompleteSeconds": { "title": "medianTimeToCompleteSeconds", @@ -2167,8 +2116,7 @@ "medianTimeToMasterSeconds": { "title": "medianTimeToMasterSeconds", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "badgeUrl": { "title": "badgeUrl", @@ -2178,8 +2126,7 @@ "achievementsFirstPublishedAt": { "title": "achievementsFirstPublishedAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" + "readOnly": true }, "types": { "title": "types", @@ -2189,14 +2136,12 @@ "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "readOnly": true }, "updatedAt": { "title": "updatedAt", "type": "string", - "readOnly": true, - "example": "2026-01-09T02:06:22.000000Z" + "readOnly": true } } }, @@ -2213,13 +2158,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -2236,13 +2179,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" + "type": "string" } }, "readOnly": true @@ -2265,8 +2206,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "3" + "type": "string" }, "attributes": { "type": "object", @@ -2274,8 +2214,7 @@ "body": { "title": "body", "type": "string", - "readOnly": true, - "example": "Excited to play this!" + "readOnly": true }, "authorAvatarUrl": { "title": "authorAvatarUrl", @@ -2295,14 +2234,12 @@ "permalink": { "title": "permalink", "type": "string", - "readOnly": true, - "example": "" + "readOnly": true }, "submittedAt": { "title": "submittedAt", "type": "string", - "readOnly": true, - "example": "2026-05-05T22:41:05.000000Z" + "readOnly": true } } }, @@ -2319,13 +2256,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/3" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/3" + "type": "string" } }, "readOnly": true @@ -2348,45 +2283,38 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", "properties": { "title": { "title": "title", - "type": "string", - "example": "Quia Impedit Libero Quam" + "type": "string" }, "sortTitle": { "title": "sortTitle", - "type": "string", - "example": "quia impedit libero quam" + "type": "string" }, "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "imageBoxArtUrl": { "title": "imageBoxArtUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "imageTitleUrl": { "title": "imageTitleUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000010.png" + "readOnly": true }, "imageIngameUrl": { "title": "imageIngameUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "releasedAt": { "title": "releasedAt", @@ -2398,43 +2326,35 @@ }, "playersTotal": { "title": "playersTotal", - "type": "number", - "example": 82 + "type": "number" }, "playersHardcore": { "title": "playersHardcore", - "type": "number", - "example": 82 + "type": "number" }, "achievementsPublished": { "title": "achievementsPublished", - "type": "number", - "example": 20 + "type": "number" }, "achievementsUnpublished": { "title": "achievementsUnpublished", - "type": "number", - "example": 0 + "type": "number" }, "pointsTotal": { "title": "pointsTotal", - "type": "number", - "example": 189 + "type": "number" }, "pointsWeighted": { "title": "pointsWeighted", - "type": "number", - "example": 341 + "type": "number" }, "timesBeaten": { "title": "timesBeaten", - "type": "number", - "example": 0 + "type": "number" }, "timesBeatenHardcore": { "title": "timesBeatenHardcore", - "type": "number", - "example": 1 + "type": "number" }, "medianTimeToBeatSeconds": { "title": "medianTimeToBeatSeconds", @@ -2442,8 +2362,7 @@ }, "medianTimeToBeatHardcoreSeconds": { "title": "medianTimeToBeatHardcoreSeconds", - "type": "number", - "example": 5153 + "type": "number" } } }, @@ -2460,13 +2379,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" } }, "readOnly": true @@ -2483,13 +2400,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -2506,13 +2421,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" } }, "readOnly": true @@ -2529,13 +2442,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" } }, "readOnly": true @@ -2552,13 +2463,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" } }, "readOnly": true @@ -2575,13 +2484,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" } }, "readOnly": true @@ -2604,8 +2511,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -2613,14 +2519,12 @@ "unlockedAt": { "title": "unlockedAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" + "readOnly": true }, "unlockedHardcoreAt": { "title": "unlockedHardcoreAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" + "readOnly": true } } }, @@ -2637,13 +2541,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/1" + "type": "string" } }, "readOnly": true @@ -2660,13 +2562,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" } }, "readOnly": true @@ -2683,13 +2583,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -2712,8 +2610,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "5" + "type": "string" }, "attributes": { "type": "object", @@ -2721,32 +2618,27 @@ "state": { "title": "state", "type": "string", - "readOnly": true, - "example": "open" + "readOnly": true }, "type": { "title": "type", "type": "string", - "readOnly": true, - "example": "did_not_trigger" + "readOnly": true }, "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" + "readOnly": true }, "hardcore": { "title": "hardcore", "type": "boolean", - "readOnly": true, - "example": 1 + "readOnly": true }, "reportedAt": { "title": "reportedAt", "type": "string", - "readOnly": true, - "example": "2026-06-05T19:41:03.000000Z" + "readOnly": true }, "resolvedAt": { "title": "resolvedAt", @@ -2756,14 +2648,12 @@ "ticketableType": { "title": "ticketableType", "type": "string", - "readOnly": true, - "example": "achievement" + "readOnly": true }, "ticketableId": { "title": "ticketableId", "type": "number", - "readOnly": true, - "example": 3801 + "readOnly": true }, "gameIconUrl": { "title": "gameIconUrl", @@ -2790,13 +2680,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/5" + "type": "string" } }, "readOnly": true @@ -2813,13 +2701,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/5" + "type": "string" } }, "readOnly": true @@ -2836,13 +2722,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/reporters/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/reporters/5" + "type": "string" } }, "readOnly": true @@ -2859,13 +2743,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/resolvers/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/resolvers/5" + "type": "string" } }, "readOnly": true @@ -2882,13 +2764,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/5" + "type": "string" } }, "readOnly": true @@ -2922,80 +2802,153 @@ "/achievements/{achievement}/comments": { "get": { "tags": ["Achievements"], - "summary": "Show comments", + "summary": "Show the comments of a achievement", "description": "", "operationId": "achievements.comments", "parameters": [ { - "name": "achievement", - "in": "path", - "required": true, + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, "allowEmptyValue": false, "schema": { - "type": "string" - }, - "examples": { - "1": { - "value": "1" - }, - "2": { - "value": "2" - }, - "3": { - "value": "3" - } + "default": 50, + "type": "integer" } - } - ], - "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" - } - } - } + }, + { + "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", "submittedAt", "-submittedAt"], + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "submittedAt": "By submittedAt, ascending", + "-submittedAt": "By submittedAt, descending" } } } }, - "400": { - "$ref": "#/components/responses/400" + { + "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" + } + } }, - "401": { - "$ref": "#/components/responses/401" + { + "name": "fields[comments]", + "in": "query", + "description": "Only return these fields for the \"comments\" 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": [ + "body", + "authorAvatarUrl", + "authorDisplayName", + "authorId", + "permalink", + "submittedAt", + "author" + ], + "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", + "rankHardcore", + "rankCasual", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "lastGame", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "leaderboardEntries", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "userGameListEntries", + "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": ["author"], + "type": "string" + } + } }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - }, - "/achievements/{achievement}/player-achievements": { - "get": { - "tags": ["Achievements"], - "summary": "Show playerAchievements", - "description": "", - "operationId": "achievements.playerAchievements", - "parameters": [ { "name": "achievement", "in": "path", @@ -3003,23 +2956,12 @@ "allowEmptyValue": false, "schema": { "type": "string" - }, - "examples": { - "1": { - "value": "1" - }, - "2": { - "value": "2" - }, - "3": { - "value": "3" - } } } ], "responses": { "200": { - "description": "ShowRelated achievements", + "description": "The comments related to a achievement", "content": { "application/vnd.api+json": { "schema": { @@ -3031,15 +2973,14 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.player-achievements.resource.fetch" + "$ref": "#/components/schemas/resources.comments.resource.fetch" } } } @@ -3059,13 +3000,284 @@ } } }, - "/achievements/{achievement}/tickets": { + "/achievements/{achievement}/player-achievements": { "get": { "tags": ["Achievements"], - "summary": "Show tickets", + "summary": "Show the playerAchievements of a achievement", "description": "", - "operationId": "achievements.tickets", + "operationId": "achievements.playerAchievements", "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": 50, + "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", + "unlockedAt", + "-unlockedAt", + "unlockedHardcoreAt", + "-unlockedHardcoreAt" + ], + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "unlockedAt": "By unlockedAt, ascending", + "-unlockedAt": "By unlockedAt, descending", + "unlockedHardcoreAt": "By unlockedHardcoreAt, ascending", + "-unlockedHardcoreAt": "By unlockedHardcoreAt, 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" + } + } + }, + { + "name": "filter[achievementSetId]", + "in": "query", + "description": "Applies the achievementSetId 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[unlockedFrom]", + "in": "query", + "description": "Applies the unlockedFrom scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "filter[unlockedTo]", + "in": "query", + "description": "Applies the unlockedTo scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "fields[player-achievements]", + "in": "query", + "description": "Only return these fields for the \"player-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": [ + "unlockedAt", + "unlockedHardcoreAt", + "achievement", + "user", + "game" + ], + "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", + "medianTimeToUnlockSeconds", + "medianTimeToUnlockHardcoreSeconds", + "medianTimeToUnlockSamples", + "medianTimeToUnlockHardcoreSamples", + "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", + "rankHardcore", + "rankCasual", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "lastGame", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "leaderboardEntries", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "userGameListEntries", + "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", + "medianTimeToBeatSeconds", + "medianTimeToBeatHardcoreSeconds", + "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": ["achievement", "user", "game"], + "type": "string" + } + } + }, { "name": "achievement", "in": "path", @@ -3073,23 +3285,12 @@ "allowEmptyValue": false, "schema": { "type": "string" - }, - "examples": { - "1": { - "value": "1" - }, - "2": { - "value": "2" - }, - "3": { - "value": "3" - } } } ], "responses": { "200": { - "description": "ShowRelated achievements", + "description": "The player-achievements related to a achievement", "content": { "application/vnd.api+json": { "schema": { @@ -3101,15 +3302,14 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.tickets.resource.fetch" + "$ref": "#/components/schemas/resources.player-achievements.resource.fetch" } } } @@ -3129,113 +3329,566 @@ } } }, - "/achievement-sets/{achievement_set}": { + "/achievements/{achievement}/tickets": { "get": { - "tags": ["Achievement-sets"], - "summary": "Show one achievement-set", + "tags": ["Achievements"], + "summary": "Show the tickets of a achievement", "description": "", - "operationId": "achievement-sets.show", + "operationId": "achievements.tickets", "parameters": [ { - "name": "achievement_set", - "in": "path", - "required": true, + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": 25, + "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", + "state", + "-state", + "reportedAt", + "-reportedAt", + "resolvedAt", + "-resolvedAt" + ], + "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" + } + } + } + }, + { + "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" + } + } + }, + { + "name": "filter[state]", + "in": "query", + "description": "Filters the records", + "required": false, "allowEmptyValue": false, "schema": { "type": "string" - }, - "examples": { - "1": { - "value": "1" - }, - "2": { - "value": "2" - }, - "3": { - "value": "3" + } + }, + { + "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" } } - } - ], - "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"], - "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://media.retroachievements.org/Images/000002.png" - }, - "imageBoxArtUrl": { - "title": "imageBoxArtUrl", - "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" - }, - "imageTitleUrl": { - "title": "imageTitleUrl", - "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000010.png" - }, - "imageIngameUrl": { - "title": "imageIngameUrl", - "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" - }, - "releasedAt": { + }, + { + "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", + "medianTimeToUnlockSeconds", + "medianTimeToUnlockHardcoreSeconds", + "medianTimeToUnlockSamples", + "medianTimeToUnlockHardcoreSamples", + "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", + "rankHardcore", + "rankCasual", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "lastGame", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "leaderboardEntries", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "userGameListEntries", + "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", + "reporter.lastGame", + "resolver", + "resolver.lastGame", + "author", + "author.lastGame" + ], + "type": "string" + } + } + }, + { + "name": "achievement", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The tickets related to a achievement", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string" + } + } + }, + "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" + } + } + } + }, + "/achievement-sets/{achievement_set}": { + "get": { + "tags": ["Achievement-sets"], + "summary": "Show one achievement-set", + "description": "", + "operationId": "achievement-sets.show", + "parameters": [ + { + "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", + "timesCompleted", + "timesMastered", + "medianTimeToCompleteSeconds", + "medianTimeToMasterSeconds", + "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", + "medianTimeToBeatSeconds", + "medianTimeToBeatHardcoreSeconds", + "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": ["games"], + "type": "string" + } + } + }, + { + "name": "achievement_set", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + } + ], + "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" + } + } + }, + "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"], + "properties": { + "type": { + "title": "type", + "default": "games", + "type": "string" + }, + "id": { + "type": "string" + }, + "attributes": { + "type": "object", + "properties": { + "title": { + "title": "title", + "type": "string" + }, + "sortTitle": { + "title": "sortTitle", + "type": "string" + }, + "badgeUrl": { + "title": "badgeUrl", + "type": "string", + "readOnly": true + }, + "imageBoxArtUrl": { + "title": "imageBoxArtUrl", + "type": "string", + "readOnly": true + }, + "imageTitleUrl": { + "title": "imageTitleUrl", + "type": "string", + "readOnly": true + }, + "imageIngameUrl": { + "title": "imageIngameUrl", + "type": "string", + "readOnly": true + }, + "releasedAt": { "title": "releasedAt", "type": "string" }, @@ -3245,43 +3898,35 @@ }, "playersTotal": { "title": "playersTotal", - "type": "number", - "example": 82 + "type": "number" }, "playersHardcore": { "title": "playersHardcore", - "type": "number", - "example": 82 + "type": "number" }, "achievementsPublished": { "title": "achievementsPublished", - "type": "number", - "example": 20 + "type": "number" }, "achievementsUnpublished": { "title": "achievementsUnpublished", - "type": "number", - "example": 0 + "type": "number" }, "pointsTotal": { "title": "pointsTotal", - "type": "number", - "example": 189 + "type": "number" }, "pointsWeighted": { "title": "pointsWeighted", - "type": "number", - "example": 341 + "type": "number" }, "timesBeaten": { "title": "timesBeaten", - "type": "number", - "example": 0 + "type": "number" }, "timesBeatenHardcore": { "title": "timesBeatenHardcore", - "type": "number", - "example": 1 + "type": "number" }, "medianTimeToBeatSeconds": { "title": "medianTimeToBeatSeconds", @@ -3289,8 +3934,7 @@ }, "medianTimeToBeatHardcoreSeconds": { "title": "medianTimeToBeatHardcoreSeconds", - "type": "number", - "example": 5153 + "type": "number" } } }, @@ -3307,13 +3951,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" } }, "readOnly": true @@ -3330,13 +3972,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -3353,13 +3993,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" } }, "readOnly": true @@ -3376,13 +4014,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" } }, "readOnly": true @@ -3399,13 +4035,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" } }, "readOnly": true @@ -3422,13 +4056,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" } }, "readOnly": true @@ -3451,8 +4083,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -3460,56 +4091,47 @@ "version": { "title": "version", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2026-05-31T20:21:52.000000Z" + "readOnly": true }, "updatedAt": { "title": "updatedAt", "type": "string", - "readOnly": true, - "example": "2026-06-10T20:57:02.000000Z" + "readOnly": true }, "playersTotal": { "title": "playersTotal", "type": "number", - "readOnly": true, - "example": 83 + "readOnly": true }, "playersHardcore": { "title": "playersHardcore", "type": "number", - "readOnly": true, - "example": 83 + "readOnly": true }, "achievementsPublished": { "title": "achievementsPublished", "type": "number", - "readOnly": true, - "example": 10 + "readOnly": true }, "achievementsUnpublished": { "title": "achievementsUnpublished", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "pointsTotal": { "title": "pointsTotal", "type": "number", - "readOnly": true, - "example": 101 + "readOnly": true }, "achievementSetId": { "title": "achievementSetId", "type": "string", - "readOnly": true, - "example": 215 + "readOnly": true } } }, @@ -3526,13 +4148,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -3566,10 +4186,161 @@ "/achievement-sets/{achievement_set}/achievement-set-versions": { "get": { "tags": ["Achievement-sets"], - "summary": "Show achievementSetVersions", + "summary": "Show the achievementSetVersions of a achievement-set", "description": "", "operationId": "achievement-sets.achievementSetVersions", "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": 50, + "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", + "createdAt", + "-createdAt", + "updatedAt", + "-updatedAt" + ], + "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" + } + } + } + }, + { + "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" + } + } + }, + { + "name": "filter[achievementSetId]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": "", + "type": "string" + } + }, + { + "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", + "timesCompleted", + "timesMastered", + "medianTimeToCompleteSeconds", + "medianTimeToMasterSeconds", + "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" + } + } + }, { "name": "achievement_set", "in": "path", @@ -3577,23 +4348,12 @@ "allowEmptyValue": false, "schema": { "type": "string" - }, - "examples": { - "1": { - "value": "1" - }, - "2": { - "value": "2" - }, - "3": { - "value": "3" - } } } ], "responses": { "200": { - "description": "ShowRelated achievement-sets", + "description": "The achievement-set-versions related to a achievement-set", "content": { "application/vnd.api+json": { "schema": { @@ -3605,8 +4365,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -3647,6 +4406,7 @@ "required": false, "allowEmptyValue": false, "schema": { + "default": 50, "type": "integer" } }, @@ -3732,23 +4492,9 @@ "explode": true, "schema": { "default": [], - "type": "array", - "items": { - "type": "string" - } - }, - "examples": { - "empty": { - "value": [] - }, - "1": { - "value": ["1"] - }, - "2": { - "value": ["2"] - }, - "3": { - "value": ["3"] + "type": "array", + "items": { + "type": "string" } } }, @@ -3761,11 +4507,6 @@ "schema": { "default": "", "type": "string" - }, - "examples": { - "1": { - "value": 1 - } } }, { @@ -3979,8 +4720,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -4006,8 +4746,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "attributes": { "type": "object", @@ -4015,38 +4754,32 @@ "displayName": { "title": "displayName", "type": "string", - "readOnly": true, - "example": "Root" + "readOnly": true }, "avatarUrl": { "title": "avatarUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" + "readOnly": true }, "motto": { "title": "motto", "type": "string", - "readOnly": true, - "example": "" + "readOnly": true }, "points": { "title": "points", "type": "number", - "readOnly": true, - "example": 1236 + "readOnly": true }, "pointsHardcore": { "title": "pointsHardcore", "type": "number", - "readOnly": true, - "example": 7130 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 15687 + "readOnly": true }, "rankHardcore": { "title": "rankHardcore", @@ -4061,26 +4794,22 @@ "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "yieldPoints": { "title": "yieldPoints", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "joinedAt": { "title": "joinedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:22.000000Z" + "readOnly": true }, "lastActivityAt": { "title": "lastActivityAt", "type": "string", - "readOnly": true, - "example": "2026-08-06T03:46:59.000000Z" + "readOnly": true }, "deletedAt": { "title": "deletedAt", @@ -4090,44 +4819,27 @@ "isUnranked": { "title": "isUnranked", "type": "boolean", - "readOnly": true, - "example": false + "readOnly": true }, "isUserWallActive": { "title": "isUserWallActive", "type": "boolean", - "readOnly": true, - "example": true + "readOnly": true }, "richPresence": { "title": "richPresence", "type": "string", - "readOnly": true, - "example": "Playing Assumenda Pariatur" + "readOnly": true }, "richPresenceUpdatedAt": { "title": "richPresenceUpdatedAt", "type": "string", - "readOnly": true, - "example": "2026-04-18T04:34:36.000000Z" + "readOnly": true }, "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 - } - } + "readOnly": true }, "displayableRoles": { "title": "displayableRoles", @@ -4149,13 +4861,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -4172,13 +4882,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -4195,13 +4903,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -4218,13 +4924,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -4241,13 +4945,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -4264,13 +4966,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -4287,13 +4987,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -4310,13 +5008,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -4333,13 +5029,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -4356,13 +5050,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -4379,13 +5071,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -4402,13 +5092,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -4431,45 +5119,38 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", "properties": { "title": { "title": "title", - "type": "string", - "example": "Quia Impedit Libero Quam" + "type": "string" }, "sortTitle": { "title": "sortTitle", - "type": "string", - "example": "quia impedit libero quam" + "type": "string" }, "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "imageBoxArtUrl": { "title": "imageBoxArtUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "imageTitleUrl": { "title": "imageTitleUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000010.png" + "readOnly": true }, "imageIngameUrl": { "title": "imageIngameUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "releasedAt": { "title": "releasedAt", @@ -4481,43 +5162,35 @@ }, "playersTotal": { "title": "playersTotal", - "type": "number", - "example": 82 + "type": "number" }, "playersHardcore": { "title": "playersHardcore", - "type": "number", - "example": 82 + "type": "number" }, "achievementsPublished": { "title": "achievementsPublished", - "type": "number", - "example": 20 + "type": "number" }, "achievementsUnpublished": { "title": "achievementsUnpublished", - "type": "number", - "example": 0 + "type": "number" }, "pointsTotal": { "title": "pointsTotal", - "type": "number", - "example": 189 + "type": "number" }, "pointsWeighted": { "title": "pointsWeighted", - "type": "number", - "example": 341 + "type": "number" }, "timesBeaten": { "title": "timesBeaten", - "type": "number", - "example": 0 + "type": "number" }, "timesBeatenHardcore": { "title": "timesBeatenHardcore", - "type": "number", - "example": 1 + "type": "number" }, "medianTimeToBeatSeconds": { "title": "medianTimeToBeatSeconds", @@ -4525,8 +5198,7 @@ }, "medianTimeToBeatHardcoreSeconds": { "title": "medianTimeToBeatHardcoreSeconds", - "type": "number", - "example": 5153 + "type": "number" } } }, @@ -4543,13 +5215,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" } }, "readOnly": true @@ -4566,13 +5236,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -4589,13 +5257,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" } }, "readOnly": true @@ -4612,13 +5278,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" } }, "readOnly": true @@ -4635,13 +5299,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" } }, "readOnly": true @@ -4658,13 +5320,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" } }, "readOnly": true @@ -4706,6 +5366,7 @@ "required": false, "allowEmptyValue": false, "schema": { + "default": 50, "type": "integer" } }, @@ -4763,20 +5424,6 @@ "items": { "type": "string" } - }, - "examples": { - "empty": { - "value": [] - }, - "1": { - "value": ["1"] - }, - "2": { - "value": ["2"] - }, - "3": { - "value": ["3"] - } } }, { @@ -4788,17 +5435,6 @@ "schema": { "default": "", "type": "string" - }, - "examples": { - "215": { - "value": 215 - }, - "303": { - "value": 303 - }, - "306": { - "value": 306 - } } }, { @@ -4889,8 +5525,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -4916,8 +5551,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -4925,44 +5559,37 @@ "title": { "title": "title", "type": "string", - "readOnly": true, - "example": "Quia Impedit Libero Quam" + "readOnly": true }, "pointsTotal": { "title": "pointsTotal", "type": "number", - "readOnly": true, - "example": 189 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 341 + "readOnly": true }, "achievementsPublished": { "title": "achievementsPublished", "type": "number", - "readOnly": true, - "example": 20 + "readOnly": true }, "achievementsUnpublished": { "title": "achievementsUnpublished", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "timesCompleted": { "title": "timesCompleted", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "timesMastered": { "title": "timesMastered", "type": "number", - "readOnly": true, - "example": 2 + "readOnly": true }, "medianTimeToCompleteSeconds": { "title": "medianTimeToCompleteSeconds", @@ -4972,8 +5599,7 @@ "medianTimeToMasterSeconds": { "title": "medianTimeToMasterSeconds", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "badgeUrl": { "title": "badgeUrl", @@ -4983,8 +5609,7 @@ "achievementsFirstPublishedAt": { "title": "achievementsFirstPublishedAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" + "readOnly": true }, "types": { "title": "types", @@ -4994,14 +5619,12 @@ "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "readOnly": true }, "updatedAt": { "title": "updatedAt", "type": "string", - "readOnly": true, - "example": "2026-01-09T02:06:22.000000Z" + "readOnly": true } } }, @@ -5018,13 +5641,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -5041,13 +5662,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" + "type": "string" } }, "readOnly": true @@ -5089,6 +5708,7 @@ "required": false, "allowEmptyValue": false, "schema": { + "default": 50, "type": "integer" } }, @@ -5146,20 +5766,6 @@ "items": { "type": "string" } - }, - "examples": { - "empty": { - "value": [] - }, - "1": { - "value": ["1"] - }, - "2": { - "value": ["2"] - }, - "3": { - "value": ["3"] - } } }, { @@ -5311,8 +5917,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -5338,8 +5943,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "3" + "type": "string" }, "attributes": { "type": "object", @@ -5357,14 +5961,12 @@ "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000007.png" + "readOnly": true }, "state": { "title": "state", "type": "string", - "readOnly": true, - "example": "concluded" + "readOnly": true }, "playersTotal": { "title": "playersTotal", @@ -5379,14 +5981,12 @@ "activeFrom": { "title": "activeFrom", "type": "string", - "readOnly": true, - "example": "2026-02-07T00:00:00.000000Z" + "readOnly": true }, "activeThrough": { "title": "activeThrough", "type": "string", - "readOnly": true, - "example": "2026-02-28T00:00:00.000000Z" + "readOnly": true } } }, @@ -5403,13 +6003,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/3" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/3" + "type": "string" } }, "readOnly": true @@ -5426,13 +6024,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/event-achievements/3" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/event-achievements/3" + "type": "string" } }, "readOnly": true @@ -5455,8 +6051,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -5464,38 +6059,32 @@ "title": { "title": "title", "type": "string", - "readOnly": true, - "example": "Soluta Quasi!" + "readOnly": true }, "description": { "title": "description", "type": "string", - "readOnly": true, - "example": "Nisi et sit labore reprehenderit aliquam aspernatur explicabo. True." + "readOnly": true }, "points": { "title": "points", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Badge/00001.png" + "readOnly": true }, "badgeLockedUrl": { "title": "badgeLockedUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Badge/00001_lock.png" + "readOnly": true }, "type": { "title": "type", @@ -5510,32 +6099,27 @@ "orderColumn": { "title": "orderColumn", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "unlocksTotal": { "title": "unlocksTotal", "type": "number", - "readOnly": true, - "example": 81 + "readOnly": true }, "unlocksHardcore": { "title": "unlocksHardcore", "type": "number", - "readOnly": true, - "example": 81 + "readOnly": true }, "unlockPercentage": { "title": "unlockPercentage", "type": "number", - "readOnly": true, - "example": 0.987804878 + "readOnly": true }, "unlockHardcorePercentage": { "title": "unlockHardcorePercentage", "type": "number", - "readOnly": true, - "example": 0.987804878 + "readOnly": true }, "medianTimeToUnlockSeconds": { "title": "medianTimeToUnlockSeconds", @@ -5560,14 +6144,12 @@ "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "readOnly": true }, "modifiedAt": { "title": "modifiedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "readOnly": true } } }, @@ -5584,13 +6166,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/developers/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/developers/1" + "type": "string" } }, "readOnly": true @@ -5607,13 +6187,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -5630,13 +6208,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" } }, "readOnly": true @@ -5653,13 +6229,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -5676,13 +6250,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/1" + "type": "string" } }, "readOnly": true @@ -5699,13 +6271,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" } }, "readOnly": true @@ -5728,8 +6298,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -5737,38 +6306,32 @@ "title": { "title": "title", "type": "string", - "readOnly": true, - "example": "Soluta Quasi!" + "readOnly": true }, "description": { "title": "description", "type": "string", - "readOnly": true, - "example": "Nisi et sit labore reprehenderit aliquam aspernatur explicabo. True." + "readOnly": true }, "points": { "title": "points", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Badge/00001.png" + "readOnly": true }, "badgeLockedUrl": { "title": "badgeLockedUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Badge/00001_lock.png" + "readOnly": true }, "type": { "title": "type", @@ -5783,32 +6346,27 @@ "orderColumn": { "title": "orderColumn", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "unlocksTotal": { "title": "unlocksTotal", "type": "number", - "readOnly": true, - "example": 81 + "readOnly": true }, "unlocksHardcore": { "title": "unlocksHardcore", "type": "number", - "readOnly": true, - "example": 81 + "readOnly": true }, "unlockPercentage": { "title": "unlockPercentage", "type": "number", - "readOnly": true, - "example": 0.987804878 + "readOnly": true }, "unlockHardcorePercentage": { "title": "unlockHardcorePercentage", "type": "number", - "readOnly": true, - "example": 0.987804878 + "readOnly": true }, "medianTimeToUnlockSeconds": { "title": "medianTimeToUnlockSeconds", @@ -5833,14 +6391,12 @@ "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "readOnly": true }, "modifiedAt": { "title": "modifiedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "readOnly": true } } }, @@ -5857,13 +6413,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/developers/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/developers/1" + "type": "string" } }, "readOnly": true @@ -5880,13 +6434,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -5903,13 +6455,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" } }, "readOnly": true @@ -5926,13 +6476,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -5949,13 +6497,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/1" + "type": "string" } }, "readOnly": true @@ -5972,13 +6518,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" } }, "readOnly": true @@ -6013,6 +6557,110 @@ "description": "", "operationId": "event-achievements.show", "parameters": [ + { + "name": "fields[event-achievements]", + "in": "query", + "description": "Only return these fields for the \"event-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": [ + "activeFrom", + "activeUntil", + "decorator", + "event", + "sourceAchievement", + "eventAchievement" + ], + "type": "string" + } + } + }, + { + "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", + "eventAchievements" + ], + "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", + "medianTimeToUnlockSeconds", + "medianTimeToUnlockHardcoreSeconds", + "medianTimeToUnlockSamples", + "medianTimeToUnlockHardcoreSamples", + "createdAt", + "modifiedAt", + "developer", + "achievementSet", + "comments", + "games", + "playerAchievements", + "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": ["event", "sourceAchievement", "eventAchievement"], + "type": "string" + } + } + }, { "name": "event_achievement", "in": "path", @@ -6020,17 +6668,6 @@ "allowEmptyValue": false, "schema": { "type": "string" - }, - "examples": { - "1": { - "value": "1" - }, - "2": { - "value": "2" - }, - "3": { - "value": "3" - } } } ], @@ -6048,8 +6685,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -6072,8 +6708,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "3" + "type": "string" }, "attributes": { "type": "object", @@ -6091,14 +6726,12 @@ "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000007.png" + "readOnly": true }, "state": { "title": "state", "type": "string", - "readOnly": true, - "example": "concluded" + "readOnly": true }, "playersTotal": { "title": "playersTotal", @@ -6113,14 +6746,12 @@ "activeFrom": { "title": "activeFrom", "type": "string", - "readOnly": true, - "example": "2026-02-07T00:00:00.000000Z" + "readOnly": true }, "activeThrough": { "title": "activeThrough", "type": "string", - "readOnly": true, - "example": "2026-02-28T00:00:00.000000Z" + "readOnly": true } } }, @@ -6137,13 +6768,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/3" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/3" + "type": "string" } }, "readOnly": true @@ -6160,13 +6789,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/event-achievements/3" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/event-achievements/3" + "type": "string" } }, "readOnly": true @@ -6189,8 +6816,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -6198,38 +6824,32 @@ "title": { "title": "title", "type": "string", - "readOnly": true, - "example": "Soluta Quasi!" + "readOnly": true }, "description": { "title": "description", "type": "string", - "readOnly": true, - "example": "Nisi et sit labore reprehenderit aliquam aspernatur explicabo. True." + "readOnly": true }, "points": { "title": "points", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Badge/00001.png" + "readOnly": true }, "badgeLockedUrl": { "title": "badgeLockedUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Badge/00001_lock.png" + "readOnly": true }, "type": { "title": "type", @@ -6244,32 +6864,27 @@ "orderColumn": { "title": "orderColumn", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "unlocksTotal": { "title": "unlocksTotal", "type": "number", - "readOnly": true, - "example": 81 + "readOnly": true }, "unlocksHardcore": { "title": "unlocksHardcore", "type": "number", - "readOnly": true, - "example": 81 + "readOnly": true }, "unlockPercentage": { "title": "unlockPercentage", "type": "number", - "readOnly": true, - "example": 0.987804878 + "readOnly": true }, "unlockHardcorePercentage": { "title": "unlockHardcorePercentage", "type": "number", - "readOnly": true, - "example": 0.987804878 + "readOnly": true }, "medianTimeToUnlockSeconds": { "title": "medianTimeToUnlockSeconds", @@ -6294,14 +6909,12 @@ "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "readOnly": true }, "modifiedAt": { "title": "modifiedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "readOnly": true } } }, @@ -6318,13 +6931,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/developers/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/developers/1" + "type": "string" } }, "readOnly": true @@ -6341,13 +6952,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -6364,13 +6973,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" } }, "readOnly": true @@ -6387,13 +6994,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -6410,13 +7015,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/1" + "type": "string" } }, "readOnly": true @@ -6433,13 +7036,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" } }, "readOnly": true @@ -6462,8 +7063,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -6471,38 +7071,32 @@ "title": { "title": "title", "type": "string", - "readOnly": true, - "example": "Soluta Quasi!" + "readOnly": true }, "description": { "title": "description", "type": "string", - "readOnly": true, - "example": "Nisi et sit labore reprehenderit aliquam aspernatur explicabo. True." + "readOnly": true }, "points": { "title": "points", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Badge/00001.png" + "readOnly": true }, "badgeLockedUrl": { "title": "badgeLockedUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Badge/00001_lock.png" + "readOnly": true }, "type": { "title": "type", @@ -6517,32 +7111,27 @@ "orderColumn": { "title": "orderColumn", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "unlocksTotal": { "title": "unlocksTotal", "type": "number", - "readOnly": true, - "example": 81 + "readOnly": true }, "unlocksHardcore": { "title": "unlocksHardcore", "type": "number", - "readOnly": true, - "example": 81 + "readOnly": true }, "unlockPercentage": { "title": "unlockPercentage", "type": "number", - "readOnly": true, - "example": 0.987804878 + "readOnly": true }, "unlockHardcorePercentage": { "title": "unlockHardcorePercentage", "type": "number", - "readOnly": true, - "example": 0.987804878 + "readOnly": true }, "medianTimeToUnlockSeconds": { "title": "medianTimeToUnlockSeconds", @@ -6567,14 +7156,12 @@ "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "readOnly": true }, "modifiedAt": { "title": "modifiedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "readOnly": true } } }, @@ -6591,13 +7178,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/developers/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/developers/1" + "type": "string" } }, "readOnly": true @@ -6614,13 +7199,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -6637,13 +7220,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" } }, "readOnly": true @@ -6660,13 +7241,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -6683,13 +7262,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/1" + "type": "string" } }, "readOnly": true @@ -6706,13 +7283,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" } }, "readOnly": true @@ -6757,6 +7332,7 @@ "required": false, "allowEmptyValue": false, "schema": { + "default": 50, "type": "integer" } }, @@ -6818,14 +7394,6 @@ "items": { "type": "string" } - }, - "examples": { - "empty": { - "value": [] - }, - "3": { - "value": ["3"] - } } }, { @@ -6927,8 +7495,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -6954,8 +7521,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -6963,26 +7529,22 @@ "tierIndex": { "title": "tierIndex", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "label": { "title": "label", "type": "string", - "readOnly": true, - "example": "True" + "readOnly": true }, "pointsRequired": { "title": "pointsRequired", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000008.png" + "readOnly": true } } }, @@ -6999,13 +7561,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "type": "string" } }, "readOnly": true @@ -7028,8 +7588,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -7064,13 +7623,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "type": "string" } }, "readOnly": true @@ -7087,13 +7644,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/source-achievements/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/source-achievements/1" + "type": "string" } }, "readOnly": true @@ -7110,13 +7665,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/event-achievements/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/event-achievements/1" + "type": "string" } }, "readOnly": true @@ -7151,6 +7704,90 @@ "description": "", "operationId": "events.show", "parameters": [ + { + "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", + "eventAchievements" + ], + "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": "fields[event-achievements]", + "in": "query", + "description": "Only return these fields for the \"event-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": [ + "activeFrom", + "activeUntil", + "decorator", + "event", + "sourceAchievement", + "eventAchievement" + ], + "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", "eventAchievements"], + "type": "string" + } + } + }, { "name": "event", "in": "path", @@ -7158,11 +7795,6 @@ "allowEmptyValue": false, "schema": { "type": "string" - }, - "examples": { - "3": { - "value": "3" - } } } ], @@ -7180,8 +7812,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -7204,8 +7835,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -7213,26 +7843,22 @@ "tierIndex": { "title": "tierIndex", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "label": { "title": "label", "type": "string", - "readOnly": true, - "example": "True" + "readOnly": true }, "pointsRequired": { "title": "pointsRequired", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000008.png" + "readOnly": true } } }, @@ -7249,13 +7875,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "type": "string" } }, "readOnly": true @@ -7278,8 +7902,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -7314,13 +7937,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "type": "string" } }, "readOnly": true @@ -7337,13 +7958,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/source-achievements/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/source-achievements/1" + "type": "string" } }, "readOnly": true @@ -7360,13 +7979,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/event-achievements/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/event-achievements/1" + "type": "string" } }, "readOnly": true @@ -7385,25 +8002,226 @@ } } }, - "400": { - "$ref": "#/components/responses/400" + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/events/{event}/event-achievements": { + "get": { + "tags": ["Events"], + "summary": "Show the eventAchievements of a event", + "description": "", + "operationId": "events.eventAchievements", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": 50, + "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", + "activeFrom", + "-activeFrom", + "activeUntil", + "-activeUntil" + ], + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "activeFrom": "By activeFrom, ascending", + "-activeFrom": "By activeFrom, descending", + "activeUntil": "By activeUntil, ascending", + "-activeUntil": "By activeUntil, 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" + } + } + }, + { + "name": "filter[active]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter[eventId]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter[evergreen]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "name": "fields[event-achievements]", + "in": "query", + "description": "Only return these fields for the \"event-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": [ + "activeFrom", + "activeUntil", + "decorator", + "event", + "sourceAchievement", + "eventAchievement" + ], + "type": "string" + } + } + }, + { + "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", + "eventAchievements" + ], + "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", + "medianTimeToUnlockSeconds", + "medianTimeToUnlockHardcoreSeconds", + "medianTimeToUnlockSamples", + "medianTimeToUnlockHardcoreSamples", + "createdAt", + "modifiedAt", + "developer", + "achievementSet", + "comments", + "games", + "playerAchievements", + "tickets" + ], + "type": "string" + } + } }, - "401": { - "$ref": "#/components/responses/401" + { + "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": ["event", "sourceAchievement", "eventAchievement"], + "type": "string" + } + } }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - }, - "/events/{event}/event-achievements": { - "get": { - "tags": ["Events"], - "summary": "Show eventAchievements", - "description": "", - "operationId": "events.eventAchievements", - "parameters": [ { "name": "event", "in": "path", @@ -7411,17 +8229,12 @@ "allowEmptyValue": false, "schema": { "type": "string" - }, - "examples": { - "3": { - "value": "3" - } } } ], "responses": { "200": { - "description": "ShowRelated events", + "description": "The event-achievements related to a event", "content": { "application/vnd.api+json": { "schema": { @@ -7433,8 +8246,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -7475,6 +8287,7 @@ "required": false, "allowEmptyValue": false, "schema": { + "default": 50, "type": "integer" } }, @@ -7556,20 +8369,6 @@ "items": { "type": "string" } - }, - "examples": { - "empty": { - "value": [] - }, - "1": { - "value": ["1"] - }, - "2": { - "value": ["2"] - }, - "3": { - "value": ["3"] - } } }, { @@ -7581,11 +8380,6 @@ "schema": { "default": "", "type": "string" - }, - "examples": { - "1": { - "value": 1 - } } }, { @@ -7735,8 +8529,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -7762,42 +8555,35 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", "properties": { "name": { "title": "name", - "type": "string", - "example": "Genesis/Mega Drive" + "type": "string" }, "nameFull": { "title": "nameFull", - "type": "string", - "example": "Sega Genesis/Mega Drive" + "type": "string" }, "nameShort": { "title": "nameShort", - "type": "string", - "example": "MD" + "type": "string" }, "manufacturer": { "title": "manufacturer", - "type": "string", - "example": "Sega" + "type": "string" }, "iconUrl": { "title": "iconUrl", "type": "string", - "readOnly": true, - "example": "https://raweb.test/assets/images/system/md.png" + "readOnly": true }, "active": { "title": "active", - "type": "boolean", - "example": true + "type": "boolean" } } } @@ -7815,8 +8601,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -7824,44 +8609,37 @@ "title": { "title": "title", "type": "string", - "readOnly": true, - "example": "Quia Impedit Libero Quam" + "readOnly": true }, "pointsTotal": { "title": "pointsTotal", "type": "number", - "readOnly": true, - "example": 189 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 341 + "readOnly": true }, "achievementsPublished": { "title": "achievementsPublished", "type": "number", - "readOnly": true, - "example": 20 + "readOnly": true }, "achievementsUnpublished": { "title": "achievementsUnpublished", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "timesCompleted": { "title": "timesCompleted", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "timesMastered": { "title": "timesMastered", "type": "number", - "readOnly": true, - "example": 2 + "readOnly": true }, "medianTimeToCompleteSeconds": { "title": "medianTimeToCompleteSeconds", @@ -7871,8 +8649,7 @@ "medianTimeToMasterSeconds": { "title": "medianTimeToMasterSeconds", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "badgeUrl": { "title": "badgeUrl", @@ -7882,8 +8659,7 @@ "achievementsFirstPublishedAt": { "title": "achievementsFirstPublishedAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" + "readOnly": true }, "types": { "title": "types", @@ -7893,14 +8669,12 @@ "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "readOnly": true }, "updatedAt": { "title": "updatedAt", "type": "string", - "readOnly": true, - "example": "2026-01-09T02:06:22.000000Z" + "readOnly": true } } }, @@ -7917,13 +8691,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -7940,13 +8712,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" + "type": "string" } }, "readOnly": true @@ -7969,8 +8739,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -7978,62 +8747,52 @@ "claimedAt": { "title": "claimedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:24:26.000000Z" + "readOnly": true }, "finishedAt": { "title": "finishedAt", "type": "string", - "readOnly": true, - "example": "2025-12-12T06:24:26.000000Z" + "readOnly": true }, "updatedAt": { "title": "updatedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:24:26.000000Z" + "readOnly": true }, "status": { "title": "status", "type": "string", - "readOnly": true, - "example": "complete" + "readOnly": true }, "claimType": { "title": "claimType", "type": "string", - "readOnly": true, - "example": "primary" + "readOnly": true }, "setType": { "title": "setType", "type": "string", - "readOnly": true, - "example": "new_set" + "readOnly": true }, "specialType": { "title": "specialType", "type": "string", - "readOnly": true, - "example": "none" + "readOnly": true }, "extensionsCount": { "title": "extensionsCount", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "minutesLeft": { "title": "minutesLeft", "type": "number", - "readOnly": true, - "example": 342109 + "readOnly": true }, "userId": { "title": "userId", "type": "string", - "readOnly": true, - "example": 91 + "readOnly": true }, "userDisplayName": { "title": "userDisplayName", @@ -8043,8 +8802,7 @@ "gameId": { "title": "gameId", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "gameTitle": { "title": "gameTitle", @@ -8081,13 +8839,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" } }, "readOnly": true @@ -8104,13 +8860,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -8133,8 +8887,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "3" + "type": "string" }, "attributes": { "type": "object", @@ -8142,8 +8895,7 @@ "body": { "title": "body", "type": "string", - "readOnly": true, - "example": "Excited to play this!" + "readOnly": true }, "authorAvatarUrl": { "title": "authorAvatarUrl", @@ -8163,14 +8915,12 @@ "permalink": { "title": "permalink", "type": "string", - "readOnly": true, - "example": "" + "readOnly": true }, "submittedAt": { "title": "submittedAt", "type": "string", - "readOnly": true, - "example": "2026-05-05T22:41:05.000000Z" + "readOnly": true } } }, @@ -8187,13 +8937,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/3" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/3" + "type": "string" } }, "readOnly": true @@ -8216,8 +8964,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -8225,20 +8972,17 @@ "raMd5": { "title": "raMd5", "type": "string", - "readOnly": true, - "example": "eDWamQy5GYZqRxvXkj6P6rjDULfnTddT" + "readOnly": true }, "name": { "title": "name", "type": "string", - "readOnly": true, - "example": "True" + "readOnly": true }, "compatibility": { "title": "compatibility", "type": "string", - "readOnly": true, - "example": "compatible" + "readOnly": true }, "patchUrl": { "title": "patchUrl", @@ -8248,14 +8992,12 @@ "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:57.000000Z" + "readOnly": true }, "updatedAt": { "title": "updatedAt", "type": "string", - "readOnly": true, - "example": "2026-04-25T20:56:02.000000Z" + "readOnly": true } } }, @@ -8272,13 +9014,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -8301,8 +9041,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "5" + "type": "string" }, "attributes": { "type": "object", @@ -8310,32 +9049,27 @@ "state": { "title": "state", "type": "string", - "readOnly": true, - "example": "open" + "readOnly": true }, "type": { "title": "type", "type": "string", - "readOnly": true, - "example": "did_not_trigger" + "readOnly": true }, "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" + "readOnly": true }, "hardcore": { "title": "hardcore", "type": "boolean", - "readOnly": true, - "example": 1 + "readOnly": true }, "reportedAt": { "title": "reportedAt", "type": "string", - "readOnly": true, - "example": "2026-06-05T19:41:03.000000Z" + "readOnly": true }, "resolvedAt": { "title": "resolvedAt", @@ -8345,14 +9079,12 @@ "ticketableType": { "title": "ticketableType", "type": "string", - "readOnly": true, - "example": "achievement" + "readOnly": true }, "ticketableId": { "title": "ticketableId", "type": "number", - "readOnly": true, - "example": 3801 + "readOnly": true }, "gameIconUrl": { "title": "gameIconUrl", @@ -8379,13 +9111,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/5" + "type": "string" } }, "readOnly": true @@ -8402,13 +9132,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/5" + "type": "string" } }, "readOnly": true @@ -8425,13 +9153,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/reporters/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/reporters/5" + "type": "string" } }, "readOnly": true @@ -8448,13 +9174,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/resolvers/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/resolvers/5" + "type": "string" } }, "readOnly": true @@ -8471,13 +9195,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/5" + "type": "string" } }, "readOnly": true @@ -8496,22 +9218,154 @@ } } }, - "400": { - "$ref": "#/components/responses/400" + "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": "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", + "medianTimeToBeatSeconds", + "medianTimeToBeatHardcoreSeconds", + "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", + "timesCompleted", + "timesMastered", + "medianTimeToCompleteSeconds", + "medianTimeToMasterSeconds", + "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" + } + } }, - "401": { - "$ref": "#/components/responses/401" - } - } - } - }, - "/games/{game}": { - "get": { - "tags": ["Games"], - "summary": "Show one game", - "description": "", - "operationId": "games.show", - "parameters": [ { "name": "game", "in": "path", @@ -8519,17 +9373,6 @@ "allowEmptyValue": false, "schema": { "type": "string" - }, - "examples": { - "1": { - "value": "1" - }, - "2": { - "value": "2" - }, - "3": { - "value": "3" - } } } ], @@ -8547,8 +9390,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -8571,42 +9413,35 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", "properties": { "name": { "title": "name", - "type": "string", - "example": "Genesis/Mega Drive" + "type": "string" }, "nameFull": { "title": "nameFull", - "type": "string", - "example": "Sega Genesis/Mega Drive" + "type": "string" }, "nameShort": { "title": "nameShort", - "type": "string", - "example": "MD" + "type": "string" }, "manufacturer": { "title": "manufacturer", - "type": "string", - "example": "Sega" + "type": "string" }, "iconUrl": { "title": "iconUrl", "type": "string", - "readOnly": true, - "example": "https://raweb.test/assets/images/system/md.png" + "readOnly": true }, "active": { "title": "active", - "type": "boolean", - "example": true + "type": "boolean" } } } @@ -8624,8 +9459,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -8633,44 +9467,37 @@ "title": { "title": "title", "type": "string", - "readOnly": true, - "example": "Quia Impedit Libero Quam" + "readOnly": true }, "pointsTotal": { "title": "pointsTotal", "type": "number", - "readOnly": true, - "example": 189 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 341 + "readOnly": true }, "achievementsPublished": { "title": "achievementsPublished", "type": "number", - "readOnly": true, - "example": 20 + "readOnly": true }, "achievementsUnpublished": { "title": "achievementsUnpublished", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "timesCompleted": { "title": "timesCompleted", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "timesMastered": { "title": "timesMastered", "type": "number", - "readOnly": true, - "example": 2 + "readOnly": true }, "medianTimeToCompleteSeconds": { "title": "medianTimeToCompleteSeconds", @@ -8680,8 +9507,7 @@ "medianTimeToMasterSeconds": { "title": "medianTimeToMasterSeconds", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "badgeUrl": { "title": "badgeUrl", @@ -8691,8 +9517,7 @@ "achievementsFirstPublishedAt": { "title": "achievementsFirstPublishedAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" + "readOnly": true }, "types": { "title": "types", @@ -8702,14 +9527,12 @@ "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "readOnly": true }, "updatedAt": { "title": "updatedAt", "type": "string", - "readOnly": true, - "example": "2026-01-09T02:06:22.000000Z" + "readOnly": true } } }, @@ -8726,13 +9549,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -8749,13 +9570,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" + "type": "string" } }, "readOnly": true @@ -8778,8 +9597,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -8787,62 +9605,52 @@ "claimedAt": { "title": "claimedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:24:26.000000Z" + "readOnly": true }, "finishedAt": { "title": "finishedAt", "type": "string", - "readOnly": true, - "example": "2025-12-12T06:24:26.000000Z" + "readOnly": true }, "updatedAt": { "title": "updatedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:24:26.000000Z" + "readOnly": true }, "status": { "title": "status", "type": "string", - "readOnly": true, - "example": "complete" + "readOnly": true }, "claimType": { "title": "claimType", "type": "string", - "readOnly": true, - "example": "primary" + "readOnly": true }, "setType": { "title": "setType", "type": "string", - "readOnly": true, - "example": "new_set" + "readOnly": true }, "specialType": { "title": "specialType", "type": "string", - "readOnly": true, - "example": "none" + "readOnly": true }, "extensionsCount": { "title": "extensionsCount", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "minutesLeft": { "title": "minutesLeft", "type": "number", - "readOnly": true, - "example": 342109 + "readOnly": true }, "userId": { "title": "userId", "type": "string", - "readOnly": true, - "example": 91 + "readOnly": true }, "userDisplayName": { "title": "userDisplayName", @@ -8852,8 +9660,7 @@ "gameId": { "title": "gameId", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "gameTitle": { "title": "gameTitle", @@ -8890,13 +9697,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" } }, "readOnly": true @@ -8913,13 +9718,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -8942,8 +9745,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "3" + "type": "string" }, "attributes": { "type": "object", @@ -8951,8 +9753,7 @@ "body": { "title": "body", "type": "string", - "readOnly": true, - "example": "Excited to play this!" + "readOnly": true }, "authorAvatarUrl": { "title": "authorAvatarUrl", @@ -8972,14 +9773,12 @@ "permalink": { "title": "permalink", "type": "string", - "readOnly": true, - "example": "" + "readOnly": true }, "submittedAt": { "title": "submittedAt", "type": "string", - "readOnly": true, - "example": "2026-05-05T22:41:05.000000Z" + "readOnly": true } } }, @@ -8996,13 +9795,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/3" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/3" + "type": "string" } }, "readOnly": true @@ -9025,8 +9822,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -9034,20 +9830,17 @@ "raMd5": { "title": "raMd5", "type": "string", - "readOnly": true, - "example": "eDWamQy5GYZqRxvXkj6P6rjDULfnTddT" + "readOnly": true }, "name": { "title": "name", "type": "string", - "readOnly": true, - "example": "True" + "readOnly": true }, "compatibility": { "title": "compatibility", "type": "string", - "readOnly": true, - "example": "compatible" + "readOnly": true }, "patchUrl": { "title": "patchUrl", @@ -9057,14 +9850,12 @@ "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:57.000000Z" + "readOnly": true }, "updatedAt": { "title": "updatedAt", "type": "string", - "readOnly": true, - "example": "2026-04-25T20:56:02.000000Z" + "readOnly": true } } }, @@ -9081,13 +9872,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -9110,8 +9899,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "5" + "type": "string" }, "attributes": { "type": "object", @@ -9119,32 +9907,27 @@ "state": { "title": "state", "type": "string", - "readOnly": true, - "example": "open" + "readOnly": true }, "type": { "title": "type", "type": "string", - "readOnly": true, - "example": "did_not_trigger" + "readOnly": true }, "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" + "readOnly": true }, "hardcore": { "title": "hardcore", "type": "boolean", - "readOnly": true, - "example": 1 + "readOnly": true }, "reportedAt": { "title": "reportedAt", "type": "string", - "readOnly": true, - "example": "2026-06-05T19:41:03.000000Z" + "readOnly": true }, "resolvedAt": { "title": "resolvedAt", @@ -9154,14 +9937,12 @@ "ticketableType": { "title": "ticketableType", "type": "string", - "readOnly": true, - "example": "achievement" + "readOnly": true }, "ticketableId": { "title": "ticketableId", "type": "number", - "readOnly": true, - "example": 3801 + "readOnly": true }, "gameIconUrl": { "title": "gameIconUrl", @@ -9188,13 +9969,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/5" + "type": "string" } }, "readOnly": true @@ -9211,13 +9990,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/5" + "type": "string" } }, "readOnly": true @@ -9234,13 +10011,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/reporters/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/reporters/5" + "type": "string" } }, "readOnly": true @@ -9257,13 +10032,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/resolvers/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/resolvers/5" + "type": "string" } }, "readOnly": true @@ -9280,13 +10053,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/5" + "type": "string" } }, "readOnly": true @@ -9305,25 +10076,740 @@ } } }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" + "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 the achievementSetClaims of a game", + "description": "", + "operationId": "games.achievementSetClaims", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": 50, + "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", + "claimedAt", + "-claimedAt", + "finishedAt", + "-finishedAt", + "updatedAt", + "-updatedAt", + "status", + "-status", + "claimType", + "-claimType", + "setType", + "-setType", + "specialType", + "-specialType", + "extensionsCount", + "-extensionsCount", + "gameTitle", + "-gameTitle", + "userDisplayName", + "-userDisplayName" + ], + "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" + } + } + } + }, + { + "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" + } + } + }, + { + "name": "filter[gameId]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": "", + "type": "string" + } + }, + { + "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" + } + }, + { + "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", + "rankHardcore", + "rankCasual", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "lastGame", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "leaderboardEntries", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "userGameListEntries", + "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", + "medianTimeToBeatSeconds", + "medianTimeToBeatHardcoreSeconds", + "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" + } + } + }, + { + "name": "game", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The achievement-set-claims related to a game", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string" + } + } + }, + "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}/comments": { + "get": { + "tags": ["Games"], + "summary": "Show the comments of a game", + "description": "", + "operationId": "games.comments", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": 50, + "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", "submittedAt", "-submittedAt"], + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "submittedAt": "By submittedAt, ascending", + "-submittedAt": "By submittedAt, 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" + } + } + }, + { + "name": "fields[comments]", + "in": "query", + "description": "Only return these fields for the \"comments\" 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": [ + "body", + "authorAvatarUrl", + "authorDisplayName", + "authorId", + "permalink", + "submittedAt", + "author" + ], + "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", + "rankHardcore", + "rankCasual", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "lastGame", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "leaderboardEntries", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "userGameListEntries", + "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": ["author"], + "type": "string" + } + } + }, + { + "name": "game", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The comments related to a game", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string" + } + } + }, + "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}/hashes": { + "get": { + "tags": ["Games"], + "summary": "Show the hashes of a game", + "description": "", + "operationId": "games.hashes", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": 50, + "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"], + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, 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" + } + } + }, + { + "name": "filter[compatibility][]", + "in": "query", + "description": "A list of compatibilitys to filter by.", + "required": false, + "allowEmptyValue": false, + "style": "form", + "explode": true, + "schema": { + "default": [], + "type": "array", + "items": { + "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": "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", + "medianTimeToBeatSeconds", + "medianTimeToBeatHardcoreSeconds", + "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": ["game"], + "type": "string" + } + } }, - "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", @@ -9331,23 +10817,12 @@ "allowEmptyValue": false, "schema": { "type": "string" - }, - "examples": { - "1": { - "value": "1" - }, - "2": { - "value": "2" - }, - "3": { - "value": "3" - } } } ], "responses": { "200": { - "description": "ShowRelated games", + "description": "The game-hashes related to a game", "content": { "application/vnd.api+json": { "schema": { @@ -9359,15 +10834,14 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.achievement-set-claims.resource.fetch" + "$ref": "#/components/schemas/resources.game-hashes.resource.fetch" } } } @@ -9375,189 +10849,365 @@ } } }, - "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": [ + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/games/{game}/tickets": { + "get": { + "tags": ["Games"], + "summary": "Show the tickets of a game", + "description": "", + "operationId": "games.tickets", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": 25, + "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", + "state", + "-state", + "reportedAt", + "-reportedAt", + "resolvedAt", + "-resolvedAt" + ], + "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" + } + } + } + }, + { + "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" + } + } + }, + { + "name": "filter[state]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "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": "game", - "in": "path", - "required": true, + "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": "string" - }, - "examples": { - "1": { - "value": "1" - }, - "2": { - "value": "2" - }, - "3": { - "value": "3" + "type": "array", + "items": { + "enum": [ + "title", + "description", + "points", + "pointsWeighted", + "badgeUrl", + "badgeLockedUrl", + "type", + "state", + "orderColumn", + "unlocksTotal", + "unlocksHardcore", + "unlockPercentage", + "unlockHardcorePercentage", + "medianTimeToUnlockSeconds", + "medianTimeToUnlockHardcoreSeconds", + "medianTimeToUnlockSamples", + "medianTimeToUnlockHardcoreSamples", + "createdAt", + "modifiedAt", + "developer", + "achievementSet", + "comments", + "games", + "playerAchievements", + "tickets" + ], + "type": "string" } } - } - ], - "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" - } - } - } - } + }, + { + "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" } } }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - }, - "/games/{game}/hashes": { - "get": { - "tags": ["Games"], - "summary": "Show hashes", - "description": "", - "operationId": "games.hashes", - "parameters": [ { - "name": "game", - "in": "path", - "required": true, + "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": "string" - }, - "examples": { - "1": { - "value": "1" - }, - "2": { - "value": "2" - }, - "3": { - "value": "3" + "type": "array", + "items": { + "enum": [ + "displayName", + "avatarUrl", + "motto", + "points", + "pointsHardcore", + "pointsWeighted", + "rankHardcore", + "rankCasual", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "lastGame", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "leaderboardEntries", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "userGameListEntries", + "wallComments", + "awards", + "followers", + "following" + ], + "type": "string" } } - } - ], - "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" - } - } - } - } + }, + { + "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", + "reporter.lastGame", + "resolver", + "resolver.lastGame", + "author", + "author.lastGame" + ], + "type": "string" } } }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - }, - "/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" - } + "schema": { + "type": "string" } } ], "responses": { "200": { - "description": "ShowRelated games", + "description": "The tickets related to a game", "content": { "application/vnd.api+json": { "schema": { @@ -9569,8 +11219,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -9611,6 +11260,7 @@ "required": false, "allowEmptyValue": false, "schema": { + "default": 50, "type": "integer" } }, @@ -9684,20 +11334,6 @@ "items": { "type": "string" } - }, - "examples": { - "empty": { - "value": [] - }, - "1": { - "value": ["1"] - }, - "2": { - "value": ["2"] - }, - "3": { - "value": ["3"] - } } }, { @@ -9776,8 +11412,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -9803,45 +11438,38 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", "properties": { "title": { "title": "title", - "type": "string", - "example": "Quia Impedit Libero Quam" + "type": "string" }, "sortTitle": { "title": "sortTitle", - "type": "string", - "example": "quia impedit libero quam" + "type": "string" }, "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "imageBoxArtUrl": { "title": "imageBoxArtUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "imageTitleUrl": { "title": "imageTitleUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000010.png" + "readOnly": true }, "imageIngameUrl": { "title": "imageIngameUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "releasedAt": { "title": "releasedAt", @@ -9853,43 +11481,35 @@ }, "playersTotal": { "title": "playersTotal", - "type": "number", - "example": 82 + "type": "number" }, "playersHardcore": { "title": "playersHardcore", - "type": "number", - "example": 82 + "type": "number" }, "achievementsPublished": { "title": "achievementsPublished", - "type": "number", - "example": 20 + "type": "number" }, "achievementsUnpublished": { "title": "achievementsUnpublished", - "type": "number", - "example": 0 + "type": "number" }, "pointsTotal": { "title": "pointsTotal", - "type": "number", - "example": 189 + "type": "number" }, "pointsWeighted": { "title": "pointsWeighted", - "type": "number", - "example": 341 + "type": "number" }, "timesBeaten": { "title": "timesBeaten", - "type": "number", - "example": 0 + "type": "number" }, "timesBeatenHardcore": { "title": "timesBeatenHardcore", - "type": "number", - "example": 1 + "type": "number" }, "medianTimeToBeatSeconds": { "title": "medianTimeToBeatSeconds", @@ -9897,8 +11517,7 @@ }, "medianTimeToBeatHardcoreSeconds": { "title": "medianTimeToBeatHardcoreSeconds", - "type": "number", - "example": 5153 + "type": "number" } } }, @@ -9915,13 +11534,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" } }, "readOnly": true @@ -9938,13 +11555,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -9961,13 +11576,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" } }, "readOnly": true @@ -9984,13 +11597,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" } }, "readOnly": true @@ -10007,13 +11618,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" } }, "readOnly": true @@ -10030,13 +11639,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" } }, "readOnly": true @@ -10071,6 +11678,47 @@ "description": "", "operationId": "hubs.show", "parameters": [ + { + "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" + } + } + }, { "name": "hub", "in": "path", @@ -10078,17 +11726,6 @@ "allowEmptyValue": false, "schema": { "type": "string" - }, - "examples": { - "1": { - "value": "1" - }, - "2": { - "value": "2" - }, - "3": { - "value": "3" - } } } ], @@ -10106,8 +11743,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -10130,45 +11766,38 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", "properties": { "title": { "title": "title", - "type": "string", - "example": "Quia Impedit Libero Quam" + "type": "string" }, "sortTitle": { "title": "sortTitle", - "type": "string", - "example": "quia impedit libero quam" + "type": "string" }, "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "imageBoxArtUrl": { "title": "imageBoxArtUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "imageTitleUrl": { "title": "imageTitleUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000010.png" + "readOnly": true }, "imageIngameUrl": { "title": "imageIngameUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "releasedAt": { "title": "releasedAt", @@ -10180,43 +11809,35 @@ }, "playersTotal": { "title": "playersTotal", - "type": "number", - "example": 82 + "type": "number" }, "playersHardcore": { "title": "playersHardcore", - "type": "number", - "example": 82 + "type": "number" }, "achievementsPublished": { "title": "achievementsPublished", - "type": "number", - "example": 20 + "type": "number" }, "achievementsUnpublished": { "title": "achievementsUnpublished", - "type": "number", - "example": 0 + "type": "number" }, "pointsTotal": { "title": "pointsTotal", - "type": "number", - "example": 189 + "type": "number" }, "pointsWeighted": { "title": "pointsWeighted", - "type": "number", - "example": 341 + "type": "number" }, "timesBeaten": { "title": "timesBeaten", - "type": "number", - "example": 0 + "type": "number" }, "timesBeatenHardcore": { "title": "timesBeatenHardcore", - "type": "number", - "example": 1 + "type": "number" }, "medianTimeToBeatSeconds": { "title": "medianTimeToBeatSeconds", @@ -10224,8 +11845,7 @@ }, "medianTimeToBeatHardcoreSeconds": { "title": "medianTimeToBeatHardcoreSeconds", - "type": "number", - "example": 5153 + "type": "number" } } }, @@ -10242,13 +11862,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" } }, "readOnly": true @@ -10265,13 +11883,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -10288,13 +11904,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" } }, "readOnly": true @@ -10311,13 +11925,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" } }, "readOnly": true @@ -10334,13 +11946,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" } }, "readOnly": true @@ -10357,13 +11967,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" } }, "readOnly": true @@ -10382,25 +11990,259 @@ } } }, - "400": { - "$ref": "#/components/responses/400" + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/hubs/{hub}/games": { + "get": { + "tags": ["Hubs"], + "summary": "Show the games of a hub", + "description": "", + "operationId": "hubs.games", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": 50, + "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", + "releasedAt", + "-releasedAt", + "playersTotal", + "-playersTotal", + "playersHardcore", + "-playersHardcore", + "achievementsPublished", + "-achievementsPublished", + "pointsTotal", + "-pointsTotal", + "pointsWeighted", + "-pointsWeighted" + ], + "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" + } + } + } + }, + { + "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" + } + } + }, + { + "name": "filter[systemId]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": "", + "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", + "medianTimeToBeatSeconds", + "medianTimeToBeatHardcoreSeconds", + "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" + } + } }, - "401": { - "$ref": "#/components/responses/401" + { + "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", + "timesCompleted", + "timesMastered", + "medianTimeToCompleteSeconds", + "medianTimeToMasterSeconds", + "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" + } + } }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - }, - "/hubs/{hub}/games": { - "get": { - "tags": ["Hubs"], - "summary": "Show games", - "description": "", - "operationId": "hubs.games", - "parameters": [ { "name": "hub", "in": "path", @@ -10408,23 +12250,12 @@ "allowEmptyValue": false, "schema": { "type": "string" - }, - "examples": { - "1": { - "value": "1" - }, - "2": { - "value": "2" - }, - "3": { - "value": "3" - } } } ], "responses": { "200": { - "description": "ShowRelated hubs", + "description": "The games related to a hub", "content": { "application/vnd.api+json": { "schema": { @@ -10436,8 +12267,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -10467,10 +12297,154 @@ "/hubs/{hub}/links": { "get": { "tags": ["Hubs"], - "summary": "Show links", + "summary": "Show the links of a hub", "description": "", "operationId": "hubs.links", "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": 50, + "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", + "createdAt", + "-createdAt", + "updatedAt", + "-updatedAt", + "gamesCount", + "-gamesCount", + "linkedHubsCount", + "-linkedHubsCount" + ], + "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" + } + } + } + }, + { + "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" + } + } + }, + { + "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" + } + }, + { + "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" + } + } + }, { "name": "hub", "in": "path", @@ -10478,23 +12452,12 @@ "allowEmptyValue": false, "schema": { "type": "string" - }, - "examples": { - "1": { - "value": "1" - }, - "2": { - "value": "2" - }, - "3": { - "value": "3" - } } } ], "responses": { "200": { - "description": "ShowRelated hubs", + "description": "The hubs related to a hub", "content": { "application/vnd.api+json": { "schema": { @@ -10506,8 +12469,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -10548,6 +12510,7 @@ "required": false, "allowEmptyValue": false, "schema": { + "default": 50, "type": "integer" } }, @@ -10613,20 +12576,6 @@ "items": { "type": "string" } - }, - "examples": { - "empty": { - "value": [] - }, - "1": { - "value": ["1"] - }, - "2": { - "value": ["2"] - }, - "3": { - "value": ["3"] - } } }, { @@ -10638,11 +12587,6 @@ "schema": { "default": "", "type": "string" - }, - "examples": { - "1": { - "value": 1 - } } }, { @@ -10821,8 +12765,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -10848,45 +12791,38 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", "properties": { "title": { "title": "title", - "type": "string", - "example": "Quia Impedit Libero Quam" + "type": "string" }, "sortTitle": { "title": "sortTitle", - "type": "string", - "example": "quia impedit libero quam" + "type": "string" }, "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "imageBoxArtUrl": { "title": "imageBoxArtUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "imageTitleUrl": { "title": "imageTitleUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000010.png" + "readOnly": true }, "imageIngameUrl": { "title": "imageIngameUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "releasedAt": { "title": "releasedAt", @@ -10898,43 +12834,35 @@ }, "playersTotal": { "title": "playersTotal", - "type": "number", - "example": 82 + "type": "number" }, "playersHardcore": { "title": "playersHardcore", - "type": "number", - "example": 82 + "type": "number" }, "achievementsPublished": { "title": "achievementsPublished", - "type": "number", - "example": 20 + "type": "number" }, "achievementsUnpublished": { "title": "achievementsUnpublished", - "type": "number", - "example": 0 + "type": "number" }, "pointsTotal": { "title": "pointsTotal", - "type": "number", - "example": 189 + "type": "number" }, "pointsWeighted": { "title": "pointsWeighted", - "type": "number", - "example": 341 + "type": "number" }, "timesBeaten": { "title": "timesBeaten", - "type": "number", - "example": 0 + "type": "number" }, "timesBeatenHardcore": { "title": "timesBeatenHardcore", - "type": "number", - "example": 1 + "type": "number" }, "medianTimeToBeatSeconds": { "title": "medianTimeToBeatSeconds", @@ -10942,8 +12870,7 @@ }, "medianTimeToBeatHardcoreSeconds": { "title": "medianTimeToBeatHardcoreSeconds", - "type": "number", - "example": 5153 + "type": "number" } } }, @@ -10960,13 +12887,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" } }, "readOnly": true @@ -10983,13 +12908,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -11006,13 +12929,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" } }, "readOnly": true @@ -11029,13 +12950,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" } }, "readOnly": true @@ -11052,13 +12971,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" } }, "readOnly": true @@ -11075,13 +12992,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" } }, "readOnly": true @@ -11104,8 +13019,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "attributes": { "type": "object", @@ -11113,38 +13027,32 @@ "displayName": { "title": "displayName", "type": "string", - "readOnly": true, - "example": "Root" + "readOnly": true }, "avatarUrl": { "title": "avatarUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" + "readOnly": true }, "motto": { "title": "motto", "type": "string", - "readOnly": true, - "example": "" + "readOnly": true }, "points": { "title": "points", "type": "number", - "readOnly": true, - "example": 1236 + "readOnly": true }, "pointsHardcore": { "title": "pointsHardcore", "type": "number", - "readOnly": true, - "example": 7130 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 15687 + "readOnly": true }, "rankHardcore": { "title": "rankHardcore", @@ -11159,26 +13067,22 @@ "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "yieldPoints": { "title": "yieldPoints", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "joinedAt": { "title": "joinedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:22.000000Z" + "readOnly": true }, "lastActivityAt": { "title": "lastActivityAt", "type": "string", - "readOnly": true, - "example": "2026-08-06T03:46:59.000000Z" + "readOnly": true }, "deletedAt": { "title": "deletedAt", @@ -11188,44 +13092,27 @@ "isUnranked": { "title": "isUnranked", "type": "boolean", - "readOnly": true, - "example": false + "readOnly": true }, "isUserWallActive": { "title": "isUserWallActive", "type": "boolean", - "readOnly": true, - "example": true + "readOnly": true }, "richPresence": { "title": "richPresence", "type": "string", - "readOnly": true, - "example": "Playing Assumenda Pariatur" + "readOnly": true }, "richPresenceUpdatedAt": { "title": "richPresenceUpdatedAt", "type": "string", - "readOnly": true, - "example": "2026-04-18T04:34:36.000000Z" + "readOnly": true }, "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 - } - } + "readOnly": true }, "displayableRoles": { "title": "displayableRoles", @@ -11247,13 +13134,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -11270,13 +13155,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -11293,13 +13176,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -11316,13 +13197,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -11339,13 +13218,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -11362,13 +13239,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -11385,13 +13260,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -11408,13 +13281,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -11431,13 +13302,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -11454,13 +13323,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -11477,13 +13344,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -11500,13 +13365,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -11529,8 +13392,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -11538,8 +13400,7 @@ "score": { "title": "score", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "rank": { "title": "rank", @@ -11571,13 +13432,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" } }, "readOnly": true @@ -11594,13 +13453,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/1" + "type": "string" } }, "readOnly": true @@ -11635,6 +13492,157 @@ "description": "", "operationId": "leaderboards.show", "parameters": [ + { + "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", + "medianTimeToBeatSeconds", + "medianTimeToBeatHardcoreSeconds", + "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", + "rankHardcore", + "rankCasual", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "lastGame", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "leaderboardEntries", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "userGameListEntries", + "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" + } + } + }, { "name": "leaderboard", "in": "path", @@ -11642,17 +13650,6 @@ "allowEmptyValue": false, "schema": { "type": "string" - }, - "examples": { - "1": { - "value": "1" - }, - "2": { - "value": "2" - }, - "3": { - "value": "3" - } } } ], @@ -11670,8 +13667,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -11694,45 +13690,38 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", "properties": { "title": { "title": "title", - "type": "string", - "example": "Quia Impedit Libero Quam" + "type": "string" }, "sortTitle": { "title": "sortTitle", - "type": "string", - "example": "quia impedit libero quam" + "type": "string" }, "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "imageBoxArtUrl": { "title": "imageBoxArtUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "imageTitleUrl": { "title": "imageTitleUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000010.png" + "readOnly": true }, "imageIngameUrl": { "title": "imageIngameUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "releasedAt": { "title": "releasedAt", @@ -11744,43 +13733,35 @@ }, "playersTotal": { "title": "playersTotal", - "type": "number", - "example": 82 + "type": "number" }, "playersHardcore": { "title": "playersHardcore", - "type": "number", - "example": 82 + "type": "number" }, "achievementsPublished": { "title": "achievementsPublished", - "type": "number", - "example": 20 + "type": "number" }, "achievementsUnpublished": { "title": "achievementsUnpublished", - "type": "number", - "example": 0 + "type": "number" }, "pointsTotal": { "title": "pointsTotal", - "type": "number", - "example": 189 + "type": "number" }, "pointsWeighted": { "title": "pointsWeighted", - "type": "number", - "example": 341 + "type": "number" }, "timesBeaten": { "title": "timesBeaten", - "type": "number", - "example": 0 + "type": "number" }, "timesBeatenHardcore": { "title": "timesBeatenHardcore", - "type": "number", - "example": 1 + "type": "number" }, "medianTimeToBeatSeconds": { "title": "medianTimeToBeatSeconds", @@ -11788,8 +13769,7 @@ }, "medianTimeToBeatHardcoreSeconds": { "title": "medianTimeToBeatHardcoreSeconds", - "type": "number", - "example": 5153 + "type": "number" } } }, @@ -11806,13 +13786,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" } }, "readOnly": true @@ -11829,13 +13807,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -11852,13 +13828,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" } }, "readOnly": true @@ -11875,13 +13849,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" } }, "readOnly": true @@ -11898,13 +13870,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" } }, "readOnly": true @@ -11921,13 +13891,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" } }, "readOnly": true @@ -11950,8 +13918,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "attributes": { "type": "object", @@ -11959,38 +13926,32 @@ "displayName": { "title": "displayName", "type": "string", - "readOnly": true, - "example": "Root" + "readOnly": true }, "avatarUrl": { "title": "avatarUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" + "readOnly": true }, "motto": { "title": "motto", "type": "string", - "readOnly": true, - "example": "" + "readOnly": true }, "points": { "title": "points", "type": "number", - "readOnly": true, - "example": 1236 + "readOnly": true }, "pointsHardcore": { "title": "pointsHardcore", "type": "number", - "readOnly": true, - "example": 7130 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 15687 + "readOnly": true }, "rankHardcore": { "title": "rankHardcore", @@ -12005,26 +13966,22 @@ "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "yieldPoints": { "title": "yieldPoints", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "joinedAt": { "title": "joinedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:22.000000Z" + "readOnly": true }, "lastActivityAt": { "title": "lastActivityAt", "type": "string", - "readOnly": true, - "example": "2026-08-06T03:46:59.000000Z" + "readOnly": true }, "deletedAt": { "title": "deletedAt", @@ -12034,44 +13991,27 @@ "isUnranked": { "title": "isUnranked", "type": "boolean", - "readOnly": true, - "example": false + "readOnly": true }, "isUserWallActive": { "title": "isUserWallActive", "type": "boolean", - "readOnly": true, - "example": true + "readOnly": true }, "richPresence": { "title": "richPresence", "type": "string", - "readOnly": true, - "example": "Playing Assumenda Pariatur" + "readOnly": true }, "richPresenceUpdatedAt": { "title": "richPresenceUpdatedAt", "type": "string", - "readOnly": true, - "example": "2026-04-18T04:34:36.000000Z" + "readOnly": true }, "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 - } - } + "readOnly": true }, "displayableRoles": { "title": "displayableRoles", @@ -12093,13 +14033,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -12116,13 +14054,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -12139,13 +14075,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -12162,13 +14096,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -12185,13 +14117,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -12208,13 +14138,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -12231,13 +14159,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -12254,13 +14180,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -12277,13 +14201,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -12300,13 +14222,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -12323,13 +14243,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -12346,13 +14264,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -12375,8 +14291,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -12384,8 +14299,7 @@ "score": { "title": "score", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "rank": { "title": "rank", @@ -12417,13 +14331,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" } }, "readOnly": true @@ -12440,13 +14352,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/1" + "type": "string" } }, "readOnly": true @@ -12480,10 +14390,222 @@ "/leaderboards/{leaderboard}/entries": { "get": { "tags": ["Leaderboards"], - "summary": "Show entries", + "summary": "Show the entries of a leaderboard", "description": "", "operationId": "leaderboards.entries", "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": 50, + "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", + "score", + "-score", + "createdAt", + "-createdAt", + "updatedAt", + "-updatedAt" + ], + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "score": "By score, ascending", + "-score": "By score, descending", + "createdAt": "By createdAt, ascending", + "-createdAt": "By createdAt, descending", + "updatedAt": "By updatedAt, ascending", + "-updatedAt": "By updatedAt, 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" + } + } + }, + { + "name": "filter[gameId]", + "in": "query", + "description": "Applies the gameId scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "filter[user]", + "in": "query", + "description": "Applies the user scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "filter[maxRank]", + "in": "query", + "description": "Applies the maxRank scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + }, + { + "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": "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", + "rankHardcore", + "rankCasual", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "lastGame", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "leaderboardEntries", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "userGameListEntries", + "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": ["leaderboard", "leaderboard.games", "user"], + "type": "string" + } + } + }, { "name": "leaderboard", "in": "path", @@ -12491,23 +14613,12 @@ "allowEmptyValue": false, "schema": { "type": "string" - }, - "examples": { - "1": { - "value": "1" - }, - "2": { - "value": "2" - }, - "3": { - "value": "3" - } } } ], "responses": { "200": { - "description": "ShowRelated leaderboards", + "description": "The leaderboard-entries related to a leaderboard", "content": { "application/vnd.api+json": { "schema": { @@ -12519,8 +14630,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -12561,6 +14671,7 @@ "required": false, "allowEmptyValue": false, "schema": { + "default": 50, "type": "integer" } }, @@ -12622,20 +14733,6 @@ "items": { "type": "string" } - }, - "examples": { - "empty": { - "value": [] - }, - "1": { - "value": ["1"] - }, - "2": { - "value": ["2"] - }, - "3": { - "value": ["3"] - } } }, { @@ -12647,11 +14744,6 @@ "schema": { "default": "", "type": "string" - }, - "examples": { - "1": { - "value": true - } } }, { @@ -12705,8 +14797,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -12737,6 +14828,42 @@ "description": "", "operationId": "systems.show", "parameters": [ + { + "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" + } + } + }, { "name": "system", "in": "path", @@ -12744,17 +14871,6 @@ "allowEmptyValue": false, "schema": { "type": "string" - }, - "examples": { - "1": { - "value": "1" - }, - "2": { - "value": "2" - }, - "3": { - "value": "3" - } } } ], @@ -12772,8 +14888,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -12811,6 +14926,7 @@ "required": false, "allowEmptyValue": false, "schema": { + "default": 25, "type": "integer" } }, @@ -12872,14 +14988,6 @@ "items": { "type": "string" } - }, - "examples": { - "empty": { - "value": [] - }, - "5": { - "value": ["5"] - } } }, { @@ -13153,8 +15261,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -13180,8 +15287,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -13189,38 +15295,32 @@ "title": { "title": "title", "type": "string", - "readOnly": true, - "example": "Soluta Quasi!" + "readOnly": true }, "description": { "title": "description", "type": "string", - "readOnly": true, - "example": "Nisi et sit labore reprehenderit aliquam aspernatur explicabo. True." + "readOnly": true }, "points": { "title": "points", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Badge/00001.png" + "readOnly": true }, "badgeLockedUrl": { "title": "badgeLockedUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Badge/00001_lock.png" + "readOnly": true }, "type": { "title": "type", @@ -13235,32 +15335,27 @@ "orderColumn": { "title": "orderColumn", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "unlocksTotal": { "title": "unlocksTotal", "type": "number", - "readOnly": true, - "example": 81 + "readOnly": true }, "unlocksHardcore": { "title": "unlocksHardcore", "type": "number", - "readOnly": true, - "example": 81 + "readOnly": true }, "unlockPercentage": { "title": "unlockPercentage", "type": "number", - "readOnly": true, - "example": 0.987804878 + "readOnly": true }, "unlockHardcorePercentage": { "title": "unlockHardcorePercentage", "type": "number", - "readOnly": true, - "example": 0.987804878 + "readOnly": true }, "medianTimeToUnlockSeconds": { "title": "medianTimeToUnlockSeconds", @@ -13285,14 +15380,12 @@ "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "readOnly": true }, "modifiedAt": { "title": "modifiedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "readOnly": true } } }, @@ -13309,13 +15402,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/developers/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/developers/1" + "type": "string" } }, "readOnly": true @@ -13332,13 +15423,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -13355,13 +15444,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" } }, "readOnly": true @@ -13378,13 +15465,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -13401,13 +15486,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/1" + "type": "string" } }, "readOnly": true @@ -13424,13 +15507,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" } }, "readOnly": true @@ -13453,8 +15534,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -13462,50 +15542,42 @@ "title": { "title": "title", "type": "string", - "readOnly": true, - "example": "Totam Unde" + "readOnly": true }, "description": { "title": "description", "type": "string", - "readOnly": true, - "example": "Modi vitae commodi possimus animi." + "readOnly": true }, "format": { "title": "format", "type": "string", - "readOnly": true, - "example": "VALUE" + "readOnly": true }, "rankAsc": { "title": "rankAsc", "type": "boolean", - "readOnly": true, - "example": false + "readOnly": true }, "state": { "title": "state", "type": "string", - "readOnly": true, - "example": "active" + "readOnly": true }, "orderColumn": { "title": "orderColumn", "type": "number", - "readOnly": true, - "example": 64 + "readOnly": true }, "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:04:12.000000Z" + "readOnly": true }, "updatedAt": { "title": "updatedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:04:12.000000Z" + "readOnly": true } } }, @@ -13522,13 +15594,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -13545,13 +15615,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/developers/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/developers/1" + "type": "string" } }, "readOnly": true @@ -13568,13 +15636,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/entries/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/entries/1" + "type": "string" } }, "readOnly": true @@ -13597,8 +15663,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "attributes": { "type": "object", @@ -13606,38 +15671,32 @@ "displayName": { "title": "displayName", "type": "string", - "readOnly": true, - "example": "Root" + "readOnly": true }, "avatarUrl": { "title": "avatarUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" + "readOnly": true }, "motto": { "title": "motto", "type": "string", - "readOnly": true, - "example": "" + "readOnly": true }, "points": { "title": "points", "type": "number", - "readOnly": true, - "example": 1236 + "readOnly": true }, "pointsHardcore": { "title": "pointsHardcore", "type": "number", - "readOnly": true, - "example": 7130 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 15687 + "readOnly": true }, "rankHardcore": { "title": "rankHardcore", @@ -13652,26 +15711,22 @@ "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "yieldPoints": { "title": "yieldPoints", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "joinedAt": { "title": "joinedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:22.000000Z" + "readOnly": true }, "lastActivityAt": { "title": "lastActivityAt", "type": "string", - "readOnly": true, - "example": "2026-08-06T03:46:59.000000Z" + "readOnly": true }, "deletedAt": { "title": "deletedAt", @@ -13681,44 +15736,27 @@ "isUnranked": { "title": "isUnranked", "type": "boolean", - "readOnly": true, - "example": false + "readOnly": true }, "isUserWallActive": { "title": "isUserWallActive", "type": "boolean", - "readOnly": true, - "example": true + "readOnly": true }, "richPresence": { "title": "richPresence", "type": "string", - "readOnly": true, - "example": "Playing Assumenda Pariatur" + "readOnly": true }, "richPresenceUpdatedAt": { "title": "richPresenceUpdatedAt", "type": "string", - "readOnly": true, - "example": "2026-04-18T04:34:36.000000Z" + "readOnly": true }, "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 - } - } + "readOnly": true }, "displayableRoles": { "title": "displayableRoles", @@ -13740,13 +15778,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -13763,13 +15799,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -13786,13 +15820,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -13809,13 +15841,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -13832,13 +15862,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -13855,13 +15883,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -13878,13 +15904,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -13901,13 +15925,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -13924,13 +15946,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -13947,13 +15967,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -13970,13 +15988,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -13993,13 +16009,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14022,8 +16036,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "attributes": { "type": "object", @@ -14031,38 +16044,32 @@ "displayName": { "title": "displayName", "type": "string", - "readOnly": true, - "example": "Root" + "readOnly": true }, "avatarUrl": { "title": "avatarUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" + "readOnly": true }, "motto": { "title": "motto", "type": "string", - "readOnly": true, - "example": "" + "readOnly": true }, "points": { "title": "points", "type": "number", - "readOnly": true, - "example": 1236 + "readOnly": true }, "pointsHardcore": { "title": "pointsHardcore", "type": "number", - "readOnly": true, - "example": 7130 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 15687 + "readOnly": true }, "rankHardcore": { "title": "rankHardcore", @@ -14077,26 +16084,22 @@ "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "yieldPoints": { "title": "yieldPoints", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "joinedAt": { "title": "joinedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:22.000000Z" + "readOnly": true }, "lastActivityAt": { "title": "lastActivityAt", "type": "string", - "readOnly": true, - "example": "2026-08-06T03:46:59.000000Z" + "readOnly": true }, "deletedAt": { "title": "deletedAt", @@ -14106,44 +16109,27 @@ "isUnranked": { "title": "isUnranked", "type": "boolean", - "readOnly": true, - "example": false + "readOnly": true }, "isUserWallActive": { "title": "isUserWallActive", "type": "boolean", - "readOnly": true, - "example": true + "readOnly": true }, "richPresence": { "title": "richPresence", "type": "string", - "readOnly": true, - "example": "Playing Assumenda Pariatur" + "readOnly": true }, "richPresenceUpdatedAt": { "title": "richPresenceUpdatedAt", "type": "string", - "readOnly": true, - "example": "2026-04-18T04:34:36.000000Z" + "readOnly": true }, "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 - } - } + "readOnly": true }, "displayableRoles": { "title": "displayableRoles", @@ -14165,13 +16151,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14188,13 +16172,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14211,13 +16193,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14234,13 +16214,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14257,13 +16235,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14280,13 +16256,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14303,13 +16277,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14326,13 +16298,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14349,13 +16319,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14372,13 +16340,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14395,13 +16361,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14418,13 +16382,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14447,8 +16409,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "attributes": { "type": "object", @@ -14456,38 +16417,32 @@ "displayName": { "title": "displayName", "type": "string", - "readOnly": true, - "example": "Root" + "readOnly": true }, "avatarUrl": { "title": "avatarUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" + "readOnly": true }, "motto": { "title": "motto", "type": "string", - "readOnly": true, - "example": "" + "readOnly": true }, "points": { "title": "points", "type": "number", - "readOnly": true, - "example": 1236 + "readOnly": true }, "pointsHardcore": { "title": "pointsHardcore", "type": "number", - "readOnly": true, - "example": 7130 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 15687 + "readOnly": true }, "rankHardcore": { "title": "rankHardcore", @@ -14502,26 +16457,22 @@ "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "yieldPoints": { "title": "yieldPoints", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "joinedAt": { "title": "joinedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:22.000000Z" + "readOnly": true }, "lastActivityAt": { "title": "lastActivityAt", "type": "string", - "readOnly": true, - "example": "2026-08-06T03:46:59.000000Z" + "readOnly": true }, "deletedAt": { "title": "deletedAt", @@ -14531,44 +16482,27 @@ "isUnranked": { "title": "isUnranked", "type": "boolean", - "readOnly": true, - "example": false + "readOnly": true }, "isUserWallActive": { "title": "isUserWallActive", "type": "boolean", - "readOnly": true, - "example": true + "readOnly": true }, "richPresence": { "title": "richPresence", "type": "string", - "readOnly": true, - "example": "Playing Assumenda Pariatur" + "readOnly": true }, "richPresenceUpdatedAt": { "title": "richPresenceUpdatedAt", "type": "string", - "readOnly": true, - "example": "2026-04-18T04:34:36.000000Z" + "readOnly": true }, "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 - } - } + "readOnly": true }, "displayableRoles": { "title": "displayableRoles", @@ -14590,13 +16524,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14613,13 +16545,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14636,13 +16566,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14659,13 +16587,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14682,13 +16608,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14705,13 +16629,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14728,13 +16650,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14751,13 +16671,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14774,13 +16692,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14797,13 +16713,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14820,13 +16734,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14843,13 +16755,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -14868,22 +16778,198 @@ } } }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - } - } - } - }, - "/tickets/{ticket}": { - "get": { - "tags": ["Tickets"], - "summary": "Show one ticket", - "description": "", - "operationId": "tickets.show", - "parameters": [ + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/tickets/{ticket}": { + "get": { + "tags": ["Tickets"], + "summary": "Show one ticket", + "description": "", + "operationId": "tickets.show", + "parameters": [ + { + "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", + "medianTimeToUnlockSeconds", + "medianTimeToUnlockHardcoreSeconds", + "medianTimeToUnlockSamples", + "medianTimeToUnlockHardcoreSamples", + "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", + "rankHardcore", + "rankCasual", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "lastGame", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "leaderboardEntries", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "userGameListEntries", + "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", + "reporter.lastGame", + "resolver", + "resolver.lastGame", + "author", + "author.lastGame" + ], + "type": "string" + } + } + }, { "name": "ticket", "in": "path", @@ -14891,11 +16977,6 @@ "allowEmptyValue": false, "schema": { "type": "string" - }, - "examples": { - "5": { - "value": "5" - } } } ], @@ -14913,8 +16994,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -14937,8 +17017,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -14946,38 +17025,32 @@ "title": { "title": "title", "type": "string", - "readOnly": true, - "example": "Soluta Quasi!" + "readOnly": true }, "description": { "title": "description", "type": "string", - "readOnly": true, - "example": "Nisi et sit labore reprehenderit aliquam aspernatur explicabo. True." + "readOnly": true }, "points": { "title": "points", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Badge/00001.png" + "readOnly": true }, "badgeLockedUrl": { "title": "badgeLockedUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Badge/00001_lock.png" + "readOnly": true }, "type": { "title": "type", @@ -14992,32 +17065,27 @@ "orderColumn": { "title": "orderColumn", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "unlocksTotal": { "title": "unlocksTotal", "type": "number", - "readOnly": true, - "example": 81 + "readOnly": true }, "unlocksHardcore": { "title": "unlocksHardcore", "type": "number", - "readOnly": true, - "example": 81 + "readOnly": true }, "unlockPercentage": { "title": "unlockPercentage", "type": "number", - "readOnly": true, - "example": 0.987804878 + "readOnly": true }, "unlockHardcorePercentage": { "title": "unlockHardcorePercentage", "type": "number", - "readOnly": true, - "example": 0.987804878 + "readOnly": true }, "medianTimeToUnlockSeconds": { "title": "medianTimeToUnlockSeconds", @@ -15042,14 +17110,12 @@ "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "readOnly": true }, "modifiedAt": { "title": "modifiedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "readOnly": true } } }, @@ -15066,13 +17132,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/developers/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/developers/1" + "type": "string" } }, "readOnly": true @@ -15089,13 +17153,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -15112,13 +17174,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" } }, "readOnly": true @@ -15135,13 +17195,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -15158,13 +17216,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/1" + "type": "string" } }, "readOnly": true @@ -15181,13 +17237,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" } }, "readOnly": true @@ -15210,8 +17264,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -15219,50 +17272,42 @@ "title": { "title": "title", "type": "string", - "readOnly": true, - "example": "Totam Unde" + "readOnly": true }, "description": { "title": "description", "type": "string", - "readOnly": true, - "example": "Modi vitae commodi possimus animi." + "readOnly": true }, "format": { "title": "format", "type": "string", - "readOnly": true, - "example": "VALUE" + "readOnly": true }, "rankAsc": { "title": "rankAsc", "type": "boolean", - "readOnly": true, - "example": false + "readOnly": true }, "state": { "title": "state", "type": "string", - "readOnly": true, - "example": "active" + "readOnly": true }, "orderColumn": { "title": "orderColumn", "type": "number", - "readOnly": true, - "example": 64 + "readOnly": true }, "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:04:12.000000Z" + "readOnly": true }, "updatedAt": { "title": "updatedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:04:12.000000Z" + "readOnly": true } } }, @@ -15279,13 +17324,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -15302,13 +17345,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/developers/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/developers/1" + "type": "string" } }, "readOnly": true @@ -15325,13 +17366,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/entries/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/entries/1" + "type": "string" } }, "readOnly": true @@ -15354,8 +17393,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "attributes": { "type": "object", @@ -15363,38 +17401,32 @@ "displayName": { "title": "displayName", "type": "string", - "readOnly": true, - "example": "Root" + "readOnly": true }, "avatarUrl": { "title": "avatarUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" + "readOnly": true }, "motto": { "title": "motto", "type": "string", - "readOnly": true, - "example": "" + "readOnly": true }, "points": { "title": "points", "type": "number", - "readOnly": true, - "example": 1236 + "readOnly": true }, "pointsHardcore": { "title": "pointsHardcore", "type": "number", - "readOnly": true, - "example": 7130 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 15687 + "readOnly": true }, "rankHardcore": { "title": "rankHardcore", @@ -15409,26 +17441,22 @@ "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "yieldPoints": { "title": "yieldPoints", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "joinedAt": { "title": "joinedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:22.000000Z" + "readOnly": true }, "lastActivityAt": { "title": "lastActivityAt", "type": "string", - "readOnly": true, - "example": "2026-08-06T03:46:59.000000Z" + "readOnly": true }, "deletedAt": { "title": "deletedAt", @@ -15438,44 +17466,27 @@ "isUnranked": { "title": "isUnranked", "type": "boolean", - "readOnly": true, - "example": false + "readOnly": true }, "isUserWallActive": { "title": "isUserWallActive", "type": "boolean", - "readOnly": true, - "example": true + "readOnly": true }, "richPresence": { "title": "richPresence", "type": "string", - "readOnly": true, - "example": "Playing Assumenda Pariatur" + "readOnly": true }, "richPresenceUpdatedAt": { "title": "richPresenceUpdatedAt", "type": "string", - "readOnly": true, - "example": "2026-04-18T04:34:36.000000Z" + "readOnly": true }, "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 - } - } + "readOnly": true }, "displayableRoles": { "title": "displayableRoles", @@ -15497,13 +17508,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -15520,13 +17529,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -15543,13 +17550,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -15566,13 +17571,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -15589,13 +17592,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -15612,13 +17613,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -15635,13 +17634,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -15658,13 +17655,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -15681,13 +17676,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -15704,13 +17697,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -15727,13 +17718,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -15750,13 +17739,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -15779,8 +17766,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "attributes": { "type": "object", @@ -15788,38 +17774,32 @@ "displayName": { "title": "displayName", "type": "string", - "readOnly": true, - "example": "Root" + "readOnly": true }, "avatarUrl": { "title": "avatarUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" + "readOnly": true }, "motto": { "title": "motto", "type": "string", - "readOnly": true, - "example": "" + "readOnly": true }, "points": { "title": "points", "type": "number", - "readOnly": true, - "example": 1236 + "readOnly": true }, "pointsHardcore": { "title": "pointsHardcore", "type": "number", - "readOnly": true, - "example": 7130 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 15687 + "readOnly": true }, "rankHardcore": { "title": "rankHardcore", @@ -15834,26 +17814,22 @@ "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "yieldPoints": { "title": "yieldPoints", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "joinedAt": { "title": "joinedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:22.000000Z" + "readOnly": true }, "lastActivityAt": { "title": "lastActivityAt", "type": "string", - "readOnly": true, - "example": "2026-08-06T03:46:59.000000Z" + "readOnly": true }, "deletedAt": { "title": "deletedAt", @@ -15863,44 +17839,27 @@ "isUnranked": { "title": "isUnranked", "type": "boolean", - "readOnly": true, - "example": false + "readOnly": true }, "isUserWallActive": { "title": "isUserWallActive", "type": "boolean", - "readOnly": true, - "example": true + "readOnly": true }, "richPresence": { "title": "richPresence", "type": "string", - "readOnly": true, - "example": "Playing Assumenda Pariatur" + "readOnly": true }, "richPresenceUpdatedAt": { "title": "richPresenceUpdatedAt", "type": "string", - "readOnly": true, - "example": "2026-04-18T04:34:36.000000Z" + "readOnly": true }, "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 - } - } + "readOnly": true }, "displayableRoles": { "title": "displayableRoles", @@ -15922,13 +17881,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -15945,13 +17902,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -15968,13 +17923,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -15991,13 +17944,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -16014,13 +17965,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -16037,13 +17986,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -16060,13 +18007,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -16083,13 +18028,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -16106,13 +18049,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -16129,13 +18070,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -16152,13 +18091,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -16175,13 +18112,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -16204,8 +18139,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "attributes": { "type": "object", @@ -16213,38 +18147,32 @@ "displayName": { "title": "displayName", "type": "string", - "readOnly": true, - "example": "Root" + "readOnly": true }, "avatarUrl": { "title": "avatarUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" + "readOnly": true }, "motto": { "title": "motto", "type": "string", - "readOnly": true, - "example": "" + "readOnly": true }, "points": { "title": "points", "type": "number", - "readOnly": true, - "example": 1236 + "readOnly": true }, "pointsHardcore": { "title": "pointsHardcore", "type": "number", - "readOnly": true, - "example": 7130 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 15687 + "readOnly": true }, "rankHardcore": { "title": "rankHardcore", @@ -16259,26 +18187,22 @@ "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "yieldPoints": { "title": "yieldPoints", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "joinedAt": { "title": "joinedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:22.000000Z" + "readOnly": true }, "lastActivityAt": { "title": "lastActivityAt", "type": "string", - "readOnly": true, - "example": "2026-08-06T03:46:59.000000Z" + "readOnly": true }, "deletedAt": { "title": "deletedAt", @@ -16288,44 +18212,27 @@ "isUnranked": { "title": "isUnranked", "type": "boolean", - "readOnly": true, - "example": false + "readOnly": true }, "isUserWallActive": { "title": "isUserWallActive", "type": "boolean", - "readOnly": true, - "example": true + "readOnly": true }, "richPresence": { "title": "richPresence", "type": "string", - "readOnly": true, - "example": "Playing Assumenda Pariatur" + "readOnly": true }, "richPresenceUpdatedAt": { "title": "richPresenceUpdatedAt", "type": "string", - "readOnly": true, - "example": "2026-04-18T04:34:36.000000Z" + "readOnly": true }, "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 - } - } + "readOnly": true }, "displayableRoles": { "title": "displayableRoles", @@ -16347,13 +18254,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -16370,13 +18275,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -16393,13 +18296,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -16416,13 +18317,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -16439,13 +18338,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -16462,13 +18359,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -16485,13 +18380,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -16508,13 +18401,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -16531,13 +18422,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -16554,13 +18443,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -16577,13 +18464,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -16600,13 +18485,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -16651,6 +18534,7 @@ "required": false, "allowEmptyValue": false, "schema": { + "default": 50, "type": "integer" } }, @@ -16708,20 +18592,6 @@ "items": { "type": "string" } - }, - "examples": { - "empty": { - "value": [] - }, - "1": { - "value": ["1"] - }, - "2": { - "value": ["2"] - }, - "3": { - "value": ["3"] - } } }, { @@ -16964,8 +18834,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -16991,8 +18860,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "3" + "type": "string" }, "attributes": { "type": "object", @@ -17010,14 +18878,12 @@ "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000007.png" + "readOnly": true }, "state": { "title": "state", "type": "string", - "readOnly": true, - "example": "concluded" + "readOnly": true }, "playersTotal": { "title": "playersTotal", @@ -17032,14 +18898,12 @@ "activeFrom": { "title": "activeFrom", "type": "string", - "readOnly": true, - "example": "2026-02-07T00:00:00.000000Z" + "readOnly": true }, "activeThrough": { "title": "activeThrough", "type": "string", - "readOnly": true, - "example": "2026-02-28T00:00:00.000000Z" + "readOnly": true } } }, @@ -17056,13 +18920,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/3" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/3" + "type": "string" } }, "readOnly": true @@ -17079,13 +18941,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/event-achievements/3" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/event-achievements/3" + "type": "string" } }, "readOnly": true @@ -17108,45 +18968,38 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", "properties": { "title": { "title": "title", - "type": "string", - "example": "Quia Impedit Libero Quam" + "type": "string" }, "sortTitle": { "title": "sortTitle", - "type": "string", - "example": "quia impedit libero quam" + "type": "string" }, "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "imageBoxArtUrl": { "title": "imageBoxArtUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "imageTitleUrl": { "title": "imageTitleUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000010.png" + "readOnly": true }, "imageIngameUrl": { "title": "imageIngameUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "releasedAt": { "title": "releasedAt", @@ -17158,43 +19011,35 @@ }, "playersTotal": { "title": "playersTotal", - "type": "number", - "example": 82 + "type": "number" }, "playersHardcore": { "title": "playersHardcore", - "type": "number", - "example": 82 + "type": "number" }, "achievementsPublished": { "title": "achievementsPublished", - "type": "number", - "example": 20 + "type": "number" }, "achievementsUnpublished": { "title": "achievementsUnpublished", - "type": "number", - "example": 0 + "type": "number" }, "pointsTotal": { "title": "pointsTotal", - "type": "number", - "example": 189 + "type": "number" }, "pointsWeighted": { "title": "pointsWeighted", - "type": "number", - "example": 341 + "type": "number" }, "timesBeaten": { "title": "timesBeaten", - "type": "number", - "example": 0 + "type": "number" }, "timesBeatenHardcore": { "title": "timesBeatenHardcore", - "type": "number", - "example": 1 + "type": "number" }, "medianTimeToBeatSeconds": { "title": "medianTimeToBeatSeconds", @@ -17202,8 +19047,7 @@ }, "medianTimeToBeatHardcoreSeconds": { "title": "medianTimeToBeatHardcoreSeconds", - "type": "number", - "example": 5153 + "type": "number" } } }, @@ -17220,13 +19064,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" } }, "readOnly": true @@ -17243,13 +19085,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -17266,13 +19106,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" } }, "readOnly": true @@ -17289,13 +19127,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" } }, "readOnly": true @@ -17312,13 +19148,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" } }, "readOnly": true @@ -17335,13 +19169,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" } }, "readOnly": true @@ -17364,8 +19196,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "attributes": { "type": "object", @@ -17373,38 +19204,32 @@ "displayName": { "title": "displayName", "type": "string", - "readOnly": true, - "example": "Root" + "readOnly": true }, "avatarUrl": { "title": "avatarUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" + "readOnly": true }, "motto": { "title": "motto", "type": "string", - "readOnly": true, - "example": "" + "readOnly": true }, "points": { "title": "points", "type": "number", - "readOnly": true, - "example": 1236 + "readOnly": true }, "pointsHardcore": { "title": "pointsHardcore", "type": "number", - "readOnly": true, - "example": 7130 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 15687 + "readOnly": true }, "rankHardcore": { "title": "rankHardcore", @@ -17419,26 +19244,22 @@ "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "yieldPoints": { "title": "yieldPoints", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "joinedAt": { "title": "joinedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:22.000000Z" + "readOnly": true }, "lastActivityAt": { "title": "lastActivityAt", "type": "string", - "readOnly": true, - "example": "2026-08-06T03:46:59.000000Z" + "readOnly": true }, "deletedAt": { "title": "deletedAt", @@ -17448,44 +19269,27 @@ "isUnranked": { "title": "isUnranked", "type": "boolean", - "readOnly": true, - "example": false + "readOnly": true }, "isUserWallActive": { "title": "isUserWallActive", "type": "boolean", - "readOnly": true, - "example": true + "readOnly": true }, "richPresence": { "title": "richPresence", "type": "string", - "readOnly": true, - "example": "Playing Assumenda Pariatur" + "readOnly": true }, "richPresenceUpdatedAt": { "title": "richPresenceUpdatedAt", "type": "string", - "readOnly": true, - "example": "2026-04-18T04:34:36.000000Z" + "readOnly": true }, "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 - } - } + "readOnly": true }, "displayableRoles": { "title": "displayableRoles", @@ -17507,13 +19311,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -17530,13 +19332,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -17553,13 +19353,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -17576,13 +19374,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -17599,13 +19395,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -17622,13 +19416,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -17645,13 +19437,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -17668,13 +19458,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -17691,13 +19479,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -17714,13 +19500,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -17737,13 +19521,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -17760,13 +19542,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -17808,6 +19588,7 @@ "required": false, "allowEmptyValue": false, "schema": { + "default": 50, "type": "integer" } }, @@ -18008,8 +19789,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -18035,45 +19815,38 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", "properties": { "title": { "title": "title", - "type": "string", - "example": "Quia Impedit Libero Quam" + "type": "string" }, "sortTitle": { "title": "sortTitle", - "type": "string", - "example": "quia impedit libero quam" + "type": "string" }, "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "imageBoxArtUrl": { "title": "imageBoxArtUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "imageTitleUrl": { "title": "imageTitleUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000010.png" + "readOnly": true }, "imageIngameUrl": { "title": "imageIngameUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "releasedAt": { "title": "releasedAt", @@ -18085,43 +19858,35 @@ }, "playersTotal": { "title": "playersTotal", - "type": "number", - "example": 82 + "type": "number" }, "playersHardcore": { "title": "playersHardcore", - "type": "number", - "example": 82 + "type": "number" }, "achievementsPublished": { "title": "achievementsPublished", - "type": "number", - "example": 20 + "type": "number" }, "achievementsUnpublished": { "title": "achievementsUnpublished", - "type": "number", - "example": 0 + "type": "number" }, "pointsTotal": { "title": "pointsTotal", - "type": "number", - "example": 189 + "type": "number" }, "pointsWeighted": { "title": "pointsWeighted", - "type": "number", - "example": 341 + "type": "number" }, "timesBeaten": { "title": "timesBeaten", - "type": "number", - "example": 0 + "type": "number" }, "timesBeatenHardcore": { "title": "timesBeatenHardcore", - "type": "number", - "example": 1 + "type": "number" }, "medianTimeToBeatSeconds": { "title": "medianTimeToBeatSeconds", @@ -18129,8 +19894,7 @@ }, "medianTimeToBeatHardcoreSeconds": { "title": "medianTimeToBeatHardcoreSeconds", - "type": "number", - "example": 5153 + "type": "number" } } }, @@ -18147,13 +19911,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" } }, "readOnly": true @@ -18170,13 +19932,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -18193,13 +19953,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" } }, "readOnly": true @@ -18216,13 +19974,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" } }, "readOnly": true @@ -18239,13 +19995,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" } }, "readOnly": true @@ -18262,13 +20016,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" } }, "readOnly": true @@ -18291,8 +20043,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -18300,62 +20051,52 @@ "claimedAt": { "title": "claimedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:24:26.000000Z" + "readOnly": true }, "finishedAt": { "title": "finishedAt", "type": "string", - "readOnly": true, - "example": "2025-12-12T06:24:26.000000Z" + "readOnly": true }, "updatedAt": { "title": "updatedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:24:26.000000Z" + "readOnly": true }, "status": { "title": "status", "type": "string", - "readOnly": true, - "example": "complete" + "readOnly": true }, "claimType": { "title": "claimType", "type": "string", - "readOnly": true, - "example": "primary" + "readOnly": true }, "setType": { "title": "setType", "type": "string", - "readOnly": true, - "example": "new_set" + "readOnly": true }, "specialType": { "title": "specialType", "type": "string", - "readOnly": true, - "example": "none" + "readOnly": true }, "extensionsCount": { "title": "extensionsCount", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "minutesLeft": { "title": "minutesLeft", "type": "number", - "readOnly": true, - "example": 342109 + "readOnly": true }, "userId": { "title": "userId", "type": "string", - "readOnly": true, - "example": 91 + "readOnly": true }, "userDisplayName": { "title": "userDisplayName", @@ -18365,8 +20106,7 @@ "gameId": { "title": "gameId", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "gameTitle": { "title": "gameTitle", @@ -18403,13 +20143,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" } }, "readOnly": true @@ -18426,13 +20164,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -18455,8 +20191,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -18464,8 +20199,7 @@ "score": { "title": "score", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "rank": { "title": "rank", @@ -18497,13 +20231,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" } }, "readOnly": true @@ -18520,13 +20252,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/1" + "type": "string" } }, "readOnly": true @@ -18549,8 +20279,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -18558,14 +20287,12 @@ "unlockedAt": { "title": "unlockedAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" + "readOnly": true }, "unlockedHardcoreAt": { "title": "unlockedHardcoreAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" + "readOnly": true } } }, @@ -18582,13 +20309,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/1" + "type": "string" } }, "readOnly": true @@ -18605,13 +20330,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" } }, "readOnly": true @@ -18628,13 +20351,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -18657,8 +20378,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -18666,80 +20386,67 @@ "achievementsUnlocked": { "title": "achievementsUnlocked", "type": "number", - "readOnly": true, - "example": 20 + "readOnly": true }, "achievementsUnlockedHardcore": { "title": "achievementsUnlockedHardcore", "type": "number", - "readOnly": true, - "example": 20 + "readOnly": true }, "points": { "title": "points", "type": "number", - "readOnly": true, - "example": 189 + "readOnly": true }, "pointsHardcore": { "title": "pointsHardcore", "type": "number", - "readOnly": true, - "example": 189 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 8479 + "readOnly": true }, "completionPercentage": { "title": "completionPercentage", "type": "number", - "readOnly": true, - "example": "1.000000000" + "readOnly": true }, "completionPercentageHardcore": { "title": "completionPercentageHardcore", "type": "number", - "readOnly": true, - "example": "1.000000000" + "readOnly": true }, "lastUnlockAt": { "title": "lastUnlockAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "readOnly": true }, "lastUnlockHardcoreAt": { "title": "lastUnlockHardcoreAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "readOnly": true }, "completedAt": { "title": "completedAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "readOnly": true }, "completedHardcoreAt": { "title": "completedHardcoreAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "readOnly": true }, "timeTakenSeconds": { "title": "timeTakenSeconds", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "timeTakenHardcoreSeconds": { "title": "timeTakenHardcoreSeconds", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "setContext": { "title": "setContext", @@ -18761,13 +20468,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -18784,13 +20489,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -18813,8 +20516,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -18822,56 +20524,47 @@ "lastPlayedAt": { "title": "lastPlayedAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:15:57.000000Z" + "readOnly": true }, "firstUnlockAt": { "title": "firstUnlockAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" + "readOnly": true }, "lastUnlockAt": { "title": "lastUnlockAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "readOnly": true }, "lastUnlockHardcoreAt": { "title": "lastUnlockHardcoreAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "readOnly": true }, "beatenAt": { "title": "beatenAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T08:19:11.000000Z" + "readOnly": true }, "beatenHardcoreAt": { "title": "beatenHardcoreAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T08:19:11.000000Z" + "readOnly": true }, "playtimeTotalSeconds": { "title": "playtimeTotalSeconds", "type": "number", - "readOnly": true, - "example": 12159 + "readOnly": true }, "timeToBeatSeconds": { "title": "timeToBeatSeconds", "type": "number", - "readOnly": true, - "example": 5153 + "readOnly": true }, "timeToBeatHardcoreSeconds": { "title": "timeToBeatHardcoreSeconds", "type": "number", - "readOnly": true, - "example": 5153 + "readOnly": true } } }, @@ -18888,13 +20581,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -18911,13 +20602,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -18934,13 +20623,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -18963,8 +20650,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "5" + "type": "string" }, "attributes": { "type": "object", @@ -18972,32 +20658,27 @@ "state": { "title": "state", "type": "string", - "readOnly": true, - "example": "open" + "readOnly": true }, "type": { "title": "type", "type": "string", - "readOnly": true, - "example": "did_not_trigger" + "readOnly": true }, "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" + "readOnly": true }, "hardcore": { "title": "hardcore", "type": "boolean", - "readOnly": true, - "example": 1 + "readOnly": true }, "reportedAt": { "title": "reportedAt", "type": "string", - "readOnly": true, - "example": "2026-06-05T19:41:03.000000Z" + "readOnly": true }, "resolvedAt": { "title": "resolvedAt", @@ -19007,14 +20688,12 @@ "ticketableType": { "title": "ticketableType", "type": "string", - "readOnly": true, - "example": "achievement" + "readOnly": true }, "ticketableId": { "title": "ticketableId", "type": "number", - "readOnly": true, - "example": 3801 + "readOnly": true }, "gameIconUrl": { "title": "gameIconUrl", @@ -19041,13 +20720,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/5" + "type": "string" } }, "readOnly": true @@ -19064,13 +20741,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/5" + "type": "string" } }, "readOnly": true @@ -19087,13 +20762,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/reporters/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/reporters/5" + "type": "string" } }, "readOnly": true @@ -19110,13 +20783,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/resolvers/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/resolvers/5" + "type": "string" } }, "readOnly": true @@ -19133,13 +20804,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/5" + "type": "string" } }, "readOnly": true @@ -19162,8 +20831,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -19171,14 +20839,12 @@ "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2025-09-28T01:08:51.000000Z" + "readOnly": true }, "gameId": { "title": "gameId", "type": "number", - "readOnly": true, - "example": 668 + "readOnly": true }, "gameTitle": { "title": "gameTitle", @@ -19225,13 +20891,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -19254,8 +20918,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "3" + "type": "string" }, "attributes": { "type": "object", @@ -19263,8 +20926,7 @@ "body": { "title": "body", "type": "string", - "readOnly": true, - "example": "Excited to play this!" + "readOnly": true }, "authorAvatarUrl": { "title": "authorAvatarUrl", @@ -19284,14 +20946,12 @@ "permalink": { "title": "permalink", "type": "string", - "readOnly": true, - "example": "" + "readOnly": true }, "submittedAt": { "title": "submittedAt", "type": "string", - "readOnly": true, - "example": "2026-05-05T22:41:05.000000Z" + "readOnly": true } } }, @@ -19308,13 +20968,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/3" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/3" + "type": "string" } }, "readOnly": true @@ -19337,8 +20995,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -19346,38 +21003,32 @@ "awardedAt": { "title": "awardedAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T08:19:11.000000Z" + "readOnly": true }, "kind": { "title": "kind", "type": "string", - "readOnly": true, - "example": "game_beaten" + "readOnly": true }, "title": { "title": "title", "type": "string", - "readOnly": true, - "example": 1 + "readOnly": true }, "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": 1 + "readOnly": true }, "displayOrder": { "title": "displayOrder", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "context": { "title": "context", "type": "object", - "readOnly": true, - "example": 1 + "readOnly": true }, "userDisplayName": { "title": "userDisplayName", @@ -19387,8 +21038,7 @@ "userId": { "title": "userId", "type": "string", - "readOnly": true, - "example": 14 + "readOnly": true } } }, @@ -19405,13 +21055,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "type": "string" } }, "readOnly": true @@ -19428,13 +21076,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -19451,13 +21097,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" } }, "readOnly": true @@ -19480,8 +21124,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "2" + "type": "string" }, "attributes": { "type": "object", @@ -19489,14 +21132,12 @@ "followedAt": { "title": "followedAt", "type": "string", - "readOnly": true, - "example": "2026-07-07T21:05:33.000000Z" + "readOnly": true }, "userId": { "title": "userId", "type": "string", - "readOnly": true, - "example": 1 + "readOnly": true }, "displayName": { "title": "displayName", @@ -19538,13 +21179,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/2" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/2" + "type": "string" } }, "readOnly": true @@ -19567,8 +21206,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "2" + "type": "string" }, "attributes": { "type": "object", @@ -19576,14 +21214,12 @@ "followedAt": { "title": "followedAt", "type": "string", - "readOnly": true, - "example": "2026-07-07T21:05:33.000000Z" + "readOnly": true }, "userId": { "title": "userId", "type": "string", - "readOnly": true, - "example": 1 + "readOnly": true }, "displayName": { "title": "displayName", @@ -19625,13 +21261,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/2" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/2" + "type": "string" } }, "readOnly": true @@ -19666,6 +21300,108 @@ "description": "", "operationId": "users.show", "parameters": [ + { + "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", + "rankHardcore", + "rankCasual", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "lastGame", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "leaderboardEntries", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "userGameListEntries", + "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", + "medianTimeToBeatSeconds", + "medianTimeToBeatHardcoreSeconds", + "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": ["lastGame"], + "type": "string" + } + } + }, { "name": "user", "in": "path", @@ -19673,17 +21409,6 @@ "allowEmptyValue": false, "schema": { "type": "string" - }, - "examples": { - "01K4Y876RZ4XVE4JA3X9ARV95P": { - "value": "01K4Y876RZ4XVE4JA3X9ARV95P" - }, - "01K4Y8770YSVFGWM6C38BCDQ5F": { - "value": "01K4Y8770YSVFGWM6C38BCDQ5F" - }, - "01K4Y8776Y34QHTCSZ1DEFAEB3": { - "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" - } } } ], @@ -19701,8 +21426,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -19725,45 +21449,38 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", "properties": { "title": { "title": "title", - "type": "string", - "example": "Quia Impedit Libero Quam" + "type": "string" }, "sortTitle": { "title": "sortTitle", - "type": "string", - "example": "quia impedit libero quam" + "type": "string" }, "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "imageBoxArtUrl": { "title": "imageBoxArtUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "imageTitleUrl": { "title": "imageTitleUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000010.png" + "readOnly": true }, "imageIngameUrl": { "title": "imageIngameUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "releasedAt": { "title": "releasedAt", @@ -19775,43 +21492,35 @@ }, "playersTotal": { "title": "playersTotal", - "type": "number", - "example": 82 + "type": "number" }, "playersHardcore": { "title": "playersHardcore", - "type": "number", - "example": 82 + "type": "number" }, "achievementsPublished": { "title": "achievementsPublished", - "type": "number", - "example": 20 + "type": "number" }, "achievementsUnpublished": { "title": "achievementsUnpublished", - "type": "number", - "example": 0 + "type": "number" }, "pointsTotal": { "title": "pointsTotal", - "type": "number", - "example": 189 + "type": "number" }, "pointsWeighted": { "title": "pointsWeighted", - "type": "number", - "example": 341 + "type": "number" }, "timesBeaten": { "title": "timesBeaten", - "type": "number", - "example": 0 + "type": "number" }, "timesBeatenHardcore": { "title": "timesBeatenHardcore", - "type": "number", - "example": 1 + "type": "number" }, "medianTimeToBeatSeconds": { "title": "medianTimeToBeatSeconds", @@ -19819,8 +21528,7 @@ }, "medianTimeToBeatHardcoreSeconds": { "title": "medianTimeToBeatHardcoreSeconds", - "type": "number", - "example": 5153 + "type": "number" } } }, @@ -19837,13 +21545,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" } }, "readOnly": true @@ -19860,13 +21566,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -19883,13 +21587,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" } }, "readOnly": true @@ -19906,13 +21608,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" } }, "readOnly": true @@ -19929,13 +21629,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" } }, "readOnly": true @@ -19952,13 +21650,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" } }, "readOnly": true @@ -19981,8 +21677,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -19990,62 +21685,52 @@ "claimedAt": { "title": "claimedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:24:26.000000Z" + "readOnly": true }, "finishedAt": { "title": "finishedAt", "type": "string", - "readOnly": true, - "example": "2025-12-12T06:24:26.000000Z" + "readOnly": true }, "updatedAt": { "title": "updatedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:24:26.000000Z" + "readOnly": true }, "status": { "title": "status", "type": "string", - "readOnly": true, - "example": "complete" + "readOnly": true }, "claimType": { "title": "claimType", "type": "string", - "readOnly": true, - "example": "primary" + "readOnly": true }, "setType": { "title": "setType", "type": "string", - "readOnly": true, - "example": "new_set" + "readOnly": true }, "specialType": { "title": "specialType", "type": "string", - "readOnly": true, - "example": "none" + "readOnly": true }, "extensionsCount": { "title": "extensionsCount", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "minutesLeft": { "title": "minutesLeft", "type": "number", - "readOnly": true, - "example": 342109 + "readOnly": true }, "userId": { "title": "userId", "type": "string", - "readOnly": true, - "example": 91 + "readOnly": true }, "userDisplayName": { "title": "userDisplayName", @@ -20055,8 +21740,7 @@ "gameId": { "title": "gameId", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "gameTitle": { "title": "gameTitle", @@ -20093,13 +21777,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" } }, "readOnly": true @@ -20116,13 +21798,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -20145,8 +21825,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -20154,8 +21833,7 @@ "score": { "title": "score", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "rank": { "title": "rank", @@ -20187,13 +21865,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" } }, "readOnly": true @@ -20210,13 +21886,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/1" + "type": "string" } }, "readOnly": true @@ -20239,8 +21913,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -20248,14 +21921,12 @@ "unlockedAt": { "title": "unlockedAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" + "readOnly": true }, "unlockedHardcoreAt": { "title": "unlockedHardcoreAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" + "readOnly": true } } }, @@ -20272,13 +21943,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/1" + "type": "string" } }, "readOnly": true @@ -20295,13 +21964,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" } }, "readOnly": true @@ -20318,13 +21985,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -20347,8 +22012,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -20356,80 +22020,67 @@ "achievementsUnlocked": { "title": "achievementsUnlocked", "type": "number", - "readOnly": true, - "example": 20 + "readOnly": true }, "achievementsUnlockedHardcore": { "title": "achievementsUnlockedHardcore", "type": "number", - "readOnly": true, - "example": 20 + "readOnly": true }, "points": { "title": "points", "type": "number", - "readOnly": true, - "example": 189 + "readOnly": true }, "pointsHardcore": { "title": "pointsHardcore", "type": "number", - "readOnly": true, - "example": 189 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 8479 + "readOnly": true }, "completionPercentage": { "title": "completionPercentage", "type": "number", - "readOnly": true, - "example": "1.000000000" + "readOnly": true }, "completionPercentageHardcore": { "title": "completionPercentageHardcore", "type": "number", - "readOnly": true, - "example": "1.000000000" + "readOnly": true }, "lastUnlockAt": { "title": "lastUnlockAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "readOnly": true }, "lastUnlockHardcoreAt": { "title": "lastUnlockHardcoreAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "readOnly": true }, "completedAt": { "title": "completedAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "readOnly": true }, "completedHardcoreAt": { "title": "completedHardcoreAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "readOnly": true }, "timeTakenSeconds": { "title": "timeTakenSeconds", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "timeTakenHardcoreSeconds": { "title": "timeTakenHardcoreSeconds", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "setContext": { "title": "setContext", @@ -20451,13 +22102,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -20474,13 +22123,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -20503,8 +22150,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -20512,56 +22158,47 @@ "lastPlayedAt": { "title": "lastPlayedAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:15:57.000000Z" + "readOnly": true }, "firstUnlockAt": { "title": "firstUnlockAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" + "readOnly": true }, "lastUnlockAt": { "title": "lastUnlockAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "readOnly": true }, "lastUnlockHardcoreAt": { "title": "lastUnlockHardcoreAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "readOnly": true }, "beatenAt": { "title": "beatenAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T08:19:11.000000Z" + "readOnly": true }, "beatenHardcoreAt": { "title": "beatenHardcoreAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T08:19:11.000000Z" + "readOnly": true }, "playtimeTotalSeconds": { "title": "playtimeTotalSeconds", "type": "number", - "readOnly": true, - "example": 12159 + "readOnly": true }, "timeToBeatSeconds": { "title": "timeToBeatSeconds", "type": "number", - "readOnly": true, - "example": 5153 + "readOnly": true }, "timeToBeatHardcoreSeconds": { "title": "timeToBeatHardcoreSeconds", "type": "number", - "readOnly": true, - "example": 5153 + "readOnly": true } } }, @@ -20578,13 +22215,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -20601,13 +22236,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -20624,13 +22257,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -20653,8 +22284,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "5" + "type": "string" }, "attributes": { "type": "object", @@ -20662,32 +22292,27 @@ "state": { "title": "state", "type": "string", - "readOnly": true, - "example": "open" + "readOnly": true }, "type": { "title": "type", "type": "string", - "readOnly": true, - "example": "did_not_trigger" + "readOnly": true }, "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" + "readOnly": true }, "hardcore": { "title": "hardcore", "type": "boolean", - "readOnly": true, - "example": 1 + "readOnly": true }, "reportedAt": { "title": "reportedAt", "type": "string", - "readOnly": true, - "example": "2026-06-05T19:41:03.000000Z" + "readOnly": true }, "resolvedAt": { "title": "resolvedAt", @@ -20697,14 +22322,12 @@ "ticketableType": { "title": "ticketableType", "type": "string", - "readOnly": true, - "example": "achievement" + "readOnly": true }, "ticketableId": { "title": "ticketableId", "type": "number", - "readOnly": true, - "example": 3801 + "readOnly": true }, "gameIconUrl": { "title": "gameIconUrl", @@ -20731,13 +22354,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/5" + "type": "string" } }, "readOnly": true @@ -20754,13 +22375,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/5" + "type": "string" } }, "readOnly": true @@ -20777,13 +22396,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/reporters/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/reporters/5" + "type": "string" } }, "readOnly": true @@ -20800,13 +22417,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/resolvers/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/resolvers/5" + "type": "string" } }, "readOnly": true @@ -20823,13 +22438,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/5" + "type": "string" } }, "readOnly": true @@ -20852,8 +22465,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -20861,14 +22473,12 @@ "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2025-09-28T01:08:51.000000Z" + "readOnly": true }, "gameId": { "title": "gameId", "type": "number", - "readOnly": true, - "example": 668 + "readOnly": true }, "gameTitle": { "title": "gameTitle", @@ -20915,13 +22525,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -20944,8 +22552,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "3" + "type": "string" }, "attributes": { "type": "object", @@ -20953,8 +22560,7 @@ "body": { "title": "body", "type": "string", - "readOnly": true, - "example": "Excited to play this!" + "readOnly": true }, "authorAvatarUrl": { "title": "authorAvatarUrl", @@ -20974,14 +22580,12 @@ "permalink": { "title": "permalink", "type": "string", - "readOnly": true, - "example": "" + "readOnly": true }, "submittedAt": { "title": "submittedAt", "type": "string", - "readOnly": true, - "example": "2026-05-05T22:41:05.000000Z" + "readOnly": true } } }, @@ -20998,13 +22602,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/3" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/3" + "type": "string" } }, "readOnly": true @@ -21027,8 +22629,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -21036,38 +22637,32 @@ "awardedAt": { "title": "awardedAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T08:19:11.000000Z" + "readOnly": true }, "kind": { "title": "kind", "type": "string", - "readOnly": true, - "example": "game_beaten" + "readOnly": true }, "title": { "title": "title", "type": "string", - "readOnly": true, - "example": 1 + "readOnly": true }, "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": 1 + "readOnly": true }, "displayOrder": { "title": "displayOrder", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "context": { "title": "context", "type": "object", - "readOnly": true, - "example": 1 + "readOnly": true }, "userDisplayName": { "title": "userDisplayName", @@ -21077,8 +22672,7 @@ "userId": { "title": "userId", "type": "string", - "readOnly": true, - "example": 14 + "readOnly": true } } }, @@ -21095,13 +22689,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "type": "string" } }, "readOnly": true @@ -21118,13 +22710,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -21141,13 +22731,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" } }, "readOnly": true @@ -21170,8 +22758,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "2" + "type": "string" }, "attributes": { "type": "object", @@ -21179,14 +22766,12 @@ "followedAt": { "title": "followedAt", "type": "string", - "readOnly": true, - "example": "2026-07-07T21:05:33.000000Z" + "readOnly": true }, "userId": { "title": "userId", "type": "string", - "readOnly": true, - "example": 1 + "readOnly": true }, "displayName": { "title": "displayName", @@ -21228,13 +22813,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/2" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/2" + "type": "string" } }, "readOnly": true @@ -21257,8 +22840,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "2" + "type": "string" }, "attributes": { "type": "object", @@ -21266,14 +22848,12 @@ "followedAt": { "title": "followedAt", "type": "string", - "readOnly": true, - "example": "2026-07-07T21:05:33.000000Z" + "readOnly": true }, "userId": { "title": "userId", "type": "string", - "readOnly": true, - "example": 1 + "readOnly": true }, "displayName": { "title": "displayName", @@ -21315,13 +22895,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/2" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/2" + "type": "string" } }, "readOnly": true @@ -21340,165 +22918,2671 @@ } } }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - }, - "/users/{user}/achievement-set-claims": { - "get": { - "tags": ["Users"], - "summary": "Show achievementSetClaims", - "description": "", - "operationId": "users.achievementSetClaims", - "parameters": [ + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/users/{user}/achievement-set-claims": { + "get": { + "tags": ["Users"], + "summary": "Show the achievementSetClaims of a user", + "description": "", + "operationId": "users.achievementSetClaims", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": 50, + "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", + "claimedAt", + "-claimedAt", + "finishedAt", + "-finishedAt", + "updatedAt", + "-updatedAt", + "status", + "-status", + "claimType", + "-claimType", + "setType", + "-setType", + "specialType", + "-specialType", + "extensionsCount", + "-extensionsCount", + "gameTitle", + "-gameTitle", + "userDisplayName", + "-userDisplayName" + ], + "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" + } + } + } + }, + { + "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" + } + } + }, + { + "name": "filter[gameId]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": "", + "type": "string" + } + }, + { + "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" + } + }, + { + "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", + "rankHardcore", + "rankCasual", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "lastGame", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "leaderboardEntries", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "userGameListEntries", + "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", + "medianTimeToBeatSeconds", + "medianTimeToBeatHardcoreSeconds", + "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" + } + } + }, + { + "name": "user", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The achievement-set-claims related to a user", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string" + } + } + }, + "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}/awards": { + "get": { + "tags": ["Users"], + "summary": "Show the awards of a user", + "description": "", + "operationId": "users.awards", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": 50, + "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", + "awardedAt", + "-awardedAt", + "displayOrder", + "-displayOrder" + ], + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "awardedAt": "By awardedAt, ascending", + "-awardedAt": "By awardedAt, descending", + "displayOrder": "By displayOrder, ascending", + "-displayOrder": "By displayOrder, 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" + } + } + }, + { + "name": "filter[awardedFrom]", + "in": "query", + "description": "Applies the awardedFrom scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "filter[awardedTo]", + "in": "query", + "description": "Applies the awardedTo scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "filter[eventId]", + "in": "query", + "description": "Applies the eventId 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[gameAwardTier]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter[kind]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "name": "fields[user-awards]", + "in": "query", + "description": "Only return these fields for the \"user-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": [ + "awardedAt", + "kind", + "title", + "badgeUrl", + "displayOrder", + "context", + "userDisplayName", + "userId", + "event", + "game", + "user" + ], + "type": "string" + } + } + }, + { + "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", + "eventAchievements" + ], + "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", + "medianTimeToBeatSeconds", + "medianTimeToBeatHardcoreSeconds", + "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", + "rankHardcore", + "rankCasual", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "lastGame", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "leaderboardEntries", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "userGameListEntries", + "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": [ + "event", + "event.awards", + "event.eventAchievements", + "game", + "game.system", + "game.achievementSets", + "game.hashes", + "user", + "user.lastGame" + ], + "type": "string" + } + } + }, + { + "name": "user", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The user-awards related to a user", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string" + } + } + }, + "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}/followers": { + "get": { + "tags": ["Users"], + "summary": "Show the followers of a user", + "description": "", + "operationId": "users.followers", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": 50, + "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", + "followedAt", + "-followedAt", + "displayName", + "-displayName", + "points", + "-points", + "pointsHardcore", + "-pointsHardcore" + ], + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "followedAt": "By followedAt, ascending", + "-followedAt": "By followedAt, descending", + "displayName": "By displayName, ascending", + "-displayName": "By displayName, descending", + "points": "By points, ascending", + "-points": "By points, descending", + "pointsHardcore": "By pointsHardcore, ascending", + "-pointsHardcore": "By pointsHardcore, descending" + } + } + } + }, + { + "name": "fields[user-follows]", + "in": "query", + "description": "Only return these fields for the \"user-follows\" 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": [ + "followedAt", + "userId", + "displayName", + "avatarUrl", + "points", + "pointsHardcore", + "isMutual", + "user" + ], + "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", + "rankHardcore", + "rankCasual", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "lastGame", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "leaderboardEntries", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "userGameListEntries", + "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": ["user", "user.lastGame"], + "type": "string" + } + } + }, + { + "name": "user", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The user-follows related to a user", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string" + } + } + }, + "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}/following": { + "get": { + "tags": ["Users"], + "summary": "Show the following of a user", + "description": "", + "operationId": "users.following", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": 50, + "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", + "followedAt", + "-followedAt", + "displayName", + "-displayName", + "points", + "-points", + "pointsHardcore", + "-pointsHardcore" + ], + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "followedAt": "By followedAt, ascending", + "-followedAt": "By followedAt, descending", + "displayName": "By displayName, ascending", + "-displayName": "By displayName, descending", + "points": "By points, ascending", + "-points": "By points, descending", + "pointsHardcore": "By pointsHardcore, ascending", + "-pointsHardcore": "By pointsHardcore, descending" + } + } + } + }, + { + "name": "fields[user-follows]", + "in": "query", + "description": "Only return these fields for the \"user-follows\" 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": [ + "followedAt", + "userId", + "displayName", + "avatarUrl", + "points", + "pointsHardcore", + "isMutual", + "user" + ], + "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", + "rankHardcore", + "rankCasual", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "lastGame", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "leaderboardEntries", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "userGameListEntries", + "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": ["user", "user.lastGame"], + "type": "string" + } + } + }, + { + "name": "user", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The user-follows related to a user", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string" + } + } + }, + "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}/leaderboard-entries": { + "get": { + "tags": ["Users"], + "summary": "Show the leaderboardEntries of a user", + "description": "", + "operationId": "users.leaderboardEntries", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": 50, + "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", + "score", + "-score", + "createdAt", + "-createdAt", + "updatedAt", + "-updatedAt" + ], + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "score": "By score, ascending", + "-score": "By score, descending", + "createdAt": "By createdAt, ascending", + "-createdAt": "By createdAt, descending", + "updatedAt": "By updatedAt, ascending", + "-updatedAt": "By updatedAt, 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" + } + } + }, + { + "name": "filter[gameId]", + "in": "query", + "description": "Applies the gameId scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "filter[user]", + "in": "query", + "description": "Applies the user scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "filter[maxRank]", + "in": "query", + "description": "Applies the maxRank scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + }, + { + "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": "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", + "rankHardcore", + "rankCasual", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "lastGame", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "leaderboardEntries", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "userGameListEntries", + "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": ["leaderboard", "leaderboard.games", "user"], + "type": "string" + } + } + }, + { + "name": "user", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The leaderboard-entries related to a user", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string" + } + } + }, + "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" + } + } + } + }, + "/users/{user}/player-achievements": { + "get": { + "tags": ["Users"], + "summary": "Show the playerAchievements of a user", + "description": "", + "operationId": "users.playerAchievements", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": 50, + "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", + "unlockedAt", + "-unlockedAt", + "unlockedHardcoreAt", + "-unlockedHardcoreAt" + ], + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "unlockedAt": "By unlockedAt, ascending", + "-unlockedAt": "By unlockedAt, descending", + "unlockedHardcoreAt": "By unlockedHardcoreAt, ascending", + "-unlockedHardcoreAt": "By unlockedHardcoreAt, 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" + } + } + }, + { + "name": "filter[achievementSetId]", + "in": "query", + "description": "Applies the achievementSetId 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[unlockedFrom]", + "in": "query", + "description": "Applies the unlockedFrom scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "filter[unlockedTo]", + "in": "query", + "description": "Applies the unlockedTo scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "fields[player-achievements]", + "in": "query", + "description": "Only return these fields for the \"player-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": [ + "unlockedAt", + "unlockedHardcoreAt", + "achievement", + "user", + "game" + ], + "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", + "medianTimeToUnlockSeconds", + "medianTimeToUnlockHardcoreSeconds", + "medianTimeToUnlockSamples", + "medianTimeToUnlockHardcoreSamples", + "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", + "rankHardcore", + "rankCasual", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "lastGame", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "leaderboardEntries", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "userGameListEntries", + "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", + "medianTimeToBeatSeconds", + "medianTimeToBeatHardcoreSeconds", + "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": ["achievement", "user", "game"], + "type": "string" + } + } + }, + { + "name": "user", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The player-achievements related to a user", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string" + } + } + }, + "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" + } + } + } + }, + "/users/{user}/player-achievement-sets": { + "get": { + "tags": ["Users"], + "summary": "Show the playerAchievementSets of a user", + "description": "", + "operationId": "users.playerAchievementSets", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": 50, + "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", + "points", + "-points", + "pointsHardcore", + "-pointsHardcore", + "pointsWeighted", + "-pointsWeighted", + "completionPercentage", + "-completionPercentage", + "completionPercentageHardcore", + "-completionPercentageHardcore", + "lastUnlockAt", + "-lastUnlockAt", + "lastUnlockHardcoreAt", + "-lastUnlockHardcoreAt", + "completedAt", + "-completedAt", + "completedHardcoreAt", + "-completedHardcoreAt", + "timeTakenSeconds", + "-timeTakenSeconds", + "timeTakenHardcoreSeconds", + "-timeTakenHardcoreSeconds" + ], + "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", + "completionPercentage": "By completionPercentage, ascending", + "-completionPercentage": "By completionPercentage, descending", + "completionPercentageHardcore": "By completionPercentageHardcore, ascending", + "-completionPercentageHardcore": "By completionPercentageHardcore, descending", + "lastUnlockAt": "By lastUnlockAt, ascending", + "-lastUnlockAt": "By lastUnlockAt, descending", + "lastUnlockHardcoreAt": "By lastUnlockHardcoreAt, ascending", + "-lastUnlockHardcoreAt": "By lastUnlockHardcoreAt, descending", + "completedAt": "By completedAt, ascending", + "-completedAt": "By completedAt, descending", + "completedHardcoreAt": "By completedHardcoreAt, ascending", + "-completedHardcoreAt": "By completedHardcoreAt, descending", + "timeTakenSeconds": "By timeTakenSeconds, ascending", + "-timeTakenSeconds": "By timeTakenSeconds, descending", + "timeTakenHardcoreSeconds": "By timeTakenHardcoreSeconds, ascending", + "-timeTakenHardcoreSeconds": "By timeTakenHardcoreSeconds, 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" + } + } + }, + { + "name": "filter[achievementSetId]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": "", + "type": "string" + } + }, + { + "name": "filter[gameId]", + "in": "query", + "description": "Applies the gameId scope.", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "filter[awardKind]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "name": "fields[player-achievement-sets]", + "in": "query", + "description": "Only return these fields for the \"player-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": [ + "achievementsUnlocked", + "achievementsUnlockedHardcore", + "points", + "pointsHardcore", + "pointsWeighted", + "completionPercentage", + "completionPercentageHardcore", + "lastUnlockAt", + "lastUnlockHardcoreAt", + "completedAt", + "completedHardcoreAt", + "timeTakenSeconds", + "timeTakenHardcoreSeconds", + "setContext", + "achievementSet", + "game" + ], + "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", + "timesCompleted", + "timesMastered", + "medianTimeToCompleteSeconds", + "medianTimeToMasterSeconds", + "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", + "medianTimeToBeatSeconds", + "medianTimeToBeatHardcoreSeconds", + "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": ["achievementSet", "game"], + "type": "string" + } + } + }, + { + "name": "user", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The player-achievement-sets related to a user", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string" + } + } + }, + "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}/player-games": { + "get": { + "tags": ["Users"], + "summary": "Show the playerGames of a user", + "description": "", + "operationId": "users.playerGames", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": 50, + "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", "lastPlayedAt", "-lastPlayedAt"], + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "lastPlayedAt": "By lastPlayedAt, ascending", + "-lastPlayedAt": "By lastPlayedAt, 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" + } + } + }, + { + "name": "filter[gameId][]", + "in": "query", + "description": "A list of gameIds to filter by.", + "required": false, + "allowEmptyValue": false, + "style": "form", + "explode": true, + "schema": { + "default": [], + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "filter[awardKind]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "name": "fields[player-games]", + "in": "query", + "description": "Only return these fields for the \"player-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": [ + "lastPlayedAt", + "firstUnlockAt", + "lastUnlockAt", + "lastUnlockHardcoreAt", + "beatenAt", + "beatenHardcoreAt", + "playtimeTotalSeconds", + "timeToBeatSeconds", + "timeToBeatHardcoreSeconds", + "achievementSets", + "game", + "playerAchievementSets" + ], + "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", + "timesCompleted", + "timesMastered", + "medianTimeToCompleteSeconds", + "medianTimeToMasterSeconds", + "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", + "medianTimeToBeatSeconds", + "medianTimeToBeatHardcoreSeconds", + "system", + "achievementSets", + "achievementSetClaims", + "comments", + "hashes", + "tickets" + ], + "type": "string" + } + } + }, + { + "name": "fields[player-achievement-sets]", + "in": "query", + "description": "Only return these fields for the \"player-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": [ + "achievementsUnlocked", + "achievementsUnlockedHardcore", + "points", + "pointsHardcore", + "pointsWeighted", + "completionPercentage", + "completionPercentageHardcore", + "lastUnlockAt", + "lastUnlockHardcoreAt", + "completedAt", + "completedHardcoreAt", + "timeTakenSeconds", + "timeTakenHardcoreSeconds", + "setContext", + "achievementSet", + "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": ["achievementSets", "game", "playerAchievementSets"], + "type": "string" + } + } + }, + { + "name": "user", + "in": "path", + "required": true, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The player-games related to a user", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": ["jsonapi", "data"], + "properties": { + "jsonapi": { + "type": "object", + "properties": { + "version": { + "title": "version", + "type": "string" + } + } + }, + "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}/tickets": { + "get": { + "tags": ["Users"], + "summary": "Show the tickets of a user", + "description": "", + "operationId": "users.tickets", + "parameters": [ + { + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": 25, + "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", + "state", + "-state", + "reportedAt", + "-reportedAt", + "resolvedAt", + "-resolvedAt" + ], + "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" + } + } + } + }, + { + "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" + } + } + }, + { + "name": "filter[state]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "type": "string" + } + }, + { + "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": "user", - "in": "path", - "required": true, + "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": "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" - } - } - } - } + "type": "array", + "items": { + "enum": [ + "title", + "description", + "points", + "pointsWeighted", + "badgeUrl", + "badgeLockedUrl", + "type", + "state", + "orderColumn", + "unlocksTotal", + "unlocksHardcore", + "unlockPercentage", + "unlockHardcorePercentage", + "medianTimeToUnlockSeconds", + "medianTimeToUnlockHardcoreSeconds", + "medianTimeToUnlockSamples", + "medianTimeToUnlockHardcoreSamples", + "createdAt", + "modifiedAt", + "developer", + "achievementSet", + "comments", + "games", + "playerAchievements", + "tickets" + ], + "type": "string" } } }, - "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, + "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": "string" - }, - "examples": { - "01K4Y876RZ4XVE4JA3X9ARV95P": { - "value": "01K4Y876RZ4XVE4JA3X9ARV95P" - }, - "01K4Y8770YSVFGWM6C38BCDQ5F": { - "value": "01K4Y8770YSVFGWM6C38BCDQ5F" - }, - "01K4Y8776Y34QHTCSZ1DEFAEB3": { - "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" + "type": "array", + "items": { + "enum": [ + "title", + "description", + "format", + "rankAsc", + "state", + "orderColumn", + "createdAt", + "updatedAt", + "games", + "developer", + "entries" + ], + "type": "string" } } - } - ], - "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" - } - } - } - } + }, + { + "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", + "rankHardcore", + "rankCasual", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "lastGame", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "leaderboardEntries", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "userGameListEntries", + "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", + "reporter.lastGame", + "resolver", + "resolver.lastGame", + "author", + "author.lastGame" + ], + "type": "string" } } }, - "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", @@ -21506,23 +25590,12 @@ "allowEmptyValue": false, "schema": { "type": "string" - }, - "examples": { - "01K4Y876RZ4XVE4JA3X9ARV95P": { - "value": "01K4Y876RZ4XVE4JA3X9ARV95P" - }, - "01K4Y8770YSVFGWM6C38BCDQ5F": { - "value": "01K4Y8770YSVFGWM6C38BCDQ5F" - }, - "01K4Y8776Y34QHTCSZ1DEFAEB3": { - "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" - } } } ], "responses": { "200": { - "description": "ShowRelated users", + "description": "The tickets related to a user", "content": { "application/vnd.api+json": { "schema": { @@ -21534,15 +25607,14 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.user-follows.resource.fetch" + "$ref": "#/components/schemas/resources.tickets.resource.fetch" } } } @@ -21562,293 +25634,156 @@ } } }, - "/users/{user}/following": { + "/users/{user}/user-game-list-entries": { "get": { "tags": ["Users"], - "summary": "Show following", + "summary": "Show the userGameListEntries of a user", "description": "", - "operationId": "users.following", + "operationId": "users.userGameListEntries", "parameters": [ { - "name": "user", - "in": "path", - "required": true, + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, "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" - } - } - } - } - } + "default": 50, + "type": "integer" } }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - }, - "/users/{user}/leaderboard-entries": { - "get": { - "tags": ["Users"], - "summary": "Show leaderboardEntries", - "description": "", - "operationId": "users.leaderboardEntries", - "parameters": [ { - "name": "user", - "in": "path", - "required": true, + "name": "page[number]", + "in": "query", + "description": "The page number for paginated results", + "required": false, "allowEmptyValue": false, "schema": { - "type": "string" - }, - "examples": { - "01K4Y876RZ4XVE4JA3X9ARV95P": { - "value": "01K4Y876RZ4XVE4JA3X9ARV95P" - }, - "01K4Y8770YSVFGWM6C38BCDQ5F": { - "value": "01K4Y8770YSVFGWM6C38BCDQ5F" - }, - "01K4Y8776Y34QHTCSZ1DEFAEB3": { - "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" - } + "type": "integer" } - } - ], - "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.leaderboard-entries.resource.fetch" - } - } - } + }, + { + "name": "sort", + "in": "query", + "required": false, + "allowEmptyValue": false, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "enum": ["id", "-id", "createdAt", "-createdAt"], + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "createdAt": "By createdAt, ascending", + "-createdAt": "By createdAt, descending" } } } }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" + { + "name": "filter[gameId]", + "in": "query", + "description": "Filters the records", + "required": false, + "allowEmptyValue": false, + "schema": { + "default": "", + "type": "string" + } }, - "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, + "name": "filter[kind]", + "in": "query", + "description": "Filters the records", + "required": false, "allowEmptyValue": false, "schema": { "type": "string" - }, - "examples": { - "01K4Y876RZ4XVE4JA3X9ARV95P": { - "value": "01K4Y876RZ4XVE4JA3X9ARV95P" - }, - "01K4Y8770YSVFGWM6C38BCDQ5F": { - "value": "01K4Y8770YSVFGWM6C38BCDQ5F" - }, - "01K4Y8776Y34QHTCSZ1DEFAEB3": { - "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" + } + }, + { + "name": "fields[user-game-list-entries]", + "in": "query", + "description": "Only return these fields for the \"user-game-list-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": [ + "createdAt", + "gameId", + "gameTitle", + "gameIconUrl", + "systemId", + "systemName", + "pointsTotal", + "achievementsPublished", + "game" + ], + "type": "string" } } - } - ], - "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-achievements.resource.fetch" - } - } - } - } + }, + { + "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", + "medianTimeToBeatSeconds", + "medianTimeToBeatHardcoreSeconds", + "system", + "achievementSets", + "achievementSetClaims", + "comments", + "hashes", + "tickets" + ], + "type": "string" } } }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - }, - "/users/{user}/player-achievement-sets": { - "get": { - "tags": ["Users"], - "summary": "Show playerAchievementSets", - "description": "", - "operationId": "users.playerAchievementSets", - "parameters": [ { - "name": "user", - "in": "path", - "required": true, + "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": "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.player-achievement-sets.resource.fetch" - } - } - } - } + "type": "array", + "items": { + "enum": ["game"], + "type": "string" } } }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - }, - "/users/{user}/player-games": { - "get": { - "tags": ["Users"], - "summary": "Show playerGames", - "description": "", - "operationId": "users.playerGames", - "parameters": [ { "name": "user", "in": "path", @@ -21856,23 +25791,12 @@ "allowEmptyValue": false, "schema": { "type": "string" - }, - "examples": { - "01K4Y876RZ4XVE4JA3X9ARV95P": { - "value": "01K4Y876RZ4XVE4JA3X9ARV95P" - }, - "01K4Y8770YSVFGWM6C38BCDQ5F": { - "value": "01K4Y8770YSVFGWM6C38BCDQ5F" - }, - "01K4Y8776Y34QHTCSZ1DEFAEB3": { - "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" - } } } ], "responses": { "200": { - "description": "ShowRelated users", + "description": "The user-game-list-entries related to a user", "content": { "application/vnd.api+json": { "schema": { @@ -21884,15 +25808,14 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, "data": { "type": "array", "items": { - "$ref": "#/components/schemas/resources.player-games.resource.fetch" + "$ref": "#/components/schemas/resources.user-game-list-entries.resource.fetch" } } } @@ -21912,153 +25835,156 @@ } } }, - "/users/{user}/tickets": { + "/users/{user}/wall-comments": { "get": { "tags": ["Users"], - "summary": "Show tickets", + "summary": "Show the wallComments of a user", "description": "", - "operationId": "users.tickets", + "operationId": "users.wallComments", "parameters": [ { - "name": "user", - "in": "path", - "required": true, + "name": "page[size]", + "in": "query", + "description": "The page size for paginated results", + "required": false, "allowEmptyValue": false, "schema": { - "type": "string" - }, - "examples": { - "01K4Y876RZ4XVE4JA3X9ARV95P": { - "value": "01K4Y876RZ4XVE4JA3X9ARV95P" - }, - "01K4Y8770YSVFGWM6C38BCDQ5F": { - "value": "01K4Y8770YSVFGWM6C38BCDQ5F" - }, - "01K4Y8776Y34QHTCSZ1DEFAEB3": { - "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" - } + "default": 50, + "type": "integer" } - } - ], - "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.tickets.resource.fetch" - } - } - } + }, + { + "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", "submittedAt", "-submittedAt"], + "type": "string", + "x-enumDescriptions": { + "id": "By id, ascending", + "-id": "By id, descending", + "submittedAt": "By submittedAt, ascending", + "-submittedAt": "By submittedAt, descending" } } } }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" + { + "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" + } + } }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - }, - "/users/{user}/user-game-list-entries": { - "get": { - "tags": ["Users"], - "summary": "Show userGameListEntries", - "description": "", - "operationId": "users.userGameListEntries", - "parameters": [ { - "name": "user", - "in": "path", - "required": true, + "name": "fields[comments]", + "in": "query", + "description": "Only return these fields for the \"comments\" 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": "string" - }, - "examples": { - "01K4Y876RZ4XVE4JA3X9ARV95P": { - "value": "01K4Y876RZ4XVE4JA3X9ARV95P" - }, - "01K4Y8770YSVFGWM6C38BCDQ5F": { - "value": "01K4Y8770YSVFGWM6C38BCDQ5F" - }, - "01K4Y8776Y34QHTCSZ1DEFAEB3": { - "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" + "type": "array", + "items": { + "enum": [ + "body", + "authorAvatarUrl", + "authorDisplayName", + "authorId", + "permalink", + "submittedAt", + "author" + ], + "type": "string" } } - } - ], - "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-game-list-entries.resource.fetch" - } - } - } - } + }, + { + "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", + "rankHardcore", + "rankCasual", + "yieldUnlocks", + "yieldPoints", + "joinedAt", + "lastActivityAt", + "deletedAt", + "isUnranked", + "isUserWallActive", + "richPresence", + "richPresenceUpdatedAt", + "lastGame", + "visibleRole", + "displayableRoles", + "achievementSetClaims", + "leaderboardEntries", + "playerAchievements", + "playerAchievementSets", + "playerGames", + "tickets", + "userGameListEntries", + "wallComments", + "awards", + "followers", + "following" + ], + "type": "string" } } }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" + { + "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": ["author"], + "type": "string" + } + } }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - }, - "/users/{user}/wall-comments": { - "get": { - "tags": ["Users"], - "summary": "Show wallComments", - "description": "", - "operationId": "users.wallComments", - "parameters": [ { "name": "user", "in": "path", @@ -22066,23 +25992,12 @@ "allowEmptyValue": false, "schema": { "type": "string" - }, - "examples": { - "01K4Y876RZ4XVE4JA3X9ARV95P": { - "value": "01K4Y876RZ4XVE4JA3X9ARV95P" - }, - "01K4Y8770YSVFGWM6C38BCDQ5F": { - "value": "01K4Y8770YSVFGWM6C38BCDQ5F" - }, - "01K4Y8776Y34QHTCSZ1DEFAEB3": { - "value": "01K4Y8776Y34QHTCSZ1DEFAEB3" - } } } ], "responses": { "200": { - "description": "ShowRelated users", + "description": "The comments related to a user", "content": { "application/vnd.api+json": { "schema": { @@ -22094,8 +26009,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -22160,8 +26074,7 @@ "properties": { "version": { "title": "version", - "type": "string", - "example": "1.0" + "type": "string" } } }, @@ -22176,8 +26089,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -22185,62 +26097,52 @@ "claimedAt": { "title": "claimedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:24:26.000000Z" + "readOnly": true }, "finishedAt": { "title": "finishedAt", "type": "string", - "readOnly": true, - "example": "2025-12-12T06:24:26.000000Z" + "readOnly": true }, "updatedAt": { "title": "updatedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:24:26.000000Z" + "readOnly": true }, "status": { "title": "status", "type": "string", - "readOnly": true, - "example": "complete" + "readOnly": true }, "claimType": { "title": "claimType", "type": "string", - "readOnly": true, - "example": "primary" + "readOnly": true }, "setType": { "title": "setType", "type": "string", - "readOnly": true, - "example": "new_set" + "readOnly": true }, "specialType": { "title": "specialType", "type": "string", - "readOnly": true, - "example": "none" + "readOnly": true }, "extensionsCount": { "title": "extensionsCount", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "minutesLeft": { "title": "minutesLeft", "type": "number", - "readOnly": true, - "example": 342109 + "readOnly": true }, "userId": { "title": "userId", "type": "string", - "readOnly": true, - "example": 91 + "readOnly": true }, "userDisplayName": { "title": "userDisplayName", @@ -22250,8 +26152,7 @@ "gameId": { "title": "gameId", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "gameTitle": { "title": "gameTitle", @@ -22288,13 +26189,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" } }, "readOnly": true @@ -22311,13 +26210,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -22339,8 +26236,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -22348,56 +26244,47 @@ "version": { "title": "version", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2026-05-31T20:21:52.000000Z" + "readOnly": true }, "updatedAt": { "title": "updatedAt", "type": "string", - "readOnly": true, - "example": "2026-06-10T20:57:02.000000Z" + "readOnly": true }, "playersTotal": { "title": "playersTotal", "type": "number", - "readOnly": true, - "example": 83 + "readOnly": true }, "playersHardcore": { "title": "playersHardcore", "type": "number", - "readOnly": true, - "example": 83 + "readOnly": true }, "achievementsPublished": { "title": "achievementsPublished", "type": "number", - "readOnly": true, - "example": 10 + "readOnly": true }, "achievementsUnpublished": { "title": "achievementsUnpublished", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "pointsTotal": { "title": "pointsTotal", "type": "number", - "readOnly": true, - "example": 101 + "readOnly": true }, "achievementSetId": { "title": "achievementSetId", "type": "string", - "readOnly": true, - "example": 215 + "readOnly": true } } }, @@ -22414,13 +26301,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -22442,8 +26327,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -22451,44 +26335,37 @@ "title": { "title": "title", "type": "string", - "readOnly": true, - "example": "Quia Impedit Libero Quam" + "readOnly": true }, "pointsTotal": { "title": "pointsTotal", "type": "number", - "readOnly": true, - "example": 189 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 341 + "readOnly": true }, "achievementsPublished": { "title": "achievementsPublished", "type": "number", - "readOnly": true, - "example": 20 + "readOnly": true }, "achievementsUnpublished": { "title": "achievementsUnpublished", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "timesCompleted": { "title": "timesCompleted", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "timesMastered": { "title": "timesMastered", "type": "number", - "readOnly": true, - "example": 2 + "readOnly": true }, "medianTimeToCompleteSeconds": { "title": "medianTimeToCompleteSeconds", @@ -22498,8 +26375,7 @@ "medianTimeToMasterSeconds": { "title": "medianTimeToMasterSeconds", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "badgeUrl": { "title": "badgeUrl", @@ -22509,8 +26385,7 @@ "achievementsFirstPublishedAt": { "title": "achievementsFirstPublishedAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" + "readOnly": true }, "types": { "title": "types", @@ -22520,14 +26395,12 @@ "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "readOnly": true }, "updatedAt": { "title": "updatedAt", "type": "string", - "readOnly": true, - "example": "2026-01-09T02:06:22.000000Z" + "readOnly": true } } }, @@ -22544,13 +26417,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -22567,13 +26438,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-versions/1" + "type": "string" } }, "readOnly": true @@ -22595,8 +26464,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -22604,38 +26472,32 @@ "title": { "title": "title", "type": "string", - "readOnly": true, - "example": "Soluta Quasi!" + "readOnly": true }, "description": { "title": "description", "type": "string", - "readOnly": true, - "example": "Nisi et sit labore reprehenderit aliquam aspernatur explicabo. True." + "readOnly": true }, "points": { "title": "points", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Badge/00001.png" + "readOnly": true }, "badgeLockedUrl": { "title": "badgeLockedUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Badge/00001_lock.png" + "readOnly": true }, "type": { "title": "type", @@ -22650,32 +26512,27 @@ "orderColumn": { "title": "orderColumn", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "unlocksTotal": { "title": "unlocksTotal", "type": "number", - "readOnly": true, - "example": 81 + "readOnly": true }, "unlocksHardcore": { "title": "unlocksHardcore", "type": "number", - "readOnly": true, - "example": 81 + "readOnly": true }, "unlockPercentage": { "title": "unlockPercentage", "type": "number", - "readOnly": true, - "example": 0.987804878 + "readOnly": true }, "unlockHardcorePercentage": { "title": "unlockHardcorePercentage", "type": "number", - "readOnly": true, - "example": 0.987804878 + "readOnly": true }, "medianTimeToUnlockSeconds": { "title": "medianTimeToUnlockSeconds", @@ -22700,14 +26557,12 @@ "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "readOnly": true }, "modifiedAt": { "title": "modifiedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:58.000000Z" + "readOnly": true } } }, @@ -22724,13 +26579,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/developers/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/developers/1" + "type": "string" } }, "readOnly": true @@ -22747,13 +26600,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -22770,13 +26621,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" } }, "readOnly": true @@ -22793,13 +26642,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -22816,13 +26663,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/1" + "type": "string" } }, "readOnly": true @@ -22839,13 +26684,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" } }, "readOnly": true @@ -22867,8 +26710,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "3" + "type": "string" }, "attributes": { "type": "object", @@ -22876,8 +26718,7 @@ "body": { "title": "body", "type": "string", - "readOnly": true, - "example": "Excited to play this!" + "readOnly": true }, "authorAvatarUrl": { "title": "authorAvatarUrl", @@ -22897,14 +26738,12 @@ "permalink": { "title": "permalink", "type": "string", - "readOnly": true, - "example": "" + "readOnly": true }, "submittedAt": { "title": "submittedAt", "type": "string", - "readOnly": true, - "example": "2026-05-05T22:41:05.000000Z" + "readOnly": true } } }, @@ -22921,13 +26760,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/3" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/3" + "type": "string" } }, "readOnly": true @@ -22949,8 +26786,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -22985,13 +26821,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "type": "string" } }, "readOnly": true @@ -23008,13 +26842,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/source-achievements/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/source-achievements/1" + "type": "string" } }, "readOnly": true @@ -23031,13 +26863,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/event-achievements/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/event-achievements/1" + "type": "string" } }, "readOnly": true @@ -23059,8 +26889,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "3" + "type": "string" }, "attributes": { "type": "object", @@ -23078,14 +26907,12 @@ "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000007.png" + "readOnly": true }, "state": { "title": "state", "type": "string", - "readOnly": true, - "example": "concluded" + "readOnly": true }, "playersTotal": { "title": "playersTotal", @@ -23100,14 +26927,12 @@ "activeFrom": { "title": "activeFrom", "type": "string", - "readOnly": true, - "example": "2026-02-07T00:00:00.000000Z" + "readOnly": true }, "activeThrough": { "title": "activeThrough", "type": "string", - "readOnly": true, - "example": "2026-02-28T00:00:00.000000Z" + "readOnly": true } } }, @@ -23124,13 +26949,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/3" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/3" + "type": "string" } }, "readOnly": true @@ -23147,13 +26970,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/event-achievements/3" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/event-achievements/3" + "type": "string" } }, "readOnly": true @@ -23175,8 +26996,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -23184,20 +27004,17 @@ "raMd5": { "title": "raMd5", "type": "string", - "readOnly": true, - "example": "eDWamQy5GYZqRxvXkj6P6rjDULfnTddT" + "readOnly": true }, "name": { "title": "name", "type": "string", - "readOnly": true, - "example": "True" + "readOnly": true }, "compatibility": { "title": "compatibility", "type": "string", - "readOnly": true, - "example": "compatible" + "readOnly": true }, "patchUrl": { "title": "patchUrl", @@ -23207,14 +27024,12 @@ "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:57.000000Z" + "readOnly": true }, "updatedAt": { "title": "updatedAt", "type": "string", - "readOnly": true, - "example": "2026-04-25T20:56:02.000000Z" + "readOnly": true } } }, @@ -23231,13 +27046,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -23259,45 +27072,38 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", "properties": { "title": { "title": "title", - "type": "string", - "example": "Quia Impedit Libero Quam" + "type": "string" }, "sortTitle": { "title": "sortTitle", - "type": "string", - "example": "quia impedit libero quam" + "type": "string" }, "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "imageBoxArtUrl": { "title": "imageBoxArtUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "imageTitleUrl": { "title": "imageTitleUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000010.png" + "readOnly": true }, "imageIngameUrl": { "title": "imageIngameUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000002.png" + "readOnly": true }, "releasedAt": { "title": "releasedAt", @@ -23309,43 +27115,35 @@ }, "playersTotal": { "title": "playersTotal", - "type": "number", - "example": 82 + "type": "number" }, "playersHardcore": { "title": "playersHardcore", - "type": "number", - "example": 82 + "type": "number" }, "achievementsPublished": { "title": "achievementsPublished", - "type": "number", - "example": 20 + "type": "number" }, "achievementsUnpublished": { "title": "achievementsUnpublished", - "type": "number", - "example": 0 + "type": "number" }, "pointsTotal": { "title": "pointsTotal", - "type": "number", - "example": 189 + "type": "number" }, "pointsWeighted": { "title": "pointsWeighted", - "type": "number", - "example": 341 + "type": "number" }, "timesBeaten": { "title": "timesBeaten", - "type": "number", - "example": 0 + "type": "number" }, "timesBeatenHardcore": { "title": "timesBeatenHardcore", - "type": "number", - "example": 1 + "type": "number" }, "medianTimeToBeatSeconds": { "title": "medianTimeToBeatSeconds", @@ -23353,8 +27151,7 @@ }, "medianTimeToBeatHardcoreSeconds": { "title": "medianTimeToBeatHardcoreSeconds", - "type": "number", - "example": 5153 + "type": "number" } } }, @@ -23371,13 +27168,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/systems/1" + "type": "string" } }, "readOnly": true @@ -23394,13 +27189,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -23417,13 +27210,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/1" + "type": "string" } }, "readOnly": true @@ -23440,13 +27231,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/comments/1" + "type": "string" } }, "readOnly": true @@ -23463,13 +27252,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/hashes/1" + "type": "string" } }, "readOnly": true @@ -23486,13 +27273,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/1" + "type": "string" } }, "readOnly": true @@ -23514,8 +27299,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -23523,8 +27307,7 @@ "title": { "title": "title", "type": "string", - "readOnly": true, - "example": "[Central]" + "readOnly": true }, "sortTitle": { "title": "sortTitle", @@ -23534,14 +27317,12 @@ "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/Images/000001.png" + "readOnly": true }, "hasMatureContent": { "title": "hasMatureContent", "type": "boolean", - "readOnly": true, - "example": false + "readOnly": true }, "gamesCount": { "title": "gamesCount", @@ -23556,20 +27337,17 @@ "isEventHub": { "title": "isEventHub", "type": "boolean", - "readOnly": true, - "example": false + "readOnly": true }, "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:04:29.000000Z" + "readOnly": true }, "updatedAt": { "title": "updatedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:04:29.000000Z" + "readOnly": true } } }, @@ -23586,13 +27364,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -23609,13 +27385,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/links/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/links/1" + "type": "string" } }, "readOnly": true @@ -23637,8 +27411,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -23646,8 +27419,7 @@ "score": { "title": "score", "type": "number", - "readOnly": true, - "example": 1 + "readOnly": true }, "rank": { "title": "rank", @@ -23679,13 +27451,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" } }, "readOnly": true @@ -23702,13 +27472,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/1" + "type": "string" } }, "readOnly": true @@ -23730,8 +27498,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -23739,50 +27506,42 @@ "title": { "title": "title", "type": "string", - "readOnly": true, - "example": "Totam Unde" + "readOnly": true }, "description": { "title": "description", "type": "string", - "readOnly": true, - "example": "Modi vitae commodi possimus animi." + "readOnly": true }, "format": { "title": "format", "type": "string", - "readOnly": true, - "example": "VALUE" + "readOnly": true }, "rankAsc": { "title": "rankAsc", "type": "boolean", - "readOnly": true, - "example": false + "readOnly": true }, "state": { "title": "state", "type": "string", - "readOnly": true, - "example": "active" + "readOnly": true }, "orderColumn": { "title": "orderColumn", "type": "number", - "readOnly": true, - "example": 64 + "readOnly": true }, "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:04:12.000000Z" + "readOnly": true }, "updatedAt": { "title": "updatedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:04:12.000000Z" + "readOnly": true } } }, @@ -23799,13 +27558,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -23822,13 +27579,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/developers/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/developers/1" + "type": "string" } }, "readOnly": true @@ -23845,13 +27600,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/entries/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/entries/1" + "type": "string" } }, "readOnly": true @@ -23873,8 +27626,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -23882,80 +27634,67 @@ "achievementsUnlocked": { "title": "achievementsUnlocked", "type": "number", - "readOnly": true, - "example": 20 + "readOnly": true }, "achievementsUnlockedHardcore": { "title": "achievementsUnlockedHardcore", "type": "number", - "readOnly": true, - "example": 20 + "readOnly": true }, "points": { "title": "points", "type": "number", - "readOnly": true, - "example": 189 + "readOnly": true }, "pointsHardcore": { "title": "pointsHardcore", "type": "number", - "readOnly": true, - "example": 189 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 8479 + "readOnly": true }, "completionPercentage": { "title": "completionPercentage", "type": "number", - "readOnly": true, - "example": "1.000000000" + "readOnly": true }, "completionPercentageHardcore": { "title": "completionPercentageHardcore", "type": "number", - "readOnly": true, - "example": "1.000000000" + "readOnly": true }, "lastUnlockAt": { "title": "lastUnlockAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "readOnly": true }, "lastUnlockHardcoreAt": { "title": "lastUnlockHardcoreAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "readOnly": true }, "completedAt": { "title": "completedAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "readOnly": true }, "completedHardcoreAt": { "title": "completedHardcoreAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "readOnly": true }, "timeTakenSeconds": { "title": "timeTakenSeconds", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "timeTakenHardcoreSeconds": { "title": "timeTakenHardcoreSeconds", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "setContext": { "title": "setContext", @@ -23977,13 +27716,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -24000,13 +27737,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -24028,8 +27763,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -24037,14 +27771,12 @@ "unlockedAt": { "title": "unlockedAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" + "readOnly": true }, "unlockedHardcoreAt": { "title": "unlockedHardcoreAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" + "readOnly": true } } }, @@ -24061,13 +27793,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/1" + "type": "string" } }, "readOnly": true @@ -24084,13 +27814,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" } }, "readOnly": true @@ -24107,13 +27835,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -24135,8 +27861,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -24144,56 +27869,47 @@ "lastPlayedAt": { "title": "lastPlayedAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:15:57.000000Z" + "readOnly": true }, "firstUnlockAt": { "title": "firstUnlockAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T07:20:03.000000Z" + "readOnly": true }, "lastUnlockAt": { "title": "lastUnlockAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "readOnly": true }, "lastUnlockHardcoreAt": { "title": "lastUnlockHardcoreAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T10:09:08.000000Z" + "readOnly": true }, "beatenAt": { "title": "beatenAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T08:19:11.000000Z" + "readOnly": true }, "beatenHardcoreAt": { "title": "beatenHardcoreAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T08:19:11.000000Z" + "readOnly": true }, "playtimeTotalSeconds": { "title": "playtimeTotalSeconds", "type": "number", - "readOnly": true, - "example": 12159 + "readOnly": true }, "timeToBeatSeconds": { "title": "timeToBeatSeconds", "type": "number", - "readOnly": true, - "example": 5153 + "readOnly": true }, "timeToBeatHardcoreSeconds": { "title": "timeToBeatHardcoreSeconds", "type": "number", - "readOnly": true, - "example": 5153 + "readOnly": true } } }, @@ -24210,13 +27926,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -24233,13 +27947,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -24256,13 +27968,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/1" + "type": "string" } }, "readOnly": true @@ -24284,42 +27994,35 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", "properties": { "name": { "title": "name", - "type": "string", - "example": "Genesis/Mega Drive" + "type": "string" }, "nameFull": { "title": "nameFull", - "type": "string", - "example": "Sega Genesis/Mega Drive" + "type": "string" }, "nameShort": { "title": "nameShort", - "type": "string", - "example": "MD" + "type": "string" }, "manufacturer": { "title": "manufacturer", - "type": "string", - "example": "Sega" + "type": "string" }, "iconUrl": { "title": "iconUrl", "type": "string", - "readOnly": true, - "example": "https://raweb.test/assets/images/system/md.png" + "readOnly": true }, "active": { "title": "active", - "type": "boolean", - "example": true + "type": "boolean" } } } @@ -24336,8 +28039,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "5" + "type": "string" }, "attributes": { "type": "object", @@ -24345,32 +28047,27 @@ "state": { "title": "state", "type": "string", - "readOnly": true, - "example": "open" + "readOnly": true }, "type": { "title": "type", "type": "string", - "readOnly": true, - "example": "did_not_trigger" + "readOnly": true }, "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" + "readOnly": true }, "hardcore": { "title": "hardcore", "type": "boolean", - "readOnly": true, - "example": 1 + "readOnly": true }, "reportedAt": { "title": "reportedAt", "type": "string", - "readOnly": true, - "example": "2026-06-05T19:41:03.000000Z" + "readOnly": true }, "resolvedAt": { "title": "resolvedAt", @@ -24380,14 +28077,12 @@ "ticketableType": { "title": "ticketableType", "type": "string", - "readOnly": true, - "example": "achievement" + "readOnly": true }, "ticketableId": { "title": "ticketableId", "type": "number", - "readOnly": true, - "example": 3801 + "readOnly": true }, "gameIconUrl": { "title": "gameIconUrl", @@ -24414,13 +28109,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievements/5" + "type": "string" } }, "readOnly": true @@ -24437,13 +28130,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboards/5" + "type": "string" } }, "readOnly": true @@ -24460,13 +28151,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/reporters/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/reporters/5" + "type": "string" } }, "readOnly": true @@ -24483,13 +28172,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/resolvers/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/resolvers/5" + "type": "string" } }, "readOnly": true @@ -24506,13 +28193,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/5" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/authors/5" + "type": "string" } }, "readOnly": true @@ -24534,8 +28219,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -24543,38 +28227,32 @@ "awardedAt": { "title": "awardedAt", "type": "string", - "readOnly": true, - "example": "2025-09-03T08:19:11.000000Z" + "readOnly": true }, "kind": { "title": "kind", "type": "string", - "readOnly": true, - "example": "game_beaten" + "readOnly": true }, "title": { "title": "title", "type": "string", - "readOnly": true, - "example": 1 + "readOnly": true }, "badgeUrl": { "title": "badgeUrl", "type": "string", - "readOnly": true, - "example": 1 + "readOnly": true }, "displayOrder": { "title": "displayOrder", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "context": { "title": "context", "type": "object", - "readOnly": true, - "example": 1 + "readOnly": true }, "userDisplayName": { "title": "userDisplayName", @@ -24584,8 +28262,7 @@ "userId": { "title": "userId", "type": "string", - "readOnly": true, - "example": 14 + "readOnly": true } } }, @@ -24602,13 +28279,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/events/1" + "type": "string" } }, "readOnly": true @@ -24625,13 +28300,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -24648,13 +28321,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/1" + "type": "string" } }, "readOnly": true @@ -24676,8 +28347,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "2" + "type": "string" }, "attributes": { "type": "object", @@ -24685,14 +28355,12 @@ "followedAt": { "title": "followedAt", "type": "string", - "readOnly": true, - "example": "2026-07-07T21:05:33.000000Z" + "readOnly": true }, "userId": { "title": "userId", "type": "string", - "readOnly": true, - "example": 1 + "readOnly": true }, "displayName": { "title": "displayName", @@ -24734,13 +28402,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/2" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/users/2" + "type": "string" } }, "readOnly": true @@ -24762,8 +28428,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "1" + "type": "string" }, "attributes": { "type": "object", @@ -24771,14 +28436,12 @@ "createdAt": { "title": "createdAt", "type": "string", - "readOnly": true, - "example": "2025-09-28T01:08:51.000000Z" + "readOnly": true }, "gameId": { "title": "gameId", "type": "number", - "readOnly": true, - "example": 668 + "readOnly": true }, "gameTitle": { "title": "gameTitle", @@ -24825,13 +28488,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/games/1" + "type": "string" } }, "readOnly": true @@ -24853,8 +28514,7 @@ "type": "string" }, "id": { - "type": "string", - "example": "01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "attributes": { "type": "object", @@ -24862,38 +28522,32 @@ "displayName": { "title": "displayName", "type": "string", - "readOnly": true, - "example": "Root" + "readOnly": true }, "avatarUrl": { "title": "avatarUrl", "type": "string", - "readOnly": true, - "example": "https://media.retroachievements.org/UserPic/Root.png?v=0" + "readOnly": true }, "motto": { "title": "motto", "type": "string", - "readOnly": true, - "example": "" + "readOnly": true }, "points": { "title": "points", "type": "number", - "readOnly": true, - "example": 1236 + "readOnly": true }, "pointsHardcore": { "title": "pointsHardcore", "type": "number", - "readOnly": true, - "example": 7130 + "readOnly": true }, "pointsWeighted": { "title": "pointsWeighted", "type": "number", - "readOnly": true, - "example": 15687 + "readOnly": true }, "rankHardcore": { "title": "rankHardcore", @@ -24908,26 +28562,22 @@ "yieldUnlocks": { "title": "yieldUnlocks", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "yieldPoints": { "title": "yieldPoints", "type": "number", - "readOnly": true, - "example": 0 + "readOnly": true }, "joinedAt": { "title": "joinedAt", "type": "string", - "readOnly": true, - "example": "2025-09-12T06:01:22.000000Z" + "readOnly": true }, "lastActivityAt": { "title": "lastActivityAt", "type": "string", - "readOnly": true, - "example": "2026-08-06T03:46:59.000000Z" + "readOnly": true }, "deletedAt": { "title": "deletedAt", @@ -24937,44 +28587,27 @@ "isUnranked": { "title": "isUnranked", "type": "boolean", - "readOnly": true, - "example": false + "readOnly": true }, "isUserWallActive": { "title": "isUserWallActive", "type": "boolean", - "readOnly": true, - "example": true + "readOnly": true }, "richPresence": { "title": "richPresence", "type": "string", - "readOnly": true, - "example": "Playing Assumenda Pariatur" + "readOnly": true }, "richPresenceUpdatedAt": { "title": "richPresenceUpdatedAt", "type": "string", - "readOnly": true, - "example": "2026-04-18T04:34:36.000000Z" + "readOnly": true }, "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 - } - } + "readOnly": true }, "displayableRoles": { "title": "displayableRoles", @@ -24996,13 +28629,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/last-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -25019,13 +28650,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/achievement-set-claims/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -25042,13 +28671,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/leaderboard-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -25065,13 +28692,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievements/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -25088,13 +28713,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-achievement-sets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -25111,13 +28734,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/player-games/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -25134,13 +28755,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/tickets/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -25157,13 +28776,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/user-game-list-entries/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -25180,13 +28797,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/wall-comments/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -25203,13 +28818,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/awards/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -25226,13 +28839,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followers/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -25249,13 +28860,11 @@ "properties": { "related": { "title": "related", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" }, "self": { "title": "self", - "type": "string", - "example": "https://api.retroachievements.org/v2/followings/01K4Y876RZ4XVE4JA3X9ARV95P" + "type": "string" } }, "readOnly": true @@ -25282,25 +28891,6 @@ "$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" - } - ] - } - } } } } @@ -25319,22 +28909,6 @@ "$ref": "#/components/schemas/helper.errors" } } - }, - "examples": { - "-": { - "value": { - "jsonapi": { - "version": "1.0" - }, - "errors": [ - { - "title": "Unauthorized.", - "status": "401", - "detail": "Unauthenticated." - } - ] - } - } } } } @@ -25353,21 +28927,6 @@ "$ref": "#/components/schemas/helper.errors" } } - }, - "examples": { - "-": { - "value": { - "jsonapi": { - "version": "1.0" - }, - "errors": [ - { - "title": "Not Found", - "status": "404" - } - ] - } - } } } } @@ -25386,25 +28945,6 @@ "$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" - } - ] - } - } } } }