Documentation

Learn how to use the Dashboard

Quick Start Guide

Get up and running with the Dashboard in minutes.

1
Create Invite
Copy the link and share with your client
2
Client Opens URL Invite
They download installer and follow instructions. They can install client, set for unattended access, and share password
3
Connect
Dashboard user will need to enter password on first connection. Device appears with real-time status in Devices section

Remote Devices

The Devices screen is your central hub for managing all connected remote devices.

How to add a new computer in one minute

Quick Connect

Enter a Device ID directly to connect without adding to your device list. Useful for one-time support sessions. Choose Connect (opens the desktop app), Web (opens the connection in your browser, no install needed), or Files (file transfer via the desktop app).

Connecting to a Device

Each device row has up to four actions on the right:

  • Connect: opens a remote-desktop session in your installed HopToDesk app. Offline devices show it too, so you can try anyway.
  • Web Connect (globe icon): opens the connection in your browser via web.hoptodesk.com. No app install needed; works on Chrome OS, mobile browsers, or any machine where you can't install software. On a phone or tablet, tap to click, hold and release to right-click, and hold then move to drag. The Web Connect toolbar also offers Request Elevation, screenshots and recording, scale and zoom, Remote Terminal, a voice call, Privacy mode, and file upload by dropping files onto the session.
  • File Transfer (file icon): opens a file-transfer session in the desktop app (desktop only).
  • Wake: replaces Connect for offline devices that have a known MAC address. Sends a Wake-on-LAN packet via another online device on the same local network.
  • ⋯ (kebab): Notes, Backstage, Delete device.

Connect Protocol Scheme: Connect opens the desktop app on your own computer through a hoptodesk:// link. A custom-branded build registers its own link name instead, usually the app name in lowercase without spaces. If your technicians use a branded app, an owner or admin opens Settings, finds the Connect Protocol Scheme card, ticks "Use a custom protocol scheme for the Connect button", enters that app's name and clicks Save Settings. Use the app on your technicians' computers, not an incoming-only build made for your customers' devices, which cannot start connections. Leave the box unticked to open the standard HopToDesk app.

Adding a Connected Device to Your Dashboard

When you connect to a device that isn't on your dashboard yet, including ad-hoc Quick Connect sessions, you can enroll it without sending an install link. In the desktop app, click the green Add to Dashboard button in the session toolbar; in a Web Connect session, click the same button in the browser toolbar. The person at the remote device gets an Accept Dashboard Invite prompt, and once they accept, the device registers and appears in your Devices list.

Mobile Layout

On phones, the device list renders as a stack of tap-to-connect cards instead of a table. Tap a card to connect: if the HopToDesk app is installed on the phone, the tap opens the app on that device; otherwise a Web Connect session starts in the browser. Devices that sign in through SSO or need connection approval always use Web Connect. File Transfer is hidden on mobile because it needs the HopToDesk desktop app.

Device Management

  • Search & Filter: Find devices by name, group, or customer in the search box, narrow the list with the All Groups dropdown next to it, filter by online/offline status, or sort by Name, Group, Status, Last Seen, Date added or OS. Your choice is remembered. Sorting by Group folds devices under each group, with Collapse all
  • Bulk Actions: Select several devices (desktop only) to move them to a group, delete them, or turn Easy Access on or off (Business)
  • Export: Download your device list as a CSV file for reporting
  • Groups: Assign each device to a group from the inline + Add group button on the row
  • App version: each row shows the device's HopToDesk version next to its ID, and a device on a custom build shows that build's logo in place of the OS icon
  • Reinstalled computers: a reinstall gives a computer a new ID, so its old entry stays offline. The Devices screen lists these matches, and Remove selected moves them to Trash

Device Details (Click device name to expand)

  • Device Name: Set a friendly name for easy identification
  • Contact: Link the device to a contact
  • Tags (Pro and Business): Add labels you can use to target devices
  • Sound Alerts: Play a sound when this device goes online or offline
  • Connection Info: View Public IP and Local IP, each with a copy button, first connected date, last seen, and session count
  • Disks: every disk the device reports, with its size and free space
  • Session Log: Review recent connection history and export logs. The CSV export includes technician, duration in minutes, and, with Session Notes enabled, the note and billable flag per session

Multiple Monitors

When the remote device has more than one display, the session toolbar shows a tile for each monitor plus an All tile. Click a number to view that monitor, or All to see every monitor side by side in one window. The display menu (the monitor icon) offers the same All Displays view and Each monitor in its own window, which opens one extra window per monitor. All the windows share the one session, so no second password is needed.

  • Closing an extra monitor window closes only that window; the session stays connected.
  • Closing the main session window ends the session and closes every monitor window with it.
  • The camera icon (or Ctrl+Alt+Shift+S, Control+Option+Shift+S on a Mac) copies a screenshot of the monitor you are viewing to your clipboard. In the All view it captures every monitor as one image.
  • Adjust Window in the display menu resizes the session window to fit the remote display at the current zoom.

View Only

Turn on View only in the display menu (in the desktop app or a Web Connect session) to watch a device without sending mouse or keyboard input, for example to check whether someone is using it or to observe a problem without getting in the way. The remote cursor stays visible and clipboard and file copy pause while it is on. Turn it off to take control again. The choice is remembered per device.

Tip: If the desktop app isn't installed on the machine you're connecting from, use Web Connect. It works in any modern browser without an install.

KVM mode and desks

KVM mode lets one keyboard and mouse work several computers that sit on the same desk. Push the mouse past the edge of your screen and the pointer moves onto the next computer's own screen, and your typing follows it. No video is sent, because each computer uses its own monitor. It does the job of a hardware KVM switch for computers that each have a screen, and copy and paste works between them.

There are two ways to use it:

  • Anyone can turn it on from a session with the KVM mode button. It is free on every plan and needs no account.
  • On the Business plan, Desks lets an IT team or MSP pair the computers on a desk from the dashboard. They then connect and start KVM mode by themselves, with no visit and no clicks.
How to use one keyboard and mouse for every computer on a desk

What You Need

  • Each computer has its own screen.
  • The computers are on the same local network, and HopToDesk connects to the other computer directly. A session through a relay or over the internet does not offer KVM mode.
  • The computer with the keyboard and mouse runs Windows or macOS. The other computers can run Windows, macOS, Linux or FreeBSD.
  • The other computer allows keyboard and mouse control, and the session is not in View only.
  • On a Mac, HopToDesk needs Accessibility and Input Monitoring. It asks for them the first time.
  • The latest HopToDesk app on every computer.

Turn On KVM Mode

  1. Install HopToDesk on both computers.
  2. On the computer with the keyboard and mouse, connect to the other computer. It shows in the Discovered tab when both are on the same network, or enter its ID and password.
  3. In the session toolbar, click the KVM mode button, next to the display button.
  4. Pick where the other computer sits: Left of my screen, Right of my screen, Above my screen or Below my screen.
  5. The session window hides and the video stops. A small KVM mode window shows the hotkey and a Stop button.
  6. Push the mouse past that edge of your screen. Your mouse and keyboard now work the other computer on its own screen.

To add a third computer, connect to it as well and pick a different side for it.

Bring the Mouse Back

  • Push the mouse back past the edge it came in from.
  • Press Ctrl+Alt+Esc (Control+Option+Esc on a Mac) at any time.
  • Click Stop in the KVM mode window, or close that window, to end KVM mode. The session window comes back with live video.
  • If the connection drops or stalls, the mouse comes home by itself within about 2 seconds, and no key stays pressed.
  • The corners of the screen never switch computers, so you can still reach the close button of a maximized window or the Start menu.

Copy and Paste

Text you copy on one computer can be pasted on the other, in both directions, while KVM mode is on. The other computer must allow the clipboard. To move files, use File Transfer.

Remember This PC

Tick Remember this PC in the KVM mode window, and HopToDesk connects to that computer and turns on KVM mode by itself each time it starts or you sign in.

  • It signs in with the password saved for that computer, so connect to it once with Remember password ticked.
  • It starts working from the next start or sign-in, not in the session where you tick it.
  • Stop keeps KVM mode off until the next sign-in. Untick Remember this PC to forget the computer.
  • If the saved password stops working, HopToDesk shows a message and stops reconnecting. Connect again with Remember password ticked, then turn on KVM mode.

Desks for IT Teams and MSPs (Business)

Desks is the managed form of KVM mode. You pair the computers on a desk from the dashboard, without going to the desk. When someone signs in on the main computer, it connects to the other computers on the desk and starts KVM mode by itself. Nobody types a password or clicks a button. Typical desks are a clinic front desk with two PCs, an accountant with a laptop and a desktop, or a designer with a Mac and a PC.

Set up a desk

  1. Link every computer on the desk to your dashboard account, and make sure each runs the latest HopToDesk app.
  2. Open Devices and scroll to Desks, below Tags.
  3. Click New desk, or Create your first desk, and give the desk a name, for example Front desk.
  4. Pick the computers on the desk from left to right, and mark the main computer: the one with the keyboard and mouse.
  5. Click Save desk.

What happens next

  • Each computer gets the desk from the dashboard. When a user signs in on the main computer, it links to the other computers within a few seconds, as long as they are on and on the same network.
  • No computer stores another computer's password.
  • Delete the desk and its links end within seconds.
  • The audit log records each desk change and each link that starts or ends.

Rules

  • A desk has 2 or 3 computers: the main computer and one computer on each side of it.
  • All computers on a desk belong to the same account, and to the same tenant in a multi-tenant account.
  • A computer can be on one desk at a time. On a computer that is on a desk, the desk wins over Remember this PC.
  • Owners and admins create and change desks.
  • Desks is part of the Business plan. If an account moves below Business, the links stop.

Turn KVM mode off for a group

In Device Policies, untick Allow KVM Mode. On the computers the policy covers, the KVM mode button goes away and desk links do not start. Technicians who connect to those computers do not get KVM mode either.

Desks and AI

AI apps connected through MCP, and the built-in AI Assistant, have two desk tools. list_desks shows each desk and whether its links run, and if not, why: the computer is offline, the policy is off, the app is too old, or nobody is signed in. propose_desk suggests a desk. The suggestion shows in Desks marked Proposed by AI, and nothing changes until an owner or admin clicks Approve.

Tip: KVM mode uses each computer's own screen. To see another computer on the screen in front of you instead, use a normal HopToDesk session.

Contacts

Contacts let you manage customer information independently of devices. Link multiple devices to one contact, track all interactions, and create tickets for specific customers.

Creating a Contact

  1. Click Contacts in the sidebar
  2. Click the Add Contact button
  3. Fill in customer details:
    • Name - First name, last name or display name
    • Email - For notifications and correspondence
    • Phone - Contact number
    • Company - Their organization
    • Notes - Any relevant information
  4. Click Save Contact

A contact needs at least a name, company or email. Two contacts can share an email, for example a manager listed once per site.

Linking Devices to Contacts

Associate devices with their owners for better organization:

  • Manually: On the Devices page, click a device name to expand it, then under Edit Device pick a contact from the Contact dropdown and click Save Changes. Choose "No contact" to unlink.
  • Automatically from a ticket: When a device installs through Send Invite on a ticket, it links to that customer.
  • One contact can have multiple devices (e.g., laptop + desktop).

Managing Contacts

  • Search: Find contacts by name, email, or company
  • View History: See all tickets and sessions for a contact
  • Import/Export: Bulk import from CSV or export for backup

Tip: Contacts are also created for you when you send invites from tickets or receive tickets.

Invite System

Invites are the easiest way to add client devices to your dashboard.

How to add your first device to HopToDesk

Creating an Invite

  1. Open the Devices screen
  2. Click + Create Invite in the top-right of the page header
  3. An invite link and code are generated immediately, no form to fill
  4. Copy the URL (or the short invite code) and share with your client

Need to find a previously-created invite? Click Pending Invites in the same header to browse, copy, or delete any open invite.

Reusable, Multi-Device by Default

Each invite link is reusable: one link can install HopToDesk on any number of devices. Each device that uses the link registers as a separate entry in your dashboard, automatically associated with the invite. This is ideal for rolling out a new fleet, sharing with a customer site, or letting an MSP team self-onboard.

SSO Invite Codes

With SSO Connect on (Business), use SSO Invite on the Devices screen: the device installs the client, completes SSO sign-in once and lands in your dashboard. See SSO Connect.

Sharing with Clients

Send the invite link to your client via:

  • Email: copy and paste the link
  • Chat / messaging: works in Slack, Teams, anywhere
  • SMS: works on mobile too
  • Short invite code: for users who would rather type a short code than a URL

What Happens When the Client Clicks

  1. Client sees your branded install page (configured under Settings, then Branding, then Invite Page)
  2. The right HopToDesk client downloads automatically: your generated/branded version if you've set one up under Client Builder, otherwise the default
  3. Once installed, the device registers and appears in your Devices list with real-time status
  4. You can connect (Connect, Web Connect, or File Transfer) as soon as the device is online

Tip: One invite link can register an entire site or fleet. Combine with the Client Builder for an entirely white-labeled install experience.

Deploying at Scale

Onboard a fleet gives you one token and the install commands. Mass deployment covers auto-enroll builds and your MDM or EMM. macOS permissions are at the end of this section.

Onboard a fleet

Roll HopToDesk out to many machines at once and have each one arrive already configured. Open Deployment, then Onboard a fleet.

How to set up a fleet:

  1. Click Onboard a fleet and give the fleet a name (e.g., "Q1 2026 - Engineering Floor 3")
  2. Optionally pick the device group, the number of machines you expect (to track progress) and add notes for your team
  3. Pre-configure the devices: unattended access, a different password for each machine or one shared password, Easy Access, Account Access Only and session recording. Every device that installs with this fleet's token comes online already set up.
  4. Network and sign-in options (optional): an outbound proxy for sites where machines reach the internet only through one, or enrollment through SSO
  5. Pick how you install, copy the command and watch the machines arrive

Install methods:

  • Intune: upload the installer as a Line-of-business app and install it with msiexec /i hoptodesk.msi /qn ENROLLTOKEN=<token>.
  • Group Policy: put the installer on a share and run hoptodesk.exe --silent-install --enrollment-token <token> from a computer startup script.
  • RMM or script: a PowerShell script that downloads the MSI and installs it with the token.
  • One at a time: the same command as Group Policy, run once on each machine with administrator rights.
  • macOS (Jamf, Kandji, Intune, any MDM): an install script, plus a custom settings profile that sets enrollment_token in the preference domain com.hoptodesk.hoptodesk. Each Mac enrolls the first time HopToDesk opens. Push the PPPC profile too, so macOS permissions are ready: macOS permissions through your MDM.
  • Linux (Debian and Ubuntu): a command that downloads the package with the fleet's invite code in its file name and installs it with apt. The machine enrolls when the package finishes installing.

Proxy: the Group Policy and One at a time commands carry the proxy setting. The MSI cannot carry it, and on Mac and Linux you set the proxy in HopToDesk on each machine that needs it.

SSO: needs an Organization with SSO Connect turned on. Each device completes an SSO sign-in once during enrollment, so this path is not fully silent. Use unattended access with a password or Easy Access for a completely hands-off install.

The token: one token works on every machine in the fleet. To update later, run the same install command with the new installer file. If the token leaks, replace it from the install step: installers carrying the old token stop enrolling, and devices already enrolled are not affected. Prefer no command line at all? Build a branded installer from the policy and the token is embedded for you.

Antivirus / endpoint security: if you run ESET, CrowdStrike, SentinelOne, Defender for Endpoint, etc., allow outbound HTTPS to dashboard.hoptodesk.com (eu.dashboard.hoptodesk.com for accounts in the EU region), and add process/HIPS exclusions for hoptodesk.exe, PrivacyMode.dll, privacyhelper.exe, and the HopToDesk Service.

Change a fleet later: each fleet on the Deployment screen has Install steps, Edit, Duplicate and Archive buttons. Install steps shows the token and the install commands again. Edit opens the same wizard with the fleet's settings filled in, and the changes apply to machines that enroll after you save. Archive removes the fleet from the list, and devices already enrolled keep their settings.

Copy a fleet: click Duplicate on a fleet to start a new one with the same settings, including the shared password and proxy. Give it a name, change what you need and save. The new fleet gets its own token, and the original is not changed.

Rollouts made before: rollouts created on the older Deployments screen keep working. They also appear in Onboard a fleet, where you can edit them, and their list stays under Deployment, then Import devices.

Plan: Onboard a fleet is on the Business plan.

Use case: You're rolling out HopToDesk to 500 machines in a new office. Create one fleet with unattended access, paste the install command into Intune or your RMM, and watch the devices come online already reachable from your dashboard.

Mass Deployment (Zero-Touch Enrollment)

How to install HopToDesk on hundreds of computers

For large fleets there are two ways to onboard:

  • Reusable invite code: one code onboards any number of devices, but someone enters it once per device under Add to Dashboard. Best for small fleets or when you are already handling each device by hand.
  • Auto-enroll custom build (zero-touch): bakes a reusable enrollment token into the installer itself, so every device that installs it links to your dashboard automatically on first launch, with no per-device code. Best for hundreds or thousands of devices.

To create a zero-touch build, open Client Builder, choose your platform (Android .apk and desktop are supported), check Auto-enroll for mass deployment, and generate. Download the finished build once and distribute that single file to your whole fleet through your MDM or EMM (such as Intune or Workspace ONE) or during device setup. Auto-enroll is available on the Business plan.

The Android auto-enroll build is the full sideload APK, not the Play Store app. Push it through your MDM so installs are silent and skip the unknown-sources prompt.

The token is reusable and revocable: to stop new enrollments, remove the build from the list in Client Builder. If the build is linked to a fleet, Replace token or Archive on that fleet stops it too. Devices already enrolled stay connected.

How the installer reaches your devices

