API Documentation
Programmatically manage your skills, promotions, and announcements. Build integrations, automate publishing workflows, or sync your catalog with external tools.
Authentication
All API requests must include a valid API key in the Authorization header using the Bearer scheme.
Example Header
Authorization: Bearer sk_live_abc123...Endpoints
All endpoints are relative to https://skillslib.ai. Requests and responses use JSON unless otherwise noted.
Skills
Announcements
Promotions
Code Examples
Create a Skill
curl
curl -X POST https://skillslib.ai/api/v1/ext/skills \
-H "Authorization: Bearer sk_live_abc123..." \
-H "Content-Type: application/json" \
-d '{
"title": "Contract Analyzer",
"description": "Analyze legal contracts for risks and obligations.",
"price": 12.99,
"features": ["Clause extraction", "Risk scoring"],
"tags": ["legal", "contracts"],
}'JavaScript (fetch)
const response = await fetch("https://skillslib.ai/api/v1/ext/skills", {
method: "POST",
headers: {
"Authorization": "Bearer sk_live_abc123...",
"Content-Type": "application/json",
},
body: JSON.stringify({
title: "Contract Analyzer",
description: "Analyze legal contracts for risks and obligations.",
price: 12.99,
features: ["Clause extraction", "Risk scoring"],
tags: ["legal", "contracts"],
}),
});
const skill = await response.json();
console.log(skill.id);Python (requests)
import requests
response = requests.post(
"https://skillslib.ai/api/v1/ext/skills",
headers={"Authorization": "Bearer sk_live_abc123..."},
json={
"title": "Contract Analyzer",
"description": "Analyze legal contracts for risks and obligations.",
"price": 12.99,
"features": ["Clause extraction", "Risk scoring"],
"tags": ["legal", "contracts"],
},
)
skill = response.json()
print(skill["id"])Upload a SKILL.md File
curl
curl -X POST https://skillslib.ai/api/v1/ext/skills/clx.../upload \
-H "Authorization: Bearer sk_live_abc123..." \
-F "file=@./SKILL.md"JavaScript (fetch)
const form = new FormData();
form.append("file", fs.createReadStream("./SKILL.md"));
const response = await fetch(
"https://skillslib.ai/api/v1/ext/skills/clx.../upload",
{
method: "POST",
headers: { "Authorization": "Bearer sk_live_abc123..." },
body: form,
}
);
const result = await response.json();
console.log(result.skillContentUpdatedAt);Python (requests)
import requests
with open("SKILL.md", "rb") as f:
response = requests.post(
"https://skillslib.ai/api/v1/ext/skills/clx.../upload",
headers={"Authorization": "Bearer sk_live_abc123..."},
files={"file": ("SKILL.md", f, "text/markdown")},
)
print(response.json())Create a Promotion
curl
curl -X POST https://skillslib.ai/api/v1/ext/skills/clx.../promotions \
-H "Authorization: Bearer sk_live_abc123..." \
-H "Content-Type: application/json" \
-d '{
"discountPercent": 25,
"startsAt": "2026-08-01T00:00:00Z",
"expiresAt": "2026-08-15T23:59:59Z",
"title": "Summer Sale"
}'JavaScript (fetch)
const response = await fetch(
"https://skillslib.ai/api/v1/ext/skills/clx.../promotions",
{
method: "POST",
headers: {
"Authorization": "Bearer sk_live_abc123...",
"Content-Type": "application/json",
},
body: JSON.stringify({
discountPercent: 25,
startsAt: "2026-08-01T00:00:00Z",
expiresAt: "2026-08-15T23:59:59Z",
title: "Summer Sale",
}),
}
);
const promo = await response.json();
console.log(promo.id);Python (requests)
import requests
response = requests.post(
"https://skillslib.ai/api/v1/ext/skills/clx.../promotions",
headers={"Authorization": "Bearer sk_live_abc123..."},
json={
"discountPercent": 25,
"startsAt": "2026-08-01T00:00:00Z",
"expiresAt": "2026-08-15T23:59:59Z",
"title": "Summer Sale",
},
)
promo = response.json()
print(promo["id"])Error Codes
When a request fails, the response body contains an error field with a human-readable message. Validation errors (400) also include a details array with per-field messages.
| Status | Meaning | Example Response |
|---|---|---|
| 400 | Bad Request | { "error": "Validation failed", "details": [{ "field": "price", "message": "Must be a positive number" }] } |
| 401 | Unauthorized | { "error": "Missing or invalid API key" } |
| 403 | Forbidden | { "error": "Email not verified" } |
| 404 | Not Found | { "error": "Skill not found" } |
| 429 | Rate Limit Exceeded | { "error": "Rate limit exceeded", "resetAt": "2026-07-22T12:30:00Z" } |
| 500 | Server Error | { "error": "Internal server error" } |
Ready to start building?
Create an API key and start managing your skills programmatically.
Get Your API Key