---
title: "Update Custom Skill"
method: PATCH
path: "/skills/{public_id}"
tags: ["SKILLS"]
---

# Update Custom Skill

`PATCH /skills/{public_id}`

Update a skill's name, description, bundle, privacy, or any combination.

Omitting ``files`` leaves S3 untouched, so a metadata-only change costs no
uploads.

## Path parameters

- `public_id` string, required

## Request body

- UpdateCustomSkillRequest — Update a skill's name, description, bundle, privacy, or any combination. Omitting ``files`` leaves the bundle untouched, which is how a metadata-only change avoids re-uploading to S3.
  - `name` string, nullable
  - `description` string, nullable
  - `files` CustomSkillFile[], nullable
    - `path` string, required
    - `content` string, required
  - `privacy` 'public' | 'private'

## Response `200`

Successful Response

- CustomSkillResponse
  - `skill` CustomSkillDetail, required — A skill plus its ``SKILL.md`` body, read from S3 on the detail view. The full ``files`` inventory lives here rather than on the summary: this is the only view that renders paths and sizes.
    - `public_id` string, required
    - `name` string, required
    - `description` string, nullable
    - `privacy` 'public' | 'private'
    - `file_count` integer
    - `source_ref` SkillSourceRef — Where an imported skill was copied from. Present only on skills imported from the public catalog; ``None`` means the skill was uploaded or written by hand. Carried on the list payload so the Skills table can attribute a row to its upstream origin without a second request, and so a renamed copy can still be traced back.
      - `repo` string, required
      - `path` string, required
      - `commit_sha` string, required
      - `imported_at` string, nullable
    - `created_by` integer, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `files` CustomSkillFileMeta[]
      - `path` string, required
      - `size` integer, required
    - `content` string, required
    - `attached_datamate_ids` integer[]

## Other responses

- `400` — Invalid skill bundle
- `403` — Not the skill's creator
- `404` — Skill not found
- `409` — Skill name already in use
- `422` — Validation Error

## Changes

- **2026-09-02** `fcb62c79da95` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/myaltimate/apis/fastapi/changes/skills/:public_id/patch.md)

---

[API](https://skmtc.dev/myaltimate/apis/fastapi.md) · [All operations](https://skmtc.dev/myaltimate/apis/fastapi/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/myaltimate/fastapi/revisions/fcb62c79da95/schema)
