REST API
API Documentation
Access SkillsMP Skills data programmatically through our REST API. Supports keyword search plus category, occupation, and detected Skill content-language filters.
table_of_contents.md
Authentication
Endpoints
GET /api/v1/skills/search
Search skills using keywords
| Parameter | Type | Required | Description |
|---|---|---|---|
| q | string | ✓ | Search query |
| page | number | - | Page number (default: 1) |
| limit | number | - | Items per page (default: 20; maximum: 50) |
| sortBy | string | - | Sort order: stars | recent (default: stars) |
| category | string | - | Filter by category slug (e.g. data-ai, devops). |
| occupation | string | - | Filter by SOC occupation slug (e.g. software-developers). |
| language | string | - | Filter by detected Skill content language. Use an ISO code such as en, zh, or ja; mul selects mixed-language content and und selects undetermined content. |
Rate Limits
- *Anonymous (no API key): 50 requests/day, 10 requests/min — keyword search only
- *Authenticated (with API key): 500 requests/day, 30 requests/min — keyword search
- *Wildcard searches (e.g. *) are not supported
When present, these REST search response headers report daily quota usage:
| Header | Description |
|---|---|
| X-RateLimit-Daily-Limit | Your daily request limit |
| X-RateLimit-Daily-Remaining | Remaining requests for today |
Code Examples
Keyword Search
curl -X GET "https://skillsmp.com/api/v1/skills/search?q=SEO" \
-H "Authorization: Bearer sk_live_your_api_key"Search with occupation filter
curl -X GET "https://skillsmp.com/api/v1/skills/search?q=automation&occupation=software-developers&language=zh&sortBy=stars" \
-H "Authorization: Bearer sk_live_your_api_key"Error Handling
Both minute and daily HTTP 429 responses include Retry-After; wait at least that many seconds. For HTTP 503, also honor Retry-After. Correct HTTP 400 parameters before retrying. Admitted keyword attempts, including parameter errors and minute-limit rejections, consume daily quota.
| Error Code | HTTP | Description |
|---|---|---|
| INVALID_API_KEY | 401 | Invalid API key |
| MISSING_QUERY | 400 | Missing required query parameter |
| INVALID_QUERY | 400 | Query must contain a letter or number |
| INVALID_PAGE | 400 | Page must appear at most once as a positive integer |
| INVALID_LIMIT | 400 | Limit must appear at most once as an integer from 1 to 50 |
| INVALID_OCCUPATION | 400 | Unknown occupation slug |
| INVALID_LANGUAGE | 400 | Unknown content language code |
| DAILY_QUOTA_EXCEEDED | 429 | Daily API quota exceeded |
| RATE_LIMITED | 429 | Minute request limit exceeded |
| SEARCH_INDEX_UNAVAILABLE | 503 | Search index temporarily unavailable |
| RATE_LIMIT_UNAVAILABLE | 503 | Rate-limit coordination temporarily unavailable |
| AUTH_UNAVAILABLE | 503 | Authentication temporarily unavailable |
| INTERNAL_ERROR | 500 | Internal server error |
Error Response Example:
json
{
"success": false,
"error": {
"code": "INVALID_API_KEY",
"message": "The provided API key is invalid"
}
}more.md