> ## Documentation Index
> Fetch the complete documentation index at: https://mainwp-mintlify-b537ecc3.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Virusdie

> The Virusdie Integration uses Virusdie, a powerful, user-friendly, and professional-grade WordPress virus scanner for your websites. It helps you monitor all your sites directly from your MainWP Dashboard.

## What You'll Learn

* Creating a Virusdie account and connecting the API
* Adding child sites to Virusdie for malware scanning
* Running manual and automated security scans
* Troubleshooting sync file upload errors

***

<div id="addon-data" style={{display: 'none'}} data-title="Virusdie" data-purchase-url="https://mainwp.com/extension/virusdie/" data-pricing-tier="pro" data-bundle="MainWP Pro" data-addon-type="integration" data-version="5.0.1" data-developer="MainWP" data-changelog-url="https://mainwp.com/changelog/mainwp-virusdie-extension/" data-integrates-with="Virusdie" data-owned-by="Virusdie OU" data-privacy-url="https://virusdie.com/rules/privacypolicy/" />

<Info>
  **Integration Add-on** - This add-on extends MainWP to work with Virusdie. It requires a Virusdie account with API access and uploads the Virusdie synchronization file to connected child sites.
</Info>

Check out our other security add-ons:

* [Jetpack Protect](/add-ons/security/jetpack-protect-extension)
* [Jetpack Scan](/add-ons/security/jetpack-scan-extension)
* [Solid Security](/add-ons/security/solid-security-extension)
* [Sucuri](/add-ons/security/sucuri-extension)
* [Vulnerability Checker](/add-ons/security/vulnerability-checker-extension)
* [Wordfence](/add-ons/security/wordfence-extension)

## Virusdie

