The Co-operative Bank Portlets API

Portlet management and administration

Operations 14

GET /api/portlet/layout/{params} Get layout 1 #
GET /api/portlet/{params} Layout get #
POST /api/portlet/{params} Layout post #
PUT /api/v1/portlet/custom/{portletId}/_addtolayout/{layoutId} Add content portlet to layout #
GET /api/v1/portlet/custom/{portletId} Read one custom content tool's configuration #
DELETE /api/v1/portlet/custom/{portletId} Delete a custom content tool #
DELETE /api/v1/portlet/portletId/{portletId} Delete personal portlet #
DELETE /api/v1/portlet/portletId/{portletId}/roleId/{roleId} Delete portlet for role #
GET /api/v1/portlet/{portletId}/_doesuserhaveaccess Does user have access to portlet #
GET /api/v1/portlet/{portletId} Find portlet #
GET /api/v1/portlet/_actionurl/{contentTypeVariable} Get create content URL #
GET /api/v1/portlet/_catalog List the tools that can be placed in a navigation section #
PUT /api/v1/portlet/custom Update a custom content tool #
POST /api/v1/portlet/custom Create a custom content tool #

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/co-operative-bank:co-operative-bank-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

co-operative-bank-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}:
    get:
      tags:
      - Portlets
      summary: Read one custom content tool's configuration
      description: 'Returns the editable configuration of a custom content tool: id, name, base types, content types and data view mode. Requires an authenticated back-end user with access to the tools or tools-beta portlet, or the CMS Administrator role.'
      operationId: getCustomTool
      parameters:
      - name: portletId
        in: path
        description: Stored id of the custom tool, c_ prefix included
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Custom tool found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEntityCustomToolView'
        '401':
          description: Unauthorized - no authenticated back-end user, or the caller holds neither the tools nor the tools-beta portlet and is not a CMS Administrator
          content:
            application/json: {}
        '404':
          description: No portlet has this id, or it is a tool shipped with the product and has no custom configuration
          content:
            application/json: {}
    delete:
      tags:
      - Portlets
      summary: Delete a custom content tool
      description: 'Removes the custom content tool and takes it out of every navigation section that contained it. Refuses, with 404 and no change, any id that is not a custom content tool: tools shipped with the product cannot be removed this way. Requires an authenticated back-end user with access to the roles, tools or tools-beta portlet, or the CMS Administrator role.'
      operationId: deleteCustomPortlet
      parameters:
      - name: portletId
        in: path
        description: Stored id of the custom tool, c_ prefix included
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Deleted; the entity carries a confirmation under "message"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEntityMapStringStringView'
        '401':
          description: Unauthorized - no authenticated back-end user, or the caller holds none of the roles, tools or tools-beta portlets and is not a CMS Administrator
          content:
            application/json: {}
        '404':
          description: No portlet has this id, or it is a tool shipped with the product
          content:
            application/json: {}
  /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/_catalog:
    get:
      tags:
      - Portlets
      summary: List the tools that can be placed in a navigation section
      description: 'Every portlet that can be added to a section, with the same inclusion rules as the legacy Roles & Tools tool picker: portlets excluded from layouts are omitted, and the old Languages tool is omitted while FEATURE_FLAG_LOCALES_HIDE_OLD_LANGUAGES_PORTLET is on. Sorted by title ignoring letter case. Each row carries the id, the localized title and an isCustom flag that is true only for tools an admin created through New Tool. Requires an authenticated back-end user with access to the tools or tools-beta portlet, or the CMS Administrator role.'
      operationId: getToolsCatalog
      responses:
        '200':
          description: Catalog retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEntityToolCatalogView'
        '401':
          description: Unauthorized - no authenticated back-end user, or the caller holds neither the tools nor the tools-beta portlet and is not a CMS Administrator
          content:
            application/json: {}
  /api/v1/portlet/custom:
    put:
      tags:
      - Portlets
      summary: Update a custom content tool
      description: 'Replaces the name, base types, content types and data view mode of an existing custom content tool. Refuses, with 404 and no change, an id that is not a custom content tool: tools shipped with the product cannot be rewritten this way. Requires an authenticated back-end user with access to the roles, tools or tools-beta portlet, or the CMS Administrator role.'
      operationId: updatePortlet
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomPortletForm'
      responses:
        '200':
          description: Updated; the entity carries the stored portlet id under "portlet"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEntityMapStringStringView'
        '401':
          description: Unauthorized - no authenticated back-end user, or the caller holds none of the roles, tools or tools-beta portlets and is not a CMS Administrator
          content:
            application/json: {}
        '404':
          description: No portlet has the given id, or it is a tool shipped with the product
          content:
            application/json: {}
    post:
      tags:
      - Portlets
      summary: Create a custom content tool
      description: Creates a custom content tool that lists the given base types and/or content types. Requires an authenticated back-end user with access to the roles, tools or tools-beta portlet, or the CMS Administrator role.
      operationId: saveNew
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomPortletForm'
      responses:
        '200':
          description: Created; the entity carries the stored portlet id under "portlet"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEntityMapStringStringView'
        '400':
          description: Validation failure (missing name or view mode, unknown content type, ...)
          content:
            application/json: {}
        '401':
          description: Unauthorized - no authenticated back-end user, or the caller holds none of the roles, tools or tools-beta portlets and is not a CMS Administrator
          content:
            application/json: {}
