# Publish a skill bundle

> Validate a staged bundle and atomically replace the live bundle. Syncs name and description from the frontmatter and snapshots a version.

Source: https://docs.generalinput.com/api/skills/publish



<Endpoint method="POST" path="/v1/skills/:id/publish" />

<Access scope="skills:manage" />

## Body [#body]

| Field       | Type   | Required |
| ----------- | ------ | -------- |
| `bundleKey` | string | yes      |

## Response [#response]

```json
{ "ok": true, "skill": { "id": "skl_01HX…", "version": 5, "…": "…" } }
```

An invalid bundle is a `200` with `{ "ok": false, "reason": "invalid", "errors": [...] }`. Nothing changes.

## Errors [#errors]

| Status | When                                     |
| ------ | ---------------------------------------- |
| `404`  | Not found, or the member cannot edit it. |
| `409`  | Modified concurrently.                   |
