> ## Documentation Index
> Fetch the complete documentation index at: https://docs.guild.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a skill under an account

> Requires `skills:write`. A key cannot create a *public* skill even with `skills:write` -- publishing is admin-only.



## OpenAPI

````yaml /api-reference/openapi.yaml post /accounts/{account_id_or_name}/skills
openapi: 3.0.3
info:
  title: Guild Public API
  version: 1.0.0
  description: >-
    The Guild public API, served at https://api.guild.ai/v1 and authenticated
    with account API keys (HTTP Basic, key id as the username and the secret as
    the password). See https://docs.guild.ai/api-reference/introduction for
    scopes and behavior. A session-events websocket also exists at
    wss://api.guild.ai/v1/sessions/{session_id}/events/ws with the same Basic
    auth on the handshake; OpenAPI cannot describe websockets, so it is not
    listed in paths.
servers:
  - url: https://api.guild.ai/v1
    description: Production
security: []
tags:
  - name: accounts
  - name: agents
  - name: sessions
  - name: skills
  - name: workspaces
paths:
  /accounts/{account_id_or_name}/skills:
    post:
      tags:
        - accounts
      summary: Create a skill under an account
      description: >-
        Requires `skills:write`. A key cannot create a *public* skill even with
        `skills:write` -- publishing is admin-only.
      operationId: create_account_skill
      parameters:
        - name: account_id_or_name
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                name:
                  title: Name
                  type: string
                overview:
                  default: null
                  title: Overview
                  nullable: true
                  type: string
                is_public:
                  default: false
                  title: Is Public
                  type: boolean
                avatar_url:
                  default: null
                  title: Avatar Url
                  nullable: true
                  type: string
              required:
                - name
              title: CreateAccountSkillInput
              type: object
      responses:
        '201':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Skill'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - apiKey: []
components:
  schemas:
    Skill:
      type: object
      properties:
        id:
          type: string
          format: uuid
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        is_public:
          type: boolean
          description: Whether the asset is visible to the community or only its owner.
        name:
          type: string
          maxLength: 100
          description: Unique name identifying the asset within the owner account.
        owner_id:
          type: string
          format: uuid
          description: The account that owns this entity.
        archived_at:
          type: string
          format: date-time
          nullable: true
        archived_by_id:
          type: string
          format: uuid
          nullable: true
        avatar_url:
          type: string
          maxLength: 255
          nullable: true
        overview:
          type: string
          nullable: true
          description: >-
            Optional human-facing overview for display and indexing. Falls back
            to the latest version description if not set.
        archived_by: {}
        full_name: {}
        latest_version: {}
        likes_count: {}
        owner: {}
        type: {}
        viewer_can_edit: {}
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
        message:
          type: string
  securitySchemes:
    apiKey:
      type: http
      scheme: basic
      description: 'Account API key: key id as the username, secret as the password.'

````