Auto-enroll puts the dashboard link inside the installer. How that installer gets onto your devices is a separate step, and you have options:

  • With an MDM or EMM (Intune, Workspace ONE, SOTI, Jamf, Google Endpoint Management): the console your IT already uses to manage devices. You upload the installer once, assign it to a group of devices, and the console installs it silently on every device, with no prompts and no one touching them.
  • By hand: run the installer on each device yourself (run the .exe, or sideload the .apk). Still no per-device code to type, but someone touches each device. Fine for small numbers.
  • During setup or imaging: run the installer from your first-boot script so every new device installs it on its first start. Do not capture a disk image with HopToDesk already installed, because every copy would share one HopToDesk ID and the copies would keep disconnecting each other. If HopToDesk is already on the machine you are imaging, stop the HopToDesk service and delete the HopToDesk folders in C:\Windows\ServiceProfiles\LocalService\AppData\Roaming, C:\ProgramData and each user's AppData\Roaming before you capture.

The MDM is your tool, not ours. We provide the auto-enroll installer; your existing deployment method installs it.

Deploying through an MDM, step by step

  1. Generate an auto-enroll build for your platform under Client Builder (check Auto-enroll for mass deployment).
  2. Download the finished installer from the build list.
  3. In your MDM console, add it as a managed app (upload the .apk, .exe, .msi, or .dmg).
  4. Assign the app to a device group, for example "Warehouse tablets", and set it to install automatically (required).
  5. Deploy. The MDM pushes and installs it silently on every device in the group.
  6. Each device links itself to your dashboard on first launch. Watch them appear under Devices, then tag or group them.

On a Mac you can skip the custom build: upload HopToDesk.pkg, the signed installer package for Jamf, Intune or any MDM, and set the enrollment token with a configuration profile. See EMM managed configuration below.

Examples by platform

  • Windows with Microsoft Intune: Apps, then Add, then Windows app, upload the .exe or .msi, set the install command to run silently, and assign it to a device group as Required. Intune installs it on every assigned PC.
  • Android with an EMM (SOTI MobiControl, Workspace ONE, Intune, Google Endpoint Management): upload the auto-enroll .apk as an internal or line-of-business app, assign it to your device group, and set it to install silently. On managed devices the install needs no unknown-sources prompt. Rugged fleets deploy the same .apk through their provisioning tool (for example Zebra via StageNow, Samsung via Knox).
  • macOS with Jamf or Intune: upload HopToDesk.pkg, our signed installer package, as a managed app and scope it to a device group. It installs HopToDesk in Applications and sets it to run in the background, with no prompts on the Mac. An auto-enroll custom build comes as a .dmg instead. Then push the macOS privacy profile so the Macs are ready for unattended access.

Windows with Microsoft Intune, in full

Intune installs Windows desktop apps as Win32 apps, which means the installer has to be wrapped in an .intunewin package and paired with a detection rule. The values below are the ones Intune asks for.

1. Wrap the installer

Download Microsoft's Win32 Content Prep Tool (IntuneWinAppUtil.exe), put the installer alone in a source folder, and run:

IntuneWinAppUtil.exe -c C:\hoptodesk-src -s HopToDesk.exe -o C:\hoptodesk-out

That produces HopToDesk.intunewin. Use the auto-enroll build from Client Builder if you want the devices to link themselves to your dashboard.

2. Add the app

In the Intune admin center go to Apps, then Windows, then Add, and choose Windows app (Win32). Upload the .intunewin file.

3. Program

  • Install command: HopToDesk.exe --silent-install
  • Uninstall command: "%ProgramFiles%\HopToDesk\HopToDesk.exe" --uninstall
  • Install behavior: System
  • Device restart behavior: No specific action
  • Return codes: keep the defaults, and if your install command uses --wait-for-enrollment, add 2 as a success code. The installer returns 0 when the device enrolled, 2 when it installed but enrollment was not confirmed before the timeout, and 1 when the install itself failed. Without that entry Intune reports a working install as a failure.

4. Requirements

  • Operating system architecture: x64. Add arm64 only if you are uploading the ARM64 build; the x64 build runs on ARM devices under emulation.
  • Minimum operating system: Windows 10 1607, which is the floor for Win32 apps in Intune.

5. Detection rule

This is the step that most often goes wrong. Use one of these, not a version check:

  • File rule: path %ProgramFiles%\HopToDesk, file HopToDesk.exe, detection method File or folder exists.
  • Registry rule: key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\HopToDesk, detection method Key exists.
  • MSI rule: only if you uploaded the .msi rather than the .exe. Intune reads the product code from the package for you.

Custom builds: a branded client installs under its own name, so replace HopToDesk in the paths, the registry key and the executable name with the application name you chose in the Client Builder.

6. Assign

Assign the app to a device group under Required. Device groups install without a signed-in user; user groups wait for a sign-in, which is usually not what you want for unattended access. Devices appear in your dashboard under Devices as they check in.

7. Enrollment token instead of a custom build

If you would rather deploy the stock installer, push the enrollment token as a registry value with an Intune configuration profile: HKLM\SOFTWARE\Policies\HopToDesk\EnrollmentToken. The client reads it on first launch and enrolls itself. Generate the token under Client Builder, Managed deployment (EMM).

Which platforms this covers

Auto-enroll works on every platform the Custom Client Generator builds, because the dashboard link lives in the installer, not in the install method. Android, Windows, and macOS all deploy cleanly through an MDM. Linux has fewer MDM options, so there it is usually a scripted install (for example with a setup script or a tool like Ansible); the auto-enroll build still links itself the same way.

EMM managed configuration (no custom build)

If you run an EMM (Intune, Workspace ONE, SOTI, Jamf), you can skip the custom build entirely: deploy the standard app and push the enrollment token as managed configuration. The device reads it on first launch and enrolls itself. Generate the token under Client Builder, Managed deployment (EMM). The config target depends on the platform:

  • Android and iOS: app configuration key enrollment_token. The same policy can carry custom_api_url, the link to your own api.json, so your signal and TURN servers arrive with the app. An iPhone or iPad reports online only while the app is open or sharing its screen, because iOS suspends apps in the background.
  • Windows: registry value HKLM\SOFTWARE\Policies\HopToDesk\EnrollmentToken (push via Intune, Group Policy, or a setup script).
  • macOS: install the standard app with HopToDesk.pkg, then push a configuration profile setting the managed preference enrollment_token in the domain com.hoptodesk.hoptodesk.

The Windows registry path and macOS domain above are for the standard app. A custom-branded build uses your app name in place of HopToDesk, so its Windows key is HKLM\SOFTWARE\Policies\YourAppName\EnrollmentToken and its macOS domain is com.yourappname.yourappname. The Android enrollment_token key is the same for every build.

Linux has no standard managed-config mechanism; use the auto-enroll build there. Managed deployment is available on the Business plan.

macOS permissions through your MDM

An unattended Mac needs macOS permissions before anyone connects, and macOS asks for them with questions a remote technician cannot answer. Push our ready-made privacy profile with your MDM so the Macs are ready first.

To install the app itself, upload HopToDesk.pkg to Jamf, Intune or any MDM. It is the signed installer package for the standard app, and it installs HopToDesk in Applications and sets it to run in the background, with no prompts on the Mac. Branded builds keep their .dmg.

1. Download the profile

Download HopToDesk-PPPC.mobileconfig. It is also linked from Deployments, How to Deploy to Devices. It keeps working after every HopToDesk update.

2. What it sets

  • Accessibility (the technician can use the mouse and keyboard): switched on by the profile.
  • Full Disk Access (file transfer opens Desktop, Documents, Downloads and USB drives with no macOS questions): switched on by the profile.
  • Screen Recording (the technician can see the screen): Apple does not let any MDM switch this on. The profile lets the signed-in user switch it on with one click and no admin password.
  • Input Monitoring (used when that Mac controls another computer): the same as Screen Recording.
  • Microphone (voice calls): not in the profile. Apple only lets an MDM block the microphone, so the person at the Mac allows it if they want voice calls.

3. Upload it

  • Jamf Pro: Computers, Configuration Profiles, Upload. Choose the .mobileconfig file, scope it to your computer group, and save.
  • Microsoft Intune: Devices, macOS, Configuration, Create, New policy. Choose Templates, then Custom. Upload the .mobileconfig file, set the deployment channel to Device channel, and assign it to a device group.
  • Kandji, Mosyle, Addigy, Workspace ONE and others: add it as a custom configuration profile and assign it to the Macs.

macOS applies this kind of profile only on Macs enrolled in your MDM through Automated Device Enrollment or a user-approved enrollment. Other Macs ignore it.

4. Finish on each Mac

Screen Recording still needs one click on each Mac: System Settings, Privacy & Security, Screen Recording (called Screen & System Audio Recording on macOS 15 and later), then switch on HopToDesk. Newer versions of HopToDesk show what is still missing under Settings, Mac permissions, with a button that opens the right page.

Custom builds: the profile covers the standard HopToDesk app. Branded Mac builds from the Client Builder are not signed with a Developer ID, so macOS cannot match them to a profile. Grant their permissions on each Mac.

Tickets

How to take support tickets from your customers

Manage support requests from your clients. Tickets reach you from the app, your web portal, your website widget, email, remote sessions, the API, or you create them by hand.

Remote access only? Owners and admins can turn the help desk off in Settings, in the Help desk card. Tickets, the Embed Widget and Satisfaction then leave the sidebar. The AI support chat card in the same Settings screen hides the support chat. A custom build can hide the ticket entry in the client as well (see Advanced Options under Custom Clients).

1. Customer Creates via Support Portal

Devices that install through your invite get a Submit Ticket entry in the tray menu:

  • Customer right-clicks the support icon in their system tray
  • Selects Submit Ticket
  • Fills in subject, description, and priority
  • Ticket appears in your dashboard automatically linked to their device

2. You Create Manually in Dashboard

Create tickets on behalf of customers or for internal tracking:

  1. Open Help Desk
  2. Click New Ticket
  3. Fill in Title, Description and Priority, and optionally Device, Customer / Contact or Client Email
  4. Click Create Ticket

3. Customer Creates via Website Widget

Embed a support widget on your website (see Support Widget section):

  • Customer clicks the floating support button on your website
  • Fills in their email, subject, description, and priority, plus any custom fields you show on customer forms
  • Ticket appears in your dashboard with their email for follow-up

4. Customer Creates via Your Web Portal (No Install)

Every account has a hosted support portal: a branded web page where customers raise tickets and follow their progress from any browser, without installing anything.

  • Find your portal link on the Help Desk screen with the Share Portal button, or open Settings and find the Customer portal link card to customize the address or turn the portal off.
  • Customers fill in their name, email, subject, and description. The ticket lands in your dashboard with the portal marked as its source.
  • Customers can check progress and reply from the portal: the "Already have a request?" link emails them a secure access link that shows their own requests only. It works for 60 days by default. Owners and admins can choose 7, 14, 30 or 60 days under Portal link lifetime in the same card; lowering it also shortens links already sent.
  • Require sign-in (Business plan, owners and admins): ties each customer's portal access to the browsers they use. The first time a customer opens their link, one click on Open my requests keeps that browser signed in. Any other browser, including one that received a forwarded link, sees a Confirm it's you screen and opens the portal only after the customer signs in with Microsoft or Google using the address the link was sent to, or enters a 6-digit code emailed to that address. When someone raised the ticket for the customer, the link always asks for confirmation, and either of the two addresses can be used. Codes work for 10 minutes and allow 5 tries. Each browser stays signed in for the portal link lifetime, counted from its last visit, and a Sign out button ends it. Cancel portal link and deleting the contact also sign out every browser. Replies to notification emails keep working as before.
  • Named logins (Business plan, owners and admins): give a customer their own sign-in. Edit the contact and click Give portal login. We email them a link to set a password, and they then sign in on your portal with their email address and that password. From then on, emailed links ask that person to sign in. On the same contact you can send a password reset, disable the login, unlock it or remove it. Disable and remove sign the person out at once. In the Customer portal link card you can set the minimum password length, require upper and lower case letters, a number and a symbol, and require an authenticator app code at each sign-in. A login locks for 15 minutes after 5 failed sign-ins, and each person can turn on an authenticator app under My account. Turn on Named logins only to close the portal to everyone else: emailed links and the public request form stop working, and every customer signs in first. Successful and failed sign-ins are in the audit log.
  • Portal links (Pro and Business, owners and admins): add up to 5 buttons to the top of your portal in the same card, such as Downloads, FAQ or News. Each button opens a web page of your choice in a new tab, and your customers see the buttons on every page of the portal. Tenant customer portals do not show them.
  • Company access (owners and admins): edit a contact and turn on Can see all tickets of their company, so they can read and reply to every ticket of their tenant, or of their company when they have no tenant. For a contact in a tenant, Can see their company's devices shows the name, operating system and online status of those devices, and lets them ask for help with one. It gives no remote access.
  • To end one customer's access at once, edit the contact and choose Cancel portal link. Deleting the contact does the same. It ends their web link and replies to earlier emails, so a forwarded notification can no longer add to the ticket. The contact can ask for a new link from the portal, or write to your support address from their own mailbox.
  • Changing the portal address invalidates previously emailed access links, so treat a rename as a reset.
  • The activity log records portal use with the contact's email, the time and the IP address: each access link sent, each portal visit, each ticket a customer opens, each view of company tickets or devices, each ticket created, and each sign-in, sign-in code, failed sign-in and sign-out. Repeat views from the same address within an hour are recorded once, and link requests that send no email once an hour. The entries are listed under Customer portal, returned by getActivityLogs, exported with their tenant, and sent to your SIEM stream with their tenant.
  • Submitted by: if the person raising the ticket types a name or email that differs from the contact on file for that email address, the ticket detail keeps a Submitted by line with what they typed, so shared mailboxes and coworkers stay identifiable.

5. Email-to-Ticket

  1. Open Help Desk and click Email Intake
  2. Turn on Enable email intake, choose your intake address, a default priority, and whether to send an acknowledgment. Click Save (owners and admins)
  3. At your mail provider, forward your support address to the intake address

Every new email becomes a ticket, and replies from both sides stay in the same conversation.

Companies

Tickets and contacts group themselves by company automatically, using the domain of the customer's work email (free mail providers are excluded). On the Contacts screen you can rename companies and merge duplicates. To put a contact in a different company, for example a customer who writes from a personal address, edit the contact and type the company name in its Company field; a name that does not exist yet creates the company. The ticket list has a company filter so one client's requests stay together.

Managing Tickets

  • Status: Open, In Progress, Waiting on customer, Resolved, Closed
  • Priority: Low, Medium, High, Urgent
  • Replies: Respond to client messages (they see it in their portal)
  • Internal Notes: Add private notes only your team can see
  • Link Device: Connect to a device for quick remote access
  • Link Contact: Associate with a customer contact
  • Assign: Transfer tickets to team members
  • Time logged: In a ticket, click + Log to add time by hand or Start timer to run a clock. Track time automatically, a card in Settings that is off by default, starts a clock when a ticket moves to In Progress. Any other status stops it and adds the time as an Automatic entry, so Waiting pauses it.
  • Edit details: On a ticket you created manually, click the pencil beside the title to change its title or description. Tickets raised by a customer keep their original text.
  • Tabs: The ticket list separates Open, Resolved, Closed and All, with a channel filter showing where each ticket came from (app, portal, widget, email, session, API, or manual)
  • Bulk changes: Tick tickets to set status or priority, tag, archive or delete them together
  • Saved views: Save the current filters and pick them from Saved view
  • Connect Now and Send Invite: Connect Now opens a session to the linked device, and Send Invite emails the customer an install link
  • Merge: Under Customer Info, Merge moves all tickets from one customer email to another (owners and admins)
  • Share: A read-only link for a vendor or third party, valid for 7 to 365 days. Recipients cannot reply or change anything
  • Export: In Reports, on the Tickets tab, Export CSV downloads tickets only; the Columns button beside it lets you pick exactly which columns the file includes

Attachments

Open a ticket and use Add in the Attachments box, or paste or drop files onto the ticket. Customers can attach files from the portal and the reply page.

  • Free: up to 30 MB per file and 500 MB in total
  • Pro: up to 2 GB per file and 100 GB in total
  • Business: up to 2 GB per file and 500 GB in total

A large upload continues where it stopped if the connection drops. Files over 30 MB are removed 30 days after their ticket is closed, unless you mark them Keep.

Owners and admins see use and the largest tickets in the Attachment storage card in Settings, where Make room automatically removes the oldest large files on closed tickets when storage is full. The account owner gets an email at 80 and 95 percent.

Ticket Custom Fields

Custom fields capture what the standard ticket form does not, such as a hardware serial or a billing code.

  1. Open Settings and find Ticket Custom Fields (owners and admins)
  2. Click + New Field. Enter a Label and Key, pick a Type (Text, Number, Select, Checkbox, Date or URL) and a Sort order. A Select field can depend on another field
  3. Tick Required, Show on customer forms and Required on customer forms as needed
  4. Click Save Field

Fields show on every ticket under Custom Info. Fields shown on customer forms also appear on your support portal and help widget, and customers see every option. The key cannot be changed later.

Quick Responses

Quick Responses are saved replies. Pick one from Quick Responses in the reply box, or add your own in Manage Quick Responses. They can use {customer_name}, {customer_email}, {ticket_id}, {ticket_title}, {device_name}, {my_name}, {my_email} and {date}.

Ticket Auto-Assignment

Open Settings, find Ticket Auto-Assignment and click + New Rule (owners and admins). Give it a name, pick If priority, If source and If tag, pick Assign to, and set Eval order. The first matching rule decides, lowest number first. It runs when a ticket is created or a tag is added.

Ticket Numbers

By default tickets read #1042. To use your own prefix, such as TAN-1042, open Settings, find Ticket numbers (owners and admins), enter a Ticket prefix of up to 8 letters or digits with an optional dash at the end, and click Save. Next ticket number can only go up, and existing tickets keep their numbers.

Other Ticket Settings

These are cards in Settings, for owners and admins:

  • Create tickets from remote sessions: when a session starts on a linked device, a ticket opens by itself, with start, end and duration on its timeline. Reconnects within 30 minutes reuse the ticket. Off by default.
  • Ticket Notification Email: where new-ticket and customer-reply emails go. Use a shared mailbox, or leave it blank to send to the account owner.

Customer Notifications

Keep the person who raised a ticket informed automatically. With Customer notifications enabled, they receive:

  • A confirmation email when their ticket is created (from the client, portal or widget), with the ticket number and a reply link
  • An update email whenever you change the ticket status
  • When a ticket is resolved with CSAT surveys enabled, the satisfaction survey is sent instead of a duplicate status email

