Overview
Your Monkeytype profile is your public presence on the platform. Customize it to showcase your typing setup, achievements, and social links. Control what information is visible to other users.Accessing Your Profile
Profiles can be accessed via:backend/src/api/controllers/user.ts:912-919:
Usernames are case-insensitive and can be changed once every 30 days.
Profile Information
Public Profile Data
All profiles display:Typing Stats
- Tests completed
- Tests started
- Total time typing
Personal Bests
- 15s, 30s, 60s, 120s (time modes)
- 10, 25, 50, 100 (word modes)
Progression
- Current XP
- Current streak
- Max streak achieved
Identity
- Username
- Discord avatar (if linked)
- Selected badge
- Premium status
backend/src/api/controllers/user.ts:950-987:
Profile Details (Optional)
Additional customizable profile information:Customizing Your Profile
Bio
Add a personal bio to introduce yourself:Bios are sanitized to prevent XSS attacks. HTML and scripts are stripped automatically.
backend/src/api/controllers/user.ts:1040-1054:
Keyboard Information
Share your typing setup:Social Profiles
Link your social media and professional profiles:Badge Selection
Selecting a Display Badge
Choose which badge appears on your profile and leaderboard entries:backend/src/api/controllers/user.ts:1032-1038:
Only one badge can be selected at a time. Selecting a new badge automatically deselects the previous one.
Badge Inventory
Badges are stored in your user inventory:Privacy Settings
Test Activity Visibility
Control whether your test activity appears on your public profile:backend/src/api/controllers/user.ts:1003-1007:
Test activity shows a heatmap of your daily test counts for the past year. This is different from the premium test activity history feature which includes all historical data.
Leaderboard Opt-Out
Completely remove yourself from all leaderboards:backend/src/api/controllers/user.ts:414-430:
Viewing Other Profiles
Public Profile View
When viewing another user’s profile, you see:Banned User Profiles
Banned users have limited profile information:- Name
- Banned status
- Join date
- Basic typing stats
- Personal bests
All-Time Leaderboard Ranks
Profiles display your all-time leaderboard rankings:- 15-second English
- 60-second English
All-time leaderboard ranks are only shown for users who meet the minimum typing time requirement and haven’t opted out.
Profile URL Formats
Profiles can be accessed via multiple URL patterns:backend/src/api/controllers/user.ts:916-919:
Updating Your Profile
Complete Update Example
All fields are optional. Only include the fields you want to update.
Input Sanitization
All text inputs are sanitized usingsanitizeString() from backend/src/utils/misc.ts to prevent:
- XSS attacks
- HTML injection
- Script execution
- SQL injection
Friends Integration
Your profile is visible to your friends via:backend/src/api/controllers/user.ts:1296-1310:
- Last activity timestamp
- Connection metadata (when friendship was established)
- Premium status (if enabled)
Profile Stats Calculation
Typing statistics are calculated from all your completed tests:- Completed Tests: Tests finished without bailing out
- Started Tests: All test attempts (including incomplete)
- Time Typing: Total seconds spent in tests (excluding AFK time)
Frequently Asked Questions
Can I change my username?
Can I change my username?
Yes, but only once every 30 days. To change your username:Your old username is preserved in your name history (not publicly visible).
What happens to my profile if I'm banned?
What happens to my profile if I'm banned?
Banned profiles show limited information:
- Basic stats remain visible
- Detailed profile info is hidden
- You’re removed from leaderboards
- Friends can still see your basic profile
Can I hide my profile completely?
Can I hide my profile completely?
No, profiles are always visible. However, you can:
- Opt out of leaderboards
- Hide test activity
- Leave bio and social profiles blank
- Not select a badge
Why doesn't my badge show up?
Why doesn't my badge show up?
Ensure that:
- The badge is in your inventory
- You’ve selected it via the profile update endpoint
- You haven’t selected a different badge since
How do I link my Discord account?
How do I link my Discord account?
Discord linking is separate from profile settings:
- Get the OAuth link:
GET /users/discord/oauth - Authorize via Discord
- Complete the linking:
POST /users/discord/link