API Reference
REST API for managing organizations, skills, members, and tokens.
Base URL: https://app.skillreg.dev/api/v1
Authentication: Bearer token in the Authorization header.
Authorization: Bearer sk_your_token_hereRate limits: 120 requests/min for API routes, 30 requests/min for search.
Authentication
/auth/whoamiGet the authenticated user and organization info.
Response
{
"user": { "id": "...", "email": "...", "name": "..." },
"org": { "id": "...", "slug": "acme", "name": "Acme Corp" }
}/auth/cli/initiateStart device authorization flow for CLI login.
Response
{
"deviceCode": "abc-123",
"userCode": "ABCD-1234",
"verificationUrl": "https://app.skillreg.dev/auth/device",
"expiresAt": "2026-01-01T00:10:00Z"
}/auth/cli/poll?device_code={code}Poll for CLI authentication completion.
Response
{ "status": "completed", "token": "sk_..." }Skills
/orgs/{orgSlug}/skillsList all skills in an organization.
| Parameter | Type | Description |
|---|---|---|
| page | number | Page number (default: 1) |
| limit | number | Items per page (default: 20) |
| search | string | Filter by name |
| tag | string | Filter by tag |
| sort | string | Sort: updated, name, downloads |
Response
{
"data": [{ "name": "code-reviewer", "description": "...", "latestVersion": "1.2.0" }],
"pagination": { "page": 1, "limit": 20, "total": 42 }
}/orgs/{orgSlug}/skills/{name}Get skill details with latest version metadata.
/orgs/{orgSlug}/skills/{name}Update skill metadata or deprecate a skill.
{ "description": "Updated description", "isDeprecated": true }/orgs/{orgSlug}/skills/{name}Delete a skill and all its versions.
Versions
/orgs/{orgSlug}/skills/{name}/versionsPublish a new version. Send as multipart/form-data with the tarball.
| Parameter | Type | Description |
|---|---|---|
| version | string | Semver version (required) |
| tarball | file | .tgz package (max 50MB) |
Response
{ "version": "1.2.0", "sha256": "a3f8c2...", "size": 12345 }/orgs/{orgSlug}/skills/{name}/versionsList all versions for a skill.
/orgs/{orgSlug}/skills/{name}/versions/{version}/downloadDownload the tarball for a specific version.
Collaboration
Collaboration MVP works on SKILL.md only. Contributors submit proposals, reviewers compose one candidate, then publish a normal official skill version from the web UI.
/orgs/{orgSlug}/skills/{name}/proposalsCreate a proposal from local SKILL.md content.
{
"title": "Clarify retries",
"intent": "Explain retry behavior",
"baseVersion": "1.4.0",
"skillMdContent": "---\nname: sync\nversion: 1.4.0\n---\n# Sync\n..."
}/orgs/{orgSlug}/skills/{name}/proposalsList proposals for a skill.
/orgs/{orgSlug}/skills/{name}/proposals/{proposalId}Get one proposal for a skill.
/orgs/{orgSlug}/proposals/{proposalId}Resolve a proposal by ID inside one organization.
/orgs/{orgSlug}/skills/{name}/candidateFetch or initialize the active candidate for reviewer workflows.
/orgs/{orgSlug}/skills/{name}/candidateSelect proposal IDs into the active candidate.
{ "proposalIds": ["proposal-a", "proposal-b"] }/orgs/{orgSlug}/skills/{name}/candidate/publishPublish the active candidate as one official version.
{ "bump": "patch", "changelog": "Clarify retries and examples" }Registry (npm-like)
/registry/{orgSlug}/{skillName}Publish a skill version via the registry protocol.
/registry/{orgSlug}/{skillName}Get skill metadata via the registry protocol.
Members
/orgs/{orgSlug}/membersList all members and pending invitations.
/orgs/{orgSlug}/membersInvite a member by email.
{ "email": "user@example.com", "role": "member" }/orgs/{orgSlug}/members/{userId}Change a member's role.
{ "role": "admin" }/orgs/{orgSlug}/members/{userId}Remove a member from the organization.
Tokens
/orgs/{orgSlug}/tokensList all API tokens for the organization.
/orgs/{orgSlug}/tokensCreate a new API token.
{ "name": "CI/CD Token", "scopes": ["read", "write"] }Response
{ "token": "sk_...", "id": "...", "name": "CI/CD Token" }/orgs/{orgSlug}/tokens/{tokenId}Revoke an API token.
Search
/search?q={query}&org={orgSlug}Full-text search across public skills. No authentication required. Rate limited to 30 req/min.
| Parameter | Type | Description |
|---|---|---|
| q | string | Search query (required) |
| org | string | Filter by organization (optional) |
| limit | number | Max results (default: 20) |
RBAC Permissions
| Action | Member | Admin | Owner |
|---|---|---|---|
| Read skills | Y | Y | Y |
| Download skills | Y | Y | Y |
| Publish skills | — | Y | Y |
| Delete skills | — | Y | Y |
| Manage members | — | Y | Y |
| Manage tokens | — | Y | Y |
| Org settings | — | — | Y |
| Delete org | — | — | Y |
Error Format
All errors follow a consistent format:
{
"error": {
"code": "NOT_FOUND",
"message": "Skill not found"
}
}| Code | HTTP | Description |
|---|---|---|
| UNAUTHORIZED | 401 | Missing or invalid token |
| FORBIDDEN | 403 | Insufficient permissions |
| NOT_FOUND | 404 | Resource not found |
| CONFLICT | 409 | Resource already exists |
| VALIDATION_ERROR | 422 | Invalid request body |
| RATE_LIMITED | 429 | Too many requests |
| INTERNAL_ERROR | 500 | Server error |