> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://api.docs.modulards.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://api.docs.modulards.com/_mcp/server.

# List a website's site health checks

GET https://api.modulards.com/api/public/v1/sites/{site}/health

Lists the site health checks reported for one website. Use it to see what needs attention on a website, for example with `filter[status][]=critical` to list only the critical checks.

Each check is in the `performance` or `security` category and has a status of `good`, `recommended` or `critical`. A check you muted keeps its status but counts one level milder. The worst checks come first unless you sort otherwise.

Refreshing the checks and muting or unmuting one are done from the dashboard. Your role must be allowed to see health checks; without it the request answers 404.

Reference: https://api.docs.modulards.com/modular-ds-public-api/security-health/health-checks/list-a-website-s-site-health-checks

## Authentication

- `Authorization` header (bearer token, required) — Personal access token created in the Modular DS dashboard; read-only tokens can only call GET endpoints.

## Request

### Path parameters

- `site` (string, required)

### Query parameters

- `filter[status][]` (string, optional) — Only checks with these statuses: `good`, `recommended` or `critical`. Several values match any of them.
- `filter[category][]` (string, optional) — Only checks of these categories: `performance` or `security`. Several values match any of them.
- `filter[type][]` (string, optional) — Only these kinds of check, for example `php_version`, `wordpress_version`, `has_ssl`, `memory_limit`, `vulnerabilities_detected` or `pseudo_cron`. Several values match any of them.
- `filter[ignored]` (string, optional) — `1` for only the checks you muted, `0` for only the ones that still count. Omit it to get both.
- `sort` (string, optional) — Sort order. Accepted: `status`, `type`, `created_at`; a leading `-` reverses the order. Default `-status`, the worst checks first (plain `status` lists the best first).
- `page[number]` (string, optional) — Page number, starting at 1.
- `page[size]` (string, optional) — Rows per page, up to 50 (default 15).

## Response

### 200

200 - Health checks

- `data` (list of ApiPublicV1SitesSiteHealthGetResponsesContentApplicationJsonSchemaDataItems, optional)
- `jsonapi` (ApiPublicV1SitesSiteHealthGetResponsesContentApplicationJsonSchemaJsonapi, optional)
- `links` (ApiPublicV1SitesSiteHealthGetResponsesContentApplicationJsonSchemaLinks, optional)
- `meta` (ApiPublicV1SitesSiteHealthGetResponsesContentApplicationJsonSchemaMeta, optional)

## Types

### ApiPublicV1SitesSiteHealthGetResponsesContentApplicationJsonSchemaDataItems

- `attributes` (ApiPublicV1SitesSiteHealthGetResponsesContentApplicationJsonSchemaDataItemsAttributes, optional)
- `id` (string, optional)
- `type` (string, optional)

### ApiPublicV1SitesSiteHealthGetResponsesContentApplicationJsonSchemaJsonapi

- `version` (string, optional)

### ApiPublicV1SitesSiteHealthGetResponsesContentApplicationJsonSchemaLinks

- `first` (string, optional)
- `last` (string, optional)
- `next` (any, optional, nullable)
- `prev` (any, optional, nullable)

### ApiPublicV1SitesSiteHealthGetResponsesContentApplicationJsonSchemaMeta

- `current_page` (double, optional)
- `from` (double, optional)
- `last_page` (double, optional)
- `links` (list of ApiPublicV1SitesSiteHealthGetResponsesContentApplicationJsonSchemaMetaLinksItems, optional)
- `path` (string, optional)
- `per_page` (double, optional)
- `to` (double, optional)
- `total` (double, optional)

### ApiPublicV1SitesSiteHealthGetResponsesContentApplicationJsonSchemaDataItemsAttributes

- `category` (enum, optional) — Area of the check, derived from its type.
  - Allowed values: `performance`, `security`
- `created_at` (string, optional)
- `description` (string, optional)
- `effective_status` (enum, optional) — Result shown to the user: one level milder than status when the check is ignored.
  - Allowed values: `good`, `recommended`, `critical`
- `ignored_at` (datetime, optional, nullable) — When the check was ignored; null while it counts.
- `label` (string, optional)
- `status` (enum, optional) — Raw result of the check.
  - Allowed values: `good`, `recommended`, `critical`
- `type` (string, optional)
- `updated_at` (string, optional)

### ApiPublicV1SitesSiteHealthGetResponsesContentApplicationJsonSchemaMetaLinksItems

- `active` (boolean, optional)
- `label` (string, optional)
- `url` (string, optional, nullable)

## Examples

**Response**

```json
{
  "data": [
    {
      "attributes": {
        "category": "security",
        "created_at": "2026-09-10T06:00:00.000000Z",
        "description": "One or more installed plugins or themes have a known vulnerability.",
        "effective_status": "critical",
        "ignored_at": null,
        "label": "Vulnerabilities detected",
        "status": "critical",
        "type": "vulnerabilities_detected",
        "updated_at": "2026-09-17T06:00:00.000000Z"
      },
      "id": "1",
      "type": "site-health-checks"
    },
    {
      "attributes": {
        "category": "performance",
        "created_at": "2026-09-10T06:00:00.000000Z",
        "description": "Update PHP to the latest supported version for better performance and security.",
        "effective_status": "good",
        "ignored_at": "2026-09-11T08:00:00.000000Z",
        "label": "PHP version is not the latest",
        "status": "recommended",
        "type": "php_version",
        "updated_at": "2026-09-11T08:00:00.000000Z"
      },
      "id": "2",
      "type": "site-health-checks"
    }
  ],
  "jsonapi": {
    "version": "1.1"
  },
  "links": {
    "first": "{{base_url}}/api/public/v1/sites/30/health?page%5Bnumber%5D=1",
    "last": "{{base_url}}/api/public/v1/sites/30/health?page%5Bnumber%5D=1",
    "next": null,
    "prev": null
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 1,
    "links": [
      {
        "active": false,
        "label": "&laquo; Previous",
        "url": null
      },
      {
        "active": true,
        "label": "1",
        "url": "{{base_url}}/api/public/v1/sites/30/health?page%5Bnumber%5D=1"
      },
      {
        "active": false,
        "label": "Next &raquo;",
        "url": null
      }
    ],
    "path": "{{base_url}}/api/public/v1/sites/30/health",
    "per_page": 15,
    "to": 2,
    "total": 2
  }
}
```

**SDK Code**

```python 200 - Health checks
import requests

url = "https://api.modulards.com/api/public/v1/sites/site/health"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript 200 - Health checks
const url = 'https://api.modulards.com/api/public/v1/sites/site/health';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go 200 - Health checks
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.modulards.com/api/public/v1/sites/site/health"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby 200 - Health checks
require 'uri'
require 'net/http'

url = URI("https://api.modulards.com/api/public/v1/sites/site/health")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java 200 - Health checks
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.modulards.com/api/public/v1/sites/site/health")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php 200 - Health checks
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.modulards.com/api/public/v1/sites/site/health', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp 200 - Health checks
using RestSharp;

var client = new RestClient("https://api.modulards.com/api/public/v1/sites/site/health");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift 200 - Health checks
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.modulards.com/api/public/v1/sites/site/health")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```