WordPress.org API: Search plugins
Searches the WordPress.org plugin directory by description and returns matches in directory search order, with ratings, installations, compatibility and plugin page links.
Unofficial. Not affiliated with or endorsed by WordPress.org.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Query, required
query Describe what the plugin should do, for example contact form.
image optimization
- Max Results optional
max_results Most plugins to return, for example 20 (up to 100).
35
Whole number from 1 to 100. Default
20.
Input as JSON
{ "query": "image optimization", "max_results": 35}Output
{ "plugins": [ { "name": "Smush – Image Optimization, Compression, Lazy Load, WebP & CDN", "slug": "wp-smushit", "author": "WPMU DEV - Your All-in-One WordPress Platform", "rating": 4.8, "last_updated": "2026-10-20", "tested_up_to": "7.1.3", "plugin_page_link": "https://wordpress.org/plugins/wp-smushit/" , "number_of_ratings": 6053, "active_installations": 1000000 }, { "name": "Imagify Image Optimization: Optimize Images | Compress & Convert to WebP/AVIF" , "slug": "imagify", "author": "WP Media", "rating": 4.3, "last_updated": "2026-09-07", "tested_up_to": "7.1.3", "plugin_page_link": "https://wordpress.org/plugins/imagify/" , "number_of_ratings": 1657, "active_installations": 1000000 }, { "name": "LiteSpeed Cache", "slug": "litespeed-cache", "author": "LiteSpeed Technologies", "rating": 4.8, "last_updated": "2026-10-20", "tested_up_to": "7.1.3", "plugin_page_link": "https://wordpress.org/plugins/litespeed-cache/" , "number_of_ratings": 2777, "active_installations": 7000000 } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"wordpress.org/search_plugins","input":{"query":"image optimization","max_results":35}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "wordpress.org/search_plugins" , "input": { "query": "image optimization", "max_results": 35 }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "wordpress.org/search_plugins" , "input": { "query": "image optimization", "max_results": 35 } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run wordpress.org/search_plugins# with {"query":"image optimization","max_results":35}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "query" ], "properties": { "query": { "type": "string", "minLength": 1, "description": "Describe what the plugin should do, for example contact form." }, "max_results": { "type": "integer", "default": 20, "maximum": 100, "minimum": 1, "description": "Most plugins to return, for example 20 (up to 100)." } }}Output schema
{ "type": "object", "required": [ "plugins" ], "properties": { "plugins": { "type": "array", "items": { "type": "object", "required": [ "name", "author", "rating", "number_of_ratings", "active_installations", "last_updated", "tested_up_to", "plugin_page_link", "slug" ], "properties": { "name": { "type": "string", "description": "Plugin name." }, "slug": { "type": "string", "description": "Directory plugin slug." }, "author": { "type": [ "string", "null" ], "description": "Plugin author." }, "rating": { "type": [ "number", "null" ], "description": "Average rating out of 5 stars." }, "last_updated": { "type": [ "string", "null" ], "format": "date", "description": "Date the plugin was last updated." }, "tested_up_to": { "type": [ "string", "null" ], "description": "WordPress version the plugin was tested up to." }, "plugin_page_link": { "type": "string", "format": "uri", "description": "WordPress.org plugin page." }, "number_of_ratings": { "type": [ "integer", "null" ], "description": "Number of submitted ratings." }, "active_installations": { "type": [ "integer", "null" ], "description": "Reported active installations." } }, "additionalProperties": false }, "description": "Plugins in directory search order." } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
wordpress.org/search_plugins- Returns
- name, author, rating, rating count, active installations, last updated, tested WordPress version, plugin page link, slug
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method wordpress.org/search_plugins with the inputs above.
Ask your agent
- Find WordPress plugins that add a contact form, show me the top 10 with their ratings and active installs
- I need a plugin to create image galleries on a WordPress site, list up to 25 options
- Search the WordPress plugin directory for caching plugins that speed up page loads, limit to 15 results
- Which plugins on wordpress.org handle SEO meta descriptions and sitemaps? Give me 20 matches
- Look up plugins that let visitors book appointments through a calendar, max 8 results
See more
All WordPress.org methodsFinds the best-matching WordPress.org plugin by name or plugin page link and returns its details, including the changelog for the latest version when one is available.
wordpress.org/get_pluginSearches the npm registry for JavaScript packages by description or keywords, in npm's search order, and returns each package's latest version, weekly downloads and publish date.
npmjs.com/search_packagesSearches PyPI by keywords and returns matching packages in relevance order, each with its latest version and that version's release date. Returns up to 100 results.
pypi.org/search_packagesFinds Android apps on Google Play by keywords, in Play search order, with each listing's developer, star rating, price and currency for the chosen country, download range and link. Results are limited to apps shown on the public search page.
play.google.com/search_appsFinds Chrome Web Store extensions by keywords in store order, with each listing's developer, users, rating, rating count, short description and store link. Some listings omit developer, users or ratings.
chromewebstore.google.com/search_extensionsFinds Pinterest pins for an idea in search order, with image, creator, board, saves and linked website. Limited to the first public search page.
pinterest.com/search_pinsFinds free public-domain Project Gutenberg books by title, author or topic, with authors, languages, subjects, recent downloads, and reading and download links. Public-domain status is based on the United States.
gutenberg.org/search_free_booksSearches a Wikipedia language edition by keywords and returns matching articles in relevance order, with descriptions, snippets, word counts, last edit dates and links.
wikipedia.org/search_articles