Developers

API documentation

Six JSON endpoints give you every published skill in the directory. No key, no signup, no quota dashboard. Requests are rate limited per IP address, and every response is CORS enabled so browser code can call it directly.

794 skills 18 categories 10 runtimes 6 execution types

Base URL

https://agentskillsource.com

Every endpoint is a real .php file under that origin. There is no versioned path prefix and no rewriting, so the URL you call is the file that answers.

Try it now

curl "https://agentskillsource.com/api/skills.php?limit=3"

Open that call in a new tab to see the live response.

GET List skills

Returns a page of published skills. This is the endpoint most integrations need.

https://agentskillsource.com/api/skills.php?runtime=cursor&limit=5
Parameters for List skills
Parameter Type Required Notes
q string No Free text search across name, description, tags, and author. Setting this switches the default sort to relevance.
category string No Canonical category slug. Legacy spellings are resolved automatically.
runtime string No Canonical runtime slug. github-copilot resolves to copilot, claude-code resolves to claude.
type string No Execution type slug. The legacy values scripted and mcp-server are accepted.
sort string No trending (default), popular, newest, oldest, rating, name, or relevance.
limit integer No 1 to 100. Defaults to 20.
offset integer No Zero based. Use with limit to page through results.

Rate limit: 60 requests per minute per IP address. Run this example

GET Get one skill

Returns the full record for a single published skill, including its content.

https://agentskillsource.com/api/skills.php?slug=moltbb-agent-diary-publish
Parameters for Get one skill
Parameter Type Required Notes
slug string One of The skill slug, as it appears in the skill page URL.
id string One of The internal skill id. Use slug unless you already stored the id.

Rate limit: 60 requests per minute per IP address. Run this example

GET List categories

Every active category and execution type, with a live published skill count.

https://agentskillsource.com/api/categories.php?type=outcome
Parameters for List categories
Parameter Type Required Notes
type string No outcome or execution. Omit to get both.

Rate limit: Not rate limited. Run this example

GET List runtimes

Every supported runtime, its install path, and a live published skill count.

https://agentskillsource.com/api/runtimes.php

This endpoint takes no parameters.

Rate limit: Not rate limited. Run this example

GET Download a skill package

Returns a ZIP containing SKILL.md and any files the skill ships with. Requires a signed in session, so it is a browser endpoint rather than a server to server one.

https://agentskillsource.com/api/download-skill.php?slug=moltbb-agent-diary-publish
Parameters for Download a skill package
Parameter Type Required Notes
slug string One of The skill slug.
id string One of The internal skill id.

Rate limit: 10 downloads per minute per IP address. Needs a signed in browser session, so it cannot be run from this page.

Valid slug values

These are the live values right now, taken from the same index the endpoints read. Legacy spellings resolve to the canonical slug automatically, so an old integration keeps working.

category

runtime

type

Errors and rate limits

Errors come back as JSON with an error key and the matching HTTP status. There is no partial success: either you get data, or you get error.

API error responses
Status Meaning What to do
200 Success. Read data and meta.
400 A parameter is missing or too short. Check the parameter table above. Search needs at least two characters.
404 No published skill matches that slug or id. The skill may have been unpublished. Fall back to the search endpoint.
405 Wrong HTTP method. Every read endpoint is GET only.
429 Rate limit exceeded. Back off and retry after 60 seconds. Cache responses rather than polling.
500 Something failed on our side. Retry once. If it persists, tell us and include the URL you called.

Integration recipes

Fetch the newest skills for one runtime

curl "https://agentskillsource.com/api/skills.php?runtime=cursor&sort=newest&limit=10"

Type ahead search in a browser

const res = await fetch(
  "https://agentskillsource.com/api/search.php?q=" + encodeURIComponent(term) + "&limit=8"
);
const { data } = await res.json();
// each item has: id, slug, name, url, shortDescription, tags

Page through every skill

let offset = 0;
const limit = 100;
for (;;) {
  const res = await fetch(
    "https://agentskillsource.com/api/skills.php?limit=" + limit + "&offset=" + offset
  );
  const { data, meta } = await res.json();
  handle(data);
  if (!meta.hasMore) break;
  offset += limit;
}

At 100 per page and 60 requests per minute, the full directory takes well under a minute. Cache the result rather than re-fetching it on every page load.

Embed a badge

Link your repository to its listing so readers can find the install instructions. Copy one of these into your README and replace the slug with your own.

Markdown

[![On Agent Skill Source](https://img.shields.io/badge/Agent%20Skill%20Source-listed-0F766E)](https://agentskillsource.com/skill.php?slug=moltbb-agent-diary-publish)

HTML

<a href="https://agentskillsource.com/skill.php?slug=moltbb-agent-diary-publish">View on Agent Skill Source</a>

The shields.io image is served by shields.io, not by us. If you would rather not depend on a third party, use the plain HTML link above.

Questions

Do I need an API key?

No. Every read endpoint is public and needs no key. Requests are rate limited per IP address instead, which is why caching matters more than authentication here.

Can I use this commercially?

Yes. Attribute Agent Skill Source and link back to the skill page. Each skill also carries its own upstream licence, returned in the single skill response, and that licence governs the skill content itself.

Is there a webhook or a change feed?

Not yet. Poll the list endpoint with sort=newest and compare the id values against what you already have. Once a day is plenty, because the directory is curated rather than continuously written.

Why do the endpoints end in .php?

Because that is the file that answers the request. The site has no URL rewriting, so every address you see is the real path on disk. That removes an entire class of routing bugs, and it means an endpoint URL can never quietly change meaning.

Are the old /api/v1/ paths still supported?

They redirect. /api/v1/skills returns a 301 to /api/skills.php. Most HTTP clients follow that automatically, but update your integration to the direct URL so you save a round trip.

Building something with this?

Tell us what you are building and what is missing from the API. That is how the next endpoint gets chosen.