OpenAI Skills API

The Skills API from OpenAI — 6 operation(s) for skills.

Operations 11

POST /skills Create a new skill. #
GET /skills List all skills for the current project. #
DELETE /skills/{skill_id} Delete a skill by its ID. #
GET /skills/{skill_id} Get a skill by its ID. #
POST /skills/{skill_id} Update the default version pointer for a skill. #
GET /skills/{skill_id}/content Download a skill zip bundle by its ID. #
POST /skills/{skill_id}/versions Create a new immutable skill version. #
GET /skills/{skill_id}/versions List skill versions for a skill. #
GET /skills/{skill_id}/versions/{version} Get a specific skill version. #
DELETE /skills/{skill_id}/versions/{version} Delete a skill version. #
GET /skills/{skill_id}/versions/{version}/content Download a skill version zip bundle. #

Documentation

📖
Documentation
https://platform.openai.com/docs/assistants/overview
📖
Documentation
https://platform.openai.com/docs/api-reference/assistants
📖
Documentation
https://platform.openai.com/docs/guides/text-to-speech
📖
Documentation
https://platform.openai.com/docs/api-reference/audio
📖
Documentation
https://platform.openai.com/docs/guides/speech-to-text
📖
Documentation
https://developers.openai.com/api/docs/guides/audio/
📖
Documentation
https://developers.openai.com/api/docs/guides/voice-agents/
📖
Documentation
https://platform.openai.com/docs/api-reference/chat
📖
Documentation
https://platform.openai.com/docs/guides/embeddings
📖
Documentation
https://platform.openai.com/docs/api-reference/embeddings
📖
Documentation
https://platform.openai.com/docs/api-reference/files
📖
Documentation
https://platform.openai.com/docs/guides/fine-tuning
📖
Documentation
https://platform.openai.com/docs/api-reference/fine-tuning
📖
Documentation
https://platform.openai.com/docs/guides/images
📖
Documentation
https://platform.openai.com/docs/api-reference/images
📖
Documentation
https://platform.openai.com/docs/guides/image-generation
📖
Documentation
https://platform.openai.com/docs/guides/images-vision
📖
Documentation
https://platform.openai.com/docs/models
📖
Documentation
https://platform.openai.com/docs/api-reference/models
📖
Documentation
https://platform.openai.com/docs/assistants/how-it-works/managing-threads-and-messages
📖
Documentation
https://platform.openai.com/docs/api-reference/threads
📖
Documentation
https://platform.openai.com/docs/api-reference/completions

Specifications

Schemas & Data

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/openai-skills-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

openai-skills-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: OpenAI Skills API
  description: The OpenAI REST API. Please see https://platform.openai.com/docs/api-reference for more details.
  version: 2.3.0
  termsOfService: https://openai.com/policies/terms-of-use
  contact:
    name: OpenAI Support
    url: https://help.openai.com/
  license:
    name: MIT
    url: https://github.com/openai/openai-openapi/blob/master/LICENSE
