Monkeytype Premium enhances your typing experience with increased result storage, detailed activity tracking, and visual badges to show your support for the platform.
Premium features must be enabled server-wide by administrators. Check with your instance administrator to confirm availability.
From backend/src/constants/base-configuration.ts:20-22:
limits: { regularUser: 1000, premiumUser: 10000,}
If you exceed your result limit, older results are not automatically deleted. However, you won’t be able to retrieve results beyond your limit. Consider exporting your data periodically.
Premium users gain access to their complete test activity history, showing:
Daily test counts for the entire year
Historical test activity data by year
Visualization-ready data for activity heatmaps
API Endpoint:
GET /users/testActivity// Response format:{ "2024": [1, 3, 0, 5, 2, ...], // Tests per day (365 values) "2025": [2, 1, 4, ...]}
From backend/src/api/controllers/user.ts:1238-1261:
export async function getTestActivity( req: MonkeyRequest,): Promise<GetTestActivityResponse> { const premiumFeaturesEnabled = req.ctx.configuration.users.premium.enabled; const userHasPremium = await UserDAL.checkIfUserIsPremium(uid, user); if (!premiumFeaturesEnabled) { throw new MonkeyError(503, "Premium features are disabled"); } if (!userHasPremium) { throw new MonkeyError(503, "User does not have premium"); } return new MonkeyResponse( "Test activity data retrieved", user.testActivity ?? null, );}
Non-premium users can still see their current test activity (last 372 days) via GET /users/currentTestActivity. Premium unlocks the full historical data.
When fetching results, the limit depends on your premium status:API Endpoint:
GET /users/results?limit=500&offset=0// Premium: Can retrieve up to 10,000 results// Regular: Can retrieve up to 1,000 results
From backend/src/api/controllers/result.ts:97-117:
let limit = req.query.limit ?? Math.min(req.ctx.configuration.results.maxBatchSize, maxLimit);if (limit + offset > maxLimit) { if (offset < maxLimit) { // Batch is partly in the allowed range limit = maxLimit - offset; } else { throw new MonkeyError(422, `Max results limit of ${maxLimit} exceeded.`); }}
Even with premium, you cannot retrieve results beyond your limit in a single request. The maxBatchSize (typically 1000) controls how many results can be fetched at once. Use pagination with offset to retrieve all results.