Device System Overview
Each Mullvad account can have up to 5 active devices at a time. When you log in, the daemon:- Generates a unique WireGuard keypair for the device
- Creates a device entry with a random name (e.g., “Happy Seagull”)
- Registers the device with your account via the API
- Associates the public key with the device
Devices are the fundamental unit of VPN connections. Each device has its own WireGuard keys and configuration.
Device Properties
Every device has the following attributes:- Device ID: Unique identifier (UUID format)
- Device Name: Human-readable random name for easy identification
- Public Key: WireGuard public key for this device
- Created: Timestamp when device was registered
- DNS Hijacking: Whether the device hijacks DNS queries (typically
false)
Device Limits
Maximum Devices
Mullvad enforces a 5-device limit per account. When you reach this limit:- Login attempts fail with
MAX_DEVICES_REACHEDerror - You must remove an existing device before adding a new one
- Connection attempts show: “This account has too many simultaneous connections”
Error Messages
| Error Code | Error Type | Message |
|---|---|---|
MAX_DEVICES_REACHED | API Error | Failed to create device - account at device limit |
TOO_MANY_CONNECTIONS | Auth Failed | ”This account has too many simultaneous connections. Disconnect another device or try connecting again shortly.” |
Listing Devices
View all devices associated with an account.List Your Current Account’s Devices
List Another Account’s Devices
Specify an account number to view its devices:You must have valid credentials for the specified account to list its devices.
Verbose Device Information
Get detailed information about each device:Removing Devices
Free up device slots by removing devices you no longer use.Identify the Device
List devices to find the name or ID:Note the device name (e.g., “Wise Penguin”) or ID.
Remove Device from Another Account
Specify the account number to remove devices from a different account:What Happens When a Device is Removed
TheRemoveDevice RPC:
- Deletes the device entry from the account
- Invalidates the device’s WireGuard keys
- Frees a device slot immediately
- Emits a
RemoveDeviceEventto notify other components
Device States
Devices can be in one of three states:Logged In (LOGGED_IN)
Device is active and can connect to the VPN.
Logged Out (LOGGED_OUT)
No device is registered for this installation.
Revoked (REVOKED)
Device was removed from the account (by you or another device).
Updating Devices
Refresh device information from the API.Manual Device Update
TheUpdateDevice RPC syncs device state with the API:
- Whether the device still exists on the account
- If the account has expired
- Current device configuration
The daemon calls
UpdateDevice automatically before most operations. You rarely need to trigger this manually.Device Events
The daemon emitsDeviceEvent notifications when device state changes:
Event Causes
| Cause | Description | Enum Value |
|---|---|---|
| Logged In | User logged into account and created device | LOGGED_IN |
| Logged Out | User logged out and removed device | LOGGED_OUT |
| Revoked | Device removed remotely (not found on API) | REVOKED |
| Updated | Device information changed (not keys) | UPDATED |
| Rotated Key | WireGuard key was rotated | ROTATED_KEY |
Device Event Structure
Remove Device Event
Emitted when a device is explicitly removed via RPC (not during logout):Device API
The device API provides several endpoints:Create Device
Endpoint:POST /api/v1/accounts/devices
Request Body:
List Devices
Endpoint:GET /api/v1/accounts/devices
Response (200 OK):
Get Device
Endpoint:GET /api/v1/accounts/devices/{device_id}
Response (200 OK): Returns single device object.
Remove Device
Endpoint:DELETE /api/v1/accounts/devices/{device_id}
Response (204 No Content): Device removed successfully.
Managing Many Devices
Strategies for managing multiple devices effectively:Regular Cleanup
Periodically remove unused devices:Device Naming
While device names are randomly assigned, you can identify devices by:- Public key: Unique to each device
- Created date: When device was registered
- Device ID: Unique identifier
Logout vs. Revoke
Logout (from the device itself):- Removes current device
- Can only be done on the device itself
- Proper cleanup method
- Removes any device remotely
- Useful for lost or stolen devices
- Can be done from any logged-in device
Troubleshooting
Too Many Connections Error
Problem: Can’t connect or log in, seeing “too many simultaneous connections”. Solution:- List your devices:
mullvad account list-devices - Remove unused devices:
mullvad account revoke-device "Device Name" - Try logging in again
Device Not Found Error
Problem: Trying to remove a device that doesn’t exist. Solution:- Verify the device name or ID:
mullvad account list-devices -v - Use exact name (case-insensitive) or device ID
- Ensure you’re checking the correct account with
-aflag
Device Revoked Unexpectedly
Problem: Your device shows as revoked, but you didn’t log out. Possible Causes:- Another device removed this one to free a slot
- Account hit device limit and old device was auto-removed
- API sync issue
- Check current devices:
mullvad account list-devices - Log in again:
mullvad account login - This creates a new device entry
Related Topics
- Account Management - Account creation and login
- Authentication - WireGuard key rotation
CLI Reference
| Command | Description |
|---|---|
mullvad account list-devices | List devices on current account |
mullvad account list-devices -a <ACCOUNT> | List devices on specified account |
mullvad account list-devices -v | List devices with verbose details |
mullvad account revoke-device <NAME|ID> | Remove a device by name or ID |
mullvad account revoke-device <NAME|ID> -a <ACCOUNT> | Remove device from specific account |
gRPC Service Reference
| RPC | Request | Response | Description |
|---|---|---|---|
GetDevice | Empty | DeviceState | Get current device state |
UpdateDevice | Empty | Empty | Sync device state with API |
ListDevices | StringValue (account) | DeviceList | List all devices on account |
RemoveDevice | DeviceRemoval | Empty | Remove device from account |