monkeytype/backend/documentation/public-swagger.json
2022-04-28 12:39:18 +02:00

431 lines
10 KiB
JSON

{
"swagger": "2.0",
"info": {
"description": "Documentation for the public endpoints provided by the Monketype API server.\n\nNote that authentication is performed with the Authorization HTTP header in the format `Authorization: ApeKey YOUR_APE_KEY`\n\nThere is a rate limit of `30 requests per minute` across all endpoints. Rate limit rates are shared across all ape keys.",
"version": "1.0.0",
"title": "Monkeytype API",
"termsOfService": "https://monkeytype.com/terms-of-service",
"contact": {
"name": "Developer",
"email": "jack@monkeytype.com"
}
},
"basePath": "api.monkeytype.com/",
"consumes": ["application/json"],
"produces": ["application/json"],
"tags": [
{
"name": "users",
"description": "User data and related operations"
},
{
"name": "leaderboards",
"description": "Leaderboard data and related operations"
},
{
"name": "results",
"description": "User results data and related operations"
}
],
"paths": {
"/users/personalBests": {
"get": {
"tags": ["users"],
"summary": "Gets a user's personal best data",
"parameters": [
{
"name": "mode",
"in": "query",
"description": "The primary mode (i.e., time)",
"required": true,
"type": "string"
},
{
"name": "mode2",
"in": "query",
"description": "The secondary mode (i.e., 60)",
"required": false,
"type": "string"
}
],
"responses": {
"200": {
"description": "",
"schema": {
"$ref": "#/definitions/PersonalBest"
}
}
}
}
},
"/users/stats": {
"get": {
"tags": ["users"],
"summary": "Gets a user's typing stats data",
"responses": {
"200": {
"description": "",
"schema": {
"$ref": "#/definitions/Stats"
}
}
}
}
},
"/results/last": {
"get": {
"tags": ["results"],
"summary": "Gets a user's last saved result",
"responses": {
"200": {
"description": "",
"schema": {
"$ref": "#/definitions/Result"
}
}
}
}
},
"/leaderboards": {
"get": {
"tags": ["leaderboards"],
"summary": "Gets global leaderboard data",
"parameters": [
{
"name": "language",
"in": "query",
"description": "The leaderboard's language (i.e., english)",
"required": true,
"type": "string"
},
{
"name": "mode",
"in": "query",
"description": "The primary mode (i.e., time)",
"required": true,
"type": "string"
},
{
"name": "mode2",
"in": "query",
"description": "The secondary mode (i.e., 60)",
"required": true,
"type": "string"
},
{
"name": "skip",
"in": "query",
"description": "How many leaderboard entries to skip",
"required": false,
"type": "number",
"minimum": 0
},
{
"name": "limit",
"in": "query",
"description": "How many leaderboard entries to request",
"required": false,
"type": "number",
"minimum": 0,
"maximum": 50
}
],
"responses": {
"200": {
"description": "",
"schema": {
"$ref": "#/definitions/LeaderboardEntry"
}
}
}
}
},
"/leaderboards/rank": {
"get": {
"tags": ["leaderboards"],
"summary": "Gets your qualifying rank from a leaderboard",
"parameters": [
{
"name": "language",
"in": "query",
"description": "The leaderboard's language (i.e., english)",
"required": true,
"type": "string"
},
{
"name": "mode",
"in": "query",
"description": "The primary mode (i.e., time)",
"required": true,
"type": "string"
},
{
"name": "mode2",
"in": "query",
"description": "The secondary mode (i.e., 60)",
"required": true,
"type": "string"
}
],
"responses": {
"200": {
"description": "",
"schema": {
"$ref": "#/definitions/LeaderboardEntry"
}
}
}
}
}
},
"definitions": {
"Response": {
"type": "object",
"required": ["message", "data"],
"properties": {
"message": {
"type": "string"
},
"data": {
"type": "object"
}
}
},
"PersonalBest": {
"type": "object",
"properties": {
"acc": {
"type": "number",
"format": "double",
"example": 94.44
},
"consistency": {
"type": "number",
"format": "double",
"example": 75.98
},
"difficulty": {
"type": "string",
"example": "normal"
},
"lazyMode": {
"type": "boolean",
"example": false
},
"language": {
"type": "string",
"example": "english"
},
"punctuation": {
"type": "boolean",
"example": false
},
"raw": {
"type": "number",
"format": "double",
"example": 116.6
},
"wpm": {
"type": "number",
"format": "double",
"example": 107.6
},
"timestamp": {
"type": "integer",
"example": 1644438189583
}
}
},
"Stats": {
"type": "object",
"properties": {
"startedTests": {
"type": "integer",
"example": 578
},
"completedTests": {
"type": "integer",
"example": 451
},
"timeTyping": {
"type": "number",
"format": "double",
"example": 3941.6
}
}
},
"LeaderboardEntry": {
"type": "object",
"properties": {
"_id": {
"type": "string",
"example": "6226b17aebc27a4a8d1ce04b"
},
"acc": {
"type": "number",
"format": "double",
"example": 97.96
},
"consistency": {
"type": "number",
"format": "double",
"example": 83.29
},
"lazyMode": {
"type": "boolean",
"example": false
},
"name": {
"type": "string",
"example": "Miodec"
},
"punctuation": {
"type": "boolean",
"example": false
},
"rank": {
"type": "integer",
"example": 3506
},
"raw": {
"type": "number",
"format": "double",
"example": 145.18
},
"wpm": {
"type": "number",
"format": "double",
"example": 141.18
},
"timestamp": {
"type": "integer",
"example": 1644438189583
}
}
},
"Result": {
"type": "object",
"properties": {
"_id": {
"type": "string",
"example": "6226b17aebc27a4a8d1ce04b"
},
"wpm": {
"type": "number",
"format": "double",
"example": 154.84
},
"rawWpm": {
"type": "number",
"format": "double",
"example": 154.84
},
"charStats": {
"type": "array",
"example": [44, 0, 0, 0]
},
"acc": {
"type": "number",
"format": "double",
"example": 100
},
"mode": {
"type": "string",
"example": "words"
},
"mode2": {
"type": "string",
"example": "10"
},
"quoteLength": {
"type": "integer",
"example": -1
},
"timestamp": {
"type": "integer",
"example": 1651141719000
},
"restartCount": {
"type": "integer",
"example": 0
},
"incompleteTestSeconds": {
"type": "number",
"format": "double",
"example": 14.5
},
"tags": {
"type": "array",
"example": ["6210edbfc4fdc8a1700e648b"]
},
"consistency": {
"type": "number",
"format": "double",
"example": 78.68
},
"keyConsistency": {
"type": "number",
"format": "double",
"example": 60.22
},
"chartData": {
"type": "object",
"properties": {
"wpm": {
"type": "array",
"example": [144, 144, 144, 154]
},
"raw": {
"type": "array",
"example": [150, 148, 124, 114]
},
"err": {
"type": "array",
"example": [0, 0, 0, 0]
}
}
},
"testDuration": {
"type": "number",
"format": "double",
"example": 3.41
},
"afkDuration": {
"type": "number",
"format": "double",
"example": 0
},
"keySpacingStats": {
"type": "object",
"properties": {
"average": {
"type": "number",
"format": "double",
"example": 77.61
},
"sd": {
"type": "number",
"format": "double",
"example": 33.31
}
}
},
"keyDurationStats": {
"type": "object",
"properties": {
"average": {
"type": "number",
"format": "double",
"example": 42.01
},
"sd": {
"type": "number",
"format": "double",
"example": 19.65
}
}
}
}
}
}
}