Bulk library sync
Returns every skill the authenticated account can access (owned + library-added), with inline SKILL.md and supporting file contents.
Version selection: each skill is served at the account's approved version when the account's library holds one (an approved-version pin, set by a library lead), and at the publisher's current version otherwise. Accounts without pins — including every account on a plan without the approval workflow — always receive the current version; for them this endpoint behaves exactly as it did before pins existed. A recalled version is never served — whether recalled platform-wide by a SkillRepo admin or pulled back from this account's own fleet by its library lead (account-scoped; another account's recalls never affect this response): delivery falls back to the most recent earlier version that is not recalled, and a skill with no servable version left is absent from the response.
Delta sync: pass ?since=<ISO 8601> to restrict skills to those modified after that timestamp — including skills whose approved version changed — AND populate removals with skills removed from the library since that timestamp.
ETag / 304: the route emits an HTTP-level ETag on complete responses. Clients should send it back as If-None-Match on subsequent syncs; a match short-circuits to a 304 with no body. Incomplete responses (any skill with filesIncomplete: true) do NOT emit an ETag — the CLI is expected to re-sync instead of caching.
Skillset-scoped sync: pass ?skillset= (with repo) to serve the repo's declared skillset — a curated subset of the library — instead of the whole library. A skillset-scoped sync always returns the FULL resolved set: since is ignored and removals, pin rollbacks, and recalls are expressed by absence from skills, never by tombstones. The response carries a skillset object with the skipped-extras signal. The skillset-scoped ETag is a distinct opaque format from the whole-library one; If-None-Match / 304 revalidation works the same way.
Rate-limit bucket: sync (10/min per key — intentionally tight). Single-skill reads belong on /api/v1/skills/{owner}/{name}, which uses the looser cli-crud bucket.
Request
- Base URL: https://skillrepo.dev
- URL: https://skillrepo.dev/api/v1/library
- Auth: HTTP bearer
Query parameters
ISO 8601 timestamp. When present, switches to delta-sync mode: only skills updated after this time appear in skills, and removals is populated with tombstones newer than this time.
When 1, returns a metadata-only manifest: files is empty for every skill and NO delivery is recorded. Used by skillrepo list for a read-only drift check that must not affect sync state (#1832). A full (recording) sync omits this param.
Switches to skillset-scoped sync: resolves the named skillset (owner/name per the repo declaration's use pointer) and returns ONLY its curated set — members plus honored extra entries, with the authored-skill auto-include suppressed. Requires repo. Ignores since (a skillset-scoped sync always returns the full resolved set; removals are expressed by absence). Requires a skillset-capable plan and the skillset rollout flag; otherwise the request fails with 422 skillset_unresolvable.
The declaring repo's self-declared name (declaration name field). Required when skillset is present.
Repeatable; each entry an owner/name skill reference from the declaration's extra list. Honored only when the organization's extras toggle is on and the skill is in the caller's library (or authored by the caller's organization); unhonorable entries are skipped loudly via skillset.skippedExtras in the 200 response.
Headers
ETag from a previous sync. When it matches the current state, the route returns 304 with no body so clients can reuse their cached response.
Response
Full sync payload.
Example response
{
"skills": [
{
"files": [
{
"contentType": "text/markdown"
}
]
}
]
}Changes
No recorded changes to this operation across all 1 revision of this API.