dotCMS Portlets API

Portlet management and administration

Operations 12

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/portlet/layout/{params} Get a portlet's layout (legacy) · Get layout 1 #
Ask an LLM
“Where does the legacy portlet layout endpoint get the screen layout for a portlet?”
“Can I fetch a portlet's layout definition through the older /api/portlet/layout route?”
Tell an agent
Get the legacy portlet layout for {params}.
Load the layout definition of the portlet described by {params}.
GET /api/portlet/{params} Render a legacy portlet via GET · Layout get #
Ask an LLM
“Can I load a legacy portlet's content with a plain GET?”
“Which older route returns a portlet by its parameters?”
Tell an agent
Load legacy portlet {params} with a GET request.
Fetch the old-style portlet view for {params}.
POST /api/portlet/{params} Submit to a legacy portlet via POST · Layout post #
Ask an LLM
“How do I post a form submission to a legacy portlet?”
“Is there a POST variant of the old portlet route?”
Tell an agent
Post to legacy portlet {params}.
Submit data to the old-style portlet at {params} using POST.
PUT /api/v1/portlet/custom/{portletId}/_addtolayout/{layoutId} Add a custom portlet to a layout · Add content portlet to layout #
Ask an LLM
“How do I put a custom content portlet into a menu layout?”
“Can I add my custom portlet to a specific layout tab?”
Tell an agent
Add custom portlet {portletId} to layout {layoutId}.
Place portlet {portletId} in the {layoutId} layout so users see it in the menu.
DELETE /api/v1/portlet/custom/{portletId} Delete a custom content portlet · Delete custom portlet #
Ask an LLM
“How do I delete a custom content portlet I created?”
“Can I remove a custom portlet entirely rather than just hiding it from a role?”
Tell an agent destructive · confirm first
Delete custom portlet {portletId}.
Permanently remove the custom content portlet {portletId}.
DELETE /api/v1/portlet/portletId/{portletId} Remove a portlet from my own layout · Delete personal portlet #
Ask an LLM
“Can I remove a portlet from just my personal menu?”
“Which call deletes a portlet from the current user's layout?”
Tell an agent destructive · confirm first
Remove portlet {portletId} from my personal layout.
Drop {portletId} from my own portlet menu.
DELETE /api/v1/portlet/portletId/{portletId}/roleId/{roleId} Remove a portlet from a role's layout · Delete portlet for role #
Ask an LLM
“How do I take a portlet away from everyone in a particular role?”
“Can I hide a portlet for one role while other roles keep it?”
Tell an agent destructive · confirm first
Remove portlet {portletId} from role {roleId}.
Revoke access to {portletId} for users in role {roleId}.
GET /api/v1/portlet/{portletId}/_doesuserhaveaccess Check if I can access a portlet · Does user have access to portlet #
Ask an LLM
“Does the current user have access to a given portlet?”
“Can I test portlet permissions before showing a menu link?”
Tell an agent
Check whether I have access to portlet {portletId}.
Verify the current user can open {portletId}.
GET /api/v1/portlet/{portletId} Get a portlet by ID · Find portlet #
Ask an LLM
“What is configured on a specific portlet?”
“Can I look up a portlet's definition by its ID?”
Tell an agent
Get portlet {portletId}.
Show the configuration of portlet {portletId}.
GET /api/v1/portlet/_actionurl/{contentTypeVariable} Get the create-content URL for a content type · Get create content URL #
Ask an LLM
“What admin URL opens the editor to create new content of a given type?”
“Can I get the create-content link in a specific language?”
Tell an agent
Get the create-content URL for content type {contentTypeVariable}.
Build the new-content editor link for {contentTypeVariable} in language {language_id}.
PUT /api/v1/portlet/custom Update a custom content portlet · Update portlet #
Ask an LLM
“Can I change which content types an existing custom portlet shows?”
“How do I rename a custom portlet I already made?”
Tell an agent
Update custom portlet {portletId} to show content types {contentTypes}.
Rename existing custom portlet {portletId} to {portletName}.
POST /api/v1/portlet/custom Create a custom content portlet · Save new #
Ask an LLM
“How do I create a custom portlet that lists only certain content types?”
“Can a new custom portlet default to a list or card view?”
Tell an agent
Create a custom portlet {portletId} named {portletName} for content types {contentTypes}.
Make a new content portlet {portletName} covering base types {baseTypes} in view mode {dataViewMode}.

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-portlets-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-portlets-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: dotCMS REST Portlets API
  version: '3'
  description: Portlet management and administration
servers:
- url: /
  description: dotCMS Server
tags:
- name: Portlets
  description: Portlet management and administration
