---
title: "Put Custom Skill File"
method: PUT
path: "/skills/{public_id}/files/{path}"
tags: ["SKILLS"]
---

# Put Custom Skill File

`PUT /skills/{public_id}/files/{path}`

Write one file in a skill's bundle, leaving the other files untouched.

This is the operation an editor performs: change ``SKILL.md`` without
implying anything about ``references/`` or ``scripts/``. Use PATCH with
``files`` to replace a whole bundle.

## Path parameters

- `public_id` string, required
- `path` string, required

## Request body

- UpdateCustomSkillFileRequest — Replace one file inside a skill's bundle, leaving the rest alone. ``UpdateCustomSkillRequest.files`` replaces the whole bundle, which is right for a re-upload but destroys the other files when a client only means to edit one of them.
  - `content` string, required

## 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 bundle path
- `403` — Not the skill's creator
- `404` — Skill not found
- `422` — Validation Error

## Changes

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

[Change history](https://skmtc.dev/myaltimate/apis/fastapi/changes/skills/:public_id/files/:path/put.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)
