dotCMS Content Delivery API

Content retrieval and manipulation endpoints

Operations 8

PUT /api/content/canLock/{params} Check if a contentlet can be locked (deprecated) #
GET /api/content/{params} Retrieve content by ID, inode, query, or related content #
PUT /api/content/{params} Create or update content via PUT (deprecated) #
POST /api/content/{params} Create content via POST (deprecated) #
GET /api/content/indexcount/{query} Count content matching a Lucene query #
GET /api/content/indexsearch/{query}/sortby/{sortby}/limit/{limit}/offset/{offset} Search content index by Lucene query #
PUT /api/content/lock/{params} Lock a contentlet (deprecated) #
PUT /api/content/unlock/{params} Unlock a contentlet (deprecated) #

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-content-delivery-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-content-delivery-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: dotCMS REST Content Delivery API
  version: '3'
  description: Content retrieval and manipulation endpoints
servers:
- url: /
  description: dotCMS Server
tags:
- name: Content Delivery
  description: Content retrieval and manipulation endpoints
paths:
  /api/content/canLock/{params}:
    put:
      tags:
      - Content Delivery
      summary: Check if a contentlet can be locked (deprecated)
      description: Checks whether the current user can lock a contentlet identified by inode or identifier. Returns lock capability information including current lock status and lock owner details. Parameters are passed as semicolon-delimited path segments (e.g., id:abc123/language:1). This endpoint is deprecated - use the v1 ContentResource canLockContent endpoint instead.
      operationId: canLockContentLegacy
      parameters:
      - name: params
        in: path
        description: Semicolon-delimited parameters (e.g., inode:abc123/language:1/live:true)
        required: true
        schema:
          pattern: .*
          type: string
      responses:
        '200':
          description: Lock capability check completed successfully
          content:
            application/json:
              schema:
                type: object
                description: Lock capability check result
        '401':
          description: Unauthorized access
          content:
            application/json: {}
        '403':
          description: Forbidden - insufficient permissions
          content:
            application/json: {}
        '404':
          description: Contentlet not found
          content:
            application/json: {}
      deprecated: true
  /api/content/{params}:
    get:
      tags:
      - Content Delivery
      summary: Retrieve content by ID, inode, query, or related content
      description: 'Retrieves contentlets using various lookup strategies. Parameters use a slash-delimited key:value format in the URL path (e.g., /api/content/inode:abc123/live:true/language:1). Supported parameters include: id (identifier), inode, query (Lucene query), type (json or xml), orderby, limit, offset, language, live, depth (0-3 for relationship traversal), render (true to render widgets), related (ContentType.Field:identifier format), and allCategoriesInfo. When ''depth'' is set: 0 returns related content identifiers, 1 returns full related content objects, 2 returns related content with their related identifiers, 3 returns related content with their fully hydrated related content.'
      operationId: getContentLegacy
      parameters:
      - name: params
        in: path
        description: Slash-delimited key:value parameters (e.g., inode:abc123/live:true/language:1)
        required: true
        schema:
          pattern: .*
          type: string
      responses:
        '200':
          description: Content retrieved successfully
          content:
            application/json:
              schema:
                type: object
                description: Content data in the requested format
        '400':
          description: Invalid parameters or malformed query
          content:
            application/json: {}
        '401':
          description: Unauthorized access
          content:
            application/json: {}
        '403':
          description: Forbidden - insufficient permissions
          content:
            application/json: {}
        '404':
          description: Content not found
          content:
            application/json: {}
        '500':
          description: Internal server error
          content:
            application/json: {}
    put:
      tags:
      - Content Delivery
      summary: Create or update content via PUT (deprecated)
      description: Creates or updates a contentlet using JSON, XML, or form-encoded data. This endpoint is deprecated - use the v1 WorkflowResource fireActionDefault endpoint instead.
      operationId: singlePutContent
      parameters:
      - name: params
        in: path
        description: Slash-delimited key:value parameters for content operation
        required: true
        schema:
          pattern: .*
          type: string
      requestBody:
        description: Content data in JSON, XML, or form format
        content:
          application/json: {}
          application/xml: {}
          application/x-www-form-urlencoded: {}
        required: true
      responses:
        '200':
          description: Contentlet created or updated successfully
          content:
            application/json:
              schema:
                type: object
                description: Created or updated contentlet data
        '400':
          description: Bad request - invalid input data
          content:
            application/json: {}
        '401':
          description: Unauthorized access
          content:
            application/json: {}
        '403':
          description: Forbidden - insufficient permissions
          content:
            application/json: {}
      deprecated: true
    post:
      tags:
      - Content Delivery
      summary: Create content via POST (deprecated)
      description: Creates a contentlet using JSON, XML, or form-encoded data. This endpoint is deprecated - use the v1 WorkflowResource fireActionDefault endpoint instead.
      operationId: singlePostContent
      parameters:
      - name: params
        in: path
        description: Slash-delimited key:value parameters for content operation
        required: true
        schema:
          pattern: .*
          type: string
      requestBody:
        description: Content data in JSON, XML, or form format
        content:
          application/json: {}
          application/xml: {}
          application/x-www-form-urlencoded: {}
        required: true
      responses:
        '200':
          description: Contentlet created successfully
          content:
            application/json:
              schema:
                type: object
                description: Created or updated contentlet data
        '400':
          description: Bad request - invalid input data
          content:
            application/json: {}
        '401':
          description: Unauthorized access
          content:
            application/json: {}
        '403':
          description: Forbidden - insufficient permissions
          content:
            application/json: {}
      deprecated: true
  /api/content/indexcount/{query}:
    get:
      tags:
      - Content Delivery
      summary: Count content matching a Lucene query
      description: Performs an index count using the specified Lucene query and returns the total number of matching contentlets as a plain text string.
      operationId: indexCountContent
      parameters:
      - name: query
        in: path
        description: Lucene query string to count matching content
        required: true
        schema:
          type: string
      - name: type
        in: query
        description: Response format type (optional)
        schema:
          type: string
      - name: callback
        in: query
        description: JSONP callback function name (optional)
        schema:
          type: string
      responses:
        '200':
          description: Count of matching contentlets returned successfully
          content:
            text/plain:
              schema:
                type: string
                description: The count of contentlets matching the query
        '400':
          description: Invalid query syntax
          content:
            application/json: {}
        '401':
          description: Unauthorized access
          content:
            application/json: {}
        '403':
          description: Forbidden - insufficient permissions
          content:
            application/json: {}
        '500':
          description: Internal server error during count operation
          content:
            application/json: {}
  /api/content/indexsearch/{query}/sortby/{sortby}/limit/{limit}/offset/{offset}:
    get:
      tags:
      - Content Delivery
      summary: Search content index by Lucene query
      description: Performs an index search using the Lucene query and returns an array of JSON objects, each containing the inode and identifier of matching content.
      operationId: indexSearchContent
      parameters:
      - name: query
        in: path
        description: Lucene query string to search the index
        required: true
        schema:
          type: string
      - name: sortby
        in: path
        description: Field name to sort results by
        required: true
        schema:
          type: string
      - name: limit
        in: path
        description: Maximum number of results to return
        required: true
        schema:
          type: integer
          format: int32
      - name: offset
        in: path
        description: Number of results to skip for pagination
        required: true
        schema:
          type: integer
          format: int32
      - name: type
        in: query
        description: Response format type (optional)
        schema:
          type: string
      - name: callback
        in: query
        description: JSONP callback function name (optional)
        schema:
          type: string
      responses:
        '200':
          description: Index search results returned successfully
          content:
            application/json:
              schema:
                type: object
                description: Array of content identifiers or inodes matching the search criteria
        '400':
          description: Invalid query syntax or parameters
          content:
            application/json: {}
        '401':
          description: Unauthorized access
          content:
            application/json: {}
        '403':
          description: Forbidden - insufficient permissions
          content:
            application/json: {}
        '500':
          description: Internal server error during index search
          content:
            application/json: {}
  /api/content/lock/{params}:
    put:
      tags:
      - Content Delivery
      summary: Lock a contentlet (deprecated)
      description: Locks a contentlet identified by inode or identifier to prevent concurrent edits. Parameters are passed as semicolon-delimited path segments (e.g., id:abc123/language:1). This endpoint is deprecated - use the v1 ContentResource lockContent endpoint instead.
      operationId: lockContentLegacy
      parameters:
      - name: params
        in: path
        description: Semicolon-delimited parameters (e.g., inode:abc123/language:1/live:true)
        required: true
        schema:
          pattern: .*
          type: string
      responses:
        '200':
          description: Contentlet locked successfully
          content:
            application/json:
              schema:
                type: object
                description: Lock status result
        '401':
          description: Unauthorized access
          content:
            application/json: {}
        '403':
          description: Forbidden - insufficient permissions
          content:
            application/json: {}
        '404':
          description: Contentlet not found
          content:
            application/json: {}
      deprecated: true
  /api/content/unlock/{params}:
    put:
      tags:
      - Content Delivery
      summary: Unlock a contentlet (deprecated)
      description: Unlocks a previously locked contentlet identified by inode or identifier. Parameters are passed as semicolon-delimited path segments (e.g., id:abc123/language:1). This endpoint is deprecated - use the v1 ContentResource unlockContent endpoint instead.
      operationId: unlockContentLegacy
      parameters:
      - name: params
        in: path
        description: Semicolon-delimited parameters (e.g., inode:abc123/language:1/live:true)
        required: true
        schema:
          pattern: .*
          type: string
      responses:
        '200':
          description: Contentlet unlocked successfully
          content:
            application/json:
              schema:
                type: object
                description: Unlock operation result
        '401':
          description: Unauthorized access
          content:
            application/json: {}
        '403':
          description: Forbidden - insufficient permissions
          content:
            application/json: {}
        '404':
          description: Contentlet not found
          content:
            application/json: {}
      deprecated: true