Skills Directory API
Authentication
All API requests require an API key. Pro members get a 1,000-a-day key from the developer page. Include it in your request headers:
# Using Authorization header
curl -H "Authorization: Bearer sk_live_your_key_here" \
https://www.skillsdirectory.com/api/v1/skills
# Using x-api-key header
curl -H "x-api-key: sk_live_your_key_here" \
https://www.skillsdirectory.com/api/v1/skillsMCP server
Pro members can connect Claude Code to Skills Directory. Claude can then search skills, read a skill's grade and findings, scan the skill you're writing, and download ZIPs. Use your Pro key from the developer page:
claude mcp add --transport http skills-directory https://www.skillsdirectory.com/api/mcp --header "Authorization: Bearer YOUR_API_KEY"Tools: search_skills, get_skill, scan_skill, audit_skills (check what you already have installed), download_skill, and my_library. Each tool call counts as one request against your daily limit.
Scan a skill in CI
POST /api/v1/scan grades a skill with the same rules as the directory and returns every finding with its line and a fix. Send a ZIP (zip), SKILL.md text (content), or a public GitHub link (url). Add fail_below=B and a worse grade returns 422, so the step fails. Pro keys only.
# .github/workflows/skill-scan.yml
on: pull_request
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: cd skills && zip -qr ../skill.zip my-skill
- run: >
curl -sf -H "Authorization: Bearer ${{ secrets.SKILLS_DIRECTORY_KEY }}"
-F zip=@skill.zip "https://www.skillsdirectory.com/api/v1/scan?fail_below=B"A ZIP or repo with several skills returns 409 with their folders. Pass folder=path/to/skill for one, or folder=* to grade them all (then fail_below applies to the worst).
Rate limits
| Tier | Requests/day | Price |
|---|---|---|
| Free | 100 | $0 |
| Pro | 1,000 | With Pro, $9/mo |
| Enterprise | 10,000 | $199/mo |
Rate limits reset daily at midnight UTC. Every response includes rate limit headers:
| Header | Description |
|---|---|
X-RateLimit-Remaining | Requests left today |
X-RateLimit-Tier | Your current tier |
Endpoints
GET /api/v1/skills
List skills with filtering, sorting, and pagination.
| Parameter | Type | Description |
|---|---|---|
q | string | Search by name or description |
category | string | Filter by category slug |
sort | string | recent | votes | stars |
limit | integer | Results per page (max 100) |
offset | integer | Pagination offset |
verified | boolean | Filter verified skills only |
securityGrade | string | Max grade (A-F, default: A, 'all' to disable) |
minSecurityScore | integer | Minimum security score (0-100) |
GET /api/v1/skills/:slug
Get a single skill by its slug.
GET /api/v1/skills/search
Semantic search using AI embeddings. Requires Pro or Enterprise tier.
| Parameter | Type | Description |
|---|---|---|
q | string | Search query (required) |
limit | integer | Max results (default 20, max 100) |
category | string | Filter by category |
threshold | float | Min similarity (0-1, default 0.5) |
Each result includes _score (combined relevance) and _similarity (vector similarity) fields.
GET /api/v1/categories
List all skill categories.
GET /api/v1/stats
Get your API key usage statistics, including a 7-day history.
{
"data": {
"key": {
"prefix": "sk_live_abcd1234",
"name": "My Key",
"tier": "free",
"status": "active",
"createdAt": "2025-01-15T00:00:00.000Z"
},
"usage": {
"today": 42,
"remaining": 58,
"limit": 100,
"resetAt": "2025-02-12T00:00:00.000Z"
},
"history": [
{ "date": "2025-02-05", "requests": 87 },
{ "date": "2025-02-06", "requests": 64 }
]
}
}Response format
All responses follow a consistent JSON structure:
{
"data": [ ... ],
"pagination": {
"page": 1,
"limit": 20,
"totalCount": 44000,
"totalPages": 2200,
"hasNextPage": true,
"hasPrevPage": false
},
"meta": {
"requestsRemaining": 99,
"tier": "free"
}
}Error codes
| Status | Code | Description |
|---|---|---|
| 400 | MISSING_PARAMETER | Required parameter missing |
| 401 | MISSING_API_KEY | No API key provided |
| 401 | INVALID_API_KEY | Invalid or expired key |
| 403 | TIER_RESTRICTED | Endpoint requires higher tier |
| 404 | NOT_FOUND | Resource not found |
| 429 | RATE_LIMIT_EXCEEDED | Daily limit reached |
Error responses use the format:
{
"error": {
"code": "NOT_FOUND",
"message": "Skill \"my-skill\" not found."
}
}Data access by tier
Higher tiers get access to more skill fields:
| Field | Free | Pro | Enterprise |
|---|---|---|---|
| Basic info (name, description, tags) | |||
| Author & GitHub stars | |||
| Full content | |||
| Security grade & score | |||
| Semantic search | |||
| GitHub metadata (forks, language) | |||
| Security findings & analysis | |||
| Content hashes |
Security scanning
Every skill in the directory is automatically scanned for security issues using 120 detection patterns across 11 threat categories.
Grade scale
| Grade | Score range | Meaning |
|---|---|---|
A | 90-100 | No significant issues found |
B | 75-89 | Minor concerns, generally safe |
C | 60-74 | Some issues, review recommended |
D | 40-59 | Significant concerns |
F | 0-39 | Critical security issues detected |
Default filtering
The skills listing defaults to securityGrade=A. Pass securityGrade=all to see all grades. For full details about our scanning methodology, see the Security page.
Ready to get started?
Sign up free