> 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 site items

GET https://api.modulards.com/api/public/v1/site-items

Returns every plugin, theme and WordPress version installed on the websites your token can reach, one row per website and item. Use it to answer "which of my websites run this plugin?" (filter by `component`) or "what is waiting for an update on these websites?". Sorted by name unless you sort otherwise.

Items whose update notice you hid are left out unless you filter on `is_hidden`.

Reference: https://api.docs.modulards.com/modular-ds-public-api/updater/installed-items/list-site-items

## Authentication

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

## Request

### Query parameters

- `filter[component]` (string, optional) — Component id: returns the installs of one plugin, theme or WordPress version. Ids come from "List components".
- `filter[site][]` (string, optional) — Website ids. Several values match any of them.
- `filter[team][]` (string, optional) — Team ids. Several values match websites in any of these teams.
- `filter[tags][]` (string, optional) — Tag ids. Several values match websites carrying any of these tags.
- `filter[core_version][]` (string, optional) — Exact WordPress versions of the website, for example `6.8.1`. Several values match any of them.
- `filter[engine_version][]` (string, optional) — Exact PHP versions of the website, for example `8.2.27`. Several values match any of them.
- `filter[type][]` (string, optional) — Item types: `core`, `plugin` or `theme`. Several values match any of them.
- `filter[status][]` (string, optional) — Item states: `active`, `inactive` or `uninstalled`. Several values match any of them.
- `filter[update_available]` (string, optional) — `1` for items with a newer version available, `0` for items that are up to date.
- `filter[updatable]` (string, optional) — `1` for items that can be updated now: a newer version exists, the update notice is not hidden and the website accepts installs. `0` for the rest.
- `filter[has_vulnerabilities]` (string, optional) — `1` for items whose installed version has a known vulnerability, `0` for items without one.
- `filter[is_hidden]` (string, optional) — `1` for items whose update notice is hidden, `0` for visible ones. Default: only visible items.
- `filter[s]` (string, optional) — Free-text search on the item's name.
- `sort` (string, optional) — Sort order: `name` (default, ascending), `type`, `site_name`, `new_version`, `released_at` or `copilot_score`. Prefix with `-` for descending.
- `page[number]` (string, optional) — Page to return, starting at 1. Default 1.
- `page[size]` (string, optional) — Number of items per page, 1 to 50. Default 15.
- `fields[site-items]` (string, optional) — Attributes to return, comma-separated; only those are returned. These computed attributes are left out unless named: `copilot_score` (the Update Copilot score), `released_at` (with `days_since_release`), `in_progress_action_id`, `in_progress_action_type`, `in_progress_action_status`, `last_error`, `can_upgrade`, `can_safe_upgrade`, `can_activate`, `can_deactivate`, `can_delete` and `history`.
- `include` (string, optional) — Related records to embed: `site` embeds the website each item is installed on.

## Response

### 200

200 - Site items

- `data` (list of ApiPublicV1SiteItemsGetResponsesContentApplicationJsonSchemaDataItems, optional)
- `jsonapi` (ApiPublicV1SiteItemsGetResponsesContentApplicationJsonSchemaJsonapi, optional)
- `links` (ApiPublicV1SiteItemsGetResponsesContentApplicationJsonSchemaLinks, optional)
- `meta` (ApiPublicV1SiteItemsGetResponsesContentApplicationJsonSchemaMeta, optional)

## Types

### ApiPublicV1SiteItemsGetResponsesContentApplicationJsonSchemaDataItems

- `attributes` (ApiPublicV1SiteItemsGetResponsesContentApplicationJsonSchemaDataItemsAttributes, optional)
- `id` (string, optional)
- `links` (ApiPublicV1SiteItemsGetResponsesContentApplicationJsonSchemaDataItemsLinks, optional)
- `type` (string, optional)

### ApiPublicV1SiteItemsGetResponsesContentApplicationJsonSchemaJsonapi

- `version` (string, optional)

