Plugin Search API

Search published, verified community plugins through one stable, read-only endpoint.

GET/api/v1/plugins/search
Public access No authentication 60 requests / minute

Live console

Adjust parameters and send a request directly to this site.

Request URL
https://dshpluginhub.dev/api/v1/plugins/search?locale=en&sort=stars&page=1&per_page=20
cURL
curl --request GET 'https://dshpluginhub.dev/api/v1/plugins/search?locale=en&sort=stars&page=1&per_page=20' \
  --header 'Accept: application/json'

Response

Send a request to view formatted JSON here.

Query parameters

All filters run server-side. Empty results return 200 with an empty array.

ParameterRules
qOptional; at most 100 characters after whitespace normalization.
localezh or en; defaults to en.
categoryOptional; uses the marketplace category set.
typehost, client, or hybrid.
sourcenpm or github.
sortrelevance, growth, stars, newest, or active.
page1-1000; defaults to 1.
per_page1-50; defaults to 20.

Response fields

Responses include public plugin data, compatibility, metrics, timestamps, links, and pagination metadata.

items[]11

idstring
GitHub repository numeric ID and the stable plugin identifier.
slugstring
Repository identifier in owner/repository form.
namestring
Plugin display name.
ownerstring
GitHub repository owner.
repostring
GitHub repository name.
descriptionstring
Plugin summary localized to the requested locale.
typehost | client | hybrid
Plugin runtime form.
categorystring
Marketplace category enum value.
topicsstring[]
GitHub repository topics.
languagestring
Primary language detected by GitHub.
licensestring
Repository license SPDX identifier.

items[].package6

namestring
Installable package name.
versionstring
Currently validated version.
sourcenpm | github
Installation source.
sourceSpecstring
Complete install source specification with a pinned version.
installCommandstring
Ready-to-run DSH command that installs the current latest release.
profilestring
DSH profile used by the install command.

items[].compatibility4

verificationLevelstatic-checked | runtime-verified
Distinguishes static catalog checks from runtime verification.
harnessVersionstring
DSH version used for compatibility validation.
smokeStatusstring
Static or runtime smoke validation status.
validatedAtstring
Latest validation time in ISO 8601.

items[].metrics5

starsnumber
Current GitHub star count.
starsDelta1dnumber | null
Star change between the latest two successful daily snapshots; null without a baseline.
forksnumber
Current GitHub fork count.
openIssuesnumber
Current open issue count.
viewsnumber
Cumulative marketplace detail-page views.

items[].timestamps3

listedAtstring
First marketplace listing time in ISO 8601.
lastPushedAtstring
Latest GitHub push time in ISO 8601.
sourceUpdatedAtstring
Latest source-data sync time in ISO 8601.

items[].links2

detailstring
Absolute localized plugin detail URL.
repositorystring
GitHub repository URL.

pagination4

pagenumber
Current page number.
perPagenumber
Current number of items per page.
totalnumber
Total number of matching plugins.
totalPagesnumber
Total number of result pages.

meta5

apiVersionv1
Current API version.
localezh | en
Locale used for this response.
querystring
Normalized search text; empty when omitted.
sortstring
Sort mode used for this response.
dataUpdatedAtstring | null
Latest result data update time in ISO 8601.

Complete response example

A successful request returns 200; this example includes every public field.

200 OK
{
  "items": [
    {
      "id": "1163808211",
      "slug": "liustack/modlens",
      "name": "modlens",
      "owner": "liustack",
      "repo": "modlens",
      "description": "OCR, layout, and semantic visual evidence for text-only coding agents.",
      "type": "hybrid",
      "category": "multimodal-creative",
      "topics": [
        "dsh-plugin",
        "vision",
        "ocr"
      ],
      "language": "TypeScript",
      "license": "MIT",
      "package": {
        "name": "@liustack/modlens",
        "version": "3.22.1",
        "source": "npm",
        "sourceSpec": "@liustack/modlens@3.22.1",
        "installCommand": "dsh plugin --profile web add @liustack/modlens",
        "profile": "web"
      },
      "compatibility": {
        "harnessVersion": "0.1.0-rc.7",
        "verificationLevel": "static-checked",
        "smokeStatus": "static-passed",
        "validatedAt": "2026-08-21T02:00:00.000Z"
      },
      "metrics": {
        "stars": 3393,
        "starsDelta1d": 24,
        "forks": 91,
        "openIssues": 2,
        "views": 420
      },
      "timestamps": {
        "listedAt": "2026-08-19T01:20:29.105Z",
        "lastPushedAt": "2026-08-20T14:19:24.000Z",
        "sourceUpdatedAt": "2026-08-21T02:00:00.000Z"
      },
      "links": {
        "detail": "https://dsh-plugin-hub-blond.vercel.app/en/plugins/liustack/modlens",
        "repository": "https://github.com/liustack/modlens"
      }
    }
  ],
  "pagination": {
    "page": 1,
    "perPage": 20,
    "total": 216,
    "totalPages": 11
  },
  "meta": {
    "apiVersion": "v1",
    "locale": "en",
    "query": "vision",
    "sort": "relevance",
    "dataUpdatedAt": "2026-08-21T02:00:00.000Z"
  }
}

Errors and limits

Invalid parameters return 400, exhausted anonymous quotas return 429, and temporary failures return 503.

Anonymous clients receive 60 requests per minute and 2,000 per day by default. Response headers report remaining quota and reset time.

Rate limiting stores only a daily rotating HMAC of the IP address, never the raw IP.