Turn it on in Settings, in the Customer notifications card (also under Settings, Branding, Email Notifications; it is one setting). It is off by default and turns on automatically the first time you verify a sending domain. Emails use your branding and the customer email language you configure, and replies thread back onto the ticket when email intake is enabled. Sending is capped at 200 status emails per account per day.

People on CC

A ticket can copy up to 10 more people, for example a site contact and the person who uses the machine. Add or remove them under Customer Info in the ticket. When a customer emails your intake address with a new request, the people on the email's CC line at the sender's own company domain are added for you, except your own team and automated senders. When someone on the ticket replies to one of its emails and copies a new person, that person is added too.

  • Everyone on CC gets the status emails and your public replies, each with their own reply address. Internal notes stay internal.
  • A reply from any of them is added to the ticket under their name.
  • Being on CC does not open the customer portal. A person on CC can open the ticket on the web only when their contact has Can see all tickets of their company turned on, for the ticket's tenant or, for a ticket with no tenant, for the same company. Everyone else replies by email. When your portal requires sign-in, they open the ticket from their own portal after signing in.
  • Removing a person, or cancelling their portal link, stops their current reply address and link without affecting anyone else on the ticket.
  • The activity log records each person added or removed, with the tenant.

Send From Your Own Domain (Pro and Business)

By default, ticket emails to your customers are sent from support@hoptodesk.com with your company name. Pro and Business accounts can instead send from their own address, for example support@mail.yourcompany.com. Setup:

  1. Open Settings, then Branding, then Email Notifications, and find the Send from your own domain card
  2. Enter the address name and domain. Use a dedicated subdomain such as mail.yourcompany.com rather than your main domain, so your primary email reputation is never affected
  3. The card shows the DNS records to add at your domain provider (an _hoptodesk-verification TXT record that proves your account owns the domain, a verification TXT record, two DKIM CNAME records and a DMARC TXT record), each with a copy button. For a subdomain each host name already includes it, so copy each name exactly as shown
  4. Add the records at your DNS provider. For CNAME records on Cloudflare, set them to DNS only, not proxied
  5. Click Verify. DNS changes can take a few minutes to propagate; click Verify again if records show as missing at first

Once verified, every ticket email (confirmations, replies, status updates and CSAT surveys) leaves from your address, and Customer notifications switch on automatically if you have never configured them. If its DNS records are removed later, sending falls back to support@hoptodesk.com so no mail is lost, and the card shows a warning until the records are restored. Nothing changes until verification succeeds, so a typo in DNS can never interrupt your ticket mail.

Tip: Filter tickets by status, priority, company, channel or tag, and save the filters as a view.

Groups

Organize your devices into logical groups for easier management.

How to group devices by customer and limit technicians

Creating Groups

  1. In the sidebar, click Devices to expand its dropdown. Your existing groups are listed underneath
  2. Click Add Group at the top of the list
  3. Enter a group name and click Create

You can also assign individual devices to groups inline from the device row's + Add group link, or use bulk actions to assign many at once.

Use Cases

  • By Client: "Acme Corp", "Smith Family"
  • By Location: "Office", "Remote Workers"
  • By Type: "Servers", "Workstations", "Laptops"

Tip: Use bulk actions to move multiple devices to a group at once.

Session Recording

Sessions can be recorded on either side of a connection. Recordings are saved as standard WebM video files on the machine that made them and are never uploaded to HopToDesk. The dashboard catalogs them so you can find any recorded session, and plays them back when the file is on the computer you are using.

