---
title: "Publish a capsule as a skill (enabling it when needed), optionally under a chosen name"
method: POST
path: "/api/preview/capsules/{id}/skill/publish"
tags: ["capsule"]
---

# Publish a capsule as a skill (enabling it when needed), optionally under a chosen name

`POST /api/preview/capsules/{id}/skill/publish`

## Request

- Base URL: `https://symbol.chat` (the document declares no server; this is the origin it was published from)
- URL: `https://symbol.chat/api/preview/capsules/{id}/skill/publish`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `__Secure-next-auth.session-token`
  - OAuth 2
    - Authorization code: `https://mcp.symbol.chat/authorize`
    - Token URL: `https://mcp.symbol.chat/token`
- TypeScript: <https://skmtc.dev/symbol-chat/apis/symbol-api/docs/api/preview/capsules/:id/skill/publish/post.ts> (a function with typed inputs; its response is checked against the schema)

## Path parameters

- `id` string, required: UUID v4 string

## Request body

- object
  - `name` string, nullable: The skill's name: lowercase letters, digits and single hyphens, at most 64 characters, not `claude` or `anthropic`.
  - `requestId` string: Idempotency key: a retried publish with the same id takes effect once.
  - `review` object: The confirmation that the code this publish changes was reviewed, copied from the release preview in the marketplace settings. Accepted only from a person signed in on the web, and only while the plugin still matches what was reviewed.
    - `candidateDigest` string, required
    - `confirmedChanges` integer, required
    - `reviewerUserId` string
    - `servedGeneration` integer, nullable, required

## Response `200`

Successful response

- object
  - `status` object, required
    - `blockedCode` string, nullable, required
    - `blockedReason` string, nullable, required
    - `blockers` object[], required
    - `delivery` object, nullable, required
    - `derivedName` string, nullable, required
    - `drifted` boolean, required
    - `enabled` boolean, required
    - `inMarketplace` boolean, required
    - `nameFrozenMismatch` boolean, required
    - `nameSource` 'chosen' | 'derived', required
    - `publishable` boolean, required
    - `publishedVersionNum` integer, nullable, required
    - `republishRefused` string, nullable
    - `skillName` string, nullable, required
    - `state` 'draft' | 'published' | 'stale' | 'pending' | 'failed' | 'unknown', nullable, required
    - `warnings` string[], required

## Changes

- **2026-11-13** `24536ef7ac40`: 2 info
  - added the new optional request property `requestId`
  - added the new optional request property `review`
- **2026-10-27** `3a2c4ebeab51`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/symbol-chat/apis/symbol-api/changes/api/preview/capsules/:id/skill/publish/post.md)

---

[API](https://skmtc.dev/symbol-chat/apis/symbol-api.md) - [All operations](https://skmtc.dev/symbol-chat/apis/symbol-api/llms.txt) - [OpenAPI document](https://skmtc.dev/symbol-chat/apis/symbol-api/revisions/3ae8310b31e1?raw)