paths:
  /api/portlet/layout/{params}:
    get:
      tags:
      - Portlets
      operationId: getLayout_1
      parameters:
      - name: params
        in: path
        required: true
        schema:
          pattern: .*
          type: string
      responses:
        default:
          description: default response
          content:
            text/html: {}
      summary: Get layout 1
      x-summary-source: derived
  /api/portlet/{params}:
    get:
      tags:
      - Portlets
      operationId: layoutGet
      parameters:
      - name: params
        in: path
        required: true
        schema:
          pattern: .*
          type: string
      responses:
        default:
          description: default response
          content:
            text/html: {}
      summary: Layout get
      x-summary-source: derived
    post:
      tags:
      - Portlets
      operationId: layoutPost
      parameters:
      - name: params
        in: path
        required: true
        schema:
          pattern: .*
          type: string
      responses:
        default:
          description: default response
          content:
            text/html: {}
      summary: Layout post
      x-summary-source: derived
  /api/v1/portlet/custom/{portletId}/_addtolayout/{layoutId}:
    put:
      tags:
      - Portlets
      operationId: addContentPortletToLayout
      parameters:
      - name: portletId
        in: path
        required: true
        schema:
          type: string
      - name: layoutId
        in: path
        required: true
        schema:
          type: string
      responses:
        default:
          description: default response
          content:
            application/json: {}
            application/javascript: {}
      summary: Add content portlet to layout
      x-summary-source: derived
  /api/v1/portlet/custom/{portletId}:
    delete:
      tags:
      - Portlets
      operationId: deleteCustomPortlet
      parameters:
      - name: portletId
        in: path
        required: true
        schema:
          type: string
      responses:
        default:
          description: default response
          content:
            application/json: {}
            application/javascript: {}
      summary: Delete custom portlet
      x-summary-source: derived
  /api/v1/portlet/portletId/{portletId}:
    delete:
      tags:
      - Portlets
      operationId: deletePersonalPortlet
      parameters:
      - name: portletId
        in: path
        required: true
        schema:
          type: string
      responses:
        default:
          description: default response
          content:
            application/json: {}
            application/javascript: {}
      summary: Delete personal portlet
      x-summary-source: derived
  /api/v1/portlet/portletId/{portletId}/roleId/{roleId}:
    delete:
      tags:
      - Portlets
      operationId: deletePortletForRole
      parameters:
      - name: portletId
        in: path
        required: true
        schema:
          type: string
      - name: roleId
        in: path
        required: true
        schema:
          type: string
      responses:
        default:
          description: default response
          content:
            application/json: {}
            application/javascript: {}
      summary: Delete portlet for role
      x-summary-source: derived
  /api/v1/portlet/{portletId}/_doesuserhaveaccess:
    get:
      tags:
      - Portlets
      operationId: doesUserHaveAccessToPortlet
      parameters:
      - name: portletId
        in: path
        required: true
        schema:
          type: string
      responses:
        default:
          description: default response
          content:
            application/json: {}
            application/javascript: {}
      summary: Does user have access to portlet
      x-summary-source: derived
  /api/v1/portlet/{portletId}:
    get:
      tags:
      - Portlets
      operationId: findPortlet
      parameters:
      - name: portletId
        in: path
        required: true
        schema:
          type: string
      responses:
        default:
          description: default response
          content:
            application/json: {}
            application/javascript: {}
      summary: Find portlet
      x-summary-source: derived
  /api/v1/portlet/_actionurl/{contentTypeVariable}:
    get:
      tags:
      - Portlets
      operationId: getCreateContentURL
      parameters:
      - name: contentTypeVariable
        in: path
        required: true
        schema:
          type: string
      - name: language_id
        in: query
        schema:
          type: string
      responses:
        default:
          description: default response
          content:
            application/json: {}
            application/javascript: {}
      summary: Get create content URL
      x-summary-source: derived
  /api/v1/portlet/custom:
    put:
      tags:
      - Portlets
      operationId: updatePortlet
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomPortletForm'
      responses:
        default:
          description: default response
          content:
            application/json: {}
            application/javascript: {}
      summary: Update portlet
      x-summary-source: derived
    post:
      tags:
      - Portlets
      operationId: saveNew
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomPortletForm'
      responses:
        default:
          description: default response
          content:
            application/json: {}
            application/javascript: {}
      summary: Save new
      x-summary-source: derived
components:
  schemas:
    CustomPortletForm:
      type: object
      properties:
        portletId:
          type: string
        portletName:
          type: string
        baseTypes:
          type: string
        contentTypes:
          type: string
        dataViewMode:
          type: string