servers:
- url: https://api.openai.com/v1
security:
- ApiKeyAuth: []
tags:
- name: Skills
paths:
  /skills:
    post:
      tags:
      - Skills
      summary: Create a new skill.
      operationId: CreateSkill
      parameters: []
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CreateSkillBody'
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSkillBody'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SkillResource'
      x-oaiMeta:
        examples:
          response: ''
          request:
            node.js: "import OpenAI from 'openai';\n\nconst client = new OpenAI({\n  apiKey: process.env['OPENAI_API_KEY'], // This is the default and can be omitted\n});\n\nconst skill = await client.skills.create();\n\nconsole.log(skill.id);"
            python: "import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ.get(\"OPENAI_API_KEY\"),  # This is the default and can be omitted\n)\nskill = client.skills.create()\nprint(skill.id)"
            go: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/openai/openai-go\"\n\t\"github.com/openai/openai-go/option\"\n)\n\nfunc main() {\n\tclient := openai.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tskill, err := client.Skills.New(context.TODO(), openai.SkillNewParams{})\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", skill.ID)\n}\n"
            java: "package com.openai.example;\n\nimport com.openai.client.OpenAIClient;\nimport com.openai.client.okhttp.OpenAIOkHttpClient;\nimport com.openai.models.skills.Skill;\nimport com.openai.models.skills.SkillCreateParams;\n\npublic final class Main {\n    private Main() {}\n\n    public static void main(String[] args) {\n        OpenAIClient client = OpenAIOkHttpClient.fromEnv();\n\n        Skill skill = client.skills().create();\n    }\n}"
            ruby: 'require "openai"


              openai = OpenAI::Client.new(api_key: "My API Key")


              skill = openai.skills.create


              puts(skill)'
    get:
      tags:
      - Skills
      summary: List all skills for the current project.
      operationId: ListSkills
      parameters:
      - name: limit
        in: query
        description: Number of items to retrieve
        required: false
        schema:
          type: integer
          minimum: 0
          maximum: 100
      - name: order
        in: query
        description: Sort order of results by timestamp. Use `asc` for ascending order or `desc` for descending order.
        required: false
        schema:
          $ref: '#/components/schemas/OrderEnum'
      - name: after
        in: query
        description: Identifier for the last item from the previous pagination request
        required: false
        schema:
          description: Identifier for the last item from the previous pagination request
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SkillListResource'
      x-oaiMeta:
        examples:
          response: ''
          request:
            node.js: "import OpenAI from 'openai';\n\nconst client = new OpenAI({\n  apiKey: process.env['OPENAI_API_KEY'], // This is the default and can be omitted\n});\n\n// Automatically fetches more pages as needed.\nfor await (const skill of client.skills.list()) {\n  console.log(skill.id);\n}"
            python: "import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ.get(\"OPENAI_API_KEY\"),  # This is the default and can be omitted\n)\npage = client.skills.list()\npage = page.data[0]\nprint(page.id)"
            go: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/openai/openai-go\"\n\t\"github.com/openai/openai-go/option\"\n)\n\nfunc main() {\n\tclient := openai.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tpage, err := client.Skills.List(context.TODO(), openai.SkillListParams{})\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", page)\n}\n"
            java: "package com.openai.example;\n\nimport com.openai.client.OpenAIClient;\nimport com.openai.client.okhttp.OpenAIOkHttpClient;\nimport com.openai.models.skills.SkillListPage;\nimport com.openai.models.skills.SkillListParams;\n\npublic final class Main {\n    private Main() {}\n\n    public static void main(String[] args) {\n        OpenAIClient client = OpenAIOkHttpClient.fromEnv();\n\n        SkillListPage page = client.skills().list();\n    }\n}"
            ruby: 'require "openai"


              openai = OpenAI::Client.new(api_key: "My API Key")


              page = openai.skills.list


              puts(page)'
  /skills/{skill_id}:
    delete:
      tags:
      - Skills
      summary: Delete a skill by its ID.
      operationId: DeleteSkill
      parameters:
      - name: skill_id
        in: path
        description: The identifier of the skill to delete.
        required: true
        schema:
          example: skill_123
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeletedSkillResource'
      x-oaiMeta:
        examples:
          response: ''
          request:
            node.js: "import OpenAI from 'openai';\n\nconst client = new OpenAI({\n  apiKey: process.env['OPENAI_API_KEY'], // This is the default and can be omitted\n});\n\nconst deletedSkill = await client.skills.delete('skill_123');\n\nconsole.log(deletedSkill.id);"
            python: "import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ.get(\"OPENAI_API_KEY\"),  # This is the default and can be omitted\n)\ndeleted_skill = client.skills.delete(\n    \"skill_123\",\n)\nprint(deleted_skill.id)"
            go: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/openai/openai-go\"\n\t\"github.com/openai/openai-go/option\"\n)\n\nfunc main() {\n\tclient := openai.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tdeletedSkill, err := client.Skills.Delete(context.TODO(), \"skill_123\")\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", deletedSkill.ID)\n}\n"
            java: "package com.openai.example;\n\nimport com.openai.client.OpenAIClient;\nimport com.openai.client.okhttp.OpenAIOkHttpClient;\nimport com.openai.models.skills.DeletedSkill;\nimport com.openai.models.skills.SkillDeleteParams;\n\npublic final class Main {\n    private Main() {}\n\n    public static void main(String[] args) {\n        OpenAIClient client = OpenAIOkHttpClient.fromEnv();\n\n        DeletedSkill deletedSkill = client.skills().delete(\"skill_123\");\n    }\n}"
            ruby: 'require "openai"


              openai = OpenAI::Client.new(api_key: "My API Key")


              deleted_skill = openai.skills.delete("skill_123")


              puts(deleted_skill)'
    get:
      tags:
      - Skills
      summary: Get a skill by its ID.
      operationId: GetSkill
      parameters:
      - name: skill_id
        in: path
        description: The identifier of the skill to retrieve.
        required: true
        schema:
          example: skill_123
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SkillResource'
      x-oaiMeta:
        examples:
          response: ''
          request:
            node.js: "import OpenAI from 'openai';\n\nconst client = new OpenAI({\n  apiKey: process.env['OPENAI_API_KEY'], // This is the default and can be omitted\n});\n\nconst skill = await client.skills.retrieve('skill_123');\n\nconsole.log(skill.id);"
            python: "import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ.get(\"OPENAI_API_KEY\"),  # This is the default and can be omitted\n)\nskill = client.skills.retrieve(\n    \"skill_123\",\n)\nprint(skill.id)"
            go: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/openai/openai-go\"\n\t\"github.com/openai/openai-go/option\"\n)\n\nfunc main() {\n\tclient := openai.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tskill, err := client.Skills.Get(context.TODO(), \"skill_123\")\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", skill.ID)\n}\n"
            java: "package com.openai.example;\n\nimport com.openai.client.OpenAIClient;\nimport com.openai.client.okhttp.OpenAIOkHttpClient;\nimport com.openai.models.skills.Skill;\nimport com.openai.models.skills.SkillRetrieveParams;\n\npublic final class Main {\n    private Main() {}\n\n    public static void main(String[] args) {\n        OpenAIClient client = OpenAIOkHttpClient.fromEnv();\n\n        Skill skill = client.skills().retrieve(\"skill_123\");\n    }\n}"
            ruby: 'require "openai"


              openai = OpenAI::Client.new(api_key: "My API Key")


              skill = openai.skills.retrieve("skill_123")


              puts(skill)'
    post:
      tags:
      - Skills
      summary: Update the default version pointer for a skill.
      operationId: UpdateSkillDefaultVersion
      parameters:
      - name: skill_id
        in: path
        description: The identifier of the skill.
        required: true
        schema:
          example: skill_123
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SetDefaultSkillVersionBody'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/SetDefaultSkillVersionBody'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SkillResource'
      x-oaiMeta:
        examples:
          response: ''
          request:
            node.js: "import OpenAI from 'openai';\n\nconst client = new OpenAI({\n  apiKey: process.env['OPENAI_API_KEY'], // This is the default and can be omitted\n});\n\nconst skill = await client.skills.update('skill_123', { default_version: 'default_version' });\n\nconsole.log(skill.id);"
            python: "import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ.get(\"OPENAI_API_KEY\"),  # This is the default and can be omitted\n)\nskill = client.skills.update(\n    skill_id=\"skill_123\",\n    default_version=\"default_version\",\n)\nprint(skill.id)"
            go: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/openai/openai-go\"\n\t\"github.com/openai/openai-go/option\"\n)\n\nfunc main() {\n\tclient := openai.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tskill, err := client.Skills.Update(\n\t\tcontext.TODO(),\n\t\t\"skill_123\",\n\t\topenai.SkillUpdateParams{\n\t\t\tDefaultVersion: \"default_version\",\n\t\t},\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", skill.ID)\n}\n"
            java: "package com.openai.example;\n\nimport com.openai.client.OpenAIClient;\nimport com.openai.client.okhttp.OpenAIOkHttpClient;\nimport com.openai.models.skills.Skill;\nimport com.openai.models.skills.SkillUpdateParams;\n\npublic final class Main {\n    private Main() {}\n\n    public static void main(String[] args) {\n        OpenAIClient client = OpenAIOkHttpClient.fromEnv();\n\n        SkillUpdateParams params = SkillUpdateParams.builder()\n            .skillId(\"skill_123\")\n            .defaultVersion(\"default_version\")\n            .build();\n        Skill skill = client.skills().update(params);\n    }\n}"
            ruby: 'require "openai"


              openai = OpenAI::Client.new(api_key: "My API Key")


              skill = openai.skills.update("skill_123", default_version: "default_version")


              puts(skill)'
  /skills/{skill_id}/content:
    get:
      tags:
      - Skills
      summary: Download a skill zip bundle by its ID.
      operationId: GetSkillContent
      parameters:
      - name: skill_id
        in: path
        description: The identifier of the skill to download.
        required: true
        schema:
          example: skill_123
          type: string
      responses:
        '200':
          description: The skill zip bundle.
          content:
            application/zip:
              schema:
                type: string
                format: binary
            application/json:
              schema:
                type: string
      x-oaiMeta:
        examples:
          response: ''
          request:
            node.js: "import OpenAI from 'openai';\n\nconst client = new OpenAI({\n  apiKey: process.env['OPENAI_API_KEY'], // This is the default and can be omitted\n});\n\nconst content = await client.skills.content.retrieve('skill_123');\n\nconsole.log(content);\n\nconst data = await content.blob();\nconsole.log(data);"
            python: "import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ.get(\"OPENAI_API_KEY\"),  # This is the default and can be omitted\n)\ncontent = client.skills.content.retrieve(\n    \"skill_123\",\n)\nprint(content)\ndata = content.read()\nprint(data)"
            go: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/openai/openai-go\"\n\t\"github.com/openai/openai-go/option\"\n)\n\nfunc main() {\n\tclient := openai.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tcontent, err := client.Skills.Content.Get(context.TODO(), \"skill_123\")\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", content)\n}\n"
            java: "package com.openai.example;\n\nimport com.openai.client.OpenAIClient;\nimport com.openai.client.okhttp.OpenAIOkHttpClient;\nimport com.openai.core.http.HttpResponse;\nimport com.openai.models.skills.content.ContentRetrieveParams;\n\npublic final class Main {\n    private Main() {}\n\n    public static void main(String[] args) {\n        OpenAIClient client = OpenAIOkHttpClient.fromEnv();\n\n        HttpResponse content = client.skills().content().retrieve(\"skill_123\");\n    }\n}"
            ruby: 'require "openai"


              openai = OpenAI::Client.new(api_key: "My API Key")


              content = openai.skills.content.retrieve("skill_123")


              puts(content)'
  /skills/{skill_id}/versions:
    post:
      tags:
      - Skills
      summary: Create a new immutable skill version.
      operationId: CreateSkillVersion
      parameters:
      - name: skill_id
        in: path
        description: The identifier of the skill to version.
        required: true
        schema:
          example: skill_123
          type: string
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CreateSkillVersionBody'
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSkillVersionBody'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SkillVersionResource'
      x-oaiMeta:
        examples:
          response: ''
          request:
            node.js: "import OpenAI from 'openai';\n\nconst client = new OpenAI({\n  apiKey: process.env['OPENAI_API_KEY'], // This is the default and can be omitted\n});\n\nconst skillVersion = await client.skills.versions.create('skill_123');\n\nconsole.log(skillVersion.id);"
            python: "import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ.get(\"OPENAI_API_KEY\"),  # This is the default and can be omitted\n)\nskill_version = client.skills.versions.create(\n    skill_id=\"skill_123\",\n)\nprint(skill_version.id)"
            go: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/openai/openai-go\"\n\t\"github.com/openai/openai-go/option\"\n)\n\nfunc main() {\n\tclient := openai.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tskillVersion, err := client.Skills.Versions.New(\n\t\tcontext.TODO(),\n\t\t\"skill_123\",\n\t\topenai.SkillVersionNewParams{},\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", skillVersion.ID)\n}\n"
            java: "package com.openai.example;\n\nimport com.openai.client.OpenAIClient;\nimport com.openai.client.okhttp.OpenAIOkHttpClient;\nimport com.openai.models.skills.versions.SkillVersion;\nimport com.openai.models.skills.versions.VersionCreateParams;\n\npublic final class Main {\n    private Main() {}\n\n    public static void main(String[] args) {\n        OpenAIClient client = OpenAIOkHttpClient.fromEnv();\n\n        SkillVersion skillVersion = client.skills().versions().create(\"skill_123\");\n    }\n}"
            ruby: 'require "openai"


              openai = OpenAI::Client.new(api_key: "My API Key")


              skill_version = openai.skills.versions.create("skill_123")


              puts(skill_version)'
    get:
      tags:
      - Skills
      summary: List skill versions for a skill.
      operationId: ListSkillVersions
      parameters:
      - name: skill_id
        in: path
        description: The identifier of the skill.
        required: true
        schema:
          example: skill_123
          type: string
      - name: limit
        in: query
        description: Number of versions to retrieve.
        required: false
        schema:
          type: integer
          minimum: 0
          maximum: 100
      - name: order
        in: query
        description: Sort order of results by version number.
        required: false
        schema:
          $ref: '#/components/schemas/OrderEnum'
      - name: after
        in: query
        description: The skill version ID to start after.
        required: false
        schema:
          example: skillver_123
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SkillVersionListResource'
      x-oaiMeta:
        examples:
          response: ''
          request:
            node.js: "import OpenAI from 'openai';\n\nconst client = new OpenAI({\n  apiKey: process.env['OPENAI_API_KEY'], // This is the default and can be omitted\n});\n\n// Automatically fetches more pages as needed.\nfor await (const skillVersion of client.skills.versions.list('skill_123')) {\n  console.log(skillVersion.id);\n}"
            python: "import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ.get(\"OPENAI_API_KEY\"),  # This is the default and can be omitted\n)\npage = client.skills.versions.list(\n    skill_id=\"skill_123\",\n)\npage = page.data[0]\nprint(page.id)"
            go: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/openai/openai-go\"\n\t\"github.com/openai/openai-go/option\"\n)\n\nfunc main() {\n\tclient := openai.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tpage, err := client.Skills.Versions.List(\n\t\tcontext.TODO(),\n\t\t\"skill_123\",\n\t\topenai.SkillVersionListParams{},\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", page)\n}\n"
            java: "package com.openai.example;\n\nimport com.openai.client.OpenAIClient;\nimport com.openai.client.okhttp.OpenAIOkHttpClient;\nimport com.openai.models.skills.versions.VersionListPage;\nimport com.openai.models.skills.versions.VersionListParams;\n\npublic final class Main {\n    private Main() {}\n\n    public static void main(String[] args) {\n        OpenAIClient client = OpenAIOkHttpClient.fromEnv();\n\n        VersionListPage page = client.skills().versions().list(\"skill_123\");\n    }\n}"
            ruby: 'require "openai"


              openai = OpenAI::Client.new(api_key: "My API Key")


              page = openai.skills.versions.list("skill_123")


              puts(page)'
  /skills/{skill_id}/versions/{version}:
    get:
      tags:
      - Skills
      summary: Get a specific skill version.
      operationId: GetSkillVersion
      parameters:
      - name: skill_id
        in: path
        description: The identifier of the skill.
        required: true
        schema:
          example: skill_123
          type: string
      - name: version
        in: path
        description: The version number to retrieve.
        required: true
        schema:
          description: The version number to retrieve.
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SkillVersionResource'
      x-oaiMeta:
        examples:
          response: ''
          request:
            node.js: "import OpenAI from 'openai';\n\nconst client = new OpenAI({\n  apiKey: process.env['OPENAI_API_KEY'], // This is the default and can be omitted\n});\n\nconst skillVersion = await client.skills.versions.retrieve('version', { skill_id: 'skill_123' });\n\nconsole.log(skillVersion.id);"
            python: "import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ.get(\"OPENAI_API_KEY\"),  # This is the default and can be omitted\n)\nskill_version = client.skills.versions.retrieve(\n    version=\"version\",\n    skill_id=\"skill_123\",\n)\nprint(skill_version.id)"
            go: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/openai/openai-go\"\n\t\"github.com/openai/openai-go/option\"\n)\n\nfunc main() {\n\tclient := openai.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tskillVersion, err := client.Skills.Versions.Get(\n\t\tcontext.TODO(),\n\t\t\"skill_123\",\n\t\t\"version\",\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", skillVersion.ID)\n}\n"
            java: "package com.openai.example;\n\nimport com.openai.client.OpenAIClient;\nimport com.openai.client.okhttp.OpenAIOkHttpClient;\nimport com.openai.models.skills.versions.SkillVersion;\nimport com.openai.models.skills.versions.VersionRetrieveParams;\n\npublic final class Main {\n    private Main() {}\n\n    public static void main(String[] args) {\n        OpenAIClient client = OpenAIOkHttpClient.fromEnv();\n\n        VersionRetrieveParams params = VersionRetrieveParams.builder()\n            .skillId(\"skill_123\")\n            .version(\"version\")\n            .build();\n        SkillVersion skillVersion = client.skills().versions().retrieve(params);\n    }\n}"
            ruby: 'require "openai"


              openai = OpenAI::Client.new(api_key: "My API Key")


              skill_version = openai.skills.versions.retrieve("version", skill_id: "skill_123")


              puts(skill_version)'
    delete:
      tags:
      - Skills
      summary: Delete a skill version.
      operationId: DeleteSkillVersion
      parameters:
      - name: skill_id
        in: path
        description: The identifier of the skill.
        required: true
        schema:
          example: skill_123
          type: string
      - name: version
        in: path
        description: The skill version number.
        required: true
        schema:
          description: The skill version number.
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeletedSkillVersionResource'
      x-oaiMeta:
        examples:
          response: ''
          request:
            node.js: "import OpenAI from 'openai';\n\nconst client = new OpenAI({\n  apiKey: process.env['OPENAI_API_KEY'], // This is the default and can be omitted\n});\n\nconst deletedSkillVersion = await client.skills.versions.delete('version', {\n  skill_id: 'skill_123',\n});\n\nconsole.log(deletedSkillVersion.id);"
            python: "import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ.get(\"OPENAI_API_KEY\"),  # This is the default and can be omitted\n)\ndeleted_skill_version = client.skills.versions.delete(\n    version=\"version\",\n    skill_id=\"skill_123\",\n)\nprint(deleted_skill_version.id)"
            go: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/openai/openai-go\"\n\t\"github.com/openai/openai-go/option\"\n)\n\nfunc main() {\n\tclient := openai.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tdeletedSkillVersion, err := client.Skills.Versions.Delete(\n\t\tcontext.TODO(),\n\t\t\"skill_123\",\n\t\t\"version\",\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", deletedSkillVersion.ID)\n}\n"
            java: "package com.openai.example;\n\nimport com.openai.client.OpenAIClient;\nimport com.openai.client.okhttp.OpenAIOkHttpClient;\nimport com.openai.models.skills.versions.DeletedSkillVersion;\nimport com.openai.models.skills.versions.VersionDeleteParams;\n\npublic final class Main {\n    private Main() {}\n\n    public static void main(String[] args) {\n        OpenAIClient client = OpenAIOkHttpClient.fromEnv();\n\n        VersionDeleteParams params = VersionDeleteParams.builder()\n            .skillId(\"skill_123\")\n            .version(\"version\")\n            .build();\n        DeletedSkillVersion deletedSkillVersion = client.skills().versions().delete(params);\n    }\n}"
            ruby: 'require "openai"


              openai = OpenAI::Client.new(api_key: "My API Key")


              deleted_skill_version = openai.skills.versions.delete("version", skill_id: "skill_123")


              puts(deleted_skill_version)'
  /skills/{skill_id}/versions/{version}/content:
    get:
      tags:
      - Skills
      summary: Download a skill version zip bundle.
      operationId: GetSkillVersionContent
      parameters:
      - name: skill_id
        in: path
        description: The identifier of the skill.
        required: true
        schema:
          example: skill_123
          type: string
      - name: version
        in: path
        description: The skill version number.
        required: true
        schema:
          description: The skill version number.
          type: string
      responses:
        '200':
          description: The skill zip bundle.
          content:
            application/zip:
              schema:
                type: string
                format: binary
            application/json:
              schema:
                type: string
      x-oaiMeta:
        examples:
          response: ''
          request:
            node.js: "import OpenAI from 'openai';\n\nconst client = new OpenAI({\n  apiKey: process.env['OPENAI_API_KEY'], // This is the default and can be omitted\n});\n\nconst content = await client.skills.versions.content.retrieve('version', { skill_id: 'skill_123' });\n\nconsole.log(content);\n\nconst data = await content.blob();\nconsole.log(data);"
            python: "import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ.get(\"OPENAI_API_KEY\"),  # This is the default and can be omitted\n)\ncontent = client.skills.versions.content.retrieve(\n    version=\"version\",\n    skill_id=\"skill_123\",\n)\nprint(content)\ndata = content.read()\nprint(data)"
            go: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/openai/openai-go\"\n\t\"github.com/openai/openai-go/option\"\n)\n\nfunc main() {\n\tclient := openai.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tcontent, err := client.Skills.Versions.Content.Get(\n\t\tcontext.TODO(),\n\t\t\"skill_123\",\n\t\t\"version\",\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", content)\n}\n"
            java: "package com.openai.example;\n\nimport com.openai.client.OpenAIClient;\nimport com.openai.client.okhttp.OpenAIOkHttpClient;\nimport com.openai.core.http.HttpResponse;\nimport com.openai.models.skills.versions.content.ContentRetrieveParams;\n\npublic final class Main {\n    private Main() {}\n\n    public static void main(String[] args) {\n        OpenAIClient client = OpenAIOkHttpClient.fromEnv();\n\n        ContentRetrieveParams params = ContentRetrieveParams.builder()\n            .skillId(\"skill_123\")\n            .version(\"version\")\n            .build();\n        HttpResponse content = client.skills().versions().content().retrieve(params);\n    }\n}"
            ruby: 'require "openai"


              openai = OpenAI::Client.new(api_key: "My API Key")


              content = openai.skills.versions.content.retrieve("version", skill_id: "skill_123")


              puts(content)'