components:
  schemas:
    ErrorEntity:
      type: object
      properties:
        errorCode:
          type: string
        message:
          type: string
        fieldName:
          type: string
    Pagination:
      type: object
      properties:
        currentPage:
          type: integer
          format: int32
        perPage:
          type: integer
          format: int32
        totalEntries:
          type: integer
          format: int64
    ResponseEntityToolCatalogView:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorEntity'
        entity:
          type: array
          items:
            $ref: '#/components/schemas/ToolCatalogEntryView'
        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'
    ToolCatalogEntryView:
      type: object
      properties:
        id:
          type: string
          description: Portlet id, e.g. roles or c_press-releases
          example: c_press-releases
        title:
          type: string
          description: Title in the caller's language; falls back to the registered name, then to the id
          example: Press Releases
        isCustom:
          type: boolean
          description: 'True only for tools created through New Tool: registered in the database and not declared in the product''s portlet id registry. False for every shipped tool, Language Variables included'
      description: One tool that can be placed in a navigation section
    MessageEntity:
      type: object
      properties:
        message:
          type: string
    ResponseEntityCustomToolView:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorEntity'
        entity:
          $ref: '#/components/schemas/CustomToolView'
        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'
    ResponseEntityMapStringStringView:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorEntity'
        entity:
          type: object
          additionalProperties:
            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'
    CustomPortletForm:
      type: object
      properties:
        portletId:
          type: string
        portletName:
          type: string
        baseTypes:
          type: string
        contentTypes:
          type: string
        dataViewMode:
          type: string
    CustomToolView:
      type: object
      properties:
        portletId:
          type: string
          description: Stored id including the c_ prefix
          example: c_press-releases
        portletName:
          type: string
          description: Display name of the tool
          example: Press Releases
        baseTypes:
          type: array
          description: Base type names as stored (CONTENT, WIDGET, PERSONA, FILEASSET, HTMLPAGE, VANITY_URL, DOTASSET, FORM, KEY_VALUE); empty when none
          items:
            type: string
            description: Base type names as stored (CONTENT, WIDGET, PERSONA, FILEASSET, HTMLPAGE, VANITY_URL, DOTASSET, FORM, KEY_VALUE); empty when none
        contentTypes:
          type: array
          description: Content type variable names; empty when none
          items:
            type: string
            description: Content type variable names; empty when none
        dataViewMode:
          type: string
          description: list or card, as stored
          example: card
      description: Editable configuration of a custom content tool
x-provenance:
  method: harvested
  publisher: The Co-operative Bank
  source: https://www.developer.co-operativebank.co.uk/api/openapi.json
  note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
    stamped by stamp-openapi-provenance.py (roadmap#793)