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

# Bulk upload skills

> Uploads skills from zip archives (containing skill directories with a SKILL.md) or standalone markdown files. Duplicate skill names are skipped. Requires a workspace API key; `workspace` and `organization` visibility require the key's user to be a workspace admin or owner. Limits: 32MB combined upload, 200 skills per request.




## OpenAPI

````yaml POST /workspace/{workspaceId}/skills/bulk-upload
openapi: 3.1.0
info:
  title: TeamAI API
  version: '1.0'
  description: >
    REST API for TeamAI. Run agents and chat completions, and manage projects,
    files, and skills programmatically.
servers:
  - url: https://app.teamai.com/api/v1
security:
  - apiKey: []
tags:
  - name: Chat
  - name: Agents
  - name: Projects
  - name: Skills
paths:
  /workspace/{workspaceId}/skills/bulk-upload:
    post:
      tags:
        - Skills
      summary: Bulk upload skills
      description: >
        Uploads skills from zip archives (containing skill directories with a
        SKILL.md) or standalone markdown files. Duplicate skill names are
        skipped. Requires a workspace API key; `workspace` and `organization`
        visibility require the key's user to be a workspace admin or owner.
        Limits: 32MB combined upload, 200 skills per request.
      parameters:
        - $ref: '#/components/parameters/workspaceId'
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - files
              properties:
                files:
                  type: array
                  items:
                    type: string
                    format: binary
                  description: One or more .zip, .md, or .skill files.
                visibility:
                  type: string
                  enum:
                    - personal
                    - workspace
                    - organization
                  default: workspace
      responses:
        '200':
          description: All skills processed without errors.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      created:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                            name:
                              type: string
                            gcsPath:
                              type: string
                      skipped:
                        type: array
                        items:
                          type: object
                          properties:
                            name:
                              type: string
                            reason:
                              type: string
                      errors:
                        type: array
                        items:
                          type: object
                      summary:
                        type: object
                        properties:
                          total:
                            type: integer
                          created:
                            type: integer
                          skipped:
                            type: integer
                          failed:
                            type: integer
        '207':
          description: Some skills failed. Details in the response body.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/NotAuthenticated'
components:
  parameters:
    workspaceId:
      name: workspaceId
      in: path
      required: true
      schema:
        type: string
      description: Workspace ID.
  schemas:
    Error:
      type: object
      properties:
        code:
          type: string
          description: Machine-readable error code.
          example: bad_request
        message:
          type: string
          description: Human-readable error description.
        details:
          type: object
          additionalProperties: true
          description: Additional error context.
  responses:
    BadRequest:
      description: Request body or parameters failed validation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotAuthenticated:
      description: >
        API key missing or invalid (`not_authenticated`), or valid but not
        permitted to access this resource (`unauthorized`).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-teamai-api-key
      description: >
        Secret API key created in Workspace Settings → API Keys (workspace keys)
        or Organization Admin → API Keys (organization keys).

````