diff --git a/docs/api/downloads/build-specific.api.mdx b/docs/api/downloads/build-specific.api.mdx index cd3b2c4..264d962 100644 --- a/docs/api/downloads/build-specific.api.mdx +++ b/docs/api/downloads/build-specific.api.mdx @@ -347,7 +347,7 @@ Gets information related to a specific build. value={"Example (from schema)"} > diff --git a/docs/api/downloads/builds.api.mdx b/docs/api/downloads/builds.api.mdx index b69edff..f0bf601 100644 --- a/docs/api/downloads/builds.api.mdx +++ b/docs/api/downloads/builds.api.mdx @@ -384,7 +384,7 @@ Gets all available builds for a project's version. value={"Example (from schema)"} > diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 1f9e7c5..188c466 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -57,11 +57,11 @@ const config: Config = { docsPluginId: "classic", config: { downloads: { - specPath: "openapi/downloads.yaml", + specPath: "openapi/downloads.json", outputDir: "docs/api/downloads", }, global: { - specPath: "openapi/global.yaml", + specPath: "openapi/global.json", outputDir: "docs/api/global", } } diff --git a/openapi/downloads.json b/openapi/downloads.json new file mode 100644 index 0000000..44ca15f --- /dev/null +++ b/openapi/downloads.json @@ -0,0 +1,604 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "Downloads API", + "version": "1.0.0" + }, + "servers": [ + { + "url": "https://download.geysermc.org" + } + ], + "paths": { + "/v2/projects": { + "get": { + "tags": [ + "projects-controller" + ], + "summary": "Gets a list of all available projects.", + "operationId": "projects", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectsResponse" + } + } + } + } + } + } + }, + "/v2/projects/{project}": { + "get": { + "tags": [ + "project-controller" + ], + "summary": "Gets information about a project.", + "operationId": "project", + "parameters": [ + { + "name": "project", + "in": "path", + "description": "The project identifier.", + "required": true, + "schema": { + "pattern": "[a-z]+", + "type": "string" + }, + "example": "geyser" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectResponse" + } + } + } + } + } + } + }, + "/v2/projects/{project}/versions/{version}": { + "get": { + "tags": [ + "version-controller" + ], + "summary": "Gets information about a version.", + "operationId": "version", + "parameters": [ + { + "name": "project", + "in": "path", + "description": "The project identifier.", + "required": true, + "schema": { + "pattern": "[a-z]+", + "type": "string" + }, + "example": "geyser" + }, + { + "name": "version", + "in": "path", + "description": "A version of the project.", + "required": true, + "schema": { + "pattern": "(?:latest|[0-9.]+-?(?:pre|SNAPSHOT)?(?:[0-9.]+)?)?", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VersionResponse" + } + } + } + } + } + } + }, + "/v2/projects/{project}/versions/{version}/builds": { + "get": { + "tags": [ + "version-builds-controller" + ], + "summary": "Gets all available builds for a project's version.", + "operationId": "builds", + "parameters": [ + { + "name": "project", + "in": "path", + "description": "The project identifier.", + "required": true, + "schema": { + "pattern": "[a-z]+", + "type": "string" + }, + "example": "geyser" + }, + { + "name": "version", + "in": "path", + "description": "A version of the project.", + "required": true, + "schema": { + "pattern": "(?:latest|[0-9.]+-?(?:pre|SNAPSHOT)?(?:[0-9.]+)?)?", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BuildsResponse" + } + } + } + } + } + } + }, + "/v2/projects/{project}/versions/{version}/builds/{build}": { + "get": { + "tags": [ + "version-build-controller" + ], + "summary": "Gets information related to a specific build.", + "operationId": "buildSpecific", + "parameters": [ + { + "name": "project", + "in": "path", + "description": "The project identifier.", + "required": true, + "schema": { + "pattern": "[a-z]+", + "type": "string" + }, + "example": "geyser" + }, + { + "name": "version", + "in": "path", + "description": "A version of the project.", + "required": true, + "schema": { + "pattern": "(?:latest|[0-9.]+-?(?:pre|SNAPSHOT)?(?:[0-9.]+)?)?", + "type": "string" + } + }, + { + "name": "build", + "in": "path", + "description": "A build of the version.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BuildResponse" + } + } + } + } + } + } + }, + "/v2/projects/{project}/versions/{version}/builds/{build}/downloads/{download}": { + "get": { + "tags": [ + "download-controller" + ], + "summary": "Downloads the given file from a build's data.", + "operationId": "downloadSpecific", + "parameters": [ + { + "name": "project", + "in": "path", + "description": "The project identifier.", + "required": true, + "schema": { + "pattern": "[a-z]+", + "type": "string" + }, + "example": "geyser" + }, + { + "name": "version", + "in": "path", + "description": "A version of the project.", + "required": true, + "schema": { + "pattern": "(?:latest|[0-9.]+-?(?:pre|SNAPSHOT)?(?:[0-9.]+)?)?", + "type": "string" + } + }, + { + "name": "build", + "in": "path", + "description": "A build of the version.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "download", + "in": "path", + "description": "A download of the build.", + "required": true, + "schema": { + "pattern": "[a-zA-Z0-9._-]+", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "ETag": { + "description": "An identifier for a specific version of a resource. It lets caches be more efficient and save bandwidth, as a web server does not need to resend a full response if the content has not changed.", + "style": "simple", + "schema": { + "type": "string" + } + }, + "Content-Disposition": { + "description": "A header indicating that the content is expected to be displayed as an attachment, that is downloaded and saved locally.", + "style": "simple", + "schema": { + "type": "string" + } + }, + "Last-Modified": { + "description": "The date and time at which the origin server believes the resource was last modified.", + "style": "simple", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object" + } + }, + "*/*": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/v2/projects/{project}/versions/{version}/builds/latest": { + "get": { + "tags": [ + "version-build-controller" + ], + "summary": "Gets information related to a specific build.", + "operationId": "buildLatest", + "parameters": [ + { + "name": "project", + "in": "path", + "description": "The project identifier.", + "required": true, + "schema": { + "pattern": "[a-z]+", + "type": "string" + }, + "example": "geyser" + }, + { + "name": "version", + "in": "path", + "description": "A version of the project.", + "required": true, + "schema": { + "pattern": "(?:latest|[0-9.]+-?(?:pre|SNAPSHOT)?(?:[0-9.]+)?)?", + "type": "string" + } + } + ], + "responses": { + "302": { + "description": "Found", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/v2/projects/{project}/versions/{version}/builds/latest/downloads/{download}": { + "get": { + "tags": [ + "download-controller" + ], + "summary": "Downloads the given file from a build's data.", + "operationId": "downloadLatest", + "parameters": [ + { + "name": "project", + "in": "path", + "description": "The project identifier.", + "required": true, + "schema": { + "pattern": "[a-z]+", + "type": "string" + }, + "example": "geyser" + }, + { + "name": "version", + "in": "path", + "description": "A version of the project.", + "required": true, + "schema": { + "pattern": "(?:latest|[0-9.]+-?(?:pre|SNAPSHOT)?(?:[0-9.]+)?)?", + "type": "string" + } + }, + { + "name": "download", + "in": "path", + "description": "A download of the build.", + "required": true, + "schema": { + "pattern": "[a-zA-Z0-9._-]+", + "type": "string" + } + } + ], + "responses": { + "302": { + "description": "Found", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "BuildResponse": { + "type": "object", + "properties": { + "project_id": { + "pattern": "[a-z]+", + "type": "string", + "example": "geyser" + }, + "project_name": { + "type": "string", + "example": "Geyser" + }, + "version": { + "pattern": "(?:latest|[0-9.]+-?(?:pre|SNAPSHOT)?(?:[0-9.]+)?)?", + "type": "string", + "example": "2.1.0" + }, + "build": { + "pattern": "\\d+", + "type": "integer", + "format": "int32", + "example": 30 + }, + "time": { + "type": "string", + "format": "date-time" + }, + "channel": { + "type": "string", + "enum": [ + "default", + "experimental" + ] + }, + "promoted": { + "type": "boolean" + }, + "changes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Change" + } + }, + "downloads": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Download" + } + } + } + }, + "BuildsResponse": { + "type": "object", + "properties": { + "project_id": { + "pattern": "[a-z]+", + "type": "string", + "example": "geyser" + }, + "project_name": { + "type": "string", + "example": "Geyser" + }, + "version": { + "pattern": "(?:latest|[0-9.]+-?(?:pre|SNAPSHOT)?(?:[0-9.]+)?)?", + "type": "string", + "example": "2.1.0" + }, + "builds": { + "type": "array", + "items": { + "$ref": "#/components/schemas/VersionBuild" + } + } + } + }, + "Change": { + "type": "object", + "properties": { + "commit": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, + "Download": { + "type": "object", + "properties": { + "name": { + "pattern": "[a-z0-9._-]+", + "type": "string", + "example": "Geyser-Spigot.jar" + }, + "sha256": { + "pattern": "[a-f0-9]{64}", + "type": "string", + "example": "9ecc7374c2110a077f6c288fa4ad53a6812c09d5690dae0bc96508f939d4cb8a" + } + } + }, + "ProjectResponse": { + "type": "object", + "properties": { + "project_id": { + "pattern": "[a-z]+", + "type": "string", + "example": "geyser" + }, + "project_name": { + "type": "string", + "example": "Geyser" + }, + "versions": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "ProjectsResponse": { + "type": "object", + "properties": { + "projects": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "VersionBuild": { + "type": "object", + "properties": { + "build": { + "pattern": "\\d+", + "type": "integer", + "format": "int32", + "example": 30 + }, + "time": { + "type": "string", + "format": "date-time" + }, + "channel": { + "type": "string", + "enum": [ + "default", + "experimental" + ] + }, + "promoted": { + "type": "boolean" + }, + "changes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Change" + } + }, + "downloads": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Download" + } + } + } + }, + "VersionResponse": { + "type": "object", + "properties": { + "project_id": { + "pattern": "[a-z]+", + "type": "string", + "example": "geyser" + }, + "project_name": { + "type": "string", + "example": "Geyser" + }, + "version": { + "pattern": "(?:latest|[0-9.]+-?(?:pre|SNAPSHOT)?(?:[0-9.]+)?)?", + "type": "string", + "example": "2.1.0" + }, + "builds": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/openapi/global.json b/openapi/global.json new file mode 100644 index 0000000..7ec7b5d --- /dev/null +++ b/openapi/global.json @@ -0,0 +1,839 @@ +{ + "components": { + "responses": {}, + "schemas": { + "ConvertedSkin": { + "description": "Data representing a skin that has been converted and uploaded to Java Edition", + "properties": { + "hash": { + "description": "The hash of the skin bytes", + "type": "string" + }, + "is_steve": { + "description": "If the skin is a Steve or an Alex", + "type": "boolean" + }, + "signature": { + "description": "The signature of the skin data used by Minecraft", + "type": "string" + }, + "texture_id": { + "description": "The texture id used by Minecraft", + "type": "string" + }, + "value": { + "description": "The value of the skin data used by Minecraft", + "type": "string" + } + }, + "required": [ + "hash", + "texture_id", + "value", + "singature", + "is_steve" + ], + "title": "ConvertedSkin", + "type": "object" + }, + "Error": { + "description": "Generic format for pretty much every error", + "required": [ + "message" + ], + "properties": { + "message": { + "description": "The error message", + "type": "string" + } + }, + "title": "Error", + "type": "object" + }, + "Link": { + "description": "A link between a Java and a Bedrock account", + "properties": { + "bedrock_id": { + "description": "xuid of the Bedrock player", + "example": 2535432196048835, + "format": "int64", + "type": "integer" + }, + "java_id": { + "description": "UUID of the Java player", + "example": "d34eb447-6e90-4c78-9281-600df88aef1d", + "format": "uuid", + "type": "string" + }, + "java_name": { + "description": "Username of the Java player", + "example": "Tim203", + "type": "string" + }, + "last_name_update": { + "description": "Unix millis of the last Java name update check", + "format": "int64", + "type": "integer" + } + }, + "required": [ + "bedrock_id", + "java_id", + "java_name", + "last_name_update" + ], + "title": "Link", + "type": "object" + }, + "LinkList": { + "description": "Response schema for a list of links", + "items": { + "$ref": "#/components/schemas/Link" + }, + "title": "LinkList", + "type": "array" + }, + "RecentConvertedSkinList": { + "description": "List of most recently converted skins. Ordered by most recently converted", + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/RecentConvertedSkinReference" + }, + "type": "array" + }, + "total_pages": { + "description": "The amount of pages available", + "type": "integer" + } + }, + "title": "RecentConvertedSkinList", + "type": "object" + }, + "RecentConvertedSkinReference": { + "description": "The most basic info required to show a Java skin on the site", + "properties": { + "id": { + "description": "The converted skin id", + "type": "integer" + }, + "texture_id": { + "description": "The texture id used by Minecraft", + "type": "string" + } + }, + "required": [ + "id", + "texture_id" + ], + "title": "RecentConvertedSkinReference", + "type": "object" + }, + "Statistics": { + "description": "All publicly available statistics", + "properties": { + "pre_upload_queue": { + "properties": { + "length": { + "description": "The amount of skins in the pre-upload queue", + "type": "integer" + } + }, + "type": "object" + }, + "upload_queue": { + "properties": { + "estimated_duration": { + "description": "Estimated duration to upload 'length' amount of skins", + "format": "decimal", + "type": "number" + }, + "length": { + "description": "The amount of skins in the upload queue", + "type": "integer" + } + }, + "type": "object" + } + }, + "title": "Statistics", + "type": "object" + }, + "UsernameProfile": { + "description": "Username to Floodgate UUID in Mojang Minecraft profile format", + "properties": { + "id": { + "description": "The Floodgate UUID of the Bedrock player", + "example": "0000000000000000000901f64f65c7c3", + "format": "uuid", + "type": "string" + }, + "name": { + "description": "The Floodgate username", + "example": ".Tim203", + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "title": "UsernameProfile", + "type": "object" + }, + "XboxGamertagResult": { + "description": "Get gamertag from xuid result", + "required": [ + "gamertag" + ], + "properties": { + "gamertag": { + "description": "The gamertag", + "example": "Tim203", + "type": "string" + } + }, + "title": "XboxGamertagResult", + "type": "object" + }, + "XboxXuidResult": { + "description": "Get xuid from gamertag result", + "required": [ + "xuid" + ], + "properties": { + "xuid": { + "description": "The xuid", + "example": 2535432196048835, + "format": "int64", + "type": "integer" + } + }, + "title": "XboxXuidResult", + "type": "object" + } + } + }, + "info": { + "title": "Global Api", + "version": "1.0.2" + }, + "openapi": "3.0.0", + "paths": { + "/health": { + "get": { + "callbacks": {}, + "operationId": "GlobalApiWeb.Api.HealthController.health", + "parameters": [], + "responses": { + "204": { + "description": "The server is online" + } + }, + "summary": "Simple server online check", + "tags": [ + "health" + ] + } + }, + "/render/front/{texture_id}": { + "get": { + "operationId": "GlobalApiWeb.Api.RenderController.get_front_texture", + "parameters": [ + { + "description": "Java texture id", + "example": "a90790c57e181ed13aded14c47ee2f7c8de3533e017ba957af7bdf9df1bde94f", + "in": "path", + "name": "texture_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "ok" + } + } + } + }, + "/render/raw/{texture_id}": { + "get": { + "operationId": "GlobalApiWeb.Api.RenderController.get_raw_texture", + "parameters": [ + { + "description": "Java texture id", + "example": "a90790c57e181ed13aded14c47ee2f7c8de3533e017ba957af7bdf9df1bde94f", + "in": "path", + "name": "texture_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "ok" + } + } + } + }, + "/v1/link/bedrock/{xuid}": { + "get": { + "callbacks": {}, + "deprecated": true, + "operationId": "GlobalApiWeb.Api.LinkController.get_bedrock_link_v1", + "parameters": [ + { + "description": "Bedrock xuid", + "example": "2535432196048835", + "in": "path", + "name": "xuid", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "400": { + "description": "Deprecated" + } + }, + "tags": [ + "link" + ] + } + }, + "/v1/link/java/{uuid}": { + "get": { + "callbacks": {}, + "deprecated": true, + "operationId": "GlobalApiWeb.Api.LinkController.get_java_link_v1", + "parameters": [ + { + "description": "Java UUID", + "example": "d34eb447-6e90-4c78-9281-600df88aef1d", + "in": "path", + "name": "uuid", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "400": { + "description": "Deprecated" + } + }, + "tags": [ + "link" + ] + } + }, + "/v1/stats": { + "get": { + "callbacks": {}, + "operationId": "GlobalApiWeb.Api.StatsController.get_all_stats", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Statistics" + } + } + }, + "description": "Statistics" + } + }, + "summary": "Get all publicly available Global Api statistics", + "tags": [ + "stats" + ] + } + }, + "/v1/xbox/gamertag/{xuid}": { + "get": { + "callbacks": {}, + "deprecated": true, + "operationId": "GlobalApiWeb.Api.XboxController.get_gamertag_v1", + "parameters": [ + { + "description": "Bedrock xuid", + "example": "2535432196048835", + "in": "path", + "name": "xuid", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "400": { + "description": "Deprecated" + } + }, + "tags": [ + "xbox" + ] + } + }, + "/v1/xbox/xuid/{gamertag}": { + "get": { + "callbacks": {}, + "deprecated": true, + "operationId": "GlobalApiWeb.Api.XboxController.get_xuid_v1", + "parameters": [ + { + "description": "The gamertag of the Bedrock player", + "in": "path", + "name": "gamertag", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "400": { + "description": "Deprecated" + } + }, + "tags": [ + "xbox" + ] + } + }, + "/v2/admin/xbox/token": {}, + "/v2/link/bedrock/{xuid}": { + "get": { + "callbacks": {}, + "operationId": "GlobalApiWeb.Api.LinkController.get_bedrock_link_v2", + "parameters": [ + { + "description": "Bedrock xuid", + "example": "2535432196048835", + "in": "path", + "name": "xuid", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Link" + } + } + }, + "description": "Linked accounts or an empty object if there is no account linked" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "No xuid provided or invalid" + } + }, + "summary": "Get linked Java account from Bedrock xuid", + "tags": [ + "link" + ] + } + }, + "/v2/link/java/{uuid}": { + "get": { + "callbacks": {}, + "operationId": "GlobalApiWeb.Api.LinkController.get_java_link_v2", + "parameters": [ + { + "description": "Java UUID", + "example": "d34eb447-6e90-4c78-9281-600df88aef1d", + "in": "path", + "name": "uuid", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LinkList" + } + } + }, + "description": "Linked account or an empty object if there is no account linked" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "No UUID provided or invalid" + } + }, + "summary": "Get linked Bedrock account from Java UUID", + "tags": [ + "link" + ] + } + }, + "/v2/link/online": {}, + "/v2/skin/bedrock/recent/{page}": { + "get": { + "callbacks": {}, + "operationId": "GlobalApiWeb.Api.SkinController.get_recent_uploads.page", + "parameters": [ + { + "description": "Number between 1 - page limit. Defaults to 1", + "example": 1, + "in": "path", + "name": "page", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RecentConvertedSkinList" + } + } + }, + "description": "The most recently uploaded skins. First element has been uploaded most recently etc." + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Invalid page number (e.g. negative, decimal, too large)" + } + }, + "summary": "Get a list of the most recently uploaded skins", + "tags": [ + "skin" + ] + } + }, + "/v2/skin/bedrock/recent": { + "get": { + "callbacks": {}, + "operationId": "GlobalApiWeb.Api.SkinController.get_recent_uploads", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RecentConvertedSkinList" + } + } + }, + "description": "The most recently uploaded skins. First element has been uploaded most recently etc." + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Invalid page number (e.g. negative, decimal, too large)" + } + }, + "summary": "Get a list of the most recently uploaded skins", + "tags": [ + "skin" + ] + } + }, + "/v2/skin/{xuid}": { + "get": { + "callbacks": {}, + "operationId": "GlobalApiWeb.Api.SkinController.get_skin", + "parameters": [ + { + "description": "Bedrock xuid", + "example": "2535432196048835", + "in": "path", + "name": "xuid", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConvertedSkin" + } + } + }, + "description": "Converted skin or an empty object if there is no skin stored for that player" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Invalid xuid (not an int)" + } + }, + "summary": "Get the most recently converted skin of a Bedrock player", + "tags": [ + "skin" + ] + } + }, + "/v2/stats": { + "get": { + "callbacks": {}, + "operationId": "GlobalApiWeb.Api.StatsController.get_all_stats (2)", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Statistics" + } + } + }, + "description": "Statistics" + } + }, + "summary": "Get all publicly available Global Api statistics", + "tags": [ + "stats" + ] + } + }, + "/v2/utils/uuid/bedrock_or_java/{username}": { + "get": { + "callbacks": {}, + "operationId": "GlobalApiWeb.Api.UtilsController.get_bedrock_or_java_uuid", + "parameters": [ + { + "description": "The username of the Minecraft player", + "examples": { + "bedrock": { + "value": ".Tim203" + }, + "java": { + "value": "Tim203" + } + }, + "in": "path", + "name": "username", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The prefix used in your Floodgate config", + "example": ".", + "in": "query", + "name": "prefix", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UsernameProfile" + } + } + }, + "description": "The Bedrock xuid in Floodgate UUID format and username. Response made to be identical to the Mojang endpoint" + }, + "204": { + "description": "Either the gamertag is too long or too short once the prefix was removed or there is no Xbox account registered to the gamertag" + }, + "302": { + "description": "The player is a Java player and we'll redirect you to the Mojang endpoint for that username" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Invalid prefix (no prefix, empty or too long)" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "The requested account was not cached and we were not able to call the Xbox Live API (rate limited / not setup)" + } + }, + "summary": "Utility endpoint to get either a Java UUID or a Bedrock xuid", + "tags": [ + "utils" + ] + } + }, + "/v2/xbox/batch/gamertag": {}, + "/v2/xbox/gamertag/{xuid}": { + "get": { + "callbacks": {}, + "operationId": "GlobalApiWeb.Api.XboxController.get_gamertag_v2", + "parameters": [ + { + "description": "The xuid of the Bedrock player", + "in": "path", + "name": "xuid", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/XboxGamertagResult" + } + } + }, + "description": "The gamertag associated with the xuid or an empty object if there is account with the given xuid" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "The xuid is invalid (not an int)" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "The requested account was not cached and we were not able to call the Xbox Live API (rate limited / not setup)" + } + }, + "summary": "Get the gamertag from a xuid", + "tags": [ + "xbox" + ] + } + }, + "/v2/xbox/xuid/{gamertag}": { + "get": { + "callbacks": {}, + "operationId": "GlobalApiWeb.Api.XboxController.get_xuid_v2", + "parameters": [ + { + "description": "The gamertag of the Bedrock player", + "in": "path", + "name": "gamertag", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/XboxXuidResult" + } + } + }, + "description": "The xuid associated with the gamertag or an empty object if there is account with the given gamertag" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "The gamertag is invalid (empty or longer than 16 chars)" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "The requested account was not cached and we were not able to call the Xbox Live API (rate limited / not setup)" + } + }, + "summary": "Get the xuid from a gamertag", + "tags": [ + "xbox" + ] + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.geysermc.org", + "variables": {} + } + ], + "tags": [] +} \ No newline at end of file