> ## 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.

# Get a module icon

> Returns the stored module icon bytes. The response is cached for a day and carries a strong ETag derived from the icon hash, so clients can send If-None-Match to get 304 Not Modified responses. Only registry-installed modules with a declared png/webp icon have one.



## OpenAPI

````yaml /openapi.json get /modules/{moduleId}/icon
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/{moduleId}/icon:
    get:
      tags:
        - Modules
      summary: Get a module icon
      description: >-
        Returns the stored module icon bytes. The response is cached for a day
        and carries a strong ETag derived from the icon hash, so clients can
        send If-None-Match to get 304 Not Modified responses. Only
        registry-installed modules with a declared png/webp icon have one.
      parameters:
        - schema:
            type: string
            minLength: 1
            description: Module identifier.
          required: true
          description: Module identifier.
          name: moduleId
          in: path
      responses:
        '200':
          description: Module icon image bytes.
          headers:
            ETag:
              description: Strong validator derived from the icon hash.
              schema:
                type: string
            Cache-Control:
              description: Public cache for one day.
              schema:
                type: string
          content:
            image/png:
              schema:
                type: string
                format: binary
            image/webp:
              schema:
                type: string
                format: binary
        '304':
          description: >-
            The icon is unchanged since the client's last fetch; the request
            carried a matching If-None-Match so no body is returned.
          headers:
            ETag:
              description: Strong validator matching the client's If-None-Match.
              schema:
                type: string
            Cache-Control:
              description: Public cache for one day.
              schema:
                type: string
        '400':
          description: The moduleId path parameter was invalid.
          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'
        '404':
          description: The module has no stored icon.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
        '429':
          description: >-
            Rate limit exceeded. The request was throttled. Check Retry-After
            header.
          headers:
            X-RateLimit-Limit:
              schema:
                type: integer
              description: Maximum requests allowed in the current window.
            X-RateLimit-Remaining:
              schema:
                type: integer
              description: Requests remaining in the current window.
            X-RateLimit-Reset:
              schema:
                type: integer
              description: Unix timestamp when the window resets.
            Retry-After:
              schema:
                type: integer
              description: Seconds to wait before retrying.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitErrorResponse'
        '500':
          description: The module icon could not be loaded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
components:
  schemas:
    ApiErrorResponse:
      type: object
      properties:
        error:
          type: string
          description: Human-readable error message returned by the API.
        code:
          type: string
          description: >-
            Stable machine-readable error code (e.g. invalid_cursor,
            cursor_expired).
      required:
        - error
      description: Standard error envelope returned by the HTTP error middleware.
    RateLimitErrorResponse:
      type: object
      properties:
        error:
          type: string
          enum:
            - rate_limit_exceeded
          description: Error code identifying rate-limit rejection.
        message:
          type: string
          description: Human-readable message with retry instructions.
        retryAfter:
          type: integer
          minimum: 0
          exclusiveMinimum: true
          description: Number of seconds to wait before retrying.
      required:
        - error
        - message
        - retryAfter
      description: Error body returned when a request is rate-limited (HTTP 429).

````