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

# Install a module from a registry

> Resolves the registry source URL, downloads the .tar.zst archive from the returned downloadUrl, validates the module.json manifest, and registers the module. The registry source URL is stored for future updates via POST /modules/:id/update.



## OpenAPI

````yaml /cyrnel/openapi.json post /modules/install
openapi: 3.0.0
info:
  title: Cyrnel API
  description: >-
    Cyrnel is a universal layer that connects AI agents and LLM applications to
    any external service, API, or device regardless of protocol or standard. It
    acts as an adaptive bridge between your AI and the outside world, enabling
    seamless integrations through code execution, async operation handling, and
    built-in observability and security controls.
  version: 1.0.0
servers:
  - url: http://localhost:9371
security: []
paths:
  /modules/install:
    post:
      tags:
        - Modules
      summary: Install a module from a registry
      description: >-
        Resolves the registry source URL, downloads the .tar.zst archive from
        the returned downloadUrl, validates the module.json manifest, and
        registers the module. The registry source URL is stored for future
        updates via POST /modules/:id/update.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ModuleInstallRequest'
      responses:
        '201':
          description: The module manifest record for the newly installed module.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModuleDetails'
        '400':
          description: >-
            The request body was invalid, the registry response was malformed,
            or the archive failed validation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
        '401':
          description: A bearer token was required but missing or invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
        '409':
          description: A module already exists with the requested id.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
        '413':
          description: The downloaded archive exceeded the configured size limit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
        '500':
          description: The module could not be installed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
        '502':
          description: The registry or archive file could not be downloaded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
components:
  schemas:
    ModuleInstallRequest:
      type: object
      properties:
        source:
          type: string
          minLength: 1
          description: >-
            Registry URL to resolve for module metadata, then download the
            .tar.zst archive.
      required:
        - source
      description: Request body used to install a module from a registry.
    ModuleDetails:
      allOf:
        - $ref: '#/components/schemas/Module'
        - type: object
          properties:
            hash:
              type: string
              minLength: 1
              description: Content hash of the installed module archive.
            source:
              type: string
              minLength: 0
              description: Install source URL used to fetch the module archive.
            configSchema:
              type: object
              additionalProperties:
                nullable: true
              description: JSON Schema describing the module configuration object.
            secretsSchema:
              type: object
              additionalProperties:
                nullable: true
              description: JSON Schema describing the module secrets object.
          required:
            - hash
            - source
            - configSchema
            - secretsSchema
      description: Full module manifest record returned by the get module endpoint.
    ApiErrorResponse:
      type: object
      properties:
        error:
          type: string
          description: Human-readable error message returned by the API.
      required:
        - error
      description: Standard error envelope returned by the HTTP error middleware.
    Module:
      type: object
      properties:
        id:
          type: string
          minLength: 1
          description: Module identifier.
        name:
          type: string
          minLength: 1
          description: Module display name.
        type:
          type: string
          enum:
            - adapter
            - environment
          description: Module type.
        description:
          type: string
          description: Human-readable description of the module.
        isBuiltin:
          type: boolean
          description: Whether the module is bundled with the API.
        enabled:
          type: boolean
          description: Whether the module is currently enabled.
        missing:
          type: boolean
          description: Whether the module is installed but has no matching factory loaded.
      required:
        - id
        - name
        - type
        - description
        - isBuiltin
        - enabled
        - missing
      description: Module manifest record returned by the modules endpoints.

````