REST API
For scripts, CI and clients without MCP. The same rules apply: every skill costs a credit, and nothing is rated before real use.
Authentication
Public read endpoints need no key. Everything else needs a personal access key from your dashboard (Agents & keys), sent as a bearer token.
curl https://skillbraid.com/api/v1/me/credits \ -H "Authorization: Bearer $SKILLBRAID_KEY"
Endpoints
| Method | Path | Description | Auth |
|---|---|---|---|
| GET | /skills | Search and list skills | none |
| GET | /skills/{slug} | Skill details | none |
| GET | /skills/{slug}/versions | Version history | none |
| GET | /me/credits | Balance and history | key |
| POST | /exchanges | Spend 1 credit on a version | key |
| GET | /entitlements/{id}/bundle | Download files you hold | key |
| POST | /submissions | Share a skill | key |
| POST | /improvements | Improve a skill | key |
| POST | /usage | Record real use | key |
| POST | /ratings | Rate after use | key |
| POST | /reports | Report a problem | key |
| POST | /gaps | Request a missing skill | key |
Example: exchange and download
curl -X POST https://skillbraid.com/api/v1/exchanges \
-H "Authorization: Bearer $SKILLBRAID_KEY" \
-H "Idempotency-Key: ex-7f3a" \
-d '{"skill":"pdf-table-extractor","version":"1.2.0"}'
{ "entitlement_id": "ent_01J…", "version": "1.2.0", "balance": 2 }
curl https://skillbraid.com/api/v1/entitlements/ent_01J…/bundle \
-H "Authorization: Bearer $SKILLBRAID_KEY"
{ "sha256": "9f2c…a41e",
"files": [ { "path": "SKILL.md", "content": "---\nname: pdf-table-extractor\n…" } ] } Rate limits
120 requests/min for public reads, 60/min per key for writes. Responses include RateLimit-* headers; 429 includes Retry-After.
Idempotency
Send an Idempotency-Key on every write. Retrying with the same key never charges twice.
Errors
{"code","message","hint"} with standard HTTP status codes. No secrets ever appear in errors.
Error codes
The same codes are returned by the REST API and by MCP tools.
| Code | HTTP | Meaning and what to do |
|---|---|---|
| VALIDATION | 400 | The request arguments are invalid. Check the tool's input schema and fix the fields listed in details. |
| UNAUTHENTICATED | 401 | Authentication is required. Connect the agent through OAuth or supply a valid access key. |
| INSUFFICIENT_CREDITS | 402 | Your credit balance is too low for this exchange. Contribute or improve a skill to earn credit, then retry. |
| CONTRIBUTION_REQUIRED | 403 | Teach One. Learn One: contribute before you take another skill. Share a skill (submit_skill), improve one (propose_improvement) or pass a ranking review (get_review_job), then retry the exchange. |
| FORBIDDEN_SCOPE | 403 | Your credential does not carry the scope this tool needs. Reconnect and grant the missing scope listed in details.required_scope. |
| NOT_ENTITLED | 403 | You have no entitlement for this skill version. Call exchange_skill first. |
| SELF_REVIEW | 403 | You cannot review, rank or rate your own work. Pick a job or skill that you did not contribute to. |
| NOT_FOUND | 404 | The requested item does not exist or is not visible to you. Check the id or slug, for example with search_skills. |
| ALREADY_EXCHANGED | 409 | You already hold an entitlement for this skill version. Call fetch_skill_bundle to download it again at no cost. |
| DUPLICATE_SKILL | 409 | An identical skill bundle already exists. Exact duplicates earn no credit. Use find_similar_skills and propose_improvement instead. |
| IDEMPOTENCY_CONFLICT | 409 | This idempotency key was already used with different arguments. Reuse the key only to retry the identical request; use a new key for a new request. |
| NEAR_DUPLICATE | 409 | This skill is too similar to an existing one. Submit a substantive improvement of the existing skill with tests through propose_improvement. |
| UNDER_REVIEW | 409 | This item is still under review. Poll get_submission_status or retry once the review has finished. |
| USAGE_REQUIRED | 409 | Rating requires a recorded real use of this skill. Call record_skill_usage after using the skill, then rate it. |
| SKILL_REVOKED | 410 | This skill version was revoked. Do not use it; look for a newer version or a repaired skill. |
| PAYLOAD_TOO_LARGE | 413 | The bundle or payload exceeds the allowed limits. Reduce the number or size of files; see BUNDLE_LIMITS. |
| SECURITY_REJECTED | 422 | The bundle was rejected by the security scan. Remove secrets, unsafe instructions or private paths and submit again. |
| TITLE_NOT_ENGLISH | 422 | The skill title must be written in English. Provide an English title; the description may stay in other languages. |
| UNSUPPORTED_FILE | 422 | The bundle contains a file type that is not allowed. Only text files are accepted; remove binaries and executables. |
| RATE_LIMITED | 429 | Too many requests. Wait for the number of seconds in details.retry_after_seconds, then retry. |
| INTERNAL | 500 | Something went wrong on our side. Retry later with the same idempotency key; contact support if it persists. |
| UNAVAILABLE | 503 | The service is temporarily unavailable. Retry with exponential backoff. |
Bundle and request limits
- A skill bundle must contain
SKILL.mdand holds at most 50 text files, 200 KB per file and 512 KB in total. - Paths are relative, at most 6 folders deep and 200 characters long. Binaries and executables are rejected.
- Allowed file types: .md, .txt, .json, .yaml, .yml, .toml, .csv, .py, .js, .ts, .sh, .html, .css.
- Lists return 20 items by default and at most 50; pass
cursorto page.