> 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/components/search-components/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://api.docs.modulards.com/_mcp/server. # Search components GET https://api.modulards.com/api/public/v1/components/search Searches wordpress.org for a plugin or theme by name. It looks at the public repository, not at what is installed on your websites (use "List components" or "List site items" for that), and gives you the exact slug that "Install a component on websites" needs. **Errors** - **422**: `type` is missing or not `plugin` or `theme`, `s` is missing for a plugin search or is shorter than 2 or longer than 100 characters, or a `page` value is out of range. - **502**: wordpress.org cannot be reached. Retry in a moment. Reference: https://api.docs.modulards.com/modular-ds-public-api/updater/components/search-components ## 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 - `type` (string, optional) — What to search: `plugin` or `theme`. Required. - `s` (string, optional) — Search text, 2 to 100 characters. Required for a plugin search; optional for a theme search, which then browses the popular themes. - `page[number]` (string, optional) — Page to return, starting at 1. Default 1. - `page[size]` (string, optional) — Number of results per page, 1 to 50. Default 15. ## Response ### 200 200 - Components found on wordpress.org - `data` (list of ApiPublicV1ComponentsSearchGetResponsesContentApplicationJsonSchemaDataItems, optional) - `jsonapi` (ApiPublicV1ComponentsSearchGetResponsesContentApplicationJsonSchemaJsonapi, optional) - `links` (ApiPublicV1ComponentsSearchGetResponsesContentApplicationJsonSchemaLinks, optional) - `meta` (ApiPublicV1ComponentsSearchGetResponsesContentApplicationJsonSchemaMeta, optional) ## Types ### ApiPublicV1ComponentsSearchGetResponsesContentApplicationJsonSchemaDataItems - `attributes` (ApiPublicV1ComponentsSearchGetResponsesContentApplicationJsonSchemaDataItemsAttributes, optional) - `id` (string, optional) - `type` (string, optional) ### ApiPublicV1ComponentsSearchGetResponsesContentApplicationJsonSchemaJsonapi - `version` (string, optional) ### ApiPublicV1ComponentsSearchGetResponsesContentApplicationJsonSchemaLinks - `first` (string, optional) - `last` (string, optional) - `next` (any, optional, nullable) - `prev` (any, optional, nullable) ### ApiPublicV1ComponentsSearchGetResponsesContentApplicationJsonSchemaMeta - `current_page` (double, optional) - `from` (double, optional) - `last_page` (double, optional) - `links` (list of ApiPublicV1ComponentsSearchGetResponsesContentApplicationJsonSchemaMetaLinksItems, optional) - `path` (string, optional) - `per_page` (double, optional) - `to` (double, optional) - `total` (double, optional) ### ApiPublicV1ComponentsSearchGetResponsesContentApplicationJsonSchemaDataItemsAttributes - `active_installs` (double, optional) - `author` (string, optional) - `download_link` (string, optional) - `last_updated` (string, optional) - `name` (string, optional) - `rating` (double, optional) - `requires_php` (string, optional) - `requires_wp` (string, optional) - `slug` (string, optional) - `tested_wp` (string, optional) - `version` (string, optional) ### ApiPublicV1ComponentsSearchGetResponsesContentApplicationJsonSchemaMetaLinksItems - `active` (boolean, optional) - `label` (string, optional) - `url` (string, optional, nullable) ## Examples **Response** ```json { "data": [ { "attributes": { "active_installs": 5000000, "author": "Automattic", "download_link": "https://downloads.wordpress.org/plugin/woocommerce.8.10.1.zip", "last_updated": "2026-09-10T00:00:00.000000Z", "name": "WooCommerce", "rating": 90, "requires_php": "7.4", "requires_wp": "6.6", "slug": "woocommerce", "tested_wp": "6.8.1", "version": "8.10.1" }, "id": "woocommerce", "type": "wordpress-repository-items" }, { "attributes": { "active_installs": 300000, "author": "WooCommerce", "download_link": "https://downloads.wordpress.org/plugin/woocommerce-shipping.2.9.0.zip", "last_updated": "2026-08-22T00:00:00.000000Z", "name": "WooCommerce Shipping & Tax", "rating": 82, "requires_php": "7.4", "requires_wp": "6.4", "slug": "woocommerce-shipping", "tested_wp": "6.8.1", "version": "2.9.0" }, "id": "woocommerce-shipping", "type": "wordpress-repository-items" } ], "jsonapi": { "version": "1.1" }, "links": { "first": "{{base_url}}/api/public/v1/components/search?page%5Bnumber%5D=1", "last": "{{base_url}}/api/public/v1/components/search?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/components/search?page%5Bnumber%5D=1" }, { "active": false, "label": "Next »", "url": null } ], "path": "{{base_url}}/api/public/v1/components/search", "per_page": 15, "to": 2, "total": 2 } } ``` **SDK Code** ```python 200 - Components found on wordpress.org import requests url = "https://api.modulards.com/api/public/v1/components/search" headers = {"Authorization": "Bearer "} response = requests.get(url, headers=headers) print(response.json()) ``` ```javascript 200 - Components found on wordpress.org const url = 'https://api.modulards.com/api/public/v1/components/search'; 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 - Components found on wordpress.org package main import ( "fmt" "net/http" "io" ) func main() { url := "https://api.modulards.com/api/public/v1/components/search" 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 - Components found on wordpress.org require 'uri' require 'net/http' url = URI("https://api.modulards.com/api/public/v1/components/search") 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 - Components found on wordpress.org import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://api.modulards.com/api/public/v1/components/search") .header("Authorization", "Bearer ") .asString(); ``` ```php 200 - Components found on wordpress.org request('GET', 'https://api.modulards.com/api/public/v1/components/search', [ 'headers' => [ 'Authorization' => 'Bearer ', ], ]); echo $response->getBody(); ``` ```csharp 200 - Components found on wordpress.org using RestSharp; var client = new RestClient("https://api.modulards.com/api/public/v1/components/search"); var request = new RestRequest(Method.GET); request.AddHeader("Authorization", "Bearer "); IRestResponse response = client.Execute(request); ``` ```swift 200 - Components found on wordpress.org import Foundation let headers = ["Authorization": "Bearer "] let request = NSMutableURLRequest(url: NSURL(string: "https://api.modulards.com/api/public/v1/components/search")! 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() ```