API
Free, read-only JSON over the index. No auth, no API key. CORS open. Be reasonable (~1 req/sec); if you need bulk access, email support@openskillindex.com.
GET /api/search
Search the active skill index. All parameters are optional.
https://openskillindex.com/api/search?q=pdf&ecosystem=claude-code&language=en&max_risk=low&sort=top&limit=100&offset=0
Query parameters
q— free-text. Matches across canonical name (exact / contains / fuzzy) and full body (Postgres FTS).ecosystem— one of the tags returned by /api/stats (e.g.claude-code,openclaw). Special valueunknownmatches skills with no ecosystem tag.language— ISO-639-1 code (e.g.en,zh).max_risk— one ofnone,low,medium,high. Returns skills with risk ≤ threshold (heuristic regex scan; not a security audit).sort— one oftop(raw GitHub stars desc, deduped 1-per-repo),newest(last modified desc),indexed(last crawled desc). Whenqis set andsortis omitted, results use a tier-based relevance ranking (exact name > contains > trigram > body-only).limit— 1..200 (default 100).offset— pagination offset.
Response shape
{
"query": "pdf",
"sort": "top",
"ecosystem": "claude-code",
"language": "en",
"max_risk": null,
"count": 100,
"offset": 0,
"limit": 100,
"results": [
{
"id": "...",
"slug": "openclaw-openclaw-pdf-extractor",
"canonical_name": "pdf-extractor",
"primary_description": "Extract structured text from PDFs...",
"ecosystems": ["claude-code", "openclaw"],
"llm_tags": ["pdf-parsing", "data-extraction"],
"llm_category": "data",
"language": "en",
"risk_level": "none",
"github_stars": 360272,
"author_github": "openclaw",
"repo": "openclaw/openclaw",
"last_modified_at": "2026-04-19T...",
"last_crawled_at": "2026-04-21T...",
"skills_in_repo": 76,
"rank": 0
}
]
}GET /api/stats
Index-wide aggregates — total skill count, ecosystem / language / risk breakdowns.
https://openskillindex.com/api/stats
{
"total_skills": 211105,
"ecosystems": ["claude-code", "openclaw", ...],
"ecosystem_counts": [{ "name": "claude-code", "count": 120538 }, ...],
"language_counts": [{ "name": "en", "count": 5118 }, ...],
"risk_counts": [{ "name": "none", "count": 120512 }, ...]
}Other endpoints
- /sitemap.xml — every active skill
- /rss.xml — last 50 indexed
- /llms.txt — markdown summary for LLM crawlers
- /opensearch.xml — browser search descriptor
Stability
Field set may grow (additive only) — never rely on field count. Sort/filter semantics are committed but ranking weights may evolve. Slugs are stable for the lifetime of a skill.