> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://api.docs.modulards.com/modular-ds-public-api/updater/installed-items/list-site-items/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": "« Previous", "url": null }, { "active": true, "label": "1", "url": "{{base_url}}/api/public/v1/site-items?page%5Bnumber%5D=1" }, { "active": false, "label": "Next »", "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 "} 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 '}}; 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 ") 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 ' 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 response = Unirest.get("https://api.modulards.com/api/public/v1/site-items") .header("Authorization", "Bearer ") .asString(); ``` ```php 200 - Site items request('GET', 'https://api.modulards.com/api/public/v1/site-items', [ 'headers' => [ 'Authorization' => 'Bearer ', ], ]); 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 "); IRestResponse response = client.Execute(request); ``` ```swift 200 - Site items import Foundation let headers = ["Authorization": "Bearer "] 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() ```