Download OpenAPI specification:Download
Documentation for the endpoints provided by the Monkeytype API server.
Note that authentication is performed with the Authorization HTTP header in the format Authorization: ApeKey YOUR_APE_KEY
There is a rate limit of 30 requests per minute
across all endpoints with some endpoints being more strict. Rate limit rates are shared across all ape keys.
Checks to see if a username is available.
Rate limit: This operation can be called up to 60 times per minute for regular users.
name required | string [ 1 .. 16 ] characters ^[\da-zA-Z_-]+$ |
{- "message": "string"
}
Get user's personal bests.
Rate limit: This operation can be called up to 60 times per hour for regular users.
mode required | string Enum: "time" "words" "quote" "custom" "zen" |
(string or number) or string or string |
{- "message": "string",
- "data": {
- "acc": 100,
- "consistency": 100,
- "difficulty": "normal",
- "lazyMode": true,
- "language": "string",
- "punctuation": true,
- "numbers": true,
- "raw": 0,
- "wpm": 0,
- "timestamp": 0
}
}
Get the users tags.
Rate limit: This operation can be called up to 60 times per hour for regular users.
{- "message": "string",
- "data": [
- {
- "_id": "string",
- "name": "string",
- "personalBests": {
- "time": {
- "property1": [
- {
- "acc": 100,
- "consistency": 100,
- "difficulty": "normal",
- "lazyMode": true,
- "language": "string",
- "punctuation": true,
- "numbers": true,
- "raw": 0,
- "wpm": 0,
- "timestamp": 0
}
], - "property2": [
- {
- "acc": 100,
- "consistency": 100,
- "difficulty": "normal",
- "lazyMode": true,
- "language": "string",
- "punctuation": true,
- "numbers": true,
- "raw": 0,
- "wpm": 0,
- "timestamp": 0
}
]
}, - "words": {
- "property1": [
- {
- "acc": 100,
- "consistency": 100,
- "difficulty": "normal",
- "lazyMode": true,
- "language": "string",
- "punctuation": true,
- "numbers": true,
- "raw": 0,
- "wpm": 0,
- "timestamp": 0
}
], - "property2": [
- {
- "acc": 100,
- "consistency": 100,
- "difficulty": "normal",
- "lazyMode": true,
- "language": "string",
- "punctuation": true,
- "numbers": true,
- "raw": 0,
- "wpm": 0,
- "timestamp": 0
}
]
}, - "quote": {
- "property1": [
- {
- "acc": 100,
- "consistency": 100,
- "difficulty": "normal",
- "lazyMode": true,
- "language": "string",
- "punctuation": true,
- "numbers": true,
- "raw": 0,
- "wpm": 0,
- "timestamp": 0
}
], - "property2": [
- {
- "acc": 100,
- "consistency": 100,
- "difficulty": "normal",
- "lazyMode": true,
- "language": "string",
- "punctuation": true,
- "numbers": true,
- "raw": 0,
- "wpm": 0,
- "timestamp": 0
}
]
}, - "custom": {
- "property1": [
- {
- "acc": 100,
- "consistency": 100,
- "difficulty": "normal",
- "lazyMode": true,
- "language": "string",
- "punctuation": true,
- "numbers": true,
- "raw": 0,
- "wpm": 0,
- "timestamp": 0
}
], - "property2": [
- {
- "acc": 100,
- "consistency": 100,
- "difficulty": "normal",
- "lazyMode": true,
- "language": "string",
- "punctuation": true,
- "numbers": true,
- "raw": 0,
- "wpm": 0,
- "timestamp": 0
}
]
}, - "zen": {
- "property1": [
- {
- "acc": 100,
- "consistency": 100,
- "difficulty": "normal",
- "lazyMode": true,
- "language": "string",
- "punctuation": true,
- "numbers": true,
- "raw": 0,
- "wpm": 0,
- "timestamp": 0
}
], - "property2": [
- {
- "acc": 100,
- "consistency": 100,
- "difficulty": "normal",
- "lazyMode": true,
- "language": "string",
- "punctuation": true,
- "numbers": true,
- "raw": 0,
- "wpm": 0,
- "timestamp": 0
}
]
}
}
}
]
}
Gets a user's typing stats data.
Rate limit: This operation can be called up to 60 times per hour for regular users.
{- "message": "string",
- "data": {
- "completedTests": 0,
- "startedTests": 0,
- "timeTyping": 0
}
}
Gets a user's profile.
Rate limit: This operation can be called up to 100 times per hour for regular users.
uidOrName required | string |
string or boolean Default: false |
{- "message": "string",
- "data": {
- "uid": "string",
- "name": "string",
- "banned": true,
- "addedAt": 0,
- "discordId": "string",
- "discordAvatar": "string",
- "xp": 0,
- "lbOptOut": true,
- "isPremium": true,
- "inventory": {
- "badges": [
- {
- "id": 0,
- "selected": true
}
]
}, - "allTimeLbs": {
- "time": {
- "property1": {
- "property1": {
- "rank": 0,
- "count": 0
}, - "property2": {
- "rank": 0,
- "count": 0
}
}, - "property2": {
- "property1": {
- "rank": 0,
- "count": 0
}, - "property2": {
- "rank": 0,
- "count": 0
}
}
}
}, - "typingStats": {
- "completedTests": 0,
- "startedTests": 0,
- "timeTyping": 0
}, - "personalBests": {
- "time": {
- "property1": [
- {
- "acc": 100,
- "consistency": 100,
- "difficulty": "normal",
- "lazyMode": true,
- "language": "string",
- "punctuation": true,
- "numbers": true,
- "raw": 0,
- "wpm": 0,
- "timestamp": 0
}
], - "property2": [
- {
- "acc": 100,
- "consistency": 100,
- "difficulty": "normal",
- "lazyMode": true,
- "language": "string",
- "punctuation": true,
- "numbers": true,
- "raw": 0,
- "wpm": 0,
- "timestamp": 0
}
]
}, - "words": {
- "property1": [
- {
- "acc": 100,
- "consistency": 100,
- "difficulty": "normal",
- "lazyMode": true,
- "language": "string",
- "punctuation": true,
- "numbers": true,
- "raw": 0,
- "wpm": 0,
- "timestamp": 0
}
], - "property2": [
- {
- "acc": 100,
- "consistency": 100,
- "difficulty": "normal",
- "lazyMode": true,
- "language": "string",
- "punctuation": true,
- "numbers": true,
- "raw": 0,
- "wpm": 0,
- "timestamp": 0
}
]
}
}, - "streak": 0,
- "maxStreak": 0,
- "details": {
- "bio": "string",
- "keyboard": "string",
}
}
}
Send a forgot password email.
Rate limit: This operation can be called up to 1 times per minute for regular users.
Body
email required | string <email> |
{- "email": "[email protected]"
}
{- "message": "string"
}
Get test activity for the last up to 372 days for the current user .
Rate limit: This operation can be called up to 60 times per hour for regular users.
{- "message": "string",
- "data": {
- "testsByDays": [
- 0
], - "lastDay": 0
}
}
Get user's streak data.
Rate limit: This operation can be called up to 60 times per hour for regular users.
{- "message": "string",
- "data": {
- "lastResultTimestamp": 0,
- "length": 0,
- "maxLength": 0,
- "hourOffset": -11
}
}
Gets up to 1000 results.
Rate limit: This operation can be called up to 60 times per hour for regular users and up to 30 times per day with ApeKeys.
onOrAfterTimestamp | integer >= 1589428800000 Timestamp of the earliest result to fetch. If omitted the most recent results are fetched. |
offset | integer >= 0 Offset of the item at which to begin the response. |
limit | integer [ 0 .. 1000 ] Limit results to the given amount. |
{- "message": "string",
- "data": [
- {
- "wpm": 420,
- "rawWpm": 420,
- "charStats": null,
- "acc": 75,
- "mode": "time",
- "mode2": "string",
- "quoteLength": 3,
- "timestamp": 0,
- "testDuration": 1,
- "consistency": 100,
- "keyConsistency": 100,
- "chartData": {
- "wpm": [
- 0
], - "raw": [
- 0
], - "err": [
- 0
]
}, - "uid": "string",
- "restartCount": 0,
- "incompleteTestSeconds": 0,
- "afkDuration": 0,
- "tags": [
- "string"
], - "bailedOut": true,
- "blindMode": true,
- "lazyMode": true,
- "funbox": "string",
- "language": "string",
- "difficulty": "normal",
- "numbers": true,
- "punctuation": true,
- "_id": "string",
- "keySpacingStats": {
- "average": 0,
- "sd": 0
}, - "keyDurationStats": {
- "average": 0,
- "sd": 0
}, - "name": "string",
- "isPb": true
}
]
}
Gets a user's last saved result.
Rate limit: This operation can be called up to 60 times per hour for regular users.
{- "message": "string",
- "data": {
- "wpm": 420,
- "rawWpm": 420,
- "charStats": null,
- "acc": 75,
- "mode": "time",
- "mode2": "string",
- "quoteLength": 3,
- "timestamp": 0,
- "testDuration": 1,
- "consistency": 100,
- "keyConsistency": 100,
- "chartData": {
- "wpm": [
- 0
], - "raw": [
- 0
], - "err": [
- 0
]
}, - "uid": "string",
- "restartCount": 0,
- "incompleteTestSeconds": 0,
- "afkDuration": 0,
- "tags": [
- "string"
], - "bailedOut": true,
- "blindMode": true,
- "lazyMode": true,
- "funbox": "string",
- "language": "string",
- "difficulty": "normal",
- "numbers": true,
- "punctuation": true,
- "_id": "string",
- "keySpacingStats": {
- "average": 0,
- "sd": 0
}, - "keyDurationStats": {
- "average": 0,
- "sd": 0
}, - "name": "string",
- "isPb": true
}
}
get number of users personal bests grouped by wpm level (multiples of ten).
Rate limit: This operation can be called up to 60 times per minute for regular users.
language required | string <= 50 characters ^[a-zA-Z0-9_+]+$ |
mode required | string Enum: "time" "words" "quote" "custom" "zen" |
required | (string or number) or string or string |
{- "message": "string",
- "data": {
- "property1": 0,
- "property2": 0
}
}
get number of tests and time users spend typing.
Rate limit: This operation can be called up to 60 times per minute for regular users.
{- "message": "string",
- "data": {
- "timeTyping": 0,
- "testsCompleted": 0,
- "testsStarted": 0
}
}
Get all-time leaderboard.
Rate limit: This operation can be called up to 500 times per hour for regular users.
language required | string <= 50 characters ^[a-zA-Z0-9_+]+$ |
mode required | string Enum: "time" "words" "quote" "custom" "zen" |
required | (string or number) or string or string |
skip | integer >= 0 |
limit | integer [ 0 .. 50 ] |
{- "message": "string",
- "data": [
- {
- "wpm": 0,
- "acc": 100,
- "timestamp": 0,
- "raw": 0,
- "consistency": 0,
- "uid": "string",
- "name": "string",
- "discordId": "string",
- "discordAvatar": "string",
- "rank": 0,
- "badgeId": 0,
- "isPremium": true
}
]
}
Get the rank of the current user on the all-time leaderboard.
Rate limit: This operation can be called up to 500 times per hour for regular users.
language required | string <= 50 characters ^[a-zA-Z0-9_+]+$ |
mode required | string Enum: "time" "words" "quote" "custom" "zen" |
required | (string or number) or string or string |
{- "message": "string",
- "data": {
- "count": 0,
- "rank": 0,
- "entry": {
- "wpm": 0,
- "acc": 100,
- "timestamp": 0,
- "raw": 0,
- "consistency": 0,
- "uid": "string",
- "name": "string",
- "discordId": "string",
- "discordAvatar": "string",
- "rank": 0,
- "badgeId": 0,
- "isPremium": true
}
}
}
Get daily leaderboard.
Rate limit: This operation can be called up to 500 times per hour for regular users.
language required | string <= 50 characters ^[a-zA-Z0-9_+]+$ |
mode required | string Enum: "time" "words" "quote" "custom" "zen" |
required | (string or number) or string or string |
daysBefore | number Value: 1 |
skip | integer >= 0 |
limit | integer [ 0 .. 50 ] |
{- "message": "string",
- "data": [
- {
- "wpm": 0,
- "acc": 100,
- "timestamp": 0,
- "raw": 0,
- "consistency": 0,
- "uid": "string",
- "name": "string",
- "discordId": "string",
- "discordAvatar": "string",
- "rank": 0,
- "badgeId": 0,
- "isPremium": true
}
]
}
Get weekly xp leaderboard.
Rate limit: This operation can be called up to 500 times per hour for regular users.
skip | integer >= 0 |
limit | integer [ 0 .. 50 ] |
weeksBefore | number Value: 1 |
{- "message": "string",
- "data": [
- {
- "uid": "string",
- "name": "string",
- "discordId": "string",
- "discordAvatar": "string",
- "badgeId": 0,
- "lastActivityTimestamp": 0,
- "timeTypedSeconds": 0,
- "rank": 0,
- "totalXp": 0
}
]
}
Get list of public service announcements.
Rate limit: This operation can be called up to 60 times per minute for regular users.
{- "message": "string",
- "data": [
- {
- "_id": "string",
- "message": "string",
- "date": 0,
- "level": 0,
- "sticky": true
}
]
}
{- "message": "string",
- "data": {
- "maintenance": true,
- "dev": {
- "responseSlowdownMs": 0
}, - "quotes": {
- "reporting": {
- "enabled": true,
- "maxReports": 0,
- "contentReportLimit": 0
}, - "submissionsEnabled": true,
- "maxFavorites": 0
}, - "results": {
- "savingEnabled": true,
- "objectHashCheckEnabled": true,
- "filterPresets": {
- "enabled": true,
- "maxPresetsPerUser": 0
}, - "limits": {
- "regularUser": 0,
- "premiumUser": 0
}, - "maxBatchSize": 0
}, - "users": {
- "signUp": true,
- "lastHashesCheck": {
- "enabled": true,
- "maxHashes": 0
}, - "autoBan": {
- "enabled": true,
- "maxCount": 0,
- "maxHours": 0
}, - "profiles": {
- "enabled": true
}, - "discordIntegration": {
- "enabled": true
}, - "xp": {
- "enabled": true,
- "funboxBonus": 0,
- "gainMultiplier": 0,
- "maxDailyBonus": 0,
- "minDailyBonus": 0,
- "streak": {
- "enabled": true,
- "maxStreakDays": 0,
- "maxStreakMultiplier": 0
}
}, - "inbox": {
- "enabled": true,
- "maxMail": 0
}, - "premium": {
- "enabled": true
}
}, - "admin": {
- "endpointsEnabled": true
}, - "apeKeys": {
- "endpointsEnabled": true,
- "acceptKeys": true,
- "maxKeysPerUser": 0,
- "apeKeyBytes": 0,
- "apeKeySaltRounds": 0
}, - "rateLimiting": {
- "badAuthentication": {
- "enabled": true,
- "penalty": 0,
- "flaggedStatusCodes": [
- 0
]
}
}, - "dailyLeaderboards": {
- "enabled": true,
- "leaderboardExpirationTimeInDays": 0,
- "maxResults": 0,
- "validModeRules": [
- {
- "language": "string",
- "mode": "string",
- "mode2": "string"
}
], - "scheduleRewardsModeRules": [
- {
- "language": "string",
- "mode": "string",
- "mode2": "string"
}
], - "topResultsToAnnounce": 0,
- "xpRewardBrackets": [
- {
- "minRank": 0,
- "maxRank": 0,
- "minReward": 0,
- "maxReward": 0
}
]
}, - "leaderboards": {
- "weeklyXp": {
- "enabled": true,
- "expirationTimeInDays": 0,
- "xpRewardBrackets": [
- {
- "minRank": 0,
- "maxRank": 0,
- "minReward": 0,
- "maxReward": 0
}
]
}
}
}
}