---
title: "Create Skill"
method: POST
path: "/api/skills"
tags: ["skills"]
---

# Create Skill

`POST /api/skills`

## Request

- Base URL: `https://app.ctlsurf.com` (the document declares no server; this is the origin it was published from)
- URL: `https://app.ctlsurf.com/api/skills`
- Auth: HTTP bearer

Create a new skill.

## Request body

- SkillCreate: Create a new skill.
  - `name` string, required
  - `description` string, nullable
  - `category` string, nullable
  - `icon` string, nullable
  - `scope` 'personal' | 'project' | 'organization' | 'public': Skill visibility scope.
  - `definition` SkillDefinitionInput, required: The full skill definition stored as JSONB.
    - `version` string
    - `inputs` SkillInput[]
      - `name` string, required
      - `type` 'text' | 'number' | 'boolean' | 'file' | 'select', required: Input types for skill variables.
      - `description` string, nullable
      - `required` boolean
      - `default` unknown
      - `options` string[], nullable
    - `workflow` WorkflowStep[]
      - `type` string
      - `name` string, required
      - `title` string, required
      - `template` string, nullable
      - `description` string, nullable
    - `guards` string[]
  - `folder_id` string, uuid, nullable

## Response `201`

Successful Response

- SkillResponse: Skill response.
  - `name` string, required
  - `description` string, nullable
  - `category` string, nullable
  - `icon` string, nullable
  - `scope` 'personal' | 'project' | 'organization' | 'public': Skill visibility scope.
  - `definition` SkillDefinitionOutput, required: The full skill definition stored as JSONB.
    - `version` string
    - `inputs` SkillInput[]
      - `name` string, required
      - `type` 'text' | 'number' | 'boolean' | 'file' | 'select', required: Input types for skill variables.
      - `description` string, nullable
      - `required` boolean
      - `default` unknown
      - `options` string[], nullable
    - `workflow` WorkflowStep[]
      - `type` string
      - `name` string, required
      - `title` string, required
      - `template` string, nullable
      - `description` string, nullable
    - `guards` string[]
  - `id` string, uuid, required
  - `user_id` string, uuid, required
  - `folder_id` string, uuid, nullable
  - `org_id` string, uuid, nullable
  - `forked_from_id` string, uuid, nullable
  - `is_active` boolean
  - `is_verified` boolean
  - `linked_folder_ids` string[]
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/ctlsurf/apis/notebook-control-plane.md) · [All operations](https://skmtc.dev/ctlsurf/apis/notebook-control-plane/llms.txt) · [OpenAPI document](https://skmtc.dev/ctlsurf/apis/notebook-control-plane/revisions/ddfbbe20d5ce?raw)
