> ## 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 direct URL

> Downloads a .tar.zst archive from the supplied direct URL, validates the module.json manifest, and registers the module. Newly installed modules start disabled by default. No registry source is stored.



## OpenAPI

````yaml /cyrnel/openapi.json post /modules
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:
    post:
      tags:
        - Modules
      summary: Install a module from a direct URL
      description: >-
        Downloads a .tar.zst archive from the supplied direct URL, validates the
        module.json manifest, and registers the module. Newly installed modules
        start disabled by default. No registry source is stored.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ModuleDirectInstallRequest'
      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 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 archive file could not be downloaded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
components:
  schemas:
    ModuleDirectInstallRequest:
      type: object
      properties:
        url:
          type: string
          minLength: 1
          description: Direct URL of the .tar.zst module archive to download and install.
      required:
        - url
      description: Request body used to install a module from a direct URL.
    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.

````