dotCMS · OpenAPI Overlay 1.0.0

API Evangelist conversational phrasing for dotCMS REST Portlets API

13 actions 13 updates phrasing extends openapi/dotcms-portlets-api-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for dotCMS's API. It is a proposal applied on top of the contract, not a document dotCMS publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-apievangelist-phrasing

Targets 13

$.info
$.paths['/api/portlet/layout/{params}'].get
$.paths['/api/portlet/{params}'].get
$.paths['/api/portlet/{params}'].post
$.paths['/api/v1/portlet/custom/{portletId}/_addtolayout/{layoutId}'].put
$.paths['/api/v1/portlet/custom/{portletId}'].delete
$.paths['/api/v1/portlet/portletId/{portletId}'].delete
$.paths['/api/v1/portlet/portletId/{portletId}/roleId/{roleId}'].delete
$.paths['/api/v1/portlet/{portletId}/_doesuserhaveaccess'].get
$.paths['/api/v1/portlet/{portletId}'].get
$.paths['/api/v1/portlet/_actionurl/{contentTypeVariable}'].get
$.paths['/api/v1/portlet/custom'].put
$.paths['/api/v1/portlet/custom'].post

OpenAPI Overlay

Raw ↑
# Generated by API Evangelist (build-phrasing.py). Our phrasing, not observed demand.
overlay: 1.0.0
info:
  title: API Evangelist conversational phrasing for dotCMS REST Portlets API
  version: 1.0.0
extends: openapi/dotcms-portlets-api-openapi.yml
actions:
- target: $.info
  update:
    x-apievangelist-phrasing:
      method: generated
      generated: '2026-09-26'
      generator: build-phrasing.py
      label: Generated by API Evangelist
      operations: 12
- target: $.paths['/api/portlet/layout/{params}'].get
  update:
    x-apievangelist-phrasing:
      intent: Get a portlet's layout (legacy)
      effect: read
      questions:
      - 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?
      instructions:
      - text: Get the legacy portlet layout for {params}.
        slots:
          params: path.params
      - text: Load the layout definition of the portlet described by {params}.
        slots:
          params: path.params
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/portlet/{params}'].get
  update:
    x-apievangelist-phrasing:
      intent: Render a legacy portlet via GET
      effect: read
      questions:
      - Can I load a legacy portlet's content with a plain GET?
      - Which older route returns a portlet by its parameters?
      instructions:
      - text: Load legacy portlet {params} with a GET request.
        slots:
          params: path.params
      - text: Fetch the old-style portlet view for {params}.
        slots:
          params: path.params
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/portlet/{params}'].post
  update:
    x-apievangelist-phrasing:
      intent: Submit to a legacy portlet via POST
      effect: write
      questions:
      - How do I post a form submission to a legacy portlet?
      - Is there a POST variant of the old portlet route?
      instructions:
      - text: Post to legacy portlet {params}.
        slots:
          params: path.params
      - text: Submit data to the old-style portlet at {params} using POST.
        slots:
          params: path.params
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/portlet/custom/{portletId}/_addtolayout/{layoutId}'].put
  update:
    x-apievangelist-phrasing:
      intent: Add a custom portlet to a layout
      effect: write
      questions:
      - How do I put a custom content portlet into a menu layout?
      - Can I add my custom portlet to a specific layout tab?
      instructions:
      - text: Add custom portlet {portletId} to layout {layoutId}.
        slots:
          portletId: path.portletId
          layoutId: path.layoutId
      - text: Place portlet {portletId} in the {layoutId} layout so users see it in the menu.
        slots:
          portletId: path.portletId
          layoutId: path.layoutId
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/portlet/custom/{portletId}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Delete a custom content portlet
      effect: destructive
      questions:
      - 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?
      instructions:
      - text: Delete custom portlet {portletId}.
        slots:
          portletId: path.portletId
      - text: Permanently remove the custom content portlet {portletId}.
        slots:
          portletId: path.portletId
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/portlet/portletId/{portletId}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Remove a portlet from my own layout
      effect: destructive
      questions:
      - Can I remove a portlet from just my personal menu?
      - Which call deletes a portlet from the current user's layout?
      instructions:
      - text: Remove portlet {portletId} from my personal layout.
        slots:
          portletId: path.portletId
      - text: Drop {portletId} from my own portlet menu.
        slots:
          portletId: path.portletId
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/portlet/portletId/{portletId}/roleId/{roleId}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Remove a portlet from a role's layout
      effect: destructive
      questions:
      - 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?
      instructions:
      - text: Remove portlet {portletId} from role {roleId}.
        slots:
          portletId: path.portletId
          roleId: path.roleId
      - text: Revoke access to {portletId} for users in role {roleId}.
        slots:
          portletId: path.portletId
          roleId: path.roleId
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/portlet/{portletId}/_doesuserhaveaccess'].get
  update:
    x-apievangelist-phrasing:
      intent: Check if I can access a portlet
      effect: read
      questions:
      - Does the current user have access to a given portlet?
      - Can I test portlet permissions before showing a menu link?
      instructions:
      - text: Check whether I have access to portlet {portletId}.
        slots:
          portletId: path.portletId
      - text: Verify the current user can open {portletId}.
        slots:
          portletId: path.portletId
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/portlet/{portletId}'].get
  update:
    x-apievangelist-phrasing:
      intent: Get a portlet by ID
      effect: read
      questions:
      - What is configured on a specific portlet?
      - Can I look up a portlet's definition by its ID?
      instructions:
      - text: Get portlet {portletId}.
        slots:
          portletId: path.portletId
      - text: Show the configuration of portlet {portletId}.
        slots:
          portletId: path.portletId
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/portlet/_actionurl/{contentTypeVariable}'].get
  update:
    x-apievangelist-phrasing:
      intent: Get the create-content URL for a content type
      effect: read
      questions:
      - 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?
      instructions:
      - text: Get the create-content URL for content type {contentTypeVariable}.
        slots:
          contentTypeVariable: path.contentTypeVariable
      - text: Build the new-content editor link for {contentTypeVariable} in language {language_id}.
        slots:
          contentTypeVariable: path.contentTypeVariable
          language_id: query.language_id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/portlet/custom'].put
  update:
    x-apievangelist-phrasing:
      intent: Update a custom content portlet
      effect: write
      questions:
      - Can I change which content types an existing custom portlet shows?
      - How do I rename a custom portlet I already made?
      instructions:
      - text: Update custom portlet {portletId} to show content types {contentTypes}.
        slots:
          portletId: requestBody.portletId
          contentTypes: requestBody.contentTypes
      - text: Rename existing custom portlet {portletId} to {portletName}.
        slots:
          portletId: requestBody.portletId
          portletName: requestBody.portletName
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/portlet/custom'].post
  update:
    x-apievangelist-phrasing:
      intent: Create a custom content portlet
      effect: write
      questions:
      - 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?
      instructions:
      - text: Create a custom portlet {portletId} named {portletName} for content types {contentTypes}.
        slots:
          portletId: requestBody.portletId
          portletName: requestBody.portletName
          contentTypes: requestBody.contentTypes
      - text: Make a new content portlet {portletName} covering base types {baseTypes} in view mode {dataViewMode}.
        slots:
          portletName: requestBody.portletName
          baseTypes: requestBody.baseTypes
          dataViewMode: requestBody.dataViewMode
      method: generated
      generated: '2026-09-26'