{ "swagger": "2.0", "info": { "description": "These are the set of `internal` endpoints dedicated to the Monkeytype web client. Authentication for these endpoints requires a user account.", "version": "1.0.0", "title": "Monkeytype", "termsOfService": "https://monkeytype.com/terms-of-service", "contact": { "name": "Developer", "email": "jack@monkeytype.com" } }, "host": "api.monkeytype.com", "schemes": ["https"], "consumes": ["application/json"], "produces": ["application/json"], "tags": [ { "name": "index", "description": "Server status information" }, { "name": "users", "description": "User data and related operations" }, { "name": "psas", "description": "Public service announcements" }, { "name": "presets", "description": "Preset data and related operations" }, { "name": "configs", "description": "User configuration data and related operations" }, { "name": "ape-keys", "description": "ApeKey data and related operations" }, { "name": "leaderboards", "description": "Leaderboard data" }, { "name": "results", "description": "Result data and related operations" }, { "name": "quotes", "description": "Quote data and related operations" } ], "paths": { "/": { "get": { "tags": ["index"], "summary": "Gets the server's status data", "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/users": { "get": { "tags": ["users"], "summary": "Returns a user's data", "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } }, "delete": { "tags": ["users"], "summary": "Deletes a user's account", "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/users/name": { "patch": { "tags": ["users"], "summary": "Updates a user's name", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "type": "object", "properties": { "name": { "type": "string" } } } } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/users/signup": { "post": { "tags": ["users"], "summary": "Creates a new user", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "type": "object", "properties": { "email": { "type": "string" }, "name": { "type": "string" }, "uid": { "type": "string" } } } } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/users/checkName/{name}": { "get": { "tags": ["users"], "summary": "Checks to see if a username is available", "parameters": [ { "name": "name", "in": "path", "description": "", "required": true, "type": "string" } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/users/leaderboardMemory": { "patch": { "tags": ["users"], "summary": "Updates a user's cached leaderboard state", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "type": "object", "properties": { "mode": { "type": "string" }, "mode2": { "type": "string" }, "language": { "type": "string" }, "rank": { "type": "number" } } } } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/users/discord/link": { "post": { "tags": ["users"], "summary": "Links a user's account with a discord account", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "type": "object", "properties": { "tokenType": { "type": "string" }, "accessToken": { "type": "string" }, "uid": { "type": "string" } } } } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/users/discord/unlink": { "post": { "tags": ["users"], "summary": "Unlinks a user's account with a discord account", "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/users/email": { "patch": { "tags": ["users"], "summary": "Updates a user's email", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "type": "object", "properties": { "newEmail": { "type": "string" }, "previousEmail": { "type": "string" } } } } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/users/personalBests": { "delete": { "tags": ["users"], "summary": "Gets a user's personal bests", "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/users/tags": { "get": { "tags": ["users"], "summary": "Gets a user's tags", "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } }, "post": { "tags": ["users"], "summary": "Creates a new tag", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "type": "object", "properties": { "tagName": { "type": "string" } } } } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } }, "patch": { "tags": ["users"], "summary": "Updates an existing tag", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "type": "object", "properties": { "tagId": { "type": "string" }, "newName": { "type": "string" } } } } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/users/tags/{tagId}": { "delete": { "tags": ["users"], "summary": "Deletes a tag", "parameters": [ { "in": "path", "name": "tagId", "required": true, "type": "string" } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/users/tags/{tagId}/personalBest": { "delete": { "tags": ["users"], "summary": "Removes personal bests associated with a tag", "parameters": [ { "in": "path", "name": "tagId", "required": true, "type": "string" } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/psas": { "get": { "tags": ["psas"], "summary": "Gets the latest public service announcements", "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/presets": { "get": { "tags": ["presets"], "summary": "Gets saved preset configurations", "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } }, "post": { "tags": ["presets"], "summary": "Creates a preset configuration", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "type": "object", "properties": { "name": { "type": "string" }, "config": { "type": "object" } } } } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } }, "patch": { "tags": ["presets"], "summary": "Updates an existing preset configuration", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "type": "object", "properties": { "_id": { "type": "string" }, "name": { "type": "string" }, "config": { "type": "object" } } } } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/presets/{presetId}": { "delete": { "tags": ["presets"], "summary": "Deletes a preset configuration", "parameters": [ { "in": "path", "name": "presetId", "required": true, "type": "string" } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/configs": { "get": { "tags": ["configs"], "summary": "Gets the user's current configuration", "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } }, "patch": { "tags": ["configs"], "summary": "Updates a user's configuration", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "type": "object", "properties": { "config": { "type": "object" } } } } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/ape-keys": { "get": { "tags": ["ape-keys"], "summary": "Gets ApeKeys created by a user", "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } }, "post": { "tags": ["ape-keys"], "summary": "Creates an ApeKey", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "type": "object", "properties": { "name": { "type": "string" }, "enabled": { "type": "boolean" } } } } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/ape-keys/{apeKeyId}": { "patch": { "tags": ["ape-keys"], "summary": "Updates an ApeKey", "parameters": [ { "in": "path", "name": "apeKeyId", "required": true, "type": "string" } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } }, "delete": { "tags": ["ape-keys"], "summary": "Deletes an ApeKey", "parameters": [ { "in": "path", "name": "apeKeyId", "required": true, "type": "string" } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/leaderboards": { "get": { "tags": ["leaderboards"], "summary": "Gets a leaderboard", "parameters": [ { "in": "query", "name": "language", "type": "string" }, { "in": "query", "name": "mode", "type": "string" }, { "in": "query", "name": "mode2", "type": "string" }, { "in": "query", "name": "skip", "type": "number" }, { "in": "query", "name": "limit", "type": "number" } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/leaderboards/rank": { "get": { "tags": ["leaderboards"], "summary": "Gets a user's rank from a leaderboard", "parameters": [ { "in": "query", "name": "language", "type": "string" }, { "in": "query", "name": "mode", "type": "string" }, { "in": "query", "name": "mode2", "type": "string" } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/results": { "get": { "tags": ["results"], "summary": "Gets a history of a user's results", "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } }, "post": { "tags": ["results"], "summary": "Save a user's result", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "type": "object", "properties": { "result": { "type": "object" } } } } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } }, "delete": { "tags": ["results"], "summary": "Deletes all results", "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/results/tags": { "patch": { "tags": ["results"], "summary": "Labels a result with the specified tags", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "type": "object", "properties": { "tagIds": { "type": "array", "items": { "type": "string" } }, "resultId": { "type": "string" } } } } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/quotes": { "get": { "tags": ["quotes"], "summary": "Gets a list of quote submissions", "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } }, "post": { "tags": ["quotes"], "summary": "Creates a quote submission", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "type": "object", "properties": { "text": { "type": "string" }, "source": { "type": "string" }, "language": { "type": "string" }, "captcha": { "type": "string" } } } } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/quotes/approve": { "post": { "tags": ["quotes"], "summary": "Approves a quote submission", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "type": "object", "properties": { "quoteId": { "type": "string" }, "editText": { "type": "string" }, "editSource": { "type": "string" } } } } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/quotes/reject": { "post": { "tags": ["quotes"], "summary": "Rejects a quote submission", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "type": "object", "properties": { "quoteId": { "type": "string" } } } } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/quotes/rating": { "get": { "tags": ["quotes"], "summary": "Gets a rating for a quote", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "type": "object", "properties": { "quoteId": { "type": "string" }, "language": { "type": "string" } } } } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } }, "post": { "tags": ["quotes"], "summary": "Adds a rating for a quote", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "type": "object", "properties": { "quoteId": { "type": "string" }, "rating": { "type": "string" }, "language": { "type": "string" } } } } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } }, "/quotes/report": { "post": { "tags": ["quotes"], "summary": "Reports a quote", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "type": "object", "properties": { "quoteId": { "type": "string" }, "quoteLanguage": { "type": "string" }, "reason": { "type": "string" }, "comment": { "type": "string" }, "captcha": { "type": "string" } } } } ], "responses": { "default": { "description": "", "schema": { "$ref": "#/definitions/Response" } } } } } }, "definitions": { "Response": { "type": "object", "required": ["message", "data"], "properties": { "message": { "type": "string" }, "data": { "type": "object" } } } } }