### ApiPublicV1SiteItemsGetResponsesContentApplicationJsonSchemaLinks

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

### ApiPublicV1SiteItemsGetResponsesContentApplicationJsonSchemaMeta

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

### ApiPublicV1SiteItemsGetResponsesContentApplicationJsonSchemaDataItemsAttributes

- `basename` (string, optional, nullable)
- `can_upgrade` (boolean, optional)
- `component_id` (double, optional)
- `copilot_score` (double, optional)
- `created_at` (string, optional)
- `has_error` (boolean, optional)
- `is_hidden` (boolean, optional)
- `name` (string, optional)
- `new_version` (string, optional, nullable)
- `previous_version` (string, optional, nullable)
- `slug` (string, optional)
- `status` (string, optional)
- `type` (string, optional)
- `updated_at` (string, optional)
- `version` (string, optional)
- `vulnerabilities_c_exists` (boolean, optional)
- `vulnerabilities_exists` (boolean, optional)

### ApiPublicV1SiteItemsGetResponsesContentApplicationJsonSchemaDataItemsLinks

- `self` (string, optional)

### ApiPublicV1SiteItemsGetResponsesContentApplicationJsonSchemaMetaLinksItems

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

## Examples

**Response**

```json
{
  "data": [
    {
      "attributes": {
        "basename": "woocommerce/woocommerce.php",
        "can_upgrade": true,
        "component_id": 42,
        "copilot_score": 92,
        "created_at": "2026-06-01T09:00:00.000000Z",
        "has_error": false,
        "is_hidden": false,
        "name": "WooCommerce",
        "new_version": "8.10.1",
        "previous_version": null,
        "slug": "woocommerce",
        "status": "active",
        "type": "plugin",
        "updated_at": "2026-09-15T07:30:00.000000Z",
        "version": "8.10.0",
        "vulnerabilities_c_exists": false,
        "vulnerabilities_exists": false
      },
      "id": "301",
      "links": {
        "self": "{{base_url}}/api/public/v1/site-items/301"
      },
      "type": "site-items"
    },
    {
      "attributes": {
        "basename": null,
        "can_upgrade": false,
        "component_id": 7,
        "copilot_score": 100,
        "created_at": "2026-04-10T09:00:00.000000Z",
        "has_error": false,
        "is_hidden": false,
        "name": "WordPress",
        "new_version": null,
        "previous_version": "6.8.0",
        "slug": "wordpress",
        "status": "active",
        "type": "core",
        "updated_at": "2026-09-10T07:30:00.000000Z",
        "version": "6.8.1",
        "vulnerabilities_c_exists": false,
        "vulnerabilities_exists": false
      },
      "id": "302",
      "links": {
        "self": "{{base_url}}/api/public/v1/site-items/302"
      },
      "type": "site-items"
    }
  ],
  "jsonapi": {
    "version": "1.1"
  },
  "links": {
    "first": "{{base_url}}/api/public/v1/site-items?page%5Bnumber%5D=1",
    "last": "{{base_url}}/api/public/v1/site-items?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/site-items?page%5Bnumber%5D=1"
      },
      {
        "active": false,
        "label": "Next &raquo;",
        "url": null
      }
    ],
    "path": "{{base_url}}/api/public/v1/site-items",
    "per_page": 15,
    "to": 2,
    "total": 2
  }
}
```

**SDK Code**

```python 200 - Site items
import requests

url = "https://api.modulards.com/api/public/v1/site-items"

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

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

print(response.json())
```

```javascript 200 - Site items
const url = 'https://api.modulards.com/api/public/v1/site-items';
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 - Site items
package main

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

func main() {

	url := "https://api.modulards.com/api/public/v1/site-items"

	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 - Site items
require 'uri'
require 'net/http'

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

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 - Site items
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

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

```php 200 - Site items
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

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

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

```csharp 200 - Site items
using RestSharp;

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

```swift 200 - Site items
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://api.modulards.com/api/public/v1/site-items")! 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()
```