QuantCDN AI Skills API

Reusable prompts, workflows, and instructions for agents

OpenAPI Specification

quantcdn-ai-skills-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  description: Unified API for QuantCDN Admin and QuantCloud Platform services
  title: QuantCDN AI Agents AI Skills API
  version: 4.15.8
servers:
- description: QuantCDN Public Cloud
  url: https://dashboard.quantcdn.io
- description: QuantGov Cloud
  url: https://dash.quantgov.cloud
security:
- BearerAuth: []
tags:
- description: Reusable prompts, workflows, and instructions for agents
  name: AI Skills
paths:
  /api/v3/organizations/{organisation}/ai/skills:
    get:
      description: "Lists all skills available to the organization. Skills are reusable prompts,\n     * workflows, or instructions that can be assigned to agents or invoked directly.\n     *\n     * **Skill Sources:**\n     * - `inline`: Created directly via the API\n     * - `skills.sh`: Imported from skills.sh registry\n     * - `github`: Imported from a GitHub repository\n     * - `local`: Uploaded from local file"
      operationId: listSkills
      parameters:
      - description: The organisation ID
        explode: false
        in: path
        name: organisation
        required: true
        schema:
          type: string
        style: simple
      - description: Filter skills by tag
        explode: true
        in: query
        name: tag
        required: false
        schema:
          type: string
        style: form
      - description: Filter skills by collection namespace (e.g. 'superpowers')
        explode: true
        in: query
        name: namespace
        required: false
        schema:
          type: string
        style: form
      - description: Maximum number of skills to return
        explode: true
        in: query
        name: limit
        required: false
        schema:
          default: 50
          maximum: 100
          minimum: 1
          type: integer
        style: form
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listSkills_200_response'
          description: List of skills retrieved successfully
        '403':
          description: Access denied
        '500':
          description: Failed to retrieve skills
      summary: List Organization's Skills
      tags:
      - AI Skills
    post:
      description: "Creates a new skill with inline content. Use this for custom skills\n     * that are defined directly in your organization.\n     *\n     * **Trigger Conditions:**\n     * - Natural language description of when to use the skill\n     * - Used by AI to determine when to suggest or apply the skill\n     * - Example: 'When the user asks about code review or security analysis'"
      operationId: createSkill
      parameters:
      - description: The organisation ID
        explode: false
        in: path
        name: organisation
        required: true
        schema:
          type: string
        style: simple
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/createSkill_request'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/createSkill_201_response'
          description: Skill created successfully
        '400':
          description: Invalid request parameters
        '403':
          description: Access denied
        '500':
          description: Failed to create skill
      summary: Create Inline Skill
      tags:
      - AI Skills
  /api/v3/organizations/{organisation}/ai/skills/{skillId}:
    delete:
      description: Permanently deletes a skill. This will also remove it from any agents that have it assigned.
      operationId: deleteSkill
      parameters:
      - description: The organisation ID
        explode: false
        in: path
        name: organisation
        required: true
        schema:
          type: string
        style: simple
      - description: The skill ID
        explode: false
        in: path
        name: skillId
        required: true
        schema:
          type: string
        style: simple
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/deleteSkill_200_response'
          description: Skill deleted successfully
        '403':
          description: Access denied
        '404':
          description: Skill not found
        '500':
          description: Failed to delete skill
      summary: Delete Skill
      tags:
      - AI Skills
    get:
      description: Retrieves full details of a skill including its content, source information, and metadata.
      operationId: getSkill
      parameters:
      - description: The organisation ID
        explode: false
        in: path
        name: organisation
        required: true
        schema:
          type: string
        style: simple
      - description: The skill ID
        explode: false
        in: path
        name: skillId
        required: true
        schema:
          type: string
        style: simple
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/getSkill_200_response'
          description: Skill details retrieved successfully
        '403':
          description: Access denied
        '404':
          description: Skill not found
        '500':
          description: Failed to retrieve skill
      summary: Get Skill Details
      tags:
      - AI Skills
    put:
      description: "Updates an existing skill. For imported skills, this updates\n     * local overrides (name, tags, triggerCondition) but not the source content.\n     * Use the sync endpoint to update source content."
      operationId: updateSkill
      parameters:
      - description: The organisation ID
        explode: false
        in: path
        name: organisation
        required: true
        schema:
          type: string
        style: simple
      - description: The skill ID
        explode: false
        in: path
        name: skillId
        required: true
        schema:
          type: string
        style: simple
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/updateSkill_request'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/updateSkill_200_response'
          description: Skill updated successfully
        '400':
          description: Invalid request parameters
        '403':
          description: Access denied
        '404':
          description: Skill not found
        '500':
          description: Failed to update skill
      summary: Update Skill
      tags:
      - AI Skills
  /api/v3/organizations/{organisation}/ai/skills/import:
    post:
      description: "Imports a skill from an external source like skills.sh registry or GitHub repository.\n     *\n     * **Supported Sources:**\n     * - `skills.sh`: Import from the skills.sh community registry\n     * - `github`: Import from a GitHub repository (public or private)\n     *\n     * **Version Control:**\n     * - Skills can be pinned to specific versions\n     * - Use the sync endpoint to update to latest version"
      operationId: importSkill
      parameters:
      - description: The organisation ID
        explode: false
        in: path
        name: organisation
        required: true
        schema:
          type: string
        style: simple
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/importSkill_request'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/importSkill_201_response'
          description: Skill imported successfully
        '400':
          description: Invalid request parameters
        '403':
          description: Access denied
        '502':
          description: Failed to fetch skill from source
        '500':
          description: Failed to import skill
      summary: Import Skill from External Source
      tags:
      - AI Skills
  /api/v3/organizations/{organisation}/ai/skills/{skillId}/sync:
    post:
      description: "Re-fetches skill content from its original source.\n     * Only applicable to skills imported from external sources (skills.sh, github).\n     * Inline skills cannot be synced.\n     *\n     * **Version Behavior:**\n     * - If version is pinned, fetches that specific version\n     * - If no version specified, fetches latest"
      operationId: syncSkill
      parameters:
      - description: The organisation ID
        explode: false
        in: path
        name: organisation
        required: true
        schema:
          type: string
        style: simple
      - description: The skill ID
        explode: false
        in: path
        name: skillId
        required: true
        schema:
          type: string
        style: simple
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/importSkill_201_response'
          description: Skill synced successfully
        '400':
          description: Cannot sync inline skill
        '403':
          description: Access denied
        '404':
          description: Skill not found
        '502':
          description: Failed to fetch skill from source
        '500':
          description: Failed to sync skill
      summary: Sync Skill from Source
      tags:
      - AI Skills
  /api/v3/organizations/{organisation}/ai/skills/collections:
    get:
      description: Lists distinct namespaces (collections) for the organization, with skill counts and skill names for each collection.
      operationId: listSkillCollections
      parameters:
      - description: The organisation ID
        explode: false
        in: path
        name: organisation
        required: true
        schema:
          type: string
        style: simple
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listSkillCollections_200_response'
          description: Collections retrieved successfully
        '403':
          description: Access denied
        '500':
          description: Failed to retrieve collections
      summary: List Skill Collections
      tags:
      - AI Skills
  /api/v3/organizations/{organisation}/ai/skills/import-collection:
    post:
      description: "Discovers all skill directories under a given path in a GitHub repository\n     * and imports each as a skill within the specified namespace. Each subdirectory must contain a SKILL.md file.\n     *\n     * **Namespace:** Used for grouping and slash-command invocation (e.g., `/superpowers:brainstorming`).\n     *\n     * **Idempotent:** If a skill with the same namespace + name already exists, it is updated."
      operationId: importSkillCollection
      parameters:
      - description: The organisation ID
        explode: false
        in: path
        name: organisation
        required: true
        schema:
          type: string
        style: simple
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/importSkillCollection_request'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/importSkillCollection_201_response'
          description: Collection imported successfully
        '400':
          description: Invalid request parameters
        '403':
          description: Access denied
        '502':
          description: GitHub API error
        '500':
          description: Failed to import collection
      summary: Import Skill Collection from GitHub
      tags:
      - AI Skills
  /api/v3/organizations/{organisation}/ai/skills/collections/{namespace}/sync:
    post:
      description: "Re-syncs all skills in a namespace from their GitHub source. Detects new\n     * skills added to the repository and flags skills removed from the source. Does NOT auto-delete removed skills."
      operationId: syncSkillCollection
      parameters:
      - description: The organisation ID
        explode: false
        in: path
        name: organisation
        required: true
        schema:
          type: string
        style: simple
      - description: Collection namespace
        explode: false
        in: path
        name: namespace
        required: true
        schema:
          type: string
        style: simple
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/syncSkillCollection_200_response'
          description: Collection synced successfully
        '400':
          description: Invalid request
        '403':
          description: Access denied
        '404':
          description: Collection not found
        '502':
          description: GitHub API error
        '500':
          description: Failed to sync collection
      summary: Sync Skill Collection
      tags:
      - AI Skills
  /api/v3/organizations/{organisation}/ai/skills/collections/{namespace}:
    delete:
      description: Permanently deletes all skills in the specified namespace.
      operationId: deleteSkillCollection
      parameters:
      - description: The organisation ID
        explode: false
        in: path
        name: organisation
        required: true
        schema:
          type: string
        style: simple
      - description: Collection namespace
        explode: false
        in: path
        name: namespace
        required: true
        schema:
          type: string
        style: simple
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/deleteSkillCollection_200_response'
          description: Collection deleted successfully
        '403':
          description: Access denied
        '404':
          description: Collection not found
        '500':
          description: Failed to delete collection
      summary: Delete Skill Collection
      tags:
      - AI Skills
