dotCMS OSGi Plugins API

OSGi plugin management and dynamic deployment

Operations 15

Each operation below carries the questions people ask an LLM about it and the instructions they give an agent to run it. Generated by API Evangelist overlay

GET /api/osgi/getInstalledBundles/{params} List installed OSGi bundles (legacy endpoint) · Get installed bundles #
Ask an LLM
“Is there an older path-parameter endpoint for listing installed OSGi bundles?”
“Can I list plugins through the legacy /api/osgi route?”
Tell an agent
List installed OSGi bundles through the legacy endpoint with params {params}.
Use the old OSGi bundle listing with {params}.
GET /api/osgi/_processExports/{bundle} Process a bundle's exports (legacy endpoint) · Process bundle #
Ask an LLM
“Can I trigger export processing for a bundle using the legacy OSGi route?”
“Where is the older v0 endpoint for processing a plugin's exported packages?”
Tell an agent
Process exports for bundle {bundle} via the legacy OSGi endpoint.
Run the old process-exports call for plugin {bundle}.
POST /api/osgi Upload plugin bundles (legacy endpoint) · Update bundles #
Ask an LLM
“Is there a legacy multipart endpoint for uploading OSGi plugins?”
“Can I still push plugin JARs through the unversioned /api/osgi path?”
Tell an agent
Upload these plugin JARs through the legacy OSGi endpoint.
Push this bundle file using the unversioned OSGi upload route.
PUT /api/v1/osgi/jar/{jar}/_deploy Deploy an uploaded plugin JAR · deploys bundle #
Ask an LLM
“How do I deploy a plugin JAR that's already been uploaded?”
“Can I activate one specific OSGi JAR by its file name?”
Tell an agent
Deploy plugin jar {jar}.
Install OSGi bundle {jar} into the framework.
GET /api/v1/osgi/available-plugins List plugins available to deploy · get available plugins #
Ask an LLM
“Which plugin JARs are sitting in the upload folder waiting to be deployed?”
“What OSGi plugins are available but not yet installed?”
Tell an agent
List the plugins available for deployment.
Show undeployed OSGi plugin JARs.
GET /api/v1/osgi/extra-packages View the OSGi extra packages list · get extra packages #
Ask an LLM
“Which extra Java packages does dotCMS export to OSGi plugins?”
“What's in the OSGi extra packages configuration right now?”
Tell an agent
Show the current OSGi extra packages.
List the packages exported to plugins by the host.
PUT /api/v1/osgi/extra-packages Change the OSGi extra packages list · modify extra packages #
Ask an LLM
“How do I expose an additional Java package to my OSGi plugins?”
“Can I overwrite the extra packages list that plugins import from?”
Tell an agent
Set the OSGi extra packages to {packages}.
Update extra packages so plugins can import {packages}.
GET /api/v1/osgi List installed OSGi bundles · Returns a list of all bundles installed #
Ask an LLM
“Which plugins are installed in the OSGi framework and what state are they in?”
“Can I hide system bundles when listing installed plugins?”
Tell an agent
List all installed OSGi bundles.
List installed plugins, ignoring system bundles {ignoresystembundles}.
POST /api/v1/osgi Upload plugin JARs to the OSGi framework · Upload bundles to the OSGI framework #
Ask an LLM
“Does a successful plugin upload mean the plugin is already live?”
“Which system events tell me an uploaded OSGi bundle finished loading?”
Tell an agent
Upload these plugin JARs and schedule them for deployment.
Upload this OSGi bundle and watch for the bundles-loaded event.
GET /api/v1/osgi/dotsystem List dotCMS system OSGi bundles · Returns the dot system list of all bundles installed #
Ask an LLM
“Which bundles are installed in the dotCMS system OSGi framework?”
“Can I see core system bundles separately from my own plugins?”
Tell an agent
List the bundles in the dot system OSGi framework.
Show dotsystem bundles with ignore-system set to {ignoresystembundles}.
GET /api/v1/osgi/_processExports/{bundle} Process a bundle's exported packages · Process exports #
Ask an LLM
“How do I make dotCMS pick up the packages a new plugin exports?”
“Can I process the exports of one bundle without restarting?”
Tell an agent
Process exports for bundle {bundle}.
Register exported packages from plugin {bundle}.
PUT /api/v1/osgi/_restart Restart the OSGi framework · restarts the OSGI framework #
Ask an LLM
“How do I restart the whole plugin framework after changing packages?”
“Can I reload all OSGi plugins without restarting dotCMS?”
Tell an agent
Restart the OSGi framework.
Reload every plugin by restarting OSGi.
PUT /api/v1/osgi/jar/{jar}/_start Start an installed plugin bundle · starts bundle #
Ask an LLM
“Can I start a stopped OSGi plugin?”
“How do I bring a deployed bundle back to active?”
Tell an agent
Start plugin bundle {jar}.
Activate the stopped OSGi bundle {jar}.
PUT /api/v1/osgi/jar/{jar}/_stop Stop a running plugin bundle · stops bundle #
Ask an LLM
“How do I temporarily disable a plugin without removing it?”
“Can I stop a running OSGi bundle and start it again later?”
Tell an agent
Stop plugin bundle {jar}.
Pause the running OSGi bundle {jar} but keep it installed.
DELETE /api/v1/osgi/jar/{jar} Undeploy a plugin bundle · Undeploys bundle #
Ask an LLM
“How do I completely remove a plugin from dotCMS?”
“What happens to a plugin JAR when I undeploy it?”
Tell an agent destructive · confirm first
Undeploy plugin {jar}.
Remove OSGi bundle {jar} from the framework.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/dotcms:dotcms-osgi-plugins-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

