---
title: "Remove a skill from the caller's library"
method: DELETE
path: "/api/v1/library/{owner}/{name}"
tags: ["Library"]
---

# Remove a skill from the caller's library

`DELETE /api/v1/library/{owner}/{name}`

## Request

- Base URL: `https://skillrepo.dev`
- URL: `https://skillrepo.dev/api/v1/library/{owner}/{name}`
- Auth: HTTP bearer

Removes a skill from the authenticated account's library and records a removal tombstone that the next bulk sync will surface in the `removals` array.

Idempotent: retrying a delete on a skill already removed returns 404 with `code: not_in_library`. Clients treating 404 as a success for retries is acceptable — no state is lost.

## Path parameters

- `owner` string, required
- `name` string, required

## Response `200`

Skill removed.

- RemoveLibrarySuccessResponse: Response returned after successfully removing a skill from the library.
  - `removed` object, required
    - `owner` string, required
    - `name` string, required
    - `removedAt` string, date-time, required

## Other responses

- `401`: Missing or invalid authentication. For routes that require `bearerAccessKey` or `bearerCatalogKey`.
- `403`: Authenticated, but the key lacks the required scope or the account is suspended. Use `code` to distinguish: `insufficient_scope`, `account_suspended`, `plan_limit`.
- `404`: Resource does not exist, OR exists but the caller has no permission to see it. Private resources return 404 (never 403) to avoid leaking existence.
- `429`: Rate limit exceeded on the route's bucket. Includes `X-RateLimit-*` headers indicating the limit, remaining, and reset time.

---

[API](https://skmtc.dev/skillrepo/apis/skillrepo-api.md) · [All operations](https://skmtc.dev/skillrepo/apis/skillrepo-api/llms.txt) · [OpenAPI document](https://skmtc.dev/skillrepo/apis/skillrepo-api/revisions/b62bac246918?raw)