The [Virusdie Integration](https://mainwp.com/extension/virusdie/) uses Virusdie to scan your sites. Virusdie features an incredibly extensive database and a stack of technologies to detect viruses and threats. Virusdie detects both viruses and website vulnerabilities, which distinguishes it from other antivirus or defender products.

<Note>
  The Virusdie Integration includes the Virusdie freemium model by default. You can use some Virusdie features for free and purchase a Premium license for additional options.
</Note>

Included free features:

* Unlimited sites
* Automated weekly scans
* Email Notifications

## Remove Child Sites from the Virusdie

To remove a child site from your Virusdie dashboard,

<Steps>
  <Step title="Login to your MainWP Dashboard" />

  <Step title="Go to the MainWP > Add-ons > Security > Virusdie page" />

  <Step title="Locate the site that you want to remove" />

  <Step title="Click the Remove Site button">
    <img src="https://mintcdn.com/mainwp-mintlify-b537ecc3/ZH24mRK7Uliy46cr/images/add-ons/virusdie-remove-site.png?fit=max&auto=format&n=ZH24mRK7Uliy46cr&q=85&s=949599cb67204302eb0c534e13892295" alt="Click the Remove Site button" width="1902" height="1174" data-path="images/add-ons/virusdie-remove-site.png" />
  </Step>
</Steps>

**Important Notes:**

After removing a site from the Virusdie, you need to **MANUALLY** delete your unique sync file from the Site Root via (S)FTP.

## Scan Child Sites With Virusdie

<Note>
  On-demand scans require a paid Virusdie plan. When Virusdie identifies the connected account as free, the Add-on hides the **Scan Site** action. Free accounts continue to receive automated weekly scans and email notifications.

  The paid-plan requirement also applies to scans requested through WP-CLI and the REST API. When a scan is requested from any of these entry points on a free account, the Add-on rechecks the Virusdie account plan first and returns:

  * `On-demand scanning requires a paid Virusdie plan.` if the account is on the free tier.
  * `Unable to verify Virusdie scan availability. Please try again later.` if Virusdie did not return a valid account response (for example, a temporary API error or invalid credentials).

  The Add-on also refreshes the account plan each time you open the Virusdie dashboard tab, so plan upgrades or downgrades on your Virusdie account take effect on your next visit without needing to sign out and back in.

  Virusdie can assign plan availability per site, but its API does not provide a read-only per-site check before a scan request. For accounts containing both free and paid sites, **Scan Site** may therefore appear for a site that is not eligible. If Virusdie responds with `Not available for this site`, on-demand scanning is unavailable for that site; this does not mean synchronization failed.
</Note>

With a paid Virusdie plan, request a scan manually:

<Steps>
  <Step title="Login to your MainWP Dashboard" />

  <Step title="Go to the MainWP > Add-ons > Security > Virusdie page" />

  <Step title="Locate the site that you want to scan" />

  <Step title="Click the Scan Site action">
    <img src="https://mintcdn.com/mainwp-mintlify-b537ecc3/84pxMSpVYjnopf4I/images/add-ons/50714a7f2b13.png?fit=max&auto=format&n=84pxMSpVYjnopf4I&q=85&s=584d9096fa38f5c24cf2eea2efbebe42" alt="Click the Scan Site action" width="1902" height="1174" data-path="images/add-ons/50714a7f2b13.png" />
  </Step>
</Steps>

### Scan via WP CLI Command

```bash theme={null}
wp mainwp-virusdie scan <siteid>
```

Replace `<siteid>` with the actual child site ID.

If the connected Virusdie account is on the free tier, or Virusdie did not return a valid account response, the command exits with one of the errors described above (`On-demand scanning requires a paid Virusdie plan.` or `Unable to verify Virusdie scan availability. Please try again later.`).

### Scan via REST API

**URI**

`/wp-json/mainwp/v1/virusdie/scan`

**Method**

GET

**Required Parameters**

* `site_id` - (INT) ID of the child site

**Example Request**

[https://example.com/wp-json/mainwp/v1/virusdie/scan?site\_id=25\&consumer\_key=ck\_b587c54fa39976a2ad47b8faf260de84beb70f5d\&consumer\_secret=cs\_75f7a905fa7ae1243570425ede6be026f4731f9c](https://example.com/wp-json/mainwp/v1/virusdie/scan?site_id=25\&consumer_key=ck_b587c54fa39976a2ad47b8faf260de84beb70f5d\&consumer_secret=cs_75f7a905fa7ae1243570425ede6be026f4731f9c)

**Example Response (free account)**

```json theme={null}
{
  "error": "On-demand scanning requires a paid Virusdie plan."
}
```

The endpoint responds with HTTP 200 and an `error` field in the body when the site cannot be scanned. Check for the `error` key before treating the response as a successful scan request.

## Set Up the Virusdie Integration

<Warning>
  **If you have an existing Virusdie account:** Due to limitations in Virusdie's API, existing accounts created without the Virusdie Integration do not have the required permissions to manage connected sites. Use this integration only if you plan to create a new Virusdie account through the integration Sign-Up form.
</Warning>

To properly set up the Virusdie Integration:

<Steps>
  <Step title="Login to your MainWP Dashboard" />

  <Step title="Go to the MainWP > Add-ons > Security > Virusdie > Settings page" />

  <Step title="Locate the Create a free Virusdie account section, enter your email address and click the Sign-Up button">
    Locate the Create a free Virusdie account section, enter your email address and click the **Sign-Up** button<img src="https://mintcdn.com/mainwp-mintlify-b537ecc3/ZH24mRK7Uliy46cr/images/add-ons/virusdie-signup-form.png?fit=max&auto=format&n=ZH24mRK7Uliy46cr&q=85&s=acd15890272c0c8fd6cea21e58fda6ba" alt="Screenshot of Virusdie Sign-Up form with email field and Sign-Up button" width="1707" height="238" data-path="images/add-ons/virusdie-signup-form.png" />
  </Step>

  <Step title="This will automatically create an account for you, and you will get an email with a one-time password in a few minutes.">
    This will automatically create an account for you, and you will get an email with a one-time password in a few minutes.
  </Step>

  <Step title="After getting the email, go to the Log in to your Virusdie account section, enter your email address and the password you got, and click the Sign In button.">
    After getting the email, go to the **Log in to your Virusdie account** section, enter your **email address and the password** you got, and click the **Sign In** button.<img src="https://mintcdn.com/mainwp-mintlify-b537ecc3/84pxMSpVYjnopf4I/images/add-ons/695736694348.png?fit=max&auto=format&n=84pxMSpVYjnopf4I&q=85&s=0c8c8f2504773dd991eef4b2afcb86e9" alt="Screenshot of Virusdie login form with email and password fields" width="1711" height="310" data-path="images/add-ons/695736694348.png" />
  </Step>

  <Step title="Let the Virusdie Integration retrieve your API credentials">
    Upon successful login, the Virusdie Integration will automatically get your API credentials, and the integration is ready to go.
  </Step>
</Steps>

Now, you are ready to start adding your sites to your Virusdie account.

### Sign Out

If you need to disconnect the integration from your Virusdie account or reset stored credentials (for example, before connecting a different account or recovering from a failed sign-in), use the **Sign Out** button.

When to use it:

* You want to switch to a different Virusdie account
* The integration is stuck with stale or invalid API credentials
* You're following the recovery steps in [the synchronization file upload error guide](/add-ons/security/mainwp-virusdie-extension#troubleshooting-synchronization-file-upload-errors) and need to remove existing credentials before signing in again

To sign out and clear stored connection data:

<Steps>
  <Step title="Login to your MainWP Dashboard" />

  <Step title="Go to the MainWP > Add-ons > Security > Virusdie > Settings page" />

  <Step title="Click the Sign Out button">
    The button is shown after the integration is signed in. Clicking it signs the integration out of Virusdie and removes the stored email, API key, and HMAC key from your MainWP Dashboard.
  </Step>

  <Step title="Sign up or sign in again">
    After clearing the data, you can create a new Virusdie account through the Sign-Up form or sign in to an existing account that has API access.
  </Step>
</Steps>

<Warning>
  Signing out only removes credentials stored in your MainWP Dashboard. It does not delete your Virusdie account or remove any sites already connected to it.
</Warning>

## Add Sites To Virusdie Dashboard

After creating a Virusdie account and connecting the API, you can start adding your sites to your Virusdie dashboard.

### Adding Sites Automatically

<Steps>
  <Step title="Login to your MainWP Dashboard" />

  <Step title="Go to MainWP > Add-ons > Security > Virusdie" />

  <Step title="Locate the Add All Child Sites to Virusdie button and click it">
    Locate the **Add All Child Sites to Virusdie** button and click it <img src="https://mintcdn.com/mainwp-mintlify-b537ecc3/84pxMSpVYjnopf4I/images/add-ons/8a51732041f1.png?fit=max&auto=format&n=84pxMSpVYjnopf4I&q=85&s=daa9af14ade33dd5ee2b36f0d4495efb" alt="Screenshot highlighting the Add All Child Sites to Virusdie button" width="1902" height="1174" data-path="images/add-ons/8a51732041f1.png" />
  </Step>
</Steps>

When sites are added automatically, MainWP Dashboard first registers the domains with Virusdie and downloads your unique synchronization file from the Virusdie API. MainWP Dashboard temporarily stores the file and sends each child site a signed download URL. MainWP Child then downloads the file from the Dashboard and saves it in the child site's WordPress root directory.

This process requires two-way connectivity: MainWP Dashboard must be able to communicate with each child site, and each child-site server must be able to reach the MainWP Dashboard's signed download URL over HTTPS.

Alternatively, if you want to add just some of your sites separately, you can use the **Add To Virusdie** action for all sites that are not found in your Virusdie account.

Now you are ready to start [scanning your sites](/add-ons/security/mainwp-virusdie-extension#scan-child-sites-with-virusdie). If you encounter a synchronization file upload error, see [Troubleshooting synchronization file upload errors](/add-ons/security/mainwp-virusdie-extension#troubleshooting-synchronization-file-upload-errors).

### Adding Sites Manually

Adding sites to the Virusdie account manually, required 3 easy steps:

<Steps>
  <Step title="Add the site to the list in your Virusdie account" />

  <Step title="Upload your unique sync file to the root directory of your child site" />

  <Step title="Set your preferences" />
</Steps>

Full process documentation can be found in this [help document](https://virusdie.com/faq/add/).

## Virusdie Integration API Compatibility

### New Virusdie Users

To use the Virusdie Integration, it is required to have API access. For new users that don't have a Virusdie account, the process of getting the keys is fairly simple. You can use the Signup field, and after getting the email with the one-time password and signing in, the integration will automatically load the keys. With the free account created through the Virusdie Integration, you can add your sites to the Virusdie dashboard to run weekly automated scans and get email notifications. If needed, you can upgrade your account to use premium features at Virusdie.com.

### Existing Virusdie Premium Users

If you already have a Premium Account with Virusdie created without the Virusdie Integration, the connection won't be possible due to restrictions in Virusdie's API. Existing accounts created without the Virusdie Integration do not have the required permissions to manage connected sites. **After confirming with Virusdie, not all accounts have access to their API. If you have an older account, you will want to verify with Virusdie support. Unfortunately, this is out of MainWP control.**

## Troubleshooting synchronization file upload errors

Synchronization file upload errors can occur at two different stages. Use the error shown by the Add-on to determine which connection to check.

### MainWP Dashboard cannot download the file from Virusdie

This case applies when the Add-on shows:

> Unique sync file could not be uploaded. Please upload it manually.

<img src="https://mintcdn.com/mainwp-mintlify-b537ecc3/ZH24mRK7Uliy46cr/images/add-ons/virusdie-sync-file-error.jpg?fit=max&auto=format&n=ZH24mRK7Uliy46cr&q=85&s=6924dfed2b53cf651f1a290a9f9def0b" alt="Screenshot showing error message: Unique sync file could not be uploaded" width="958" height="296" data-path="images/add-ons/virusdie-sync-file-error.jpg" />

The message means Virusdie API authentication failed and MainWP Dashboard could not download the synchronization file. Possible causes include:

* Invalid or stale Virusdie credentials
* An incompatible Virusdie account type because Virusdie limits API access for some accounts

Try these steps:

1. In the Virusdie Add-on settings, use the [Sign Out](/add-ons/security/mainwp-virusdie-extension#sign-out) button to remove current credentials
2. Use the Sign Up function, but use the same email address that is already registered with Virusdie
3. This will trigger the One-Time Password email so that the user will get a new Password
4. Use the Sign In form to sign in with the email address signed up in step 2 and the new password from the email (**Note**: Do not change the password in Virusdie account)
5. After the successful sign-in process, try to add sites again
6. If it fails again, contact the Virusdie team to check the account compatibility or if something else is causing issues with the authentication process

### MainWP Child cannot download the file from the Dashboard

This case applies when the site upload list appears, but individual child sites report `Unauthorized`, `Forbidden`, or another HTTP or download error. At this stage, MainWP Dashboard has already obtained the synchronization file from Virusdie. MainWP Child is trying to download that temporary file from the Dashboard, so resetting Virusdie credentials will not resolve a per-site `Unauthorized` response.

Likely blocking layers include:

* HTTP Basic Authentication or password protection on the MainWP Dashboard
* SSO or login-enforcement plugins
* Security plugins on the MainWP Dashboard
* Hosting firewalls, WAF rules, or ModSecurity
* DNS, TLS, or network restrictions that prevent the child-site server from reaching the MainWP Dashboard

The signed download URL uses this general format:

`/wp-admin/?sig=…&mwpdl=…`

<Warning>
  Do not share a signed download URL. It provides temporary access to the synchronization file.
</Warning>

MainWP Child currently prefixes every non-200 response from this download with `Error 404`, even when the underlying response is not HTTP 404. Check the accompanying response reason, such as `Unauthorized`, and review the MainWP Dashboard access and security logs at the exact time of the attempt.

For more details about this child-to-Dashboard reverse-download requirement, see [Plugin Installation Fails With Error Message: Upload failed](/troubleshooting/plugin-installation-fails-with-error-message-upload-failed).

***

## Related Resources

* [Security Add-ons](/add-ons/security) - Browse all security tools
* [Sucuri Extension](/add-ons/security/sucuri-extension) - Alternative malware scanning
* [Vulnerability Checker Extension](/add-ons/security/vulnerability-checker-extension) - Scan for known vulnerabilities
