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

# Create Skill

`POST /skills`

## Request

- Base URL: `https://api.openai.com/v1`
- URL: `https://api.openai.com/v1/skills`
- Auth: HTTP bearer

Create a new skill.

## Request body

- CreateSkillBody: Uploads a skill either as a directory (multipart `files[]`) or as a single zip file.
  - `files` union, required
    - string[]: Skill files to upload (directory upload) or a single zip file.
    - string, binary: Skill zip file to upload.

## Response `200`

Success

- SkillResource
  - `id` string, required: Unique identifier for the skill.
  - `object` 'skill', required: The object type, which is `skill`.
  - `name` string, required: Name of the skill.
  - `description` string, required: Description of the skill.
  - `created_at` integer, required: Unix timestamp (seconds) for when the skill was created.
  - `default_version` string, required: Default version for the skill.
  - `latest_version` string, required: Latest version for the skill.

## Other responses

- `400`: The uploaded skill files or archive are invalid.
- `429`: The request was rejected because a rate limit was exceeded.
- `500`: The skill could not be saved.

## Changes

- **2026-10-06** `487892d3954e`: 3 info
  - added the optional property `error/misalignment/review_target` to the response with the `400` status
  - added the optional property `error/misalignment/review_target` to the response with the `429` status
  - added the optional property `error/misalignment/review_target` to the response with the `500` status
- **2026-10-05** `7f654af7f94f`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/omnistack-sh/apis/openai-api/changes/skills/post.md)

---

[API](https://skmtc.dev/omnistack-sh/apis/openai-api.md) - [All operations](https://skmtc.dev/omnistack-sh/apis/openai-api/llms.txt) - [OpenAPI document](https://skmtc.dev/omnistack-sh/apis/openai-api/revisions/0a26f104d35f?raw)