Recording a Session

  • Manually: click the record button in the session toolbar, or press Ctrl+Alt+Shift+R (Control+Option+Shift+R on a Mac)
  • Automatically: in the client, open Settings and turn on Automatically record incoming sessions (recorded on the device being controlled) or Automatically record outgoing sessions (recorded on the technician's computer)

The person being controlled sees a recording indicator in the connection window whenever a session is being recorded.

Where Files Are Saved

  • Windows: %USERPROFILE%\Videos\HopToDesk
  • Windows, incoming sessions recorded by the installed service: C:\ProgramData\HopToDesk\recording
  • macOS: ~/Movies/HopToDesk
  • Linux: ~/Videos/HopToDesk

Use Open Recordings Folder in the client settings to jump straight there. Under Delete Recordings After, you can have the client remove recordings older than a chosen number of days.

The Recording Library

  1. Every finished recording reports its details to your dashboard automatically: device, direction, technician, duration and file name. Recordings made on a technician's computer appear even when the technician's app is not linked to your dashboard. For those the file location is not stored; play them from the technician's computer with Connect recordings folder.
  2. Open Recordings in the sidebar to search and filter the catalog; the Sessions report marks recorded sessions with a REC badge
  3. Click Connect recordings folder and select your local recordings folder to play any recording stored on that computer with one click

Fleet-Wide Recording

To record across a fleet, turn on Record incoming sessions in Onboard a fleet, or use Require Session Recording in a device policy, which the person at the device cannot turn off. Custom client builds can also lock the setting.

Privacy: recording files stay on your own machines. HopToDesk stores only the catalog details listed above, never the video itself.

Trash

When you delete a device, it goes to Trash instead of being permanently removed. This gives you a safety net to recover accidentally deleted devices.

How Trash Works

  • Deleted devices are moved to Trash and stay there until you restore or remove them
  • You can delete a single device permanently or empty the whole Trash at any time
  • The Trash icon in the sidebar shows the count of items currently in Trash
  • Automatically remove stale devices: a card in Settings moves devices to Trash when they have not connected for 30 days up to 1 year. It is off by default, and a device comes back by itself if it reconnects

Managing Trash

  • View Trash: Click Trash in the sidebar to see all deleted devices
  • Restore: Click the restore button on a trashed device to move it back to your device list
  • Empty Trash: Click Empty Trash to permanently delete all items at once

Warning: Emptying Trash is permanent and cannot be undone.

Support Widget

Add a customizable support widget to your website for client inquiries.

Widget Customization

  • Brand Color: Match your website's color scheme
  • Position: Bottom right or bottom left corner
  • Greeting: Custom welcome message
  • Company Name: Displayed in the widget header
  • Language: Form labels and messages follow each visitor's browser language (24 languages), or one language you pick
  • Show My Tickets tab: Lets visitors see their own requests
  • Allowed Domains: List the websites that may use the widget, one hostname per line. Leave it empty to accept any site

Installation

  1. Open Help Desk, then Embed Widget, and set the options
  2. Copy the generated code
  3. Paste before the closing </body> tag on your website

Tip: Messages from the widget create support tickets automatically in your dashboard.

Client Builder

Create a professional, white-labeled experience for your clients. Branding lives in two places:

  1. Custom Client Generator: open Client Builder in the left menu to build your own white-labeled HopToDesk binaries, or paste your own download URLs
  2. Invite Page and Email Notifications: under Settings, then Branding (owners and admins), brand the page clients land on when they open an invite link, and the emails sent from your account

1. Custom Client Generator

Build a fully white-labeled HopToDesk client (or paste your own self-hosted client URLs). Your app name, icons, company URLs, and branding images are baked into the binary at build time.

For a complete walkthrough (branding fields, plan tiers, build queue behavior, self-hosted URL setup, and troubleshooting), see the dedicated Custom Clients section below.

2. Invite Page

Brand the page clients land on when they open one of your invite links:

  • Company Name and Logo: shown at the top of the install page
  • Header Background Color: the color behind your logo on the invite page and in email headers. Use white to keep a colored logo visible
  • Live preview on the right shows changes as you edit

3. Email Notifications

Brand the transactional emails your account sends: ticket replies, invite reminders, account notifications. Logo, sender name, and color are picked up from the Invite Page tab; this tab lets you customise the email-specific parts.

Tip: Set up the Custom Client Generator or the Custom Client Download URLs (one is enough) so your invite links download your branded app instead of the default HopToDesk.

Custom Clients

A custom client is a fully white-labeled HopToDesk binary: your app name, icons, company URLs, and branding images baked into the installer at build time. Customers see your brand from the moment they double-click the installer.

How to build your own branded remote support app

You have two options, both reachable from Client Builder:

  1. Generate: let HopToDesk build the binaries for you, server-side
  2. Host your own: if you compile the client yourself, paste per-OS download URLs and we'll use those instead

Either way, every invite link your account generates will deliver the right branded download to your customers automatically.

Path 1: Generate a Custom Build

Plan tiers

  • Free: Windows builds only (.exe installer, code-signed)
  • Pro / Business: Windows, macOS (.dmg, unsigned, Gatekeeper warning), Linux (.deb, unsigned), Android (.apk, sideload, full input control, with your name, icon and logo)

Step-by-step

  1. Open Client Builder in the sidebar
  2. Fill in the Branding column on the left:
    • App Name (required, letters, numbers and spaces only, starting with a letter, max 40 characters, and not ending in install): appears as the installed app name and window title
    • App Icon (required, square PNG, 1024×1024 recommended): all platform-specific icon files (.ico, .icns, etc.) are generated automatically in your browser, no separate uploads needed
    • Company Name, Company URL (your company website) and Privacy Policy URL (optional): shown in the app's About / settings screens
    • Featured Image (optional, PNG, suggested 200×134): replaces the default illustration on the Connect screen
    • Privacy Mode Image (optional, PNG, Windows only): centered and letterboxed to fit 1920 by 1080. Shown on the remote screen when privacy mode is engaged
  3. Watch the Preview on the right update live as you type. This approximates what the real client window will look like (your icon top-left, your app name in the title bar, your featured image in the body)
  4. Pick which OSes to build under Platforms. Each one selected adds 5-20 minutes to the queue. Mac, Linux and Android need Pro or Business.
  5. Decide whether to be emailed when the build is done (checkbox under the button), then click Generate Custom Build
  6. Status appears in the panel below the form. The page also keeps a Your Custom Builds table further down with a row per build, status (queued, under review, building, ready, failed), build time, and a Download link once ready. A build under review is typically resolved within one day, and we email you when it is done

Options on this screen

  • Build profiles (Pro and Business): Save current settings keeps a profile with its images, and Load a saved profile fills the form
  • Private download link: only people signed in to your dashboard can download the file by hand. Devices, invites and Connect links still get it

After the build

  • Click Download on any ready build to grab the installer
  • To use this build for invite links, scroll to Custom Client Download URLs below and click Use latest build for the matching OS. The field auto-fills with the right URL
  • You can keep generating new builds whenever you change branding. Old builds stay listed until you delete them. The download link for an app name always serves the newest completed build of that name, so a build you have not tested yet is live at that link as soon as it completes. Each build also has its own link that stays on that build: click Copy link to build in the table. Hand out that link when a tested build must stay available after you build again
  • The Devices on this client panel above the table shows how many Windows devices run an older build, with an Update devices button and the Keep devices on my newest build switch (Pro and Business). See Updating or Replacing a Custom Client below

Advanced Options

Pro and Business accounts get an Advanced Options button in the Custom Client Generator for locked-down, deployment-ready builds. Free accounts see it locked.

  • Incoming-only (quick support) mode: the client only receives connections and hides outgoing controls, ideal for unattended support endpoints. Switch Sides and Show my screen still work from such a build.
  • Windows package: choose a standard .exe installer or an .msi for silent, fleet-wide deployment through Group Policy or any MDM. Every MSI carries its own version, so a newer MSI upgrades the previous one in place and the device keeps its settings.
  • Locked settings: pre-set and lock options such as Keyboard & Mouse, Clipboard, File Transfer, Audio, Remote Terminal, Wake On LAN, Switch Sides, KVM Mode, and the client language. Locked settings show greyed out in the app's settings and in the connection window during a session, and end users cannot change them. Locking Audio off means a build never transmits sound from the remote device, which keeps technician phone or Teams calls out of sessions. Locking Switch Sides off hides Switch Sides and Show my screen on both ends of a session.
  • Idle timeout (minutes): locks how many idle minutes pass before a session closes. Use it with Close Idle Sessions locked On.
  • Recordings folder: the folder where the app saves session recordings, for example a network share. Every computer running the build must be able to reach it, or its recordings are not saved.
  • Multiple monitors: locks how a session shows a remote computer with more than one display: All displays, or Each monitor in its own window.
  • Hide the help desk in the client: removes the Submit Ticket entry from the tray menu and the ticket icon from the app, for partners who sell remote access without a help desk.
  • Hide the source code link: removes the "Source code is available here" line from the About window. The AGPL 3.0 line and the RustDesk credit stay in every build. If you share the app outside your company, you must still provide the source code. Your Custom Builds shows where the source code is, next to the downloads of each build.
  • Silent connections: keeps the connection window minimized, so nothing pops up on the managed machine when a session starts or ends. The person there can still open it to see who is connected, chat, or disconnect. It locks the build to unattended access with a permanent password, so do not use it for quick support builds. It also sets Connection approval to Password only, whatever you pick there.
  • Connection approval: lock how incoming connections are approved so end users cannot change it. Password only lets a session in with the password and never shows an accept prompt, so nobody at the device has to do anything; pick it for unattended machines. Always ask requires someone at the device to accept every session, which overrides unattended access on that machine, so it suits staffed computers rather than servers. Password, or ask when none is set accepts the password, and asks the person at the device only when no password is set. Leave it unlocked to let the end user choose. Business plan.
  • Close protection: stops end users from quitting the app or turning off incoming connections. Uninstalling still works normally. Business plan.
  • Tamper protection: on Windows, uninstalling the app or stopping its service needs an uninstall code from your dashboard. This also turns on Close protection. Each enrolled device has its own code, under Uninstall code in the device details, and each build has one code that works on every PC. Only owners and admins can show a code. A wrong code is written to the device history, and the Tamper attempt alert in Settings tells you about it. Business plan. Read more.
  • Ask the user to name this device: the first time the client runs, the end user is asked for a company name and a device name, prefilled with the computer name. The combined name becomes the device name in your dashboard, so a mass rollout by emailed link arrives pre-labeled (for example BMW-SAP-SERVER) instead of a list of identical Windows hostnames. The app then shows Company name, Computer name and Device Name rows, and the user can rename the device later with Change; the new name reaches your dashboard. Renaming the device in the dashboard later always wins. Business plan.

Advanced Options are baked into the build, so every install from it is configured the same way with nothing for the end user to set up.

Path 2: Host Your Own Client

If you compile the HopToDesk client yourself (forked source, custom build pipeline, internal CDN, etc.) and host the installers somewhere, paste your download URLs into the Custom Client Download URLs card at the bottom of the Custom Client Generator tab. Invite links will fetch from those URLs instead of the default HopToDesk client.

Per-OS URL examples

  • Windows: https://yoursite.com/downloads/YourBrand.exe (.exe or .msi)
  • macOS: https://yoursite.com/downloads/YourBrand.dmg
  • Linux: https://yoursite.com/downloads/YourBrand.AppImage

Leave any field blank and that OS will fall back to the default HopToDesk download. Mix and match freely: for example, generate Windows yourself and host Mac externally.

Requirements for self-hosted URLs

  • Public HTTPS: the URL must be reachable without authentication (your customers' browsers fetch it directly)
  • Stable filename: if you rotate filenames per release, point at a redirect/symlink that always serves the latest
  • Correct content-type recommended (application/x-msdownload, application/x-apple-diskimage, etc.). Not strictly required but helps some browsers

Updating or Replacing a Custom Client

  • Generated builds: change branding fields and click Generate Custom Build again. When the new build appears in the table, click Use latest build in the Download URLs card. Existing invite links pick up the new file immediately, no need to re-issue invites.
  • Self-hosted: push your new installer to the same URL. Same effect: existing invites serve the new file the next time they're clicked.
  • Devices already running your custom client on Windows: the Devices on this client panel on the Builds page counts how many Windows devices run an older build. Pick a build (newest first) and click Update devices to send it to every device that is not on it, or only to devices with one tag. Picking an older build rolls those devices back to it, and a build made for a pilot or one customer is sent only when you pick it. Builds from before this feature can be sent only while they are the newest. With a tag, only devices that carry it get the build, now or when they next come online. A later click with another build, another tag or all devices replaces that choice. Each device downloads the build from your dashboard, checks it, installs it in place and comes back with its ID, password, settings and enrollment intact. It is offline for about half a minute while it installs. Offline devices update when they come back online. Owners and admins on Pro or Business.
  • Keep devices on my newest build: turn on this switch in the same panel and every new build goes to all Windows devices on its own, with no click. It is off by default.
  • Devices the dashboard cannot update: devices running the standard HopToDesk app, or a custom build made before September 2026, are listed as not counted. Install the new build on them once, by hand or with your deployment tool. From then on they take updates from the dashboard. Mac and Linux devices are not updated from the dashboard. Install the new build on them with your deployment tool or by hand.
  • Every build is new: a rebuild counts as new even when the version number did not change, so Windows devices show as behind until they take it.
  • Same installer, same command: running the new installer over an existing install updates it in place and keeps settings and enrollment. On Windows the file name must end in install.exe, which the Download button already uses, or run it with --silent-install. Each MSI build carries its own version, so a newer MSI is an upgrade of the previous one in Intune or Group Policy.
  • Standard (unbranded) client: to update an installed HopToDesk client from a download, use the install-named link, for example https://dashboard.hoptodesk.com/downloads/clients/hoptodesk-x64-install.exe (hoptodesk-install.exe for 32-bit, hoptodesk-arm64-install.exe for ARM). A file whose name ends in install.exe installs over the current version and keeps the device ID, password and settings; the plain download would only open a second portable copy next to the installed app.

Troubleshooting

  • "Custom client URL appears unreachable" banner. If a saved Download URL stops working, this banner appears in the Custom Client Generator tab so you can fix it before customers notice. Update the URL and the banner clears.
  • Build stuck in "queued" or "building" for >30 minutes. Click Refresh on the Your Custom Builds table. If still stuck, generate a new build and let support know.
  • Mac client says "unidentified developer" / Gatekeeper warning. Expected. Generated Mac builds are unsigned. Customers either right-click, then Open the first time, or you can sign the .dmg yourself with your own Apple Developer ID before redistributing.
  • Linux .deb fails to install. Make sure your customers are on a Debian/Ubuntu-based distro. The generator only produces .deb. For RPM-based or other distros, use the self-hosted URL path with your own packaging.
  • App Name validation rejects characters. Letters, numbers and spaces only, starting with a letter, max 40 characters, and not ending in install. No punctuation, slashes, or emoji.

Tip: If you only need light branding (logo + color on the install page) and don't care about the binary itself being white-labeled, just configure the Invite Page under Settings, Branding and skip the Custom Client Generator. Customers will still download the default HopToDesk client, but your install page will be branded.

Custom Network

By default your devices connect through HopToDesk's public signal and TURN servers. If you host your own, you can point your devices at them under Settings, in the Network Settings card (owners and admins only).

How to self-host a remote desktop server with HopToDesk

Choose HopToDesk Network for the default servers, or Custom Network to use your own. Accounts on the EU dashboard can also choose HopToDesk Network (EU only): signal and relay servers in the European Union only, for the Windows, macOS and Linux apps and the Android app version 1.46.70 or later. Devices on it connect only to other devices on it. Any field left blank falls back to the HopToDesk default.

No server yet? Use Set up a private network at the top of the card. In my AWS account opens a CloudFormation launch link with your settings already filled in, and On my own server gives you one Docker command. The new server reports its address back to the dashboard, the network is saved, and every device gets it. Nothing to type. Host it for me asks sales for a network we run for you.

Signal Server

Set the Host, Port, and Protocol of your signal server. WSS is the secure (TLS) protocol and WS is the standard one. The web client always connects over the secure host.

Network secret: leave it empty unless your signal server requires one. Devices send it when they connect, and they need HopToDesk 1.46.70 or later.

TURN Server

Add one or more TURN servers, each with a Host, Port, Protocol (TURN or TURN-TLS), and credentials. Use Add TURN Server for additional relays.

Signal Presence Tokens

If devices use your own signal server, click Create and set the token as PRESENCE_SECRET on that server, with the two addresses shown, so online and offline status stays accurate. Treat it like a password.

Click Save Network Settings. When a device enrolls under your account, the dashboard delivers the full network configuration and the device applies it automatically, with no per-device setup. Switch back to HopToDesk Network at any time.

Every change you save is pushed to all online devices. Custom builds generated after you save the network carry it, so a host uses your servers from its first start, before it enrolls.

Firewall Mode

Some company networks only allow outbound traffic on ports 80 and 443. Firewall Mode makes a HopToDesk device work on such a network with nothing else opened, so no port range is needed.

Turn it on for one device

  1. On the device behind the strict firewall (the one being accessed), open Settings, then Network.
  2. Turn on Firewall Mode.
  3. Make sure the device that connects to it also runs a current HopToDesk version. Older versions do not understand the mode and cannot connect to a device that has it on.

Roll it out to a fleet

Bake it into a custom build so nobody touches Settings on each machine: open Client Builder, then Advanced Options, and under Hard-locked settings tick Firewall Mode and set it to On. Combine it with Auto-enroll for mass deployment and every installed device links to your dashboard and works over port 443 from its first start. Advanced Options are available on the Pro plan and up; mass deployment on Business.

What the network still needs

Outbound TCP on port 443 (and port 80 where possible) to these hosts:

  • api.hoptodesk.com, signal.hoptodesk.com, signal2.hoptodesk.com
  • turn.hoptodesk.com, turn-eu.hoptodesk.com and turn-sg.hoptodesk.com (relay servers)
  • signal-euonly.hoptodesk.com and turn-eu2.hoptodesk.com for accounts on the EU only network
  • dashboard.hoptodesk.com for devices linked to a dashboard, or eu.dashboard.hoptodesk.com for accounts in the EU region

Good to know

  • On the same LAN, sessions still connect directly.
  • The relay traffic on port 443 is not TLS. A firewall that inspects port 443 and insists on TLS still blocks it.
  • The web client does not support Firewall Mode. Use the desktop or mobile app to connect to such a device.
  • Without Firewall Mode, a device needs outbound TCP to any port.

Headless Linux (no monitor attached)

On a Linux machine with no monitor plugged in, HopToDesk may report that no display was found even though the desktop session is running normally. This affects bare metal servers and mini PCs. Virtual machines and cloud instances are usually unaffected, because their virtual graphics adapter already presents a connected screen.

The cause is that the graphics driver marks every video output as disconnected when nothing is attached, so the system creates no screen for HopToDesk to capture. You can confirm this by running DISPLAY=:0 xrandr --listactivemonitors. If it reports Monitors: 0, this is what you are hitting.

Give the machine a screen and HopToDesk works normally. There are two ways to do that.

Option 1: a display emulator plug

Insert an HDMI or DisplayPort dummy plug, sold as an EDID emulator or headless display adapter. The output then reports as connected with no configuration at all. This is the simplest option and needs no changes to the system.

Option 2: create the screen in software

Linux can force an output on and supply it with built in monitor data, using kernel options. First find your output name:

ls /sys/class/drm/

The names there are what the kernel expects, and they can differ from what xrandr shows. An output xrandr calls HDMI-1 may be HDMI-A-1 to the kernel, while VGA-1 is often the same in both. Then add one option to your kernel command line and reboot, substituting your output name and a resolution:

video=VGA-1:1024x768e

The trailing e forces the output on even with nothing plugged into it. This is usually all that is needed, and it has been confirmed on Debian 13 with Intel HD Graphics and the modesetting driver. Your normal graphics driver stays in place, including hardware acceleration.

If the output still does not appear, you can also supply monitor data using one of the sets the kernel already includes, for 1024x768, 1280x1024, 1680x1050 or 1920x1080, by adding a second option alongside the first:

drm_kms_helper.edid_firmware=VGA-1:edid/1024x768.bin

After a reboot, xrandr --listactivemonitors should report one monitor, and HopToDesk will connect as usual. If the output name is wrong the setting is simply ignored, so a mistake here does not stop the machine booting.

You may see the Xorg dummy driver suggested elsewhere for this. It also works, but it replaces your graphics driver and gives up hardware acceleration, so the options above are usually preferable.

Headless Windows (no active display)

On a Windows machine that normally has no monitor attached, typically a server or a virtual machine administered over RDP, connecting with HopToDesk may show No displays even though the machine is running. A common variant: sessions work fine while an RDP window to the machine is open, and fail with that message as soon as it is closed.

The cause is that Windows only keeps a screen alive for a session that is attached to something: a physical monitor, a hypervisor console, or a connected RDP session. When the RDP client disconnects, Windows removes that session's screen, and a session that is logged on but disconnected does not count. With no screen present there is nothing for HopToDesk to capture.

Give the machine a screen and HopToDesk works normally. There are three ways to do that.

Option 1: a display emulator plug

On physical machines, insert an HDMI or DisplayPort dummy plug, sold as an EDID emulator or headless display adapter. The output then reports as connected with no configuration at all, exactly as on Linux above.

Option 2: a virtual display driver

On virtual machines and servers, install a virtual display driver, also called an indirect display driver or virtual monitor driver; free options exist. Windows then always presents a screen, whether or not anything is attached, and HopToDesk captures it like a real one. Set the virtual monitor to a normal resolution such as 1920x1080; very small virtual screens can still be treated as absent.

Option 3: keep a session attached

For occasional use, keep an RDP session connected while you work with HopToDesk; minimizing the RDP window is fine, but disconnecting it removes the screen even though you stay logged on. On virtual machines, keeping the hypervisor console open (for example Hyper-V or vSphere) has the same effect.

For machines you access regularly, the virtual display driver is the set-and-forget choice; the dummy plug is its hardware equivalent for physical machines.

Team Access

Collaborate with team members on support and device management.

Adding Team Members

  1. Open Settings, then Team
  2. Click Add Member
  3. Enter the Email Address and Name and pick an Access Level
  4. Optional: pick a Customer (multi-tenant accounts) and Device access
  5. Click Send Invitation

Team Collaboration

  • Shared access to all devices
  • Collaborate on support tickets
  • View team member activity
  • Add internal notes visible only to team

Device access for members

By default a member or viewer sees every device in the account. You can limit a member to selected device groups, selected tags, or both. Owners and admins always see every device.

  1. Go to Settings, Team Access.
  2. On the member's card, click the Device access button.
  3. Choose Selected groups and tags, tick the groups and the tags, and save.

You can also choose groups and tags when you invite someone with Add Team Member. The limit then applies from their first sign-in.

  • The member sees every device in a ticked group plus every device that carries a ticked tag. A device needs only one match.
  • A device with no group and no tag stays hidden from a limited member. Put new devices in a group or give them a tag.
  • The limit applies everywhere: the device list, live updates, reports, the AI Assistant and SSO device access.
  • You cannot delete a group, or remove the last device of a tag, while a member is limited to it alone. Change that member's access first.

Plan: limiting a member by group is on Pro and Business. Limiting a member by tag is on Business.

Tip: A teammate needs no HopToDesk account first. The invitation email sets one up.

Technician Identity

Business

Technician Identity puts a verified photo, name, and company on the accept prompt your customer sees when a technician connects. HopToDesk verifies the identity, so a connecting computer cannot fake it, and every photo is checked before it can appear. The person accepting the connection needs no account and no setup.

Setting it up

  1. Open Settings and find the Technician Identity card under Team Access (owners and admins, Business plan).
  2. Upload a photo for each technician. Use a clear photo of the actual person, or your company's own logo. Stock images and other companies' logos are rejected. Add the display name and organization name your customers should see.
  3. Most photos are approved in a few seconds. Some need a manual check, which typically completes within 1 business day. The status updates to Approved or Rejected with a reason.
  4. Turn on "Show technician photos on the connection accept prompt". Approved identities then appear automatically whenever that technician connects, including from Web Connect.

What your customer sees

The accept prompt shows exactly one of three states. The identity check never delays or blocks the connection.

HopToDesk—
M
Maria
(482 913 674)
Connected 00:12
Dismiss Accept

1. Standard prompt. Shown when the feature is off, no identity was sent, or the check has not completed yet. Identical to today's prompt.

HopToDesk—
Maria Fuentes
(482 913 674)
Northwind IT Services ✔ Verified
Connected 00:12
A photo does not guarantee identity. Only accept connections you expect.
Dismiss Accept

2. Verified identity. HopToDesk has verified the photo, name, and company. A caution line always accompanies the photo.

HopToDesk—
M
Maria
(482 913 674)
Connected 00:12
⚠ This connection claims an identity that could not be verified.
Dismiss Accept

3. Unverified claim. Shown when an identity was claimed but the dashboard rejected it, for example a revoked photo. No photo or company ever renders in this state.

Review and safety

  • Every photo is checked before it can appear anywhere. Brand logos, stock photos, and impersonation attempts are rejected, and repeated abuse can suspend the account.
  • The identity row is informational only. It never changes permissions, security codes, or who can connect.

Technician Identity requires a HopToDesk client version with identity support on the customer's computer. Older clients simply keep showing the standard prompt.

Notifications

Stay informed about device status changes and support requests.

Toast Notifications

In-dashboard notifications appear in the bottom-right corner showing:

  • Device online/offline status changes (shows device name)
  • New support tickets
  • Action confirmations

Sound Notifications

Enable per-device sound alerts:

  1. Go to Devices
  2. Click on a device name to expand details
  3. Toggle Sound Alerts on

Sound is off by default to avoid noise with many devices. The toggle is per-device, so you can enable it only for the machines that matter.

Real-time Updates

The dashboard updates in real time. Check the connection status indicator at the bottom of the sidebar.

Tip: Allow browser notifications for alerts even when the dashboard tab isn't active.

Monitoring & Alerts

Monitoring watches your devices and tells you when something needs attention, so you find out before your customers do.

How to monitor your computers and get alerts

Setting up alerts

Open Settings and find the Alerts card. Choose where alerts go, then turn on the alert types you want.

  • Send alerts to: up to 5 email addresses, separated by commas. Defaults to your account email.
  • Delivery: email, in-app, push notification, or any mix. In-app alerts appear in the bell menu at the top right. Push notifications show on your computer or phone even when the dashboard is closed, and go to the account owner and admins. Check Push notification, then click Notify this browser on each browser that should get them. On iPhone, add the dashboard to your Home Screen first.
  • Device offline: alert when a device has been offline longer than the number of minutes you set. Available on every plan.

Health monitoring (Business)

Business accounts can also alert on activity and device health. These checks add no extra load on your fleet.

  • New remote connection: alert when someone connects to one of your devices.
  • New device enrolled: alert when a device joins your account.
  • Tamper attempt: alert on a wrong uninstall code.
  • Large file transfer: alert when a transfer is larger than the size you set.
  • Long remote session: alert when a session runs longer than the minutes you set.
  • Health monitoring: alert when a device's reported disk usage reaches your threshold, or its reported CPU or memory usage stays at or above your threshold for the time you choose (15 minutes, 30 minutes or 1 hour). The default threshold is 90%. A disk alert names the disk and its free space, for example "Disk /boot reported at 76%, 1.0 GB free". Under Settings, Alerts, Health monitoring you can tick disks to skip; the list appears once a device reports its disks. Tick Disk alerts only to get disk alerts and no other health alerts.
  • Battery below: for devices that report a battery, such as laptops and tablets. It stays quiet while a device is plugged in.
  • Temperature: a warning when a device's CPU, GPU, or drive temperature stays above your threshold for the time you choose (defaults 90 °C, 85 °C and 70 °C, for 15 minutes), and a critical alert within about 2 minutes when it reaches the critical limit (defaults 100 °C, 95 °C and 80 °C). A sensor the device does not expose shows as Not available rather than zero.
  • Alert rules: under Automation, Alert rules, choose an action to run on a device when a disk, CPU, memory or temperature alert fires on it, for example clear temp files when a disk is full, or shut down a machine whose CPU temperature is critical. A rule runs automatically or waits for approval, and new rules start off. The AI Assistant can propose rules, and a person approves each one. The shut down action needs a recent version of HopToDesk on the device.

Health metrics come from a recent client. Devices on older versions start reporting once they update.

Owners and admins on Business also see a one-time card on the Devices screen. Turn on starts disk alerts, and when remote commands are on you can add a rule that proposes a cleanup. Nothing runs until you approve it. Skip leaves alerts off, and you can change this at any time in Settings.

Maintenance windows (Business)

A maintenance window holds alerts while you do planned work, such as updates or reboots. Owners and admins set them up.

  1. Open Settings and find Maintenance windows in the Alerts card
  2. Enter a name, a start and an end. A window can last up to 30 days
  3. Choose All devices, a tag or one device, then click Add window

Offline, health and long session alerts for those devices wait until the window ends. Alerts still open then are sent, and their alert rules run at that time. Alert rules do not run during a window. New connection and large transfer alerts are not sent during a window. Tamper and new device alerts still go out.

The alert center

The bell at the top right shows a red dot with your unread alert count. Click it to see recent alerts, then click an alert to jump straight to that device. Every alert email also includes an Investigate with AI link that opens the AI agent focused on the device. On Business, open Fleet, then Monitoring & Alerts, then Alerts to see Active and History. Acknowledge an alert, or snooze it for 24 hours.

Needs attention and one-click diagnosis

Open Fleet, then Monitoring & Alerts. The Needs attention list shows every device with an open alert, and Scan now runs a fresh fleet-wide health scan. Each row has a Diagnose button: one click has the AI Assistant look at the device, without changing anything, and give a short answer with the likely cause, the evidence and the next steps. Diagnosis uses the AI Assistant, so it needs the assistant enabled and credit on the account.

Software and updates (Business)

  1. Open Fleet, then Monitoring & Alerts, then Software
  2. Click Start collecting inventory (owners and admins). Remote commands must be on for the account and the devices
  3. The first scan runs overnight, and it then runs daily

The Software tab lists installed software by device, with a search box. The Updates tab shows how many updates each device has pending, which ones, and when it was last checked. For a scan right now, run installed_software or run_update_check from Automation.

Per-device health

Health score: on every plan, the Devices screen has a Health column with a score from 0 to 100 for each online device. The score is based on the disk, memory and CPU usage the device reported, and its color shows if the device is healthy, in a warning state or critical. Hover over the score to see what lowered it. A dash means the device is offline or has no recent reports.

Expand any device row to see its latest CPU, memory, and disk usage in the Connection Info column, colored green, amber, or red so problems stand out at a glance.

Device history (Business): the expanded row also charts the device's reported CPU, memory and disk usage. Choose 24 hours, 7 days or 30 days.

Reports & Logs

See detailed reports on device activity, support tickets, and team performance.

Reports tabs

Open Reports in the left menu and pick a period at the top: This week, This month, Last 7, 30 or 90 days, Last year or All time.

  • Overview: sessions, resolved tickets, session length, active devices, busy hours and days
  • Sessions: every remote session, with filters, billing marks and CSV export
  • Tickets: volume, response and resolution times, SLA results, CSAT, channels and agent performance, with Export CSV and Columns at the top
  • Devices: status, last seen and sessions per device
  • Audit Trail: who connected to which device, when and from where

On Business you also get Uptime (connection stability), Team, Security (sign-ins), Activity (the admin log) and Automation (API key use). CSV export needs Pro or Business.

Session Notes and Billable Flag (Business)

With Session Notes on, the technician is asked at the end of every remote session for a short comment (for example "SAP update 123 installed") and whether the session is billable. Billable is checked by default; untick it for warranty or goodwill work.

  • How to enable: Settings, then turn on Session notes. Owner or admin only, Business plan. The setting reaches all your enrolled devices automatically; there is nothing to configure in the client or the Client Builder.
  • Where it shows: the note and the billable flag attach to that session in the device Session Log, next to the technician name and duration.
  • In the export: the per-device session log CSV gains Technician, Duration (min), Note, and Billable columns. A customer can see what each billed hour was for, and a report can show, for example, 5 hours total with 3 hours billable.
  • Mid-session notes: a note typed during the session via Control Actions and Note lands in the same place.
  • Web Connect: sessions started from the dashboard in the browser ask for the note on Disconnect too.

Weekly Billing Workflow

The Sessions report is built for a recurring billing run: filter a period, check the totals, export, then mark those sessions as billed so nothing is billed twice.

  • Date presets: Today, Yesterday, This week, Last week, This month, Last month, This year, Last year, or a custom range. Weeks start on Monday. Your last preset is remembered.
  • Filters: narrow by device or device group, or tick Not billed only.
  • Badges and totals: each session shows REC, NOTE and BILLABLE or NOT BILLABLE, and a BILLED mark once billed. The line above the list sums total time and billable time for the rows shown.
  • Export: download the filtered list as CSV with a comma or semicolon delimiter; the delimiter choice is remembered for spreadsheet locales that expect semicolons.
  • Mark billed: stamps the rows you ticked, or every row shown if none are ticked. Only finished sessions can be marked. Mark not billed reverses it. With Not billed only on, next week's run starts clean.

Plan: the workflow is on Pro and Business. Notes and the billable flag need Session Notes, on Business.

Tip: Pick a period at the top to compare performance across different time periods. Export as CSV for further analysis in spreadsheets.

Your Account

Manage your name, theme, language, region and password.

Profile and Appearance

  • Display Name: Open Settings, change it in the Account card and click Update Profile. Your team and customers see this name.
  • Theme: The Appearance card in Settings switches between light and dark.
  • Language: Click the globe at the top of the dashboard. It follows your browser language at first.
  • Change Password: Open Settings and click Change Password.

Data Region

Your account lives in the United States or the European Union. Visitors in Europe choose it at sign-up with Data region. The sign-in and password reset forms have a switch at the top, so use it if your sign-in is not found. EU accounts use eu.dashboard.hoptodesk.com. To move an account to the other region, contact support.

Delete Account

The account owner opens Settings and clicks Delete Account, types DELETE, enters the password, then opens the link we email. This permanently removes the account, devices, tickets, contacts and team members.

Two-Factor Authentication (2FA)

Protect your account with an additional layer of security using time-based one-time passwords (TOTP).

How to secure your HopToDesk account

Setting Up 2FA

  1. Go to Settings and find the Two-Factor Authentication section
  2. Click Enable Two-Factor Authentication
  3. Scan the QR code with your authenticator app (Google Authenticator, FreeOTP, Authy, etc.)
  4. Enter the 6-digit code from your app to verify setup
  5. Save the recovery codes you are shown
  6. Your account is now protected with 2FA

Compatible Authenticator Apps

  • Google Authenticator - Available for iOS and Android
  • FreeOTP - Open source option for iOS and Android
  • Authy - Supports multi-device sync
  • Microsoft Authenticator - Works with any TOTP-compatible service
  • Any app that supports TOTP (RFC 6238)

Logging In with 2FA

  1. Enter your email and password as usual
  2. When prompted, open your authenticator app
  3. Enter the current 6-digit code
  4. You're logged in!

Disabling 2FA

To disable 2FA, you'll need both your password and a current 2FA code:

  1. Go to Settings, Two-Factor Authentication
  2. Click Disable Two-Factor Authentication
  3. Enter your password and current 2FA code
  4. 2FA will be disabled

Recovery Codes

Enabling 2FA gives you ten single-use recovery codes. Each one works in place of a code from your authenticator app, both when logging in and when disabling 2FA.

  • Store them apart from the device that runs your authenticator app
  • Each code works once, then it is spent
  • Generate a fresh set at any time from Settings, Two-Factor Authentication

Passkeys

A passkey signs you in with the fingerprint reader, face recognition or screen lock already on your device, with no password to type and nothing to phish. A passkey counts as multi-factor by itself, so you are not asked for a separate 2FA code.

  1. Go to Settings and find the Passkeys section
  2. Click Add Passkey and confirm on your device
  3. The passkey is named after the browser and system that created it
  4. On the sign-in page, choose to sign in with a passkey

You can register several passkeys, for example one per computer, and remove any of them from the same screen.

Requiring 2FA Across the Team

Owners and admins can make two-factor authentication mandatory for everyone on the account, from Settings.

  • A member who has not set it up is asked to do so before they can use the dashboard
  • A passkey satisfies the requirement in place of an authenticator app
  • Members who sign in through SSO are exempt, because your identity provider handles their multi-factor. Sign in with Google or Microsoft is not SSO, so the requirement applies there too
  • A member whose only second factor is a passkey signs in with the passkey
  • Turning the requirement on signs out members who have not set up 2FA

Security Tip: Keep your recovery codes somewhere safe and separate from your authenticator app. They are how you get back in if you lose that device, with no need to contact support.

Single Sign-On (SSO)

Allow your team to log in using your company's identity provider (IdP) instead of separate passwords. SSO works with either of the two standard protocols: OIDC (OpenID Connect) or SAML 2.0.

What is SSO?

Single Sign-On lets employees use their existing corporate credentials (the same login they use for email, Slack, etc.) to access the Dashboard. Benefits include:

  • No password fatigue - Users don't need another password to remember
  • Centralized access control - Disable access instantly when employees leave
  • Automatic provisioning - New employees get access immediately
  • Enterprise compliance - Meet security requirements for corporate tools

Note: SSO login is available on Pro and Business.

Supported Identity Providers

  • Okta - Enterprise identity management
  • Microsoft Azure AD (Entra ID) - Included with Microsoft 365 Business
  • Google Workspace - Included with Google Workspace (paid plans)
  • Other OIDC Providers - Any provider supporting OpenID Connect (Auth0, OneLogin, Keycloak, etc.)
  • SAML 2.0 Providers - Any provider that supports SAML 2.0, such as ADFS, JumpCloud, or Keycloak. See Setting Up SAML 2.0

Setting Up SSO (Admin)

These steps are for OIDC. For SAML 2.0, see Setting Up SAML 2.0 below.

  1. Create an OIDC application in your IdP:
    • Application type: Web Application
    • Grant type: Authorization Code
    • Redirect URI: https://YOUR-DASHBOARD-URL/api?action=ssoCallback
  2. Get your credentials from the IdP:
    • Client ID
    • Client Secret
    • Issuer URL (e.g., https://your-company.okta.com)
  3. Configure in HopToDesk Dashboard:
    • Go to Settings and scroll to Single Sign-On (SSO)
    • Select your provider type
    • Enter the Issuer URL, Client ID, and Client Secret
    • Enter allowed email domains (e.g., yourcompany.com)
    • Click Test Connection to verify
    • Click Save SSO Settings
  4. Verify each email domain:
    • The SSO settings show a TXT record for each domain, with a name and a value to copy
    • Add that record at your DNS host
    • Click Verify next to the domain. Only the account owner can do this
    • DNS changes usually show within an hour

Why Domain Verification

Verification proves that your company owns the email domain, so no other account can send your staff to a different login page. People who already sign in with SSO keep working. New people can sign in with SSO after their domain is verified. If you change the Issuer URL or Client ID, verify the domains again.

Setting Up SAML 2.0 (Admin)

  1. Start in the HopToDesk Dashboard:
    • Go to Settings, Single Sign-On (SSO), and set Protocol to SAML 2.0
    • The form shows three values for your IdP, each with a copy button: Entity ID (Identifier), Reply URL (Assertion Consumer Service), and Metadata URL
  2. Create a SAML application in your IdP:
    • Paste the Entity ID and the Reply URL from the dashboard. If your IdP can import metadata, use the Metadata URL instead. It works after you save the SSO settings once
    • Send the user's email address as the Name ID (email format) or in an email attribute
    • Optional: send the user's full name in a name or displayname attribute
    • Sign the response or the assertion. Unsigned replies are refused
  3. Copy three values from your IdP into the dashboard:
    • Identity provider Entity ID, also called Issuer
    • Identity provider sign-in URL, the SAML sign-on URL for the HTTP-Redirect binding
    • Identity provider signing certificate, in PEM or base64
  4. Finish the same way as OIDC: enter the allowed email domains, click Test Connection, click Save SSO Settings, and verify each domain with its TXT record.

Sign-in starts on the HopToDesk Dashboard login page. Sign-in that starts from a tile in your IdP's app portal (IdP-initiated sign-in) is not supported.

Provider-Specific Setup Guides

Okta

  1. Go to Okta Admin, then Applications, then Create App Integration
  2. Select OIDC - OpenID Connect, then Web Application
  3. Set the Sign-in redirect URI to your callback URL
  4. Copy the Client ID and Client Secret
  5. Your Issuer URL is: https://YOUR-ORG.okta.com

Microsoft Azure AD (Entra ID)

  1. Go to Azure Portal, then Azure Active Directory, then App registrations, then New registration
  2. Set Redirect URI to your callback URL (Web type)
  3. Go to Certificates & secrets, then New client secret
  4. Copy the Application (client) ID and the secret value
  5. Your Issuer URL is: https://login.microsoftonline.com/YOUR-TENANT-ID/v2.0

Google Workspace

  1. Go to Google Cloud Console, then APIs & Services, then Credentials
  2. Create OAuth 2.0 Client ID (Web application type)
  3. Add your callback URL to Authorized redirect URIs
  4. Copy the Client ID and Client Secret
  5. Your Issuer URL is: https://accounts.google.com

How Users Log In with SSO

  1. Go to the HopToDesk Dashboard login page
  2. Enter your work email address
  3. Click the SSO button (next to the Login button)
  4. You'll be redirected to your company's login page
  5. Sign in with your corporate credentials
  6. You'll be automatically logged into the dashboard

SSO Options (Pro and Business)

  • Auto-provision users - Automatically create dashboard accounts for new SSO users on first login
  • Default role - Set the role (Admin, Member, or Viewer) for auto-provisioned users
  • Allowed domains - The email domains that sign in with SSO. Each one must be verified

Note: To make SSO the only way in, turn on Require SSO for every team member in the SSO settings. Password, Google, Microsoft and passkey sign-in then stop working for team members, existing member sessions end, and SSO sessions last 12 hours. The account owner keeps a password for emergency access.

SSO Connect (Business)

SSO Connect lets your team connect to devices with no device password. This is separate from SSO login, which is how your team signs in to the dashboard.

  1. Open Settings and find Organization & SSO Connect. With no organization yet, the account owner creates one there
  2. Turn on the SSO Connect switch
  3. Click Create SSO Invite, or use SSO Invite on the Devices screen, and share the link or code

Devices installed with it accept passwordless connections from organization members. Turning SSO Connect off means connections to those devices need a password again. Regenerate replaces the SSO code, and the old code stops working at once.

Organization Controls

Organization-level controls for granular access, compliance, security policy and integrations. Each one lives in the sidebar group it belongs to rather than in a single catch-all section: access policies, device policies and the credential vault under Settings, then Security; custom roles and directory sync under Settings, then Team; Slack, Microsoft Teams and webhooks in the Integrations card in Settings; compliance under Reports; customer satisfaction under Help Desk; multi-tenant customers under Devices, then Tenants; and SLA targets in the Ticket SLAs card in Settings, with results under Reports.

Getting started: Open Settings, then Team, then Organization, for a summary of every feature and its current status, then click a feature row to jump straight to it.

Note: Most of these controls are on the Business plan. Multitenancy, conditional access policies, the credential vault with approval-gated sessions, custom audit retention with SIEM streaming and compliance reports, and directory sync with SCIM are on the Enterprise & MSP plan. SLA targets, CSAT surveys, the IP allowlist, and Slack and Microsoft Teams notifications are on every plan. All features are accessible from the sidebar group each one belongs to, listed above. Hover over the info icons on each tab for quick explanations.

Conditional Access Policies

Access policies control when, where and how your team can use the dashboard and connect from it.

How to set one up:

  1. Open Settings, then Security, then Access Policies
  2. Click New Policy, name it, pick the Type and Scope, and enter the conditions in the format shown under the box
  3. The account owner clicks Enable enforcement. Until then the badge reads Not enforced and no policy applies. The dashboard refuses to turn it on if your own connection would be locked out

Policy types:

  • IP Restriction - Only from these public addresses or ranges, for example 203.0.113.0/24.
  • Time-Based - Only on these days and hours.
  • Geolocation - Allow or deny by country.
  • Device Group - Your team can connect only to devices in these groups.
  • Approval Required - An owner or admin approves each connection. The approval lasts 5 to 480 minutes.

To switch off file transfer, clipboard or other session features, use Device Policies.

Tip: Policies can be combined. For example, combine IP Restriction, Time-Based and Approval Required for critical systems.

Plan: Conditional Access Policies are available on the Enterprise & MSP plan.

Roles & Permissions (RBAC)

Control exactly what each team member can see and do with fine-grained, role-based access control.

Open Settings, then Team, then Roles and directory sync. Business plan.

Built-in roles:

  • Owner - Full access to everything, including billing and enterprise settings. Cannot be deleted.
  • Admin - Full access except billing. Can manage team members, devices, and all features.
  • Member - Can view and connect to devices, manage tickets, but cannot change settings or manage team.
  • Viewer - Read-only access. Can view devices and tickets but cannot connect or make changes.

Available permissions (12 total):

View DevicesConnect to Devices Manage DevicesDelete Devices View TicketsManage Tickets View ReportsExport Reports View SettingsManage Settings Manage TeamAdvanced Access

Use case: Create a "Helpdesk L1" role with View Devices, Connect to Devices, View Tickets and Manage Tickets. Junior technicians can handle tickets and connect to devices without accessing settings or reports.

Directory Sync (SCIM)

Automatically provision and deprovision dashboard users by syncing with your identity provider. When employees join or leave your organization, their dashboard access is updated automatically.

Connect Okta, Microsoft Entra ID or OneLogin through SCIM, and users are created, updated, and deactivated automatically as your directory changes. Deprovisioning a user in your identity provider immediately revokes their dashboard access and terminates their active sessions, so departed technicians lose access the moment IT offboards them.

Setup:

  • Open Settings, then Team, then Roles and directory sync, then Directory Sync.
  • Click Generate Token and copy the token.
  • In your identity provider, point the SCIM connector at the SCIM Base URL shown on the same tab and paste the token.

An on-premises Active Directory connects through Microsoft Entra ID: sync it to Entra with Microsoft Entra Connect, then provision from Entra over SCIM.

Plan: SCIM provisioning is available on the Enterprise & MSP plan.

Device Policies

Enforce session rules for a group of devices. Open Settings, then Security, then Device Policies, and create a policy for a device group (or all devices). Changes reach online devices right away.

Configurable controls:

  • Allow or block - File Transfer, Clipboard, Keyboard and Mouse, Audio, Remote Printing, Terminal, TCP Tunneling, and KVM Mode
  • Require Session Recording - Every session on these devices is recorded
  • Delete Recordings After - The device deletes its recordings once they are older than this many days, and the person at the device cannot change it. When two policies cover the same device, the longer period applies.
  • Require Approval for Every Session - The person at the device must accept each connection, including Easy Access sessions. If nobody is there, the session cannot start. Custom builds that lock Connection approval keep their own setting and ignore this one.
  • Skip approval for file transfer or terminal - With Easy Access, these tools start without asking when opened from the dashboard, also on custom builds that lock Connection approval. Remote control still follows the approval setting.
  • Session Timeout - Disconnect sessions after the number of minutes you set

Settings forced by a policy show as locked in the app on the device. Removing the policy gives the device back its own settings.

Use case: Create a "Production Servers" policy with file transfer disabled, recording enabled, and approval required for every session. Apply it to your production device group. A separate "Development" policy can be more permissive.

Two-factor on devices: owners and admins see how many devices have two-factor on, and up to 12 devices that have it off.

Plan: Device Policies are available on the Business plan.

Compliance Readiness Tracker

Open Reports, then Compliance (Business). Self-assess your organization's readiness against major regulatory and industry compliance frameworks. Each framework is broken down into individual controls that can be marked as compliant, partially compliant, or non-compliant. This tool helps you prepare for formal audits by tracking your compliance posture internally.

Note: This is a readiness tracking tool for internal self-assessment. Formal compliance certifications (SOC 2 Type I/II reports, HIPAA attestations, ISO 27001 certificates, PCI DSS ROCs/SAQs) require engagement with a qualified third-party auditor or assessor.

Supported frameworks:

  • SOC 2 - Trust Service Criteria for security, availability, processing integrity, confidentiality, and privacy
  • ISO 27001 - International standard for information security management systems
  • HIPAA - Health Insurance Portability and Accountability Act security rule safeguards
  • GDPR - General Data Protection Regulation for EU personal data protection
  • PCI DSS - Payment Card Industry Data Security Standard
  • NIST CSF - NIST Cybersecurity Framework: Identify, Protect, Detect, Respond, Recover

How to use:

  1. Select a framework from the dropdown filter
  2. Click "Update" on each control to set its status and document evidence
  3. Record notes about evidence, documentation links, or gaps that need attention
  4. Use "Export CSV" to generate a readiness assessment for your compliance team or auditor preparation

The readiness score cards at the top provide a quick overview of your self-assessed compliance posture across all frameworks. Scores are calculated as: (compliant controls + 50% of partial controls) / all controls.

SLA Management

Set a resolution target for each ticket priority. The dashboard tracks whether your team meets these targets.

Setup:

  1. Open Settings and find the Ticket SLAs card (owners and admins)
  2. Turn on Enabled and enter a resolution target in minutes for Urgent, High, Medium and Low. Leave a field blank for no target
  3. Click Save SLA Settings. New tickets take the new targets, existing tickets keep their due dates

A ticket past its target shows a BREACHED badge and sends the ticket.sla_breached webhook. The clock pauses while a ticket is Waiting on customer.

Results:

Results are in Reports, on the Tickets tab, for the period you pick. First Response Time is shown there as an average.

  • Compliance Rate - Percentage of tickets meeting their target
  • SLAs Met - Number of tickets resolved within the target
  • SLAs Breached - Number of tickets that went past the target
  • At Risk - Tickets due within 24 hours

Use case: Set a resolution target of 240 minutes (4 hours) for Urgent tickets. If Compliance Rate drops below 90%, investigate staffing during peak hours.

Business hours:

In Settings, in the Ticket SLAs card, turn on Count only business hours and set a start time, an end time, a time zone, and your working days. SLA targets and the response and resolution times in reports then count only those hours. A ticket opened at 18:01 and answered at 09:01 on the next working day counts as 1 minute. With 09:00 to 18:00, a target of 540 minutes is one working day.

You can also set an optional break, such as 13:00 to 14:00. Time in the break is not counted.

Plan: SLA Management is available on every plan.

Customer Satisfaction (CSAT) Surveys

Measure how satisfied customers are with your support by automatically sending feedback surveys after tickets are resolved.

Setup:

  1. Open Help Desk, then Satisfaction
  2. Turn on the switch beside Survey Settings (owners and admins). The same switch is Auto-request customer satisfaction rating under Settings, Branding, Email Notifications
  3. When you resolve a ticket, the customer gets an email with a one-click 1 to 5 star rating

Understanding the metrics:

  • Avg Score (1-5) - Mean satisfaction rating across all responses. 4.0+ is generally considered good.
  • Total Responses - Number of customers who completed the survey
  • Response Rate - Percentage of resolved tickets where the customer submitted feedback
  • NPS Score (-100 to +100) - Net Promoter Score calculated from ratings. Scores above 0 are positive; above 50 is excellent.

Plan: CSAT Surveys are available on every plan.

Slack, Microsoft Teams and other tools

Send dashboard events to the tools your team already uses. Microsoft Teams and Slack receive ticket, device and alert notifications as they happen.

How to connect:

  1. Open Settings and find the Integrations card (owners and admins)
  2. Paste the channel webhook URL into Slack Webhook URL or Microsoft Teams Webhook URL. In Teams, create the URL with the Workflows template called Post to a channel when a webhook request is received
  3. Tick the events under Events to send
  4. Click Send test, then Save Webhook Settings

Any other tool that accepts webhooks gets the same events as JSON, signed when you generate a secret. See Webhooks.

Plan: Slack, Microsoft Teams and webhooks are available on every plan.

Multitenancy

Manage multiple isolated organizations (tenants) under a single parent console. Each tenant has its own devices, team members, and tickets. A team member can be assigned to one tenant or to several, and sees only the tenants they are assigned to. Members not assigned to any tenant see all of them.

Creating a tenant:

  1. Open Devices, then Tenants, click New Tenant and enter the organization name, plus an optional admin contact email
  2. Open the tenant and assign existing team members and devices to it. A member who already belongs to another tenant can be added too, and then sees both. Removing a member from a tenant takes that tenant away at once. Removing a member's last tenant makes them see all customers, so the dashboard asks you to confirm it first. A tenant cannot be deleted while it is the only tenant of any member: move those members to another tenant first. When you invite a new team member, you can pick the customer in Add Team Member
  3. Set each member's tenant role: Tenant Admin, Member, or Viewer. The tenant role limits what the member can do in that tenant; a Viewer is read-only there. A member in several tenants gets the most limited of their tenant roles in all of them

Use the Tenant box at the top of the side menu to work in one tenant, or pick All tenants.

What gets isolated per tenant:

  • Devices and device groups
  • Team members and roles
  • Tickets and session history
  • Branding
  • Access and device policies, and deployments

Ideal for: MSPs managing multiple client organizations, enterprises with regional offices or subsidiaries, and holding companies needing separate environments per business unit.

White-label per tenant:

  • Branding: each tenant can carry its own company name, logo, colors, and support email (Tenant detail, Branding tab). Blank fields inherit your account branding. Tenant branding is applied to ticket and invite emails for that tenant.
  • Customer portal: each tenant can have its own support page, turned on with the Customer portal switch in the tenant's Branding tab. It shows the tenant's branding, and every request sent from it lands in that tenant. A customer who asks for their requests there sees only the tickets, company tickets and devices of that tenant. The suggested link name ends in four random characters, which makes it hard for other customers to guess. The portal follows your account's portal link lifetime, and only the account owner or an admin who is not limited to a tenant can turn it on or rename it. Each tenant portal has its own switch: turning off your account's customer portal does not turn off tenant portals. Require sign-in is set once for the account and applies to tenant portals too.
  • Custom builds: assign a branded client build to a tenant. With auto-enroll, every device that installs it joins that tenant automatically, so you can hand each client one installer.
  • Contacts: contacts can be shared account-wide or assigned to a tenant; tenant-scoped technicians see shared contacts plus their own tenant's.
  • Usage reports: the Usage Report card in the Multitenancy tab rolls up devices, sessions, session time, file transfers, exec commands, and tickets per tenant, with a CSV export for client rebilling. Pick a month or a preset: This week, Last week, This month, Last month, This year or Last year. With Session Notes enabled the report also splits billable time from total session time and counts session notes per tenant. Past reports keep each session with the tenant it had at the time, even if the device moves later.
  • Client reports: every tenant row in the Usage Report has a Client report link. It opens a page for that one client and period with your company name, logo and colour, the devices, the remote sessions with notes and billable flags, the tickets, and the transfer and command totals. Use Download PDF to save it and send it to the client.

Plan: Multitenancy is available on the Enterprise & MSP plan.

Unattended Easy Access

Connect to your managed devices without typing a password. When Easy Access is on for a device, you connect from the dashboard without any password stored on the device.

Important: make sure Easy Access is on in Settings

Easy Access works only when it is on in two places: for the device in the dashboard, and in the HopToDesk app on the device, under Settings, then Security. If it is off in either place, the connection falls back to the device password. On a device linked to the dashboard, the app's switch can follow the dashboard and show as greyed out. Then turn Easy Access on for the device in the dashboard.

How to set up unattended access in HopToDesk

How to turn it on

  1. In the dashboard, click the device name, then under Access turn on Easy Access
  2. On the device, open HopToDesk, then Settings, then Security, and check that Easy Access is on
  3. Connect from the dashboard as usual; Connect, Web Connect, File Transfer and Remote Terminal authorize automatically and every connect is audit-logged

Many devices at once

  • Onboard a fleet: a fleet with Easy Access on turns it on, in the dashboard and in the app, for every machine that installs with its token. See Onboard a fleet.
  • Custom Client Builder: lock Easy Access On under Advanced Options, Hard-locked settings. Every device that installs the build gets it on, in the app and in the dashboard.
  • Devices screen: select devices and click Turn on Easy Access.

Account Access Only: With Easy Access on, you can also turn on Account Access Only for a device. The device then refuses every connection by ID and password, including its permanent password, access links, and technicians from other HopToDesk accounts. Only Easy Access sessions from your dashboard get in. While it is on, the app on the device hides Unlink, and Android phones show dots instead of the one-time password. It works on Windows, macOS, Linux and Android devices.

Plan: Easy Access is available on the Business plan and above. On the Enterprise & MSP plan it can additionally be gated by conditional-access policies and connection approvals.

Vendor Access Requests

Let a vendor ask for access when they need it and approve with one click, instead of creating links by hand. Open the contact in Contacts, turn on Vendor access, tick the devices this contact may request (only devices with Easy Access enabled are offered), and share the personal request link.

  1. The vendor opens their request link, picks a device and sends the request
  2. Owners and admins get an email and a live dialog in the dashboard: Allow for 1 hour up to 7 days, Deny, or Later
  3. Allow creates an Access Link for that device and emails it to the vendor, who connects from the browser
  • A request expires after 30 minutes if nobody answers
  • Pending requests also appear under Vendor requests in the Contacts header
  • New link replaces the contact's request link; the old one stops working
  • Every request, approval and denial is recorded in the audit trail

Plan: Business plan and above, owners and admins.

Guest Password (desktop client)

For a helper who connects with the HopToDesk app rather than through a link, the client can hold a second password. In the client, open Settings, then Security, then Guest Access, and set the guest password and a time to answer (30 seconds up to 10 minutes). Someone connecting with the guest password sees "Please wait for the remote side to accept" while the device shows a countdown on its connection prompt. The person at the device can accept or dismiss. If nobody answers before the time runs out, the guest is turned away. To let a helper in when nobody is at the device, for example a vendor who works on a server after hours, tick "Let the guest in if nobody answers in time" in the same dialog. The guest then gets in when the time runs out, unless someone dismisses the request first. Older versions of the app have no checkbox and always let the guest in, and a guest password set in an older version keeps doing so after an update until you clear the checkbox. Your permanent password keeps working as before, Account Access Only still refuses guests, and the guest password is never baked into a custom build.

Credential Vault

Store privileged device credentials in an encrypted vault with checkout tracking. Technicians request a credential when they need it, every checkout is recorded in the audit trail, and approval-gated connect can require a manager sign-off before a session to a sensitive device starts.

Open Settings, then Security, then Credential Vault, and click Add Credential.

  • Encrypted at rest; values are never shown in device lists
  • Checkout history shows who accessed which credential and when
  • Pairs with approval-required access policies for privileged device groups

Plan: The credential vault and approval-gated connections are available on the Enterprise & MSP plan.

Compliance Pack (Audit Retention, SIEM, Reports)

Operational compliance tooling for audits and security reviews. This is separate from the Compliance Readiness Tracker, which is a self-assessment checklist.

Open Reports, then Compliance, and scroll to Audit Log Streaming & Retention. Enter the endpoint, pick a format (Generic JSON, Splunk HEC or NDJSON / Elastic), tick Enable streaming, click Save, then Send Test Event. Set Keep audit log for, or leave it blank to keep it forever. Audit Report Export downloads a CSV for a date range.

  • Audit retention: admin activity is kept with no time limit on every plan. On Enterprise & MSP you can set how many days to keep it
  • SIEM streaming: stream admin activity and session events to your SIEM or any webhook endpoint in near real time
  • Compliance reports: generate periodic reports of account activity, access changes, and session history for auditors

Plan: Custom retention, SIEM streaming, and report generation are available on the Enterprise & MSP plan.

Migrating from TeamViewer, AnyDesk, Splashtop, ScreenConnect, or Zoho Assist

Import your exported device list and roll your fleet over to HopToDesk without tracking spreadsheets. Found under Deployment, then Import devices.

How to switch from TeamViewer or AnyDesk to HopToDesk
  1. Export your device list as CSV from your current tool: the TeamViewer Management Console, the AnyDesk address book, the Splashtop Business console (Computers, then Export), ConnectWise ScreenConnect (the Access session list report export; the machine name column is used as the device name), or Zoho Assist (Unattended Access, then Manage Devices, then Export). Include the device name and group columns where available; any other CSV with a device name column also works
  2. Upload it under Deployment, then Import devices; the format is detected automatically
  3. Each imported group becomes a fleet policy with its own enroll link; share the link or push the installer with your existing tools
  4. Imported machines are checked off automatically as devices with matching hostnames enroll, so you always know what is left to move

Plan: Migration import is available on the Business plan and above.

IP Allowlist

Restrict your dashboard to approved networks. Add IP addresses or CIDR ranges at the account level, or per team member, and sign-ins and requests from anywhere else are rejected.

Configured under Settings. Security basics like the IP allowlist are included on every plan. On the Enterprise & MSP plan, an IP Restriction access policy also limits where your team can use the dashboard and connect from it. See Conditional Access Policies.

Home and mobile connections can get a new address. Add a range, such as 203.0.113.0/24, so that a change does not lock you out.

If the owner is locked out:

  • When the account owner signs in from a network that is not on the list, the sign-in page shows Email me a link to add this network.
  • Open the link on the same network within 15 minutes. If two-factor authentication is on, enter a code from your authenticator app or a recovery code.
  • The network is added to the allowlist: the exact address for IPv4, or its /64 range for IPv6. The change is written to the activity log.
  • The link is for the owner only. Team members ask the owner to add their network.
  • An owner without two-factor authentication cannot use the link for 7 days after a password reset by email.

Billing & Subscription

Manage your plan, monitor usage, and view billing history from the Billing page.

Available Plans

  • Free: No credit card, no time limit. Up to 3 devices, 2 team members, unattended access, ticketing with SLA targets and CSAT surveys, contacts, basic reports.
  • Pro (from $15/mo): 120 to 350 devices, unlimited team members, branding, SSO login, basic reports.
  • Business (from $49/mo): 500 to 2,000 devices, unlimited team members, unattended Easy Access, time-limited shareable access links, verified technician identity, zero-touch enrollment, TeamViewer, AnyDesk, Splashtop, ScreenConnect and Zoho Assist migration import, deployments, device policies, SSO Connect, advanced reports, and organization controls such as compliance tracking and custom roles.
  • Enterprise & MSP: Custom plan for larger fleets, scaling to unlimited devices. Adds multi-tenant isolation with per-tenant white-label branding and usage reports, conditional access policies, approval-gated sessions and the credential vault, audit retention with SIEM streaming and compliance reports, and directory sync with SCIM. Contact us for pricing.

Usage Tracking

The Billing page shows your current usage for:

  • Devices: How many devices you've added vs. your plan limit
  • Team Members: Active team members vs. your plan limit

Reaching the Device Limit

  • New devices: When your account has as many devices as your plan allows, new devices are not added. Remove a device or move to a larger plan size to make room.
  • Removed devices on the Free plan: A device you remove keeps its slot for 24 hours after removal. Emptying Trash does not free the slot sooner.
  • More devices than your plan allows: This can happen after a downgrade or a failed payment. The devices you added first stay active. The others stay in your list but are locked: their status is hidden, and you cannot connect to them until you upgrade or remove other devices.

Scaling beyond Business

Need more than 2,000 devices? Our Enterprise & MSP plan scales to unlimited devices, with custom pricing for larger fleets. Contact us to set it up.

Managing Your Subscription

  • Free trial: On the Billing page, Try free for 7 days starts a trial of Pro or Business, once per plan, with no card. When a trial ended and you need more time, use Request a 30-day evaluation.
  • Redeem Credit Code: Enter a code from us to upgrade your account.
  • Upgrade: Click the upgrade button on a higher plan to switch immediately
  • Change size: On your plan card, Change size picks another device count.
  • Cancel: The account owner clicks Cancel Subscription on the Billing page and tells us why. The plan stays active until the end of the paid period.
  • Resume: If you cancelled, you can resume your subscription before it expires
  • Payment Method: Update your card or view your payment portal via the links on the Billing page
  • Failed payment: If a renewal charge fails, we email you and your account moves to the Free plan about 24 hours later. Click Pay now on the Billing page and enter your card again. When the payment goes through, your plan comes back.
  • Billing History: View past charges and payment events at the bottom of the page

Tip: You can change plans at any time. Upgrades take effect immediately, and you'll be prorated for the remaining billing period.

AI Assistant & MCP

AI agents like Claude can connect to your HopToDesk devices using the Model Context Protocol (MCP). This allows AI agents to take screenshots, move the mouse, click, type text, and interact with GUI environments, capabilities that SSH cannot provide. Use cases include automated QA testing, visual monitoring, and hands-free desktop workflows.

In the dashboard itself, the built-in AI Assistant opens from the AI Assistant button in the top bar on every screen, and from a device's detail view or a ticket with that context preloaded. Ask it for recurring work, or for an automatic response to an alert, and it drafts a scheduled runbook, an auto-approve rule or an alert rule as a proposal: owners and admins review those under Automation in the Runbooks, Rules and Alert rules tabs, and nothing the AI proposes runs until a person approves it. It can also suggest alert rules when your team keeps running the same fix by hand after the same kind of alert.

The AI Assistant is paid from a prepaid balance, separate from your plan. Add funds with the Add Funds button in the AI Assistant panel or under Settings. Most tasks cost about $0.05, and each task shows its price before it runs. You never pay more than that price, and a task that needs less costs less. A Pro or Business account that turns the AI Assistant on and has at least one device gets $5.00 of free credit once, to try it. Free accounts and accounts on a free trial do not. Alert rules, runbooks and other automations use no credits, and AI apps you connect over MCP, such as Claude or ChatGPT, run on your own AI account.

How to use the HopToDesk AI Assistant

AI Fix Runs on Tickets

When a ticket has a linked device, an Ask AI to fix button appears on it. Press it and the AI Assistant works the ticket for you: it reads the request, diagnoses the device, applies low-risk fixes, and checks the result.

  • You watch it work: every operation the AI runs appears on the ticket as an internal note the moment it happens, and the Automation screen's History tab keeps a permanent command record.
  • Risky operations never run on their own. They appear as Approve / Reject prompts on the ticket and wait for an owner or admin.
  • Every run ends with a verdict (fixed, needs approval, needs a human, or device unreachable) and a drafted customer reply that you review and send; the AI never emails your customer directly.
  • The feature is off by default. An owner or admin enables the AI Assistant, accepts its terms, and turns on "AI may act on devices from tickets" in the AI Assistant panel. Runs are billed from the AI wallet, about $0.25 each, shown before you confirm.
  • Auto-triage new tickets, a switch in the AI Assistant panel, gives each new ticket an AI draft reply and a suggested priority from your AI balance. Daily budget for automatic work caps what the assistant spends each day on work it starts by itself.

Plan: Business.

AI in an open session

With a remote session open, the AI Assistant can look at the remote screen, click, type, press keys and set the clipboard there, for example to walk through a settings screen.

  • An owner or admin turns on AI may see and control open sessions in the AI Assistant panel. It is off by default.
  • Screenshots of the session go to the AI service, so turn it on only where that is acceptable.
  • The computer with the session window must be linked to your dashboard and run the latest HopToDesk app.

Plan: Pro and Business.

What is MCP?

The Model Context Protocol (MCP) is a standard way for AI agents to use outside tools. HopToDesk works as an MCP server, so any MCP-capable agent can use its desktop tools, either on the same computer or on any device enrolled in your dashboard.

Use it from your AI app

Claude, ChatGPT, Cursor and other AI apps can reach your computers. See www.hoptodesk.com/connect for the short version.

  • ChatGPT: HopToDesk is in the ChatGPT plugin directory. Add it there and sign in. Accounts in the EU region add HopToDesk by hand with their own address, from the Use HopToDesk from your own AI app card.
  • No account yet? Your AI agent can set one up. We email you one link and you approve with one press. An existing account signs in and types the code the agent shows.

Plan: MCP works on every plan. Device listing and hands-on tools are on every plan, fleet commands, tags and file transfer tools on Pro and Business, and the rest on Business.

Setup: Local Agent (Same Machine)

Use this when the AI agent runs on the same computer as HopToDesk. No dashboard enrollment or API key needed.

  1. Download and install HopToDesk from hoptodesk.com
  2. Add this to your AI app's MCP config and replace the path with the location of the HopToDesk program. No key is needed.
    {
      "mcpServers": {
        "hoptodesk": {
          "command": "/path/to/hoptodesk",
          "args": ["--mcp"]
        }
      }
    }
  3. Verify the connection: ask your AI agent to take a screenshot or list windows

For the WebSocket option, see the Help Center.

Setup: Remote Agent (Via Dashboard)

Use this when the AI agent needs to reach a device on a different machine. Commands are relayed securely through the HopToDesk dashboard.

  1. Install HopToDesk on the target device(s) and enroll them using an invite link from the Devices screen
  2. Create an MCP API key: open Settings, find the Use HopToDesk from your own AI app card and click Generate MCP API Key (owners and admins). The address shown holds the key, so treat it like a password
  3. Connect your AI agent to the MCP endpoint. One command for Claude Code:
    claude mcp add --transport http hoptodesk https://dashboard.hoptodesk.com/mcp \
      --header "Authorization: Bearer YOUR_API_KEY"
    Or the equivalent JSON config for any MCP client that supports Streamable HTTP:
    {
      "mcpServers": {
        "hoptodesk": {
          "type": "http",
          "url": "https://dashboard.hoptodesk.com/mcp",
          "headers": { "Authorization": "Bearer YOUR_API_KEY" }
        }
      }
    }
    Accounts in the EU region use https://eu.dashboard.hoptodesk.com/mcp in both places.

    Claude Desktop and claude.ai: in Claude, open Settings, then Connectors, then Add custom connector, name it HopToDesk and paste the address. Claude connects from Anthropic's servers, so an IP allowlist on your account must allow them.

  4. Let the agent discover your fleet: fleet-level tools (device and tag listing, fleet commands and their history) are answered by the dashboard. All other tools run on a specific device via its device_id argument. Your AI app lists the tools when it connects
  5. Fleet operations follow your approval policy: fleet commands respect the same approval and auto-approve rules as the Fleet Management screen, so commands can be held for a human to approve in the dashboard

What AI apps may do

In Settings, the AI permissions card sets what connected AI apps may do. Only the account owner can change it, on the Business plan.

  • AI actions on devices: Full lets AI apps use every device tool. Approved operations only lets them read and look, and each predefined operation waits for an owner or admin in Automation, Approvals.
  • AI access links: Off, Ask first or Allowed. Allowed lets an AI app create a link without asking, for 24 hours at most, only on computers with the tag you choose, and 5 a day at most. Every owner and admin gets an email with a Revoke button for each link.
  • Export AI activity: downloads the record.

The Connected AI apps card lists apps signed in to this account. Revoke one to sign it out everywhere.

Security

The local setup above runs on that computer and needs no key. The WebSocket option accepts connections from 127.0.0.1 only and needs the token HopToDesk writes on that computer. Remote connections need an API key with the mcp scope, which you can revoke at any time from Settings, in the Use HopToDesk from your own AI app card. All remote traffic is encrypted with TLS, one API key cannot reach another user's devices, and MCP does not change how people connect for remote support.

Troubleshooting

  • Cannot connect locally: Make sure the path points to the HopToDesk program.
  • Cannot connect remotely: Verify the API key has the mcp scope and has not expired or been revoked. Ensure the target device is online (green dot in the Devices tab).
  • Commands not reaching device: The device must be enrolled in your dashboard account and showing as online. Check the device_id is correct.
  • Screenshot returns empty: On some headless Linux servers, a display server (X11/Wayland) must be running for screenshots to work.
  • Second monitor: the screenshot tool captures the first display unless you pass a display index (0 is the first, 1 the second). Crop coordinates are relative to that display.

Tip: You can manage MCP API keys from Settings, in the Use HopToDesk from your own AI app card: setup snippets and key management.

Fleet Management

Manage one to unlimited devices from the dashboard. Issue a command once, let it target the right machines, and track progress device-by-device. Fleet Management is built on four composable building blocks: device tags, auto-approve rules, fan-out dispatch, and scheduled runbooks. On the Business plan, the script library adds your own scripts.

Plan: device tags and fan-out are on Pro and Business. Auto-approve rules, scheduled runbooks, alert rules, scripts and Backstage are on Business.

How to run a command on many computers at once

Remote command execution is off until you turn it on under Automation in the Remote Exec tab: one account switch, an hourly rate limit, and per-device enablement with enable or disable all. Device tags are managed at the bottom of the Devices screen.

Prerequisites

  • Turn on remote execution in Automation, Remote Exec, for the account and for the devices
  • Devices need a recent HopToDesk app
  • Owner role required to manage global config and auto-approve rules, and to approve scripts; owner or admin for tags, fan-out, runbooks and running scripts
  • Optional: the AI Assistant can drive all of this in plain English

1. Device Tags

Tags are flat labels you attach to devices. A device can have many tags. Use them to group devices by role, location, OS, customer, or any dimension that matters for operations.

Plan: device tags are on Pro and Business.

Setup

  1. Open Devices and select a device.
  2. In the Tags field, type a tag name and press Enter. Tag names are normalized to lowercase, with only a-z, 0-9, -, _, and : allowed (max 64 chars).
  3. Repeat for each device. A device can hold up to 32 tags.

Naming conventions that work well

  • By role: web, db, workstation, kiosk
  • By environment: prod, staging, dev
  • By location: office-nyc, office-london, home
  • By OS: win, mac, linux
  • By customer: client:acme, client:contoso

Tip: a device can belong to all of these at once. A server might be tagged linux, prod, web, office-nyc, client:acme, then any of those tags can target it.

2. Auto-Approve Rules

By default, destructive commands (reboot, kill process, clear temp files) need human approval before they run. Auto-approve rules let owners pre-authorize specific commands for specific people on specific devices, so routine work doesn't stall in the queue.

Plan: auto-approve rules are on Business.

How a rule matches

A rule has three filters. All three are ANDed together. An empty filter means "match anything."

  • Role: owner, admin, member, viewer, or blank for any role
  • Operation: exact name (restart_hoptodesk), category glob (diagnostics:*), or * for any op
  • Tag: the device must have this tag (blank matches any device)

Rules are evaluated in priority order (lowest number first). The first match wins and its action (approve or deny) is applied. If nothing matches, the default approval flow runs.

Setup

  1. Open Automation, then the Rules tab (owner only).
  2. Click New Rule. Give it a descriptive name like "Admins auto-approve diagnostics on servers".
  3. Pick role (or leave blank), operation pattern, and tag. Set action to approve or deny.
  4. Set priority: 10-50 for deny rules that must win, 100+ for allow rules. Lower fires first.
  5. Enable the rule and save. It applies to all new commands immediately.

Recommended baseline

Priority 10: DENY "reboot_device" on tag "prod"  (any role)
Priority 20: DENY "kill_process" on tag "prod"    (role=member)
Priority 100: APPROVE "diagnostics:*" on any tag (role=owner)
Priority 110: APPROVE "diagnostics:*" on any tag (role=admin)
Priority 120: APPROVE "diagnostics:*" on tag "lab" (role=member)

This gives owners/admins frictionless diagnostics everywhere, lets the help desk run diagnostics on lab machines, and hard-blocks accidental reboots of production boxes.

3. Fan-Out: One Command, Many Devices

Fan-out takes an operation and a target (tags, device list, or everything) and runs it on every matched device in parallel. You get back a single job_id with aggregated progress, plus a per-device breakdown so you can see exactly what happened where. Update devices on the Builds page is a fan-out too: it shows up in the job history as update_client, but it is started only from that page, so it is not in the operation list here.

Plan: fan-out is on Pro and Business.

Target kinds

  • tags: union of all devices that have ANY of the listed tags
  • devices: explicit list of device IDs
  • all: every exec-enabled device on the account

Only devices that are exec-enabled and not deleted are included. A single fan-out can cover your whole fleet, up to 500 devices per job (Enterprise & MSP accounts: 1,000 per job). Narrow the target with tags if you hit the cap.

Progress shows live on the job, and the History tab in Automation keeps the final status. Click any job to see the per-device status table.

Cancel a running job

Admins can cancel any in-flight fan-out. Pending commands in the approval queue are rejected immediately; commands already running on a device finish naturally (you can't un-send a command that's mid-flight).

4. Scheduled Runbooks

A runbook is a saved fan-out that re-runs on a schedule. Perfect for nightly hygiene, weekly patches, or hourly health checks. A runbook starts within a few minutes of its scheduled time.

Plan: scheduled runbooks are on Business.

Setup

  1. Open Automation, then Runbooks and New runbook.
  2. Pick the operation (e.g. disk_usage, clear_temp_files, run_update_check).
  3. Pick the target: tags (recommended), explicit device list, or all.
  4. Pick the cadence:
    • Sub-daily: interval in minutes (min 5). Runs every N minutes from creation.
    • Daily or multi-day: set interval to 1440 (daily), 4320 (every 3 days), etc., plus anchor hour/minute in UTC. Runs at the specified wall-clock time.
  5. Save. The first run is scheduled based on the cadence; subsequent runs roll forward automatically.

Runbook behavior

  • Runbooks follow your approval rules like any fan-out. An operation that needs approval, such as clear_temp_files, waits in Automation, Approvals on every run unless an auto-approve rule covers it. Add the rule before you rely on a schedule.
  • Each run appears in History next to manual fan-outs.
  • Disable a runbook any time by toggling Enabled off. The row stays; its schedule just pauses.
  • Use Run Now to trigger an ad-hoc run without waiting for the schedule, handy for testing.

5. Scripts

The script library holds your own PowerShell, cmd, sh and bash scripts. You save a script once, the account owner approves it, and then you run it on one device, on a tag or on all devices. Scripts are on the Business plan, under Automation in the Scripts tab.

How to run your own scripts on many computers

Setup

  1. The account owner opens Automation, then Scripts, turns on Allow scripts on this account and clicks Save.
  2. Make sure remote execution is on for the account and for the devices (Automation, Remote Exec).
  3. Click + New script. Give it a name, pick the shell, set a time limit (1 to 30 minutes) and paste the script. Click Save draft.
  4. The account owner opens the script and clicks Approve on the draft version.
  5. Click Run, pick devices, tags or all exec-enabled devices, and click Run. The results and the output of each device show below, and in the History tab.

Script behavior

  • Owners and admins save and run scripts. Only the account owner approves a version. Saving, approving and running need two-factor authentication on your login.
  • Each save makes a new draft version. A run always uses the approved version, and approving a new version replaces the old one. The version list shows who wrote and who approved each version.
  • Turn on the Two-person rule if the owner should not approve a version they wrote themselves.
  • Scripts run with full system rights: SYSTEM on Windows, root on macOS and Linux. PowerShell and cmd scripts run on Windows devices; sh and bash scripts run on macOS and Linux devices. Devices that do not match the shell are skipped.
  • A run on more than 25 devices asks you to type the number of devices to confirm. The owner gets an email for each approval and for runs on more than 25 devices.
  • Runs follow your approval policies, auto-approve rules and the hourly command limit, like any other fan-out.
  • Keep passwords and keys out of scripts. The editor warns you about lines that look like one.
  • Turning the library off stops runs that have not started yet.
  • Devices need the current HopToDesk app. An older app shows "Update HopToDesk on this device to run scripts."

6. Backstage

Backstage is one page for one device. A technician fixes the device in the background while the person at the device keeps their screen. Open it from the device menu (the three dots on a device row), then Backstage.

What is on the page

  • Processes: the running processes with CPU and memory, and a Stop button on each row.
  • Installed apps: the installed software with versions.
  • Services: Windows services, Linux systemd units or Mac launchd agents, with their state and a Restart button. On a Mac, restart works for the user's own agents; system services need an administrator on that Mac.
  • Event logs: the last 50 entries of the System or Application log, filtered to errors, warnings or everything. On Linux this is the journal; on a Mac the unified log of the last 15 minutes.
  • Run saved script: run one of your runbooks on this one device. Scripts from the script library run from Automation, Scripts.
  • File Transfer and Remote Terminal open the HopToDesk app on your computer for that device. Remote Terminal must be enabled on the device (a device policy can turn it on).

Good to know

  • Remote commands must be on for the account and for the device (Automation, Remote Exec).
  • Stop and Restart follow your approval rules. A held action shows "Sent for approval" until an owner or admin approves it under Automation, Approvals.
  • Every list load is one remote command and counts toward the hourly command limit.
  • Services, Event logs and Remote Terminal need the current app version on the device. An older app shows "Update the HopToDesk app on this device".
  • Each remote session also has a session record: the session row in the device Session Log or in a ticket opens to show the file transfers and remote commands of that session.

Plan: Business.

End-to-End Setup Example

Here's the full path from a freshly-enrolled account to a nightly cleanup job running across 50 workstations:

  1. Turn on remote execution. Open Automation, Remote Exec. Turn it on for the account (default rate limit is 30 commands/hour) and enable it on your devices.
  2. Tag the devices. Bulk-tag your 50 workstations with workstation and your office tag (e.g. office-hq).
  3. Write an auto-approve rule. Owner auto-approve maintenance:* on tag workstation, priority 100. This lets the runbook proceed unattended.
  4. Create the runbook. Operation clear_temp_files, target tag workstation, interval 1440, hour 3 (3am UTC).
  5. Verify. Click Run Now. Watch the progress stream. Drill into the job in history to confirm every device completed.
  6. Leave it running. Tomorrow at 03:00 UTC the 50 devices clean up temp files in parallel. You get a single job row in history to scan each morning.

Use Cases

Fleet-wide health snapshot

Problem: You manage 300 devices for 12 clients. You want a morning report on disk usage.

Solution: Daily runbook, operation disk_usage, target all, 07:00 UTC. Read the per-device results over coffee.

Incident response: restart a stuck service at one site

Problem: The NYC office reports every HopToDesk agent stopped responding after a network blip.

Solution: Fan-out restart_hoptodesk at tag office-nyc. With an auto-approve rule for admins on that tag, 40 devices restart in parallel without individual clicks.

Tiered help desk permissions

Problem: Tier-1 techs should run diagnostics but never reboot or kill processes. Tier-2 (admins) can do more.

Solution: Two rules: approve diagnostics:* for role member; deny everything else by omission. Admins fall through to the default approval flow for destructive ops, which an owner can approve from the queue.

Compliance: quarterly software inventory

Problem: You need an installed-software list across the fleet for audit.

Solution: Ad-hoc fan-out of installed_software at target all. Export the fan-out job's per-device output as your audit artifact.

Investigate a slow device with the AI Assistant

Problem: A user complains their laptop is "unusably slow."

Solution: In the AI Assistant panel, pick the device and ask "investigate high resource usage." The AI Assistant checks the device and summarises the culprit. No fan-out needed for a single-device investigation.

Weekly DNS cache flush on flaky workstations

Problem: One tagged group of workstations has chronic DNS issues that a flush fixes.

Solution: Weekly runbook, operation flush_dns, target tag dns-flaky, Mondays 04:00 UTC. Set an auto-approve rule that allows flush_dns on that tag for owners.

Troubleshooting

  • "Remote execution is off" or "No exec-enabled devices matched the target." Turn on remote execution for the account and for the devices in Automation, Remote Exec (owner only), and check that the tag has devices.
  • Command stuck in "running": a device that does not answer within 5 minutes is marked timed out, and the job closes as partial or failed.
  • Auto-approve rule isn't firing: check that the rule is enabled and its priority (lowest fires first).
  • Need to revoke everything immediately: turn off remote execution in Automation, Remote Exec. All in-flight and pending commands are blocked.

Pairs well with the AI Assistant: the AI Assistant panel can drive fleet operations for you in plain English. Ask it "check disk usage on linux-prod tag" and it will fan-out the right operation to the right devices. See the AI Assistant & MCP section for setup.

Android Kiosks

Enroll Android tablets and phones into your dashboard as managed devices. Once linked, the device stays online unattended, even after a reboot, reports its health and accepts agent commands. This is built for stationary, always-on devices: kiosks, digital signage, point-of-sale terminals, and lobby or gym tablets you manage centrally instead of touching by hand.

Prerequisites

  • Install the HopToDesk Android app from Google Play or from hoptodesk.com. From version 1.46.70 both offer remote input control.
  • A dashboard account and an invite code (open Invites to create one).
  • For low-battery and other health alerts: the Business plan.

Which Android build: Play Store or sideloaded APK

There are two Android builds. They share the same dashboard, enrollment, monitoring, and most agent commands. The differences are in the table.

Capability Play Store Sideloaded APK
DistributionGoogle Play, or Play-managed through an EMMSideload, MDM app-push, or auto-enroll custom build
Enroll and stay online unattendedYesYes
Health monitoring (CPU, memory, disk, battery)YesYes
Agent commands (relaunch app, list apps, wake screen)YesYes
Remote screen viewYes (on-device consent)Yes (on-device consent)
Remote screen input (tap and type)Yes, from version 1.46.70, after the person at the device accepts the notice and turns on the HopToDesk Input accessibility serviceYes
AI agent screen and tap commandsNoYes
Device reboot (device owner)NoYes (with ADB device-owner provisioning)
Zero-touch via auto-enroll custom buildNoYes
Zero-touch via EMM managed configurationYesYes
Install experienceStandard store install, auto-updatesUnknown-sources prompt unless pushed by an MDM

Use the Play Store build when you want broad, trusted distribution with automatic updates, you manage devices through an EMM, and you need monitoring, agent commands, and remote screen view and input. This fits most fleets.

Use the sideloaded APK when you need device-owner reboot, AI agent tap commands, or zero-touch enrollment via a baked-token custom build. Push it through your MDM or install it directly. This is the full fleet-control build.

1. Enroll the device

  1. On the device, open the HopToDesk app and go to Settings.
  2. Tap Add to Dashboard, paste your invite code, and tap Link.
  3. Approve the battery-optimization prompt so the connection is allowed to persist.
  4. The device appears under Devices within a minute, marked as an Android device.

Onboarding many devices at once? Use zero-touch mass deployment instead of pasting a code on each one: generate an auto-enroll Android build and push the single APK through your MDM so every device enrolls itself.

2. Keep it online unattended

  • Foreground service: an ongoing notification keeps the connection alive when the screen is off or the app is in the background.
  • Start on boot: after a reboot the device reconnects on its own. On a PIN-locked phone, Android holds this until you unlock the phone once; after that, no need to reopen the app.
  • Best practice: keep always-on devices on a charger, and remove the screen lock to avoid the lock-screen barrier for screen control.

3. Monitor health

  • Each device reports CPU, memory, disk, and battery regularly, shown on the device's health line under Devices.
  • Set a low-battery alert (plus CPU, memory, and disk thresholds) under Settings, Alerts, Health monitoring. Battery alerts fire when a device drops to or below your threshold, so you hear about it before a kiosk dies. Available on the Business plan.

4. Run agent commands

  • Managed Android devices accept remote agent commands: pull device info and health, send navigation actions (home, back, recents), and tap the screen (navigation and tapping by agent command need the sideloaded APK).
  • Use the AI Assistant panel to query a device in plain English, or run a command across a whole tagged group of kiosks at once. See Fleet Management.

5. Remote screen connection (optional, secondary)

Monitoring and agent commands are the primary, fully unattended way to manage a fleet. A live remote screen connection is also available as a secondary tool for visual troubleshooting, but it has stricter requirements.

  • The device must have Input Control (accessibility) and screen capture permissions enabled.
  • Input control and the agent channel survive a reboot and reconnect on their own. Screen capture does not, by default: after a device restarts, Android asks someone to approve the screen-capture prompt again before the screen can be viewed remotely. This is a stock-Android rule, not a HopToDesk one.
  • You can remove that prompt permanently with a one-time USB step per device. See Provision a device for hands-off screen access below.
  • To let only your own technicians connect, turn on Easy Access and Account Access Only for the device in the dashboard, or enroll it through a deployment that has them on. The device then refuses its ID and password, and connections come only from your dashboard.

6. Provision a device for hands-off screen access

Android will not let any app, MDM, or device-owner policy grant screen capture over the air. It can be granted locally, once per device, and it then survives every reboot. Do this while the device is on the bench, alongside imaging, and you never see the capture prompt again.

Connect the device by USB with USB debugging enabled, accept the authorisation prompt on its screen, then run:

adb shell appops set com.hoptodesk.app PROJECT_MEDIA allow
adb shell appops write-settings

The second command matters. Android writes app-op changes to disk lazily, so a device rebooted immediately after the first command comes back with the permission lost. Writing the settings flushes it, and the grant then persists.

Using a custom-branded client? Substitute its own package name. Read it off the device with adb shell pm list packages.

For remote tapping and typing, also enable the app's accessibility service once in Android Settings, under Accessibility. That grant survives reboots on its own.

Finish with the settings that keep a kiosk reachable:

  • Start on boot and Keep screen on, both in the HopToDesk app.
  • Battery optimisation set to unrestricted, and on Samsung devices add the app to Never sleeping apps.
  • A permanent unattended password, so connections do not need approval.
  • No secure lock screen. A PIN or pattern keyguard sets FLAG_SECURE, which makes the remote screen render black and leaves nobody able to unlock it.

Know the limits before a fleet rollout

  • Verified on stock Android 14. Manufacturer builds, Samsung One UI in particular, can behave differently. Prove it on one device of each model before rolling out.
  • It needs one USB connection per device at staging. Intune or another MDM cannot do this step over the air. Everything else, including enrollment itself, deploys over the air.
  • On Zebra and Symbol devices, remote tapping and typing works without the accessibility grant. Screen capture still needs the step above.

Common use cases

  • Digital signage and menu boards
  • Retail and point-of-sale terminals
  • Gym, lobby, and reception check-in tablets
  • Information and self-service kiosks
  • Field and warehouse tablets

FAQ

Do I need the sideloaded APK or the Play Store app?

Either one works for enrollment, persistence and health monitoring, and from version 1.46.70 both offer remote input control.

Does it reconnect after a reboot on its own?

Yes. The device restarts its connection on boot. On a PIN-locked phone, Android holds that until you unlock the phone once; after that it reconnects without opening the app.

Can I remotely view and control the screen unattended after a reboot?

Yes, once the device has been provisioned. Monitoring, agent commands, and input control all come back on their own after a reboot. Screen capture is the exception: out of the box Android asks someone to re-approve the capture prompt after each restart. A one-time USB step per device removes that prompt for good, described under Provision a device for hands-off screen access.

Why is the remote screen black?

Almost always a secure lock screen. A PIN, pattern, or password keyguard sets FLAG_SECURE, and Android blanks captured video while it is showing. Because the screen is black, nobody can see it to unlock it either. Remove the screen lock on kiosk devices, or keep them somewhere the lock never engages.

Will it drain the battery?

The background connection uses little power, and the device reports its own battery level so you can alert on it. For always-on kiosks, keep the device on a charger.

Does this work on iPhone or iPad?

No. iOS does not allow the background persistence or input control this relies on. Managed kiosk devices are Android only.

API and Webhooks

Read your data, create tickets and receive events in your own tools.

API Keys

Generate API keys for programmatic access to your dashboard data via the REST API. Use API keys for automation, custom reporting, or integrating with your own internal tools.

API keys are for reading data on your own schedule, and for creating and updating tickets from your own tools. They are included on every plan. On Business you can also limit a key to chosen MCP tools, tags or devices. Full parameters and response fields for every action are in the API endpoint reference below. If you want HopToDesk to notify your systems the moment something happens, see Webhooks, which are included on every plan.

How to use:

  1. Open Settings, then Security, then API Keys. Click Generate API Key and enter a descriptive name
  2. Select permission scopes to control which data the key can access
  3. Copy the generated key immediately - it is only shown once
  4. Store the key as an environment variable: export HOPTODESK_API_KEY=hdpk_...
  5. Use the key as a Bearer token: Authorization: Bearer hdpk_...

Example request:

curl -H "Authorization: Bearer hdpk_..." "https://your-domain/api?action=getDevices"

Ticket reporting and export:

getTickets and exportTickets accept optional filters (status, priority, assigned_to, tag, archived, created_from, created_to, updated_since) plus limit and offset for pagination. exportTickets adds custom field values, first response times, reply counts, and tags to each row, and returns CSV when format=csv. Pass include_custom_fields=1 to getTickets to get the same custom field values on each ticket. getAgentStats returns per-agent performance metrics and getTicketTimeSeries returns daily created and resolved counts.

curl -H "Authorization: Bearer hdpk_..." "https://your-domain/api?action=exportTickets&status=resolved&created_from=2026-01-01&format=csv"

Available endpoints by scope:

API keys read data, except the devices_write, tickets_write and mcp scopes. Each key can only access endpoints matching its assigned scopes.

  • devices - getDevices, getDeviceStatuses, getDeviceDetails, getGroups
  • devices_write - saveDevicePassword, updateDeviceNotes
  • tickets - getTickets, getTicketStats, exportTickets, getAgentStats, getTicketTimeSeries, getTicketCc
  • tickets_write - createTicket, updateTicketStatus, updateTicketPriority, assignTicket, addTicketReply, addTicketTag, removeTicketTag, setTicketCustomFieldValues, addTicketCc, removeTicketCc
  • sessions - getActivityLogs, exportActivityLogs, getUnattendedLogs, getSessionRecord, getFileTransferLogs
  • contacts - getContacts, searchContacts
  • invites - getInvites
  • reports - getReportStats, getUsageAnalytics, getSecurityReport

Key management:

  • Track usage with the Requests (30d) counter per key
  • Last Used shows the most recent API call for each key
  • Revoke compromised keys immediately - revocation takes effect instantly
  • Create separate keys for different integrations or environments

API endpoint reference

Every call is the same shape. One URL, one action name, your key as a Bearer token. Parameters go in the query string on a GET, or as form fields on a POST.

curl -H "Authorization: Bearer hdpk_..." "https://dashboard.hoptodesk.com/api?action=getDevices&status=online&per_page=50"

Accounts in the EU region use https://eu.dashboard.hoptodesk.com/api instead. An API key only works in the region of the dashboard that issued it.

Responses:

A success returns HTTP 200 and a JSON object holding the fields listed below. A failure returns a non-200 status and always the same shape, so you can handle every error in one place:

{"success": false, "error": "Permission denied", "message": "Permission denied", "code": "plan_required"}

401 means the key is missing, revoked or expired. 403 means the key is valid but its scopes do not cover that action, or the action needs a higher plan. The code field is only present on some errors.

Endpoints:

All parameters are optional unless marked required. A key can only call actions matching its scopes. Dates are YYYY-MM-DD, and days is a lookback window in whole days.

ScopeActionParametersReturns
devicesgetDevicessearch, group_name, status, sort_by, sort_order, page, per_pagedevices, total, page, per_page, total_pages, plan, device_limit, device_count
devicesgetDeviceStatusesnonedevices (device_id, status, last_seen only)
devicesgetDeviceDetailsdevice_id (required)device
devicesgetDeviceHistorydevice_id (required)history
devicesgetGroupsnonegroups
devices_writesaveDevicePassworddevice_id (required), password (empty removes it)has_saved_password
devices_writeupdateDeviceNotesdevice_id (required), notes (required, up to 2000 characters)message
ticketsgetTicketsstatus, priority, assigned_to, tag, channel, company_id, archived, created_from, created_to, updated_since, include_custom_fields, limit (max 1000), offsettickets, total, unread_count, limit, offset, custom_field_keys (with include_custom_fields=1)
ticketsexportTicketssame filters as getTickets, plus format=csv, limit max 10000tickets, total, limit, offset, custom_field_keys
ticketsgetTicketStatsdaysavg_first_response_seconds, avg_resolution_seconds and their formatted forms
ticketsgetAgentStatsdaysdays, agents
ticketsgetTicketTimeSeriesdaysdays, series
tickets_writecreateTickettitle (required, up to 200 characters), description (required, up to 5000 characters), priority (low, medium, high or urgent, default medium), customer_name, customer_email, contact_id, company_name (sets the customer's company when they have none yet), device_id, tags (a list or comma separated, up to 20), custom_fields (field keys to values), cc (up to 10 email addresses, or objects with email and name)ticket_id, ticket_number, contact_id
tickets_writeupdateTicketStatusticket_id (required), status (required: open, in_progress, waiting, resolved or closed)message
tickets_writeupdateTicketPriorityticket_id (required), priority (required: low, medium, high or urgent)message
tickets_writeassignTicketticket_id (required), assignee_id (a team member's user id or email, empty unassigns)message
tickets_writeaddTicketReplyticket_id (required), message (required), type (reply or note, default reply), author (the name shown on the reply)reply_id, email_sent on a reply (false when no email went out, for example when the account has reached its daily email limit; the reply is still saved)
tickets_writeaddTicketTagticket_id (required), tag (required, up to 32 lowercase letters, digits, spaces, _ or -)tag
tickets_writeremoveTicketTagticket_id (required), tag (required)removed
ticketsgetTicketCcticket_id (required)cc (email, name, source, created_at, portal), max
tickets_writeaddTicketCcticket_id (required), email and name, or cc (a list of addresses or objects with email and name)added, cc, max
tickets_writeremoveTicketCcticket_id (required), email (required)removed, cc, max
tickets_writesetTicketCustomFieldValuesticket_id (required), values (required, field keys to values, null clears one)message
sessionsgetActivityLogsuser_id, action_type, start_date, end_datelogs, team_members
sessionsexportActivityLogsuser_id, action_type, start_date, end_date, limit (max 5000), cursorlogs, count, next_cursor
sessionsgetUnattendedLogsdevice_id, start_date, end_date, limitlogs, devices
sessionsgetSessionRecordid (required, a remote session's id from getDeviceHistory). Business plansession, transfers, commands
sessionsgetFileSessionLogsdevice_id, start_date, end_datelogs
sessionsgetFileTransferLogsdevice_id, transfer_type, start_date, end_datelogs
contactsgetContactsnonecontacts
contactsgetContactcontact_id (required)contact, devices, tickets, invites
contactssearchContactsquery (required)contacts, query
invitesgetInvitesnoneinvites
reportsgetReportStatsdaysdays, sessions, devices, tickets, file_transfers
reportsgetSecurityReportdaysdays, stats, failed_logins, login_history, rate_limited
reportsgetUsageAnalyticsdays, tz_offsetdays, daily_usage, hourly_usage, day_of_week, top_devices
reportsgetComplianceReportstart_date, end_date, report_typereport

Paging:

getDevices pages with page and per_page and tells you total_pages. The ticket actions page with limit and offset against total. exportActivityLogs is cursor based: pass the next_cursor it returns until it comes back empty.

The Enterprise & MSP plan adds a read-only enterprise scope over deployments, roles, policies, compliance, CSAT and tenants. Ask us if you need those and we will send the list.

The devices_write scope stores the password a device already has, so team members can connect in one click. It does not change the password on the device, and no API key can read a stored password back. Send it as a POST with a JSON body. Saving a password needs a key that belongs to an owner or admin.

The tickets_write scope creates and updates tickets. Send each call as a POST with a JSON body, for example:

curl -X POST -H "Authorization: Bearer hdpk_..." -H "Content-Type: application/json" -d '{"title": "Printer offline", "description": "The office printer stopped responding", "priority": "high", "customer_email": "user@example.com", "tags": ["printer"]}' "https://dashboard.hoptodesk.com/api?action=createTicket"

A key acts with the role of the team member who created it, so if that member's role cannot manage tickets every write returns 403. A key limited to a tenant only creates and changes that tenant's tickets. A key limited to tags or devices can only create tickets for a device inside that limit and only change tickets linked to one. Anything else, including a ticket with no device, returns 403. A ticket, device or contact that is not in your account, or not in the key's tenant, returns 404. A missing or invalid parameter returns 400, and 429 means you are sending requests too fast or the account has used its monthly ticket allowance.

Everything else happens as if a team member made the change in the dashboard. A reply is emailed to the customer like any reply from your team, a note stays internal, and webhooks, SLA targets, assignment rules and notifications all apply. The activity log records each change with the key's name, and tickets created with a key show as From API in the ticket list. Custom field keys are listed in custom_field_keys when you call getTickets with include_custom_fields=1.

Webhooks

Where an API key lets you pull data on your schedule, a webhook pushes it to you the moment something happens. HopToDesk sends a JSON POST to a URL you choose, so you can forward events into your own systems: a PSA or ticketing queue, a chat channel, an email or messaging API, or an automation platform such as n8n, Make or Zapier.

Plan: Webhooks are included on every plan. Alert events depend on device health alerts, which are on the Business plan.

Setting one up:

  1. Open Settings and find the Integrations panel. Owners and admins can edit it
  2. Paste your endpoint into Webhook URL, then tick the events you want
  3. Click Generate secret if you want each request signed, and store the secret on your receiver
  4. Use Test webhook to send a sample payload before you rely on it
  5. Recent attempts, with response codes and errors, are listed under the delivery log

Events:

  • ticket.created - a new ticket arrives, from any source. Carries ticket_id, ticket_number, title, priority, status, customer_name, customer_email, company_name, device_id, device_name, source, custom_fields, cc
  • ticket.customer_reply - a customer replies. Carries ticket_id, ticket_number, title, customer_name, message_preview, and reopened
  • ticket.status_changed - an agent moves a ticket. Carries ticket_id, title, previous_status, status, changed_by, custom_fields
  • ticket.sla_breached - a ticket passes its SLA due time. Carries ticket_id, title, priority, status, sla_due_at, breached_at
  • alert.fired - a device health alert opens. Carries alert_id, kind, device_id, title, severity, value, threshold, fired_at
  • alert.resolved - that alert clears. Same fields, with resolved_at
  • device.registered - a device enrolls on your account for the first time. Carries device_id, device_name, os, ip_address, registered_at
  • device.online - a device that was offline comes back. Carries device_id, device_name, os, ip_address, last_seen
  • device.offline - a device stops responding. Carries device_id, device_name, os, last_seen

custom_fields maps each custom field key to its value. Agents usually fill custom fields in after a ticket arrives, so they are often empty on ticket.created and filled on ticket.status_changed.

Changing the status of several tickets at once sends one ticket.status_changed event per ticket to the Webhook URL, and one summary message to Slack, Microsoft Teams or Discord. In a very large change, events that could not be sent are listed in the delivery log as not sent.

When one alert check finds several alerts, Slack and Microsoft Teams receive one summary message. The Webhook URL and Discord receive one event per alert. If an address stops answering, the events that could not be sent in time are listed in the delivery log as not sent.

Ticket status and SLA events share one checkbox, so enabling ticket status changes also enables SLA breaches.

A brief network blip does not send device.offline. A device enrolling for the first time sends device.registered rather than device.online.

Payload shape:

{"event": "ticket.created", "timestamp": 1756400000, "dashboard_user_id": "u_...", "data": { "ticket_id": 1234, "title": "Printer offline", "priority": "high" }}

The envelope is always the same four fields. Only data changes per event, so switch on event and read the fields listed above.

Request headers:

  • Content-Type: application/json
  • User-Agent: HopToDesk-Webhook/1.0
  • X-Webhook-Event - the event name, so you can route without parsing the body
  • X-Webhook-Delivery - a unique ID for the event. It stays the same on every retry, so you can drop duplicates
  • X-Webhook-Signature - sent when the account has a signing secret: sha256= followed by the hex HMAC SHA-256 of the raw body, keyed with the secret

Verifying the signature:

Compute the HMAC over the raw request body exactly as received, before any JSON parsing, and compare it with the header in constant time. Reject the request if they differ.

const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
const sig = req.headers['x-webhook-signature'] || '';
const ok = sig.length === expected.length && crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected));

Generating a new secret replaces the old one at once, so update your receiver straight after. Messages to the Slack and Microsoft Teams fields are not signed, because those services do not check signatures.

Good to know:

  • Treat the URL as a secret. Anyone who knows it can post to your endpoint, so use a long unguessable path and check the signature before acting on the payload
  • A timeout, a connection error, 408, 429 and any 5xx are retried twice. Other 4xx responses are not retried. The delivery log shows the final result and how many attempts it took
  • A retry can deliver an event your endpoint already processed, for example after a slow response. Use X-Webhook-Delivery to drop duplicates
  • Your endpoint has 10 seconds to respond. Return 200 straight away and do slow work afterwards
  • Return a 2xx status. Anything else is recorded as a failed delivery

Slack, Microsoft Teams and Discord:

The Slack Webhook URL field is separate. Paste an incoming webhook URL from Slack and the same events arrive as readable chat messages instead of raw JSON. You can use either field or both.

The Microsoft Teams Webhook URL field posts the same events as cards. In Teams, create the URL with the Workflows template called Post to a channel when a webhook request is received.

Discord needs nothing special: paste a Discord webhook URL into the ordinary Webhook URL field and the events are sent in the format Discord expects, as chat messages rather than JSON.