components:
  schemas:
    SkillListResource:
      properties:
        object:
          type: string
          enum:
          - list
          description: The type of object returned, must be `list`.
          default: list
          x-stainless-const: true
        data:
          items:
            $ref: '#/components/schemas/SkillResource'
          type: array
          description: A list of items
        first_id:
          anyOf:
          - type: string
            description: The ID of the first item in the list.
          - type: 'null'
        last_id:
          anyOf:
          - type: string
            description: The ID of the last item in the list.
          - type: 'null'
        has_more:
          type: boolean
          description: Whether there are more items available.
      type: object
      required:
      - object
      - data
      - first_id
      - last_id
      - has_more
    DeletedSkillVersionResource:
      properties:
        object:
          type: string
          enum:
          - skill.version.deleted
          default: skill.version.deleted
          x-stainless-const: true
        deleted:
          type: boolean
        id:
          type: string
        version:
          type: string
          description: The deleted skill version.
      type: object
      required:
      - object
      - deleted
      - id
      - version
    SkillVersionListResource:
      properties:
        object:
          type: string
          enum:
          - list
          description: The type of object returned, must be `list`.
          default: list
          x-stainless-const: true
        data:
          items:
            $ref: '#/components/schemas/SkillVersionResource'
          type: array
          description: A list of items
        first_id:
          anyOf:
          - type: string
            description: The ID of the first item in the list.
          - type: 'null'
        last_id:
          anyOf:
          - type: string
            description: The ID of the last item in the list.
          - type: 'null'
        has_more:
          type: boolean
          description: Whether there are more items available.
      type: object
      required:
      - object
      - data
      - first_id
      - last_id
      - has_more
    OrderEnum:
      type: string
      enum:
      - asc
      - desc
    CreateSkillBody:
      properties:
        files:
          oneOf:
          - items:
              type: string
              format: binary
            type: array
            maxItems: 500
            description: Skill files to upload (directory upload) or a single zip file.
          - type: string
            format: binary
            description: Skill zip file to upload.
      type: object
      required:
      - files
      title: Create skill request
      description: Uploads a skill either as a directory (multipart `files[]`) or as a single zip file.
    CreateSkillVersionBody:
      properties:
        files:
          oneOf:
          - items:
              type: string
              format: binary
            type: array
            maxItems: 500
            description: Skill files to upload (directory upload) or a single zip file.
          - type: string
            format: binary
  

# --- truncated at 32 KB (55 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/openai/refs/heads/main/openapi/openai-skills-api-openapi.yml