---
title: "Publish a skill (create or replace by name)"
method: POST
path: "/v1/skills"
tags: ["skills"]
---

# Publish a skill (create or replace by name)

`POST /v1/skills`

## Request

- Base URL: `https://api.typenode.ai`
- URL: `https://api.typenode.ai/v1/skills`
- Auth: HTTP bearer

## Headers

- `Idempotency-Key` string, uuid, required
- `If-Match` string

## Request body

- PublishSkill
  - `body` string, required
  - `description` string, required
  - `name` string, required

## Response `200`

The replaced same-name skill.

- Skill
  - `author` string, uuid, required
  - `content_hash` string, required
  - `created_at` string, required
  - `description` string, required
  - `id` string, uuid, required
  - `name` string, required
  - `updated_at` string, required
  - `version` integer, required

## Other responses

- `201`: The newly published skill.
- `400`: The skill body, Idempotency-Key, or strong skill If-Match value is invalid.
- `401`: Authentication required.
- `403`: The caller lacks skill.write.
- `409`: The idempotency key conflicts or the skill name is already in use.
- `412`: If-Match does not match the existing same-name skill's current version.
- `503`: The authority, skill metadata, or content store is temporarily unavailable.
- `default`: An error occurred (RFC 9457 problem+json).

---

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