mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-02-28 08:43:07 +08:00
431 lines
10 KiB
JSON
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
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|