dotcms-osgi-plugins-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: dotCMS REST OSGi Plugins API
  version: '3'
  description: OSGi plugin management and dynamic deployment
servers:
- url: /
  description: dotCMS Server
tags:
- name: OSGi Plugins
  description: OSGi plugin management and dynamic deployment
paths:
  /api/osgi/getInstalledBundles/{params}:
    get:
      tags:
      - OSGi Plugins
      operationId: getInstalledBundles
      parameters:
      - name: params
        in: path
        required: true
        schema:
          pattern: .*
          type: string
      responses:
        default:
          description: default response
          content:
            application/json: {}
      deprecated: true
      summary: Get installed bundles
      x-summary-source: derived
  /api/osgi/_processExports/{bundle}:
    get:
      tags:
      - OSGi Plugins
      operationId: processBundle
      parameters:
      - name: bundle
        in: path
        required: true
        schema:
          pattern: .*
          type: string
      responses:
        default:
          description: default response
          content:
            application/json: {}
      deprecated: true
      summary: Process bundle
      x-summary-source: derived
  /api/osgi:
    post:
      tags:
      - OSGi Plugins
      operationId: updateBundles
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/FormDataMultiPart'
      responses:
        default:
          description: default response
          content:
            application/json: {}
            application/javascript: {}
      deprecated: true
      summary: Update bundles
      x-summary-source: derived
  /api/v1/osgi/jar/{jar}/_deploy:
    put:
      tags:
      - OSGi Plugins
      summary: deploys bundle
      operationId: deploy
      parameters:
      - name: jar
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEntityStringView'
        '404':
          description: Bundle not found
        '400':
          description: Error loading OSGI Bundle
  /api/v1/osgi/available-plugins:
    get:
      tags:
      - OSGi Plugins
      summary: get available plugins
      operationId: getAvailablePlugis
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEntityListView'
  /api/v1/osgi/extra-packages:
    get:
      tags:
      - OSGi Plugins
      summary: get extra packages
      operationId: getExtraPackages
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEntityStringView'
    put:
      tags:
      - OSGi Plugins
      summary: modify extra packages
      operationId: modifyExtraPackages
      requestBody:
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/ExtraPackagesForm'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEntityStringView'
  /api/v1/osgi:
    get:
      tags:
      - OSGi Plugins
      summary: Returns a list of all bundles installed
      operationId: getInstalledBundles_1
      parameters:
      - name: ignoresystembundles
        in: query
        schema:
          type: boolean
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEntityBundleListView'
    post:
      tags:
      - OSGi Plugins
      summary: Upload bundles to the OSGI framework
      description: 'Uploads one or more plugin JARs to the OSGi upload folder and schedules their processing. A 200 confirms the upload was accepted, NOT that the plugin is live: if new packages must be exported the OSGi framework is restarted cluster-wide asynchronously, after this response returns. Restart completion is signalled by the OSGI_FRAMEWORK_RESTART system event and successful deployment by the OSGI_BUNDLES_LOADED event; an asynchronous failure is reported via the OSGI_BUNDLES_UPLOAD_FAILED event and an error notification (check the server logs for the full stack trace). Clients should react to these events rather than assume the plugin is active once the 200 is received.'
      operationId: uploadBundles
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/FormDataMultiPart'
      responses:
        '200':
          description: Bundle upload accepted and scheduled. Any required OSGi restart happens asynchronously; watch the OSGI_FRAMEWORK_RESTART / OSGI_BUNDLES_LOADED / OSGI_BUNDLES_UPLOAD_FAILED system events for the outcome.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEntitySetStringView'
        '403':
          description: Can not access the upload folder or invalid OSGI Upload request
  /api/v1/osgi/dotsystem:
    get:
      tags:
      - OSGi Plugins
      summary: Returns the dot system list of all bundles installed
      operationId: getSystemInstalledBundles
      parameters:
      - name: ignoresystembundles
        in: query
        schema:
          type: boolean
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEntityBundleListView'
  /api/v1/osgi/_processExports/{bundle}:
    get:
      tags:
      - OSGi Plugins
      summary: Process exports
      operationId: processBundle_1
      parameters:
      - name: bundle
        in: path
        required: true
        schema:
          pattern: .*
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEntityStringView'
  /api/v1/osgi/_restart:
    put:
      tags:
      - OSGi Plugins
      summary: restarts the OSGI framework
      operationId: restart
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEntityStringView'
  /api/v1/osgi/jar/{jar}/_start:
    put:
      tags:
      - OSGi Plugins
      summary: starts bundle
      operationId: start_1
      parameters:
      - name: jar
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEntityStringView'
        '404':
          description: Bundle not found
        '400':
          description: Can not stop system bundle
  /api/v1/osgi/jar/{jar}/_stop:
    put:
      tags:
      - OSGi Plugins
      summary: stops bundle
      operationId: stop
      parameters:
      - name: jar
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEntityStringView'
        '404':
          description: Bundle not found
        '400':
          description: Can not stop system bundle
  /api/v1/osgi/jar/{jar}:
    delete:
      tags:
      - OSGi Plugins
      summary: Undeploys bundle
      operationId: undeploy
      parameters:
      - name: jar
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEntityBooleanView'
        '404':
          description: Bundle not found
        '400':
          description: Can not stop system bundle