components:
  schemas:
    deleteSkillCollection_200_response:
      example:
        success: true
        message: Collection deleted successfully
      properties:
        success:
          example: true
          type: boolean
        message:
          example: Collection deleted successfully
          type: string
      type: object
    deleteSkill_200_response:
      example:
        success: true
        message: Skill deleted successfully
      properties:
        success:
          example: true
          type: boolean
        message:
          example: Skill deleted successfully
          type: string
      type: object
    createSkill_request:
      properties:
        name:
          example: code-review
          type: string
        description:
          example: Expert code review with security analysis
          type: string
        content:
          example: You are an expert code reviewer...
          type: string
        triggerCondition:
          example: When the user asks for code review
          type: string
        tags:
          items:
            type: string
          type: array
        requiredTools:
          items:
            type: string
          type: array
        namespace:
          type: string
        files:
          type: object
        disableModelInvocation:
          type: boolean
        allowedTools:
          items:
            type: string
          type: array
        installedBy:
          type: string
      required:
      - content
      - name
      - triggerCondition
      type: object
    updateSkill_200_response:
      example:
        success: true
        skill: '{}'
        message: Skill updated successfully
      properties:
        success:
          example: true
          type: boolean
        skill:
          type: object
        message:
          example: Skill updated successfully
          type: string
      type: object
    syncSkillCollection_200_response:
      example:
        skills:
        - '{}'
        - '{}'
        synced: 0
        removedFromSource:
        - removedFromSource
        - removedFromSource
        created: 6
        namespace: namespace
        failed: 1
      properties:
        namespace:
          type: string
        synced:
          type: integer
        created:
          type: integer
        failed:
          type: integer
        removedFromSource:
          items:
            type: string
          type: array
        skills:
          items:
            type: object
          type: array
      type: object
    getSkill_200_response:
      example:
        skill:
          triggerCondition: triggerCondition
          requiredTools:
          - requiredTools
          - requiredTools
          installedAt: 2000-01-23 04:56:07+00:00
          description: description
          source: '{}'
          content: content
          tags:
          - tags
          - tags
          skillId: skillId
          name: name
          namespace: namespace
          files: '{}'
          disableModelInvocation: true
          allowedTools:
          - allowedTools
          - allowedTools
          updatedAt: 2000-01-23 04:56:07+00:00
      properties:
        skill:
          $ref: '#/components/schemas/getSkill_200_response_skill'
      type: object
    getSkill_200_response_skill:
      example:
        triggerCondition: triggerCondition
        requiredTools:
        - requiredTools
        - requiredTools
        installedAt: 2000-01-23 04:56:07+00:00
        description: description
        source: '{}'
        content: content
        tags:
        - tags
        - tags
        skillId: skillId
        name: name
        namespace: namespace
        files: '{}'
        disableModelInvocation: true
        allowedTools:
        - allowedTools
        - allowedTools
        updatedAt: 2000-01-23 04:56:07+00:00
      properties:
        skillId:
          type: string
        name:
          type: string
        description:
          type: string
        content:
          type: string
        triggerCondition:
          type: string
        tags:
          items:
            type: string
          type: array
        source:
          type: object
        requiredTools:
          items:
            type: string
          type: array
        files:
          type: object
        namespace:
          type: string
        disableModelInvocation:
          type: boolean
        allowedTools:
          items:
            type: string
          type: array
        installedAt:
          format: date-time
          type: string
        updatedAt:
          format: date-time
          type: string
      type: object
    importSkillCollection_request:
      properties:
        namespace:
          example: superpowers
          pattern: ^[a-z0-9][a-z0-9-]{0,62}[a-z0-9]$
          type: string
        source:
          $ref: '#/components/schemas/importSkillCollection_request_source'
        tags:
          items:
            type: string
          type: array
        installedBy:
          type: string
      required:
      - namespace
      - source
      type: object
    importSkill_request:
      properties:
        source:
          $ref: '#/components/schemas/importSkill_request_source'
        name:
          type: string
        description:
          type: string
        tags:
          items:
            type: string
          type: array
        triggerCondition:
          type: string
        requiredTools:
          items:
            type: string
          type: array
        disableModelInvocation:
          type: boolean
        allowedTools:
          items:
            type: string
          type: array
        installedBy:
          type: string
      required:
      - source
      type: object
    importSkillCollection_201_response:
      example:
        skills:
        - '{}'
        - '{}'
        imported: 0
        namespace: namespace
        failed: 6
        errors:
        - '{}'
        - '{}'
      properties:
        namespace:
          type: string
        imported:
          type: integer
        failed:
          type: integer
        skills:
          items:
            type: object
          type: array
        errors:
          items:
            type: object
          type: array
      type: object
    listSkillCollections_200_response_collections_inner:
      example:
        skills:
        - skills
        - skills
        namespace: superpowers
        count: 14
      properties:
        namespace:
          example: superpowers
          type: string
        count:
          example: 14
          type: integer
        skills:
          items:
            type: string
          type: array
      type: object
    listSkillCollections_200_response:
      example:
        collections:
        - skills:
          - skills
          - skills
          namespace: superpowers
          count: 14
        - skills:
          - skills
          - skills
          namespace: superpowers
          count: 14
      properties:
        collections:
          items:
            $ref: '#/components/schemas/listSkillCollections_200_response_collections_inner'
          type: array
      type: object
    updateSkill_request:
      properties:
        name:
          type: string
        description:
          type: string
        content:
          type: string
        triggerCondition:
          type: string
        tags:
          items:
            type: string
          type: array
        requiredTools:
          items:
            type: string
          type: array
        source:
          type: object
        files:
          type: object
        disableModelInvocation:
          type: boolean
        allowedTools:
          items:
            type: string
          type: array
        namespace:
          type: string
      type: object
    listSkills_200_response:
      example:
        skills:
        - skillId: skillId
          triggerCondition: triggerCondition
          installedAt: 2000-01-23 04:56:07+00:00
          name: name
          namespace: namespace
          description: description
          source: '{}'
          tags:
          - tags
          - tags
          updatedAt: 2000-01-23 04:56:07+00:00
        - skillId: skillId
          triggerCondition: triggerCondition
          installedAt: 2000-01-23 04:56:07+00:00
          name: name
          namespace: namespace
          description: description
          source: '{}'
          tags:
          - tags
          - tags
          updatedAt: 2000-01-23 04:56:07+00:00
        count: 0
      properties:
        skills:
          items:
            $ref: '#/components/schemas/listSkills_200_response_skills_inner'
          type: array
        count:
          type: integer
      type: object
    importSkillCollection_request_source:
      properties:
        type:
          enum:
          - github
          type: string
        repo:
          example: obra/superpowers
          type: string
        path:
          example: skills
          type: string
        version:
          example: main
          type: string
      required:
      - repo
      - type
      type: object
    listSkills_200_response_skills_inner:
      example:
        skillId: skillId
        triggerCondition: triggerCondition
        installedAt: 2000-01-23 04:56:07+00:00
        name: name
        namespace: namespace
        description: description
        source: '{}'
        tags:
        - tags
        - tags
        updatedAt: 2000-01-23 04:56:07+00:00
      properties:
        skillId:
          type: string
        name:
          type: string
        description:
          type: string
        tags:
          items:
            type: string
          type: array
        source:
          type: object
        triggerCondition:
          type: string
        namespace:
          type: string
        installedAt:
          format: date-time
          type: string
        updatedAt:
          format: date-time
          type: string
      type: object
    importSkill_201_response:
      example:
        skill: '{}'
        message: message
      properties:
        skill:
          type: object
        message:
          type: string
      type: object
    importSkill_request_source:
      properties:
        type:
          enum:
          - skills.sh
          - github
          type: string
        url:
          type: string
        repo:
          type: string
        path:
          type: string
        version:
          type: string
      required:
      - type
      type: object
    createSkill_201_response:
      example:
        success: true
        skill: '{}'
        message: Skill created successfully
      properties:
        success:
          example: true
          type: boolean
        skill:
          type: object
        message:
          example: Skill created successfully
          type: string
      type: object
  securitySchemes:
    BearerAuth:
      bearerFormat: JWT
      description: 'Enter your Bearer token in the format: `Bearer <your-token-here>`. Obtain your API token from the QuantCDN dashboard under Profile > API Tokens.'
      scheme: bearer
      type: http