components:
  schemas:
    MultiPart:
      type: object
      properties:
        contentDisposition:
          $ref: '#/components/schemas/ContentDisposition'
        entity:
          type: object
        headers:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
        mediaType:
          type: object
          properties:
            type:
              type: string
            subtype:
              type: string
            parameters:
              type: object
              additionalProperties:
                type: string
            wildcardType:
              type: boolean
            wildcardSubtype:
              type: boolean
        messageBodyWorkers:
          $ref: '#/components/schemas/MessageBodyWorkers'
        parent:
          $ref: '#/components/schemas/MultiPart'
        providers:
          type: object
        bodyParts:
          type: array
          items:
            $ref: '#/components/schemas/BodyPart'
        parameterizedHeaders:
          type: object
          additionalProperties:
            type: array
            items:
              $ref: '#/components/schemas/ParameterizedHeader'
    MessageEntity:
      type: object
      properties:
        message:
          type: string
    FormDataBodyPart:
      type: object
      properties:
        contentDisposition:
          $ref: '#/components/schemas/ContentDisposition'
        entity:
          type: object
        headers:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
        mediaType:
          type: object
          properties:
            type:
              type: string
            subtype:
              type: string
            parameters:
              type: object
              additionalProperties:
                type: string
            wildcardType:
              type: boolean
            wildcardSubtype:
              type: boolean
        messageBodyWorkers:
          $ref: '#/components/schemas/MessageBodyWorkers'
        parent:
          $ref: '#/components/schemas/MultiPart'
        providers:
          type: object
        formDataContentDisposition:
          $ref: '#/components/schemas/FormDataContentDisposition'
        simple:
          type: boolean
        name:
          type: string
        value:
          type: string
        parameterizedHeaders:
          type: object
          additionalProperties:
            type: array
            items:
              $ref: '#/components/schemas/ParameterizedHeader'
    ResponseEntityStringView:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorEntity'
        entity:
          type: string
        messages:
          type: array
          items:
            $ref: '#/components/schemas/MessageEntity'
        i18nMessagesMap:
          type: object
          additionalProperties:
            type: string
        permissions:
          type: array
          items:
            type: string
        pagination:
          $ref: '#/components/schemas/Pagination'
    ResponseEntitySetStringView:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorEntity'
        entity:
          uniqueItems: true
          type: array
          items:
            type: string
        messages:
          type: array
          items:
            $ref: '#/components/schemas/MessageEntity'
        i18nMessagesMap:
          type: object
          additionalProperties:
            type: string
        permissions:
          type: array
          items:
            type: string
        pagination:
          $ref: '#/components/schemas/Pagination'
    Pagination:
      type: object
      properties:
        currentPage:
          type: integer
          format: int32
        perPage:
          type: integer
          format: int32
        totalEntries:
          type: integer
          format: int64
    FormDataContentDisposition:
      type: object
      properties:
        type:
          type: string
        parameters:
          type: object
          additionalProperties:
            type: string
        fileName:
          type: string
        creationDate:
          type: string
          format: date-time
        modificationDate:
          type: string
          format: date-time
        readDate:
          type: string
          format: date-time
        size:
          type: integer
          format: int64
        name:
          type: string
    MessageBodyWorkers:
      type: object
    ParameterizedHeader:
      type: object
      properties:
        value:
          type: string
        parameters:
          type: object
          additionalProperties:
            type: string
    ExtraPackagesForm:
      required:
      - packages
      type: object
      properties:
        packages:
          type: string
    ResponseEntityBooleanView:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorEntity'
        entity:
          type: boolean
        messages:
          type: array
          items:
            $ref: '#/components/schemas/MessageEntity'
        i18nMessagesMap:
          type: object
          additionalProperties:
            type: string
        permissions:
          type: array
          items:
            type: string
        pagination:
          $ref: '#/components/schemas/Pagination'
    ResponseEntityBundleListView:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorEntity'
        entity:
          type: array
          items:
            $ref: '#/components/schemas/BundleMap'
        messages:
          type: array
          items:
            $ref: '#/components/schemas/MessageEntity'
        i18nMessagesMap:
          type: object
          additionalProperties:
            type: string
        permissions:
          type: array
          items:
            type: string
        pagination:
          $ref: '#/components/schemas/Pagination'
    ContentDisposition:
      type: object
      properties:
        type:
          type: string
        parameters:
          type: object
          additionalProperties:
            type: string
        fileName:
          type: string
        creationDate:
          type: string
          format: date-time
        modificationDate:
          type: string
          format: date-time
        readDate:
          type: string
          format: date-time
        size:
          type: integer
          format: int64
    ErrorEntity:
      type: object
      properties:
        errorCode:
          type: string
        message:
          type: string
        fieldName:
          type: string
    ResponseEntityListView:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorEntity'
        entity:
          type: array
          items:
            type: object
        messages:
          type: array
          items:
            $ref: '#/components/schemas/MessageEntity'
        i18nMessagesMap:
          type: object
          additionalProperties:
            type: string
        permissions:
          type: array
          items:
            type: string
        pagination:
          $ref: '#/components/schemas/Pagination'
    FormDataMultiPart:
      type: object
      properties:
        contentDisposition:
          $ref: '#/components/schemas/ContentDisposition'
        entity:
          type: object
        headers:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
        mediaType:
          type: object
          properties:
            type:
              type: string
            subtype:
              type: string
            parameters:
              type: object
              additionalProperties:
                type: string
            wildcardType:
              type: boolean
            wildcardSubtype:
              type: boolean
        messageBodyWorkers:
          $ref: '#/components/schemas/MessageBodyWorkers'
        parent:
          $ref: '#/components/schemas/MultiPart'
        providers:
          type: object
        bodyParts:
          type: array
          items:
            $ref: '#/components/schemas/BodyPart'
        fields:
          type: object
          additionalProperties:
            type: array
            items:
              $ref: '#/components/schemas/FormDataBodyPart'
        parameterizedHeaders:
          type: object
          additionalProperties:
            type: array
            items:
              $ref: '#/components/schemas/ParameterizedHeader'
    BundleMap:
      type: object
      properties:
        bundleId:
          type: integer
          format: int64
        symbolicName:
          type: string
        location:
          type: string
        jarFile:
          type: string
        state:
          type: integer
          format: int32
        version:
          type: string
        separator:
          type: string
        javaVersion:
          type: string
        javaClassVersion:
          type: integer
          format: int32
        usesDotcmsApis:
          type: boolean
        dotcmsCoreDependencyVersion:
          type: string
        builtWithMaven:
          type: boolean
        multiRelease:
          type: boolean
        system:
          type: boolean
    BodyPart:
      type: object
      properties:
        contentDisposition:
          $ref: '#/components/schemas/ContentDisposition'
        entity:
          type: object
        headers:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
        mediaType:
          type: object
          properties:
            type:
              type: string
            subtype:
              type: string
            parameters:
              type: object
              additionalProperties:
                type: string
            wildcardType:
              type: boolean
            wildcardSubtype:
              type: boolean
        messageBodyWorkers:
          $ref: '#/components/schemas/MessageBodyWorkers'
        parent:
          $ref: '#/components/schemas/MultiPart'
        providers:
          type: object
        parameterizedHeaders:
          type: object
          additionalProperties:
            type: array
            items:
              $ref: '#/components/schemas/ParameterizedHeader'