{"openapi":"3.0.1","info":{"title":"dotCMS REST API","version":"3"},"servers":[{"url":"/","description":"dotCMS Server"}],"tags":[{"name":"AI","description":"AI-powered content generation and analysis endpoints"},{"name":"dotAuth","description":"OAuth/OIDC and SAML authentication: per-site configuration (SYSTEM_HOST is the global default) and headless OIDC token exchange"},{"name":"JavaScript","description":"JavaScript execution and server-side scripting"},{"name":"Bundle","description":"Content bundle management and deployment"},{"name":"Content Delivery","description":"Content retrieval and manipulation endpoints"},{"name":"Data Integrity","description":"Data integrity checking and conflict resolution"},{"name":"Content Type","description":"Content type definitions and schema management"},{"name":"Tag (v1)","description":"Legacy tag management endpoints (deprecated - use v2 TagResource instead)"},{"name":"Accessibility Agent","description":"Streaming a11y-fix agent proxy"},{"name":"Accessibility Checker","description":"Endpoints that perform operations related to validating accessibility in content."},{"name":"Content Analytics","description":"Proxy endpoints that forward analytics requests to the dot-ca-event-manager service."},{"name":"Announcements","description":"System announcements and notifications"},{"name":"Apps","description":"Third-party application integration and configuration"},{"name":"Authentication","externalDocs":{"description":"Additional Authentication API information","url":"https://www.dotcms.com/docs/latest/rest-api-authentication"}},{"name":"Browser Tree","description":"File and folder browser tree operations"},{"name":"System Configuration","description":"System configuration and company settings"},{"name":"Containers","description":"Endpoints for managing Container objects and their content"},{"name":"Content","description":"Endpoints for managing content and contentlets - the core data objects in dotCMS"},{"name":"getPagesContentTypes","description":"Returns the content types valid for a page based on the container/types on the layout"},{"name":"Folders","description":"Endpoints for managing folder structure and organization"},{"name":"Forms","description":"Form management and processing"},{"name":"Health","description":"Health management and monitoring endpoints for administrative dashboards"},{"name":"Search Index","description":"Elasticsearch index management and operations"},{"name":"Job Queue","description":"Endpoints for managing background jobs and job queues"},{"name":"Language","description":"Language configuration and management"},{"name":"Maintenance","description":"System maintenance and administration operations"},{"name":"Navigation","description":"Site navigation tree endpoints"},{"name":"Page","description":"Page rendering, layout management, and content operations","externalDocs":{"description":"Additional Page API information","url":"https://www.dotcms.com/docs/latest/page-rest-api-layout-as-a-service-laas"}},{"name":"Publishing","description":"Push publishing job management endpoints"},{"name":"Relationships","description":"Content relationship management"},{"name":"Site","description":"Site management, lifecycle, and configuration endpoints"},{"name":"Cache Management","description":"Cache provider management and operations"},{"name":"System Logging","description":"System logging configuration and management"},{"name":"System Monitoring","description":"System monitoring and health checks"},{"name":"Temporary Files","description":"Temporary file upload and management for content creation"},{"name":"Template","description":"Template CRUD, publish, archive, and layout management endpoints"},{"name":"Theme","description":"Theme browsing and management"},{"name":"Usage","description":"Provides business intelligence metrics for dashboard usage"},{"name":"Variants","description":"Endpoints for managing content variants"},{"name":"Templates","description":"Template design and management"},{"name":"Content Type Field","description":"Content type field definitions and configuration"},{"name":"Tags","description":"Content tagging and labeling"},{"name":"Administration","description":"System administration and management tools"},{"name":"API Token","description":"API token management and authentication","externalDocs":{"description":"Additional API token information","url":"https://www.dotcms.com/docs/latest/rest-api-authentication#APIToken"}},{"name":"Categories","description":"Content categorization and taxonomy"},{"name":"Cluster Management","description":"Cluster nodes and distributed system management"},{"name":"Content Report","description":"Content reporting and analytics"},{"name":"Environment","description":"Publishing environment management and configuration"},{"name":"Experiments","description":"A/B testing and experimentation management"},{"name":"File Assets","description":"File asset management and download operations"},{"name":"Internationalization","description":"Language management and localization"},{"name":"License","description":"License management and validation"},{"name":"Notifications","description":"User notifications and alerts management"},{"name":"OSGi Plugins","description":"OSGi plugin management and dynamic deployment"},{"name":"Permissions","description":"Permission management and access control"},{"name":"Personas","description":"Content persona management and targeting"},{"name":"Personalization","description":"Content personalization and persona management"},{"name":"Portlets","description":"Portlet management and administration"},{"name":"Push Publishing","description":"Remote content publishing and synchronization"},{"name":"Roles","description":"User role and permission management"},{"name":"Rules Engine","description":"Business rules and conditional logic management"},{"name":"SAML Authentication","description":"SAML SSO authentication and integration"},{"name":"Search","description":"Content search and query operations"},{"name":"Sites","description":"Multi-site management and configuration"},{"name":"System","description":"System-level operations and Redis management"},{"name":"System Storage","description":"Storage providers and data replication management"},{"name":"TailLog","description":"Server log file monitoring and real-time viewing"},{"name":"Testing","description":"Testing utilities and development endpoints"},{"name":"Themes","description":"Theme design and management"},{"name":"Tool Groups","description":"Administrative tool group management"},{"name":"Users","description":"User account management and administration"},{"name":"Versionables","description":"Version control and content archiving"},{"name":"VTL","description":"Velocity Template Language execution and rendering"},{"name":"Web Assets","description":"Web asset management and operations"},{"name":"Widgets","description":"Widget development and rendering"},{"name":"Workflow","description":"Endpoints that perform operations related to workflows.","externalDocs":{"description":"Additional Workflow API information","url":"https://www.dotcms.com/docs/latest/workflow-rest-api"}},{"name":"Elasticsearch Content Search","description":"Backend Elasticsearch search endpoints for portlet context"}],"paths":{"/api/v1/ai/providers":{"get":{"tags":["AI"],"summary":"List dotAI provider configuration metadata","description":"Returns, for every registered dotAI provider, the capabilities it supports (chat/embeddings/image) and the providerConfig fields each supported capability requires or accepts.","operationId":"listAiProviders","responses":{"200":{"description":"Provider metadata retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityAiProviderListView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}}}}},"/api/v1/ai/providers/test/{capability}":{"post":{"tags":["AI"],"summary":"Test a dotAI provider connection","description":"Builds the provider client for the given capability from the posted configuration and issues one minimal real request against the provider (a short chat reply, a one-line embedding, or a single test image). Masked credential fields (\"*****\") in the posted config are resolved against the real value already stored for siteId before testing. Returns success=false with a message on any validation or provider error rather than an HTTP error status, so the caller can always render the result.","operationId":"testAiProviderConnection","parameters":[{"name":"capability","in":"path","required":true,"schema":{"type":"string"}},{"name":"siteId","in":"query","schema":{"type":"string"}}],"requestBody":{"description":"Provider config section to test","content":{"application/json":{"schema":{"type":"string"}}}},"responses":{"200":{"description":"Test executed — check the success field for the outcome","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityAiTestConnectionView"}}}},"400":{"description":"Unknown capability or malformed request body","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - requires CMS admin, or access denied to site","content":{"application/json":{}}}}}},"/api/v1/ai/completions/config":{"get":{"tags":["AI"],"summary":"Get AI service configuration","description":"Retrieves the current AI service configuration. Accepts an optional siteId query parameter (site identifier / UUID, or the literal SYSTEM_HOST). Hostname values are not supported — use the site identifier. When siteId is omitted or cannot be resolved, falls back to the site derived from the HTTP Host header.","operationId":"getAiConfig","parameters":[{"name":"siteId","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Configuration retrieved successfully","content":{"application/json":{"schema":{"type":"string"}}}},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks permission for the requested site"},"500":{"description":"Internal server error"}}},"put":{"tags":["AI"],"summary":"Save AI provider configuration","description":"Saves the providerConfig JSON for the target site. Accepts an optional siteId query parameter (site identifier / UUID, or the literal SYSTEM_HOST). Hostname values are not supported — use the site identifier. When siteId is omitted, saves to the site derived from the HTTP Host header. An unresolvable siteId returns 400. Credential fields set to \"*****\" are preserved from the existing stored configuration. Requires CMS admin.","operationId":"saveAiConfig","parameters":[{"name":"siteId","in":"query","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"string"}}}},"responses":{"200":{"description":"Configuration saved successfully"},"400":{"description":"Missing or invalid request body, or site not found"},"403":{"description":"Forbidden - requires CMS admin or access denied to site"},"500":{"description":"Internal server error"}}}},"/api/v1/ai/completions/rawPrompt":{"post":{"tags":["AI"],"summary":"Generate AI completions from raw prompt","description":"Processes raw prompts directly through the AI service without content preprocessing. Supports both streaming and non-streaming responses.","operationId":"rawPrompt","requestBody":{"description":"Completion form with raw prompt and configuration","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CompletionsForm"}}}},"responses":{"200":{"description":"Raw completion generated successfully","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Missing or invalid prompt"},"401":{"description":"Unauthorized - User not authenticated"},"500":{"description":"Internal server error"}}}},"/api/v1/ai/completions":{"post":{"tags":["AI"],"summary":"Generate AI completions from content","description":"Creates AI-powered content summaries and completions based on provided prompts. Supports both streaming and non-streaming responses.","operationId":"summarizeFromContent","requestBody":{"description":"Completion form with prompt and configuration","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CompletionsForm"}}}},"responses":{"200":{"description":"Completion generated successfully","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Missing or invalid prompt"},"401":{"description":"Unauthorized - User not authenticated"},"500":{"description":"Internal server error"}}}},"/api/v1/ai/embeddings/count":{"get":{"tags":["AI"],"operationId":"count_1","parameters":[{"name":"site","in":"query","schema":{"type":"string"}},{"name":"contentType","in":"query","schema":{"type":"string"}},{"name":"indexName","in":"query","schema":{"type":"string"}},{"name":"language","in":"query","schema":{"type":"string"}},{"name":"identifier","in":"query","schema":{"type":"string"}},{"name":"inode","in":"query","schema":{"type":"string"}},{"name":"fieldVar","in":"query","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"post":{"tags":["AI"],"operationId":"count","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/CompletionsForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/ai/embeddings":{"post":{"tags":["AI"],"operationId":"embed","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/EmbeddingsForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"delete":{"tags":["AI"],"operationId":"delete","requestBody":{"content":{"*/*":{"schema":{"type":"object","properties":{"asMap":{"type":"object","additionalProperties":{"type":"object"}},"empty":{"type":"boolean"}},"additionalProperties":{"type":"object"}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/ai/embeddings/db":{"delete":{"tags":["AI"],"operationId":"dropAndRecreateTables","requestBody":{"content":{"*/*":{"schema":{"type":"object","properties":{"asMap":{"type":"object","additionalProperties":{"type":"object"}},"empty":{"type":"boolean"}},"additionalProperties":{"type":"object"}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/ai/embeddings/indexCount":{"get":{"tags":["AI"],"operationId":"indexCount","responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/ai/embeddings/test":{"get":{"tags":["AI"],"operationId":"textResource","responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/ai/image/generate":{"get":{"tags":["AI"],"operationId":"indexByInode_1","parameters":[{"name":"prompt","in":"query","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"post":{"tags":["AI"],"operationId":"handleImageRequest","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/AIImageRequestDTO"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/ai/image/test":{"get":{"tags":["AI"],"operationId":"indexByInode","responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/ai/search/related":{"get":{"tags":["AI"],"operationId":"relatedByGet","parameters":[{"name":"language","in":"query","schema":{"type":"integer","format":"int64"}},{"name":"identifier","in":"query","schema":{"type":"string"}},{"name":"inode","in":"query","schema":{"type":"string"}},{"name":"indexName","in":"query","schema":{"type":"string"}},{"name":"fieldVar","in":"query","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"post":{"tags":["AI"],"operationId":"relatedByPost","requestBody":{"content":{"*/*":{"schema":{"type":"object","properties":{"asMap":{"type":"object","additionalProperties":{"type":"object"}},"empty":{"type":"boolean"}},"additionalProperties":{"type":"object"}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/ai/search":{"get":{"tags":["AI"],"operationId":"searchByGet","parameters":[{"name":"query","in":"query","schema":{"type":"string"}},{"name":"searchLimit","in":"query","schema":{"type":"integer","format":"int32","default":1000}},{"name":"searchOffset","in":"query","schema":{"type":"integer","format":"int32","default":0}},{"name":"site","in":"query","schema":{"type":"string"}},{"name":"contentType","in":"query","schema":{"type":"string"}},{"name":"indexName","in":"query","schema":{"type":"string","default":"default"}},{"name":"threshold","in":"query","schema":{"type":"number","format":"float","default":0.25}},{"name":"stream","in":"query","schema":{"type":"boolean","default":false}},{"name":"responseLength","in":"query","schema":{"type":"integer","format":"int32","default":1024}},{"name":"operator","in":"query","schema":{"type":"string","default":"<=>"}},{"name":"language","in":"query","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/octet-stream":{},"application/json":{}}}}},"post":{"tags":["AI"],"operationId":"searchByPost","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/CompletionsForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/ai/search/test":{"get":{"tags":["AI"],"operationId":"testResponse","responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/ai/text/generate":{"get":{"tags":["AI"],"operationId":"doGet","parameters":[{"name":"prompt","in":"query","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"post":{"tags":["AI"],"operationId":"doPost","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/CompletionsForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/dotauth/oauth/exchange":{"post":{"tags":["dotAuth"],"summary":"Exchange an OIDC id_token for a dotAuth session-ref","description":"Validates the caller-supplied id_token against the configured OIDC provider's JWKS (signature, iss, aud == our client_id, exp, nonce), resolves or JIT-provisions the matching dotCMS user, and returns an opaque session-ref bound to that user.","operationId":"exchange","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthExchangeForm"}}}},"responses":{"200":{"description":"Token exchange succeeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityOAuthExchangeView"}}}},"400":{"description":"Malformed payload or non-OIDC provider configured"},"401":{"description":"id_token failed validation (signature, iss, aud, exp, or nonce)"},"403":{"description":"Resolved dotCMS user exists but is not active"},"404":{"description":"Exchange endpoint not found"},"503":{"description":"OAuth is not configured for this site"}}},"options":{"tags":["dotAuth"],"operationId":"exchangePreflight","responses":{"default":{"description":"default response","content":{"*/*":{}}}}}},"/api/v1/dotauth/sites/{hostId}":{"get":{"tags":["dotAuth"],"summary":"Get the dotAuth configuration for a site","description":"Returns the protocol-specific configuration stored for the given hostId. Use the sentinel \"SYSTEM_HOST\" for the global default. When the host has no row of its own and the system default is configured, the response carries inherited=true and values holds the system defaults. Hidden secrets (e.g. clientSecret, privateKey) are masked as \"****\".","operationId":"getDotAuthConfig","parameters":[{"name":"hostId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Configuration retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityDotAuthConfigView"}}}},"401":{"description":"Authentication required"},"403":{"description":"User does not have permission to read this site"},"404":{"description":"Site not found"},"500":{"description":"Internal server error"}}},"put":{"tags":["dotAuth"],"summary":"Save (upsert) the dotAuth configuration for a site","description":"Writes the chosen protocol's secrets for the given hostId and deletes the other protocol's row for that host (mutual exclusion). Posting \"****\" on a hidden field preserves the stored value.","operationId":"saveDotAuthConfig","parameters":[{"name":"hostId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DotAuthConfigForm"}}}},"responses":{"200":{"description":"Configuration saved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}},"400":{"description":"Invalid form payload"},"401":{"description":"Authentication required"},"403":{"description":"User does not have permission to edit this site"},"404":{"description":"Site not found"},"500":{"description":"Internal server error"}}},"delete":{"tags":["dotAuth"],"summary":"Clear the dotAuth configuration for a site","description":"Deletes both OAuth and SAML secret rows for the given hostId. On SYSTEM_HOST this removes the global default; non-system hosts fall back to inheriting from SYSTEM_HOST afterward.","operationId":"clearDotAuthConfig","parameters":[{"name":"hostId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Configuration cleared successfully"},"401":{"description":"Authentication required"},"403":{"description":"User does not have permission to edit this site"},"404":{"description":"Site not found"},"500":{"description":"Internal server error"}}}},"/api/v1/dotauth/headless":{"put":{"tags":["dotAuth"],"summary":"Save the system-level headless token-exchange configuration","description":"Writes headless config to SYSTEM_HOST. Headless config is system-wide (not per-site). SSO saves/deletes never affect it.","operationId":"saveDotAuthHeadlessConfig","requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}},"responses":{"200":{"description":"Headless config saved"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"500":{"description":"Internal server error"}}},"delete":{"tags":["dotAuth"],"summary":"Clear the system-level headless token-exchange configuration","description":"Deletes the headless config. SSO config is not affected.","operationId":"clearDotAuthHeadlessConfig","responses":{"204":{"description":"Headless config cleared"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"500":{"description":"Internal server error"}}}},"/api/v1/dotauth/discover/oidc":{"post":{"tags":["dotAuth"],"summary":"Fetch and parse an OIDC discovery document","description":"Thin authenticated proxy used by the dotAuth portlet to populate issuer, endpoint, JWKS, and supported algorithm fields from a .well-known/openid-configuration URL.","operationId":"discoverDotAuthOidc","requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}},"responses":{"200":{"description":"Discovery document parsed successfully","content":{"application/json":{"schema":{"type":"object","description":"Parsed OIDC discovery fields: issuer, endpoints, JWKS URI, and signing algorithms"}}}},"400":{"description":"Missing or invalid discovery URL"},"401":{"description":"Authentication required"},"500":{"description":"Internal server error"}}}},"/api/v1/dotauth/export":{"post":{"tags":["dotAuth"],"summary":"Export all dotAuth AppSecrets","description":"Exports OAuth/OIDC, SAML, and headless dotAuth AppSecrets into one encrypted Apps export file.","operationId":"exportDotAuthAppSecrets","requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}},"responses":{"200":{"description":"Encrypted export file","content":{"application/octet-stream":{}}},"400":{"description":"Invalid password or no secrets configured"},"401":{"description":"Authentication required"},"403":{"description":"Admin access required"},"500":{"description":"Internal server error"}}}},"/api/v1/dotauth/fetch/saml-metadata":{"post":{"tags":["dotAuth"],"summary":"Fetch SAML IdP metadata XML from a URL","description":"Authenticated proxy that fetches SAML metadata XML from an IdP's metadata endpoint URL. Returns the raw XML as a string so the admin can review it before saving.","operationId":"fetchSamlMetadata","requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}},"responses":{"200":{"description":"Metadata fetched successfully","content":{"application/json":{"schema":{"type":"object","description":"Object with a single 'xml' field containing the raw metadata XML"}}}},"400":{"description":"Missing or invalid metadata URL"},"401":{"description":"Authentication required"},"500":{"description":"Internal server error"}}}},"/api/v1/dotauth/saml/metadata/{hostId}":{"get":{"tags":["dotAuth"],"summary":"Download SAML SP metadata XML for a site","description":"Generates SAML Service Provider metadata XML for the given site. For inherited configs the certificate comes from the SYSTEM_HOST row, but the entity ID and ACS URL use the target site's hostname so the IdP can distinguish per-site requests.","operationId":"getSamlSpMetadata","parameters":[{"name":"hostId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"SP metadata XML","content":{"application/xml":{}}},"401":{"description":"Authentication required"},"404":{"description":"No SAML configuration found for this site"},"500":{"description":"Internal server error"}}}},"/api/v1/dotauth/import":{"post":{"tags":["dotAuth"],"summary":"Import dotAuth AppSecrets","description":"Imports an encrypted Apps export file containing only OAuth/OIDC, SAML, and headless dotAuth AppSecrets.","operationId":"importDotAuthAppSecrets","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FormDataMultiPart"}}}},"responses":{"200":{"description":"Import succeeded","content":{"application/json":{"schema":{"type":"object","description":"Import result with count of imported secrets"}}}},"400":{"description":"Invalid password, empty file, or non-dotAuth secrets in file"},"401":{"description":"Authentication required"},"403":{"description":"Admin access required"},"500":{"description":"Internal server error"}}}},"/api/v1/dotauth/sites":{"get":{"tags":["dotAuth"],"summary":"List all sites with their dotAuth status","description":"Returns the SYSTEM_HOST (global default) status plus a per-site list indicating whether each site has its own OAuth/SAML configuration, inherits from the system default, or is unconfigured.","operationId":"listDotAuthSites","responses":{"200":{"description":"Sites retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityDotAuthSitesView"}}}},"401":{"description":"Authentication required"},"403":{"description":"User does not have permission to access dotAuth"},"500":{"description":"Internal server error"}}}},"/api/v1/dotauth/sessionrefs/revoke":{"post":{"tags":["dotAuth"],"summary":"Revoke all dotAuth sessionRefs","description":"Flushes the dotAuth sessionRef cache. Existing browser sessions are not affected.","operationId":"revokeDotAuthSessionRefs","responses":{"200":{"description":"All session-refs revoked","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}},"401":{"description":"Authentication required"},"403":{"description":"Admin access required"},"500":{"description":"Internal server error"}}}},"/api/v1/dotauth/oauth/session":{"delete":{"tags":["dotAuth"],"summary":"Invalidate the caller's dotAuth session-ref","description":"Removes the session referenced by the Authorization: Bearer header from the in-memory session cache. Always returns 204 — unknown or missing refs are silently ignored so this is safe to call unconditionally on sign-out.","operationId":"logout","responses":{"204":{"description":"Session invalidated (or was unknown)"}}}},"/api/v1/dotsaml/login/{idpConfigId}":{"get":{"tags":["SAML Authentication"],"summary":"Initiate SAML login","description":"Initiates a SAML authentication request by redirecting the user to the Identity Provider (IDP) login screen. Requires IDP metadata to determine the SSO login endpoint.","operationId":"doLogin","parameters":[{"name":"idpConfigId","in":"path","description":"Identity Provider configuration ID (typically host ID)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"SAML authentication request initiated successfully (no body)"},"400":{"description":"Bad request - invalid IDP configuration ID","content":{"application/json":{}}},"404":{"description":"IDP configuration not found or not enabled","content":{"application/json":{}}},"500":{"description":"Internal server error during SAML authentication initiation","content":{"application/json":{}}}}},"post":{"tags":["SAML Authentication"],"summary":"Process SAML login callback","description":"Handles the callback from the Identity Provider after successful authentication. Extracts user information from the SAML assertion and creates/logs in the user to dotCMS.","operationId":"processLogin","parameters":[{"name":"idpConfigId","in":"path","description":"Identity Provider configuration ID (typically host ID)","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"SAML assertion data from Identity Provider","content":{"application/xml":{},"application/x-www-form-urlencoded":{}},"required":true},"responses":{"200":{"description":"SAML login processed successfully - user logged in","content":{"text/html":{}}},"400":{"description":"Bad request - invalid SAML assertion or missing data","content":{"text/html":{}}},"401":{"description":"Unauthorized - SAML assertion validation failed","content":{"text/html":{}}},"404":{"description":"IDP configuration not found or not enabled","content":{"text/html":{}}},"500":{"description":"Internal server error during SAML login processing","content":{"text/html":{}}}}}},"/api/v1/dotsaml/logout/{idpConfigId}":{"get":{"tags":["SAML Authentication"],"summary":"Process SAML logout (GET)","description":"Processes a SAML logout request via GET method. Initiates logout flow and redirects to the configured logout endpoint or builds a logout URL based on the request.","operationId":"logoutGet","parameters":[{"name":"idpConfigId","in":"path","description":"Identity Provider configuration ID (typically host ID)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"SAML logout processed successfully","content":{"text/html":{}}},"404":{"description":"IDP configuration not found or not enabled","content":{"text/html":{}}},"500":{"description":"Internal server error during logout processing","content":{"text/html":{}}}}},"post":{"tags":["SAML Authentication"],"summary":"Process SAML logout (POST)","description":"Processes a SAML logout request via POST method. Handles logout callbacks from the Identity Provider and redirects to the configured logout endpoint.","operationId":"logoutPost","parameters":[{"name":"idpConfigId","in":"path","description":"Identity Provider configuration ID (typically host ID)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"SAML logout processed successfully","content":{"text/html":{}}},"404":{"description":"IDP configuration not found or not enabled","content":{"text/html":{}}},"500":{"description":"Internal server error during logout processing","content":{"text/html":{}}}}}},"/api/v1/dotsaml/metadata/{idpConfigId}":{"get":{"tags":["SAML Authentication"],"summary":"Get SAML metadata","description":"Renders the XML metadata for the SAML Service Provider configuration. This endpoint is only accessible by administrators and provides the metadata required for IDP configuration.","operationId":"metadata","parameters":[{"name":"idpConfigId","in":"path","description":"Identity Provider configuration ID (typically host ID)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"SAML metadata rendered successfully","content":{"application/xml":{}}},"401":{"description":"Unauthorized - admin access required","content":{"application/xml":{}}},"403":{"description":"Forbidden - user is not an administrator","content":{"application/xml":{}}},"404":{"description":"IDP configuration not found or not enabled","content":{"application/xml":{}}},"500":{"description":"Internal server error rendering metadata","content":{"application/xml":{}}}}}},"/api/v1/fieldTypes":{"get":{"tags":["Content Type Field"],"summary":"Get field types","description":"Retrieves all available field types in dotCMS for content type configuration","operationId":"getFieldTypes","responses":{"200":{"description":"Field types retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityFieldTypeListView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}}}}},"/api/js/{folder}":{"get":{"tags":["JavaScript"],"operationId":"get","parameters":[{"name":"folder","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}},"put":{"tags":["JavaScript"],"operationId":"putMultipart","parameters":[{"name":"folder","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FormDataMultiPart"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}},"post":{"tags":["JavaScript"],"operationId":"postMultipart","parameters":[{"name":"folder","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FormDataMultiPart"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}},"delete":{"tags":["JavaScript"],"operationId":"delete_1","parameters":[{"name":"folder","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}},"patch":{"tags":["JavaScript"],"operationId":"patchMultipart","parameters":[{"name":"folder","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FormDataMultiPart"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}}},"/api/js/{folder}/{pathParam}":{"get":{"tags":["JavaScript"],"operationId":"get_1","parameters":[{"name":"folder","in":"path","required":true,"schema":{"type":"string"}},{"name":"pathParam","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}},"put":{"tags":["JavaScript"],"operationId":"putMultipart_1","parameters":[{"name":"pathParam","in":"path","required":true,"schema":{"pattern":".*","type":"string"}},{"name":"folder","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FormDataMultiPart"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}},"post":{"tags":["JavaScript"],"operationId":"postMultipart_1","parameters":[{"name":"pathParam","in":"path","required":true,"schema":{"pattern":".*","type":"string"}},{"name":"folder","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FormDataMultiPart"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}},"delete":{"tags":["JavaScript"],"operationId":"delete_2","parameters":[{"name":"folder","in":"path","required":true,"schema":{"type":"string"}},{"name":"pathParam","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}},"patch":{"tags":["JavaScript"],"operationId":"patchMultipart_1","parameters":[{"name":"pathParam","in":"path","required":true,"schema":{"pattern":".*","type":"string"}},{"name":"folder","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FormDataMultiPart"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}}},"/api/js/dynamic/{pathParam}":{"get":{"tags":["JavaScript"],"operationId":"dynamicGet_1","parameters":[{"name":"pathParam","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}},"put":{"tags":["JavaScript"],"operationId":"dynamicPut_1","parameters":[{"name":"pathParam","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}},"post":{"tags":["JavaScript"],"operationId":"dynamicPost_1","parameters":[{"name":"pathParam","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}},"delete":{"tags":["JavaScript"],"operationId":"dynamicDelete","parameters":[{"name":"pathParam","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}},"patch":{"tags":["JavaScript"],"operationId":"dynamicPatch","parameters":[{"name":"pathParam","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}}},"/api/js/dynamic":{"get":{"tags":["JavaScript"],"operationId":"dynamicGet","requestBody":{"content":{"application/json":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}},"put":{"tags":["JavaScript"],"operationId":"dynamicPut","requestBody":{"content":{"application/json":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}},"post":{"tags":["JavaScript"],"operationId":"dynamicPost","requestBody":{"content":{"application/json":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}}},"/api/auditPublishing/get/{bundleId}":{"get":{"tags":["Publishing"],"operationId":"get_2","parameters":[{"name":"bundleId","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"text/xml":{}}}}}},"/api/auditPublishing/getAll":{"post":{"tags":["Publishing"],"operationId":"getAll","requestBody":{"content":{"*/*":{"schema":{"type":"array","items":{"type":"string"}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/layout/{params}":{"get":{"operationId":"getLayout","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"text/html":{}}}}}},"/api/bundlePublisher/publish":{"post":{"tags":["Bundle"],"operationId":"publish","parameters":[{"name":"type","in":"query","schema":{"type":"string"}},{"name":"callback","in":"query","schema":{"type":"string"}},{"name":"FORCE_PUSH","in":"query","schema":{"type":"boolean"}},{"name":"filterkey","in":"query","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/bundle/all":{"delete":{"tags":["Bundle"],"operationId":"deleteAll","responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/bundle/all/fail":{"delete":{"tags":["Bundle"],"operationId":"deleteAllFail","responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/bundle/all/success":{"delete":{"tags":["Bundle"],"operationId":"deleteAllSuccess","responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/bundle/ids":{"delete":{"tags":["Bundle"],"operationId":"deleteBundlesByIdentifiers","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/DeleteBundlesByIdentifierForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/bundle/olderthan/{olderThan}":{"delete":{"tags":["Bundle"],"operationId":"deleteBundlesOlderThan","parameters":[{"name":"olderThan","in":"path","required":true,"schema":{"type":"string","format":"date-time"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/bundle/deleteenvironmentpushhistory/{params}":{"get":{"tags":["Bundle"],"operationId":"deleteEnvironmentPushHistory","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/bundle/deletepushhistory/{params}":{"get":{"tags":["Bundle"],"operationId":"deletePushHistory","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/bundle/_download/{bundleId}":{"get":{"tags":["Bundle"],"operationId":"downloadBundle","parameters":[{"name":"bundleId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/octet-stream":{}}}}}},"/api/bundle/{bundleId}/manifest":{"get":{"tags":["Bundle"],"operationId":"downloadManifest","parameters":[{"name":"bundleId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/octet-stream":{}}}}}},"/api/bundle/_generate":{"post":{"tags":["Bundle"],"operationId":"generateBundle","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateBundleForm"}}}},"responses":{"default":{"description":"default response","content":{"application/octet-stream":{}}}}}},"/api/bundle/{bundleId}/assets":{"get":{"tags":["Bundle"],"operationId":"getPublishQueueElements","parameters":[{"name":"bundleId","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","format":"int32"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/bundle/getunsendbundles/{params}":{"get":{"tags":["Bundle"],"operationId":"getUnsendBundles","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/bundle/updatebundle/{params}":{"get":{"tags":["Bundle"],"operationId":"updateBundle","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/bundle":{"post":{"tags":["Bundle"],"operationId":"uploadBundleAsync","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FormDataMultiPart"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}}},"/api/bundle/sync":{"post":{"tags":["Bundle"],"operationId":"uploadBundleSync","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FormDataMultiPart"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}}},"/api/config/deleteEndpoint":{"post":{"tags":["System Configuration"],"operationId":"deleteEndpoint","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"user":{"type":"string"},"password":{"type":"string"},"endPoint":{"type":"string"},"type":{"type":"string"},"callback":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}},"deprecated":true}},"/api/config/deleteEnvironment":{"post":{"tags":["System Configuration"],"operationId":"deleteEnvironment","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"user":{"type":"string"},"password":{"type":"string"},"environment":{"type":"string"},"type":{"type":"string"},"callback":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/config/regenerateKey":{"post":{"tags":["System Configuration"],"operationId":"regenerateKey","responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/config/saveCompanyAuthTypeInfo":{"post":{"tags":["System Configuration"],"operationId":"saveCompanyAuthTypeInfo","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"user":{"type":"string"},"password":{"type":"string"},"authType":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/config/saveCompanyBasicInfo":{"post":{"tags":["System Configuration"],"operationId":"saveCompanyBasicInfo","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"user":{"type":"string"},"password":{"type":"string"},"portalURL":{"type":"string"},"mx":{"type":"string"},"emailAddress":{"type":"string"},"size":{"type":"string"},"type":{"type":"string"},"street":{"type":"string"},"homeURL":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/config/saveCompanyLocaleInfo":{"post":{"tags":["System Configuration"],"operationId":"saveCompanyLocaleInfo","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"user":{"type":"string"},"password":{"type":"string"},"languageId":{"type":"string"},"timeZoneId":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/config/saveCompanyLogo":{"post":{"tags":["System Configuration"],"operationId":"saveCompanyLogo","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"user":{"type":"string"},"password":{"type":"string"},"logoFile":{"$ref":"#/components/schemas/FormDataContentDisposition"}}}}}},"responses":{"default":{"description":"default response","content":{"text/html":{}}}},"deprecated":true}},"/api/cluster/getESConfigProperties/{params}":{"get":{"tags":["Cluster Management"],"operationId":"getESConfigProperties","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/cluster/licenseRepoStatus":{"get":{"tags":["Cluster Management"],"operationId":"getLicenseRepoStatus","parameters":[{"name":"params","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/cluster/getNodesStatus/{params}":{"get":{"tags":["Cluster Management"],"operationId":"getNodesInfo","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/cluster/remove/{params}":{"post":{"tags":["Cluster Management"],"operationId":"removeFromCluster","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"*/*":{}}}}}},"/api/cluster/test":{"get":{"tags":["Cluster Management"],"operationId":"testCluster","responses":{"default":{"description":"default response","content":{"*/*":{}}}}}},"/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}},"/api/v1/environments/endpoints":{"get":{"tags":["Environment"],"summary":"Returns the endpoints","operationId":"getEndpoints","responses":{"200":{"description":"Collection of environments.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityEndpointsView"}}}}}},"post":{"tags":["Environment"],"summary":"Creates an endpoint","operationId":"create","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/EndpointForm"}}}},"responses":{"200":{"description":"If creation is successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityEndpointView"}}}},"403":{"description":"If the user is not an admin or access to the configuration layout or does have permission, it will return a 403.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenException"}}}},"400":{"description":"If the endpoint already exits","content":{"application/json":{"schema":{"type":"string"}}}}}}},"/api/v1/environments/endpoints/{id}":{"put":{"tags":["Environment"],"summary":"Updates an endpoint","operationId":"update","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/EndpointForm"}}}},"responses":{"200":{"description":"If update is success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityEndpointView"}}}},"403":{"description":"If the user is not an admin or access to the configuration layout or does have permission, it will return a 403.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenException"}}}},"400":{"description":"If the environment already exits","content":{"application/json":{"schema":{"type":"string"}}}}}},"delete":{"tags":["Environment"],"summary":"Deletes an endpoint","operationId":"delete_3","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"If deletion is successfully endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBooleanView"}}}},"403":{"description":"If the user is not an admin or access to the configuration layout or does have permission, it will return a 403.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenException"}}}},"404":{"description":"If the endpoint does not exits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DoesNotExistException"}}}}}}},"/api/v1/environments/endpoints/{endpointId}":{"get":{"tags":["Environment"],"summary":"Returns the endpoint by id","operationId":"getEndpoint","parameters":[{"name":"endpointId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Collection of environments.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityEndpointView"}}}}}}},"/api/v1/environments/endpoints/environment/{environmentId}":{"get":{"tags":["Environment"],"summary":"Returns the endpoints","operationId":"getEndpointsByEnvironmentId","parameters":[{"name":"environmentId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Collection of environments.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityEndpointsView"}}}}}}},"/api/environment":{"get":{"tags":["Environment"],"summary":"Returns the environments","operationId":"loadAllEnvironments","responses":{"200":{"description":"Collection of environments.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityEnvironmentsView"}}}}}},"post":{"tags":["Environment"],"summary":"Creates an environment","operationId":"create_1","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/EnvironmentForm"}}}},"responses":{"200":{"description":"If creation is successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityEnvironmentView"}}}},"403":{"description":"If the user is not an admin or access to the configuration layout or does have permission, it will return a 403.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenException"}}}},"400":{"description":"If the environment already exits","content":{"application/json":{"schema":{"type":"string"}}}}}}},"/api/environment/{id}":{"put":{"tags":["Environment"],"summary":"Updates an environment","operationId":"update_1","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/EnvironmentForm"}}}},"responses":{"200":{"description":"If update is success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityEnvironmentView"}}}},"403":{"description":"If the user is not an admin or access to the configuration layout or does have permission, it will return a 403.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenException"}}}},"400":{"description":"If the environment already exits","content":{"application/json":{"schema":{"type":"string"}}}}}},"delete":{"tags":["Environment"],"summary":"Deletes an environment","operationId":"delete_4","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"If deletion is successfully environment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBooleanView"}}}},"403":{"description":"If the user is not an admin or access to the configuration layout or does have permission, it will return a 403.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenException"}}}},"404":{"description":"If the environment does not exits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DoesNotExistException"}}}}}}},"/api/environment/loadenvironments/{params}":{"get":{"tags":["Environment"],"operationId":"loadEnvironments","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/integrity/checkintegrity/{params}":{"get":{"tags":["Data Integrity"],"operationId":"checkIntegrity","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/integrity/checkIntegrityProcessStatus/{params}":{"get":{"tags":["Data Integrity"],"operationId":"checkIntegrityProcessStatus","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/integrity/discardconflicts/{params}":{"get":{"tags":["Data Integrity"],"operationId":"discardConflicts","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/integrity/fixconflicts/{params}":{"get":{"tags":["Data Integrity"],"operationId":"fixConflicts","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/integrity/_fixconflictsfromremote":{"post":{"tags":["Data Integrity"],"operationId":"fixConflictsFromRemote","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"DATA_TO_FIX":{"type":"object"},"TYPE":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"text/plain":{}}}}}},"/api/integrity/_generateintegritydata":{"post":{"tags":["Data Integrity"],"operationId":"generateIntegrityData","responses":{"default":{"description":"default response","content":{"text/plain":{}}}}}},"/api/integrity/{requestId}/integrityData":{"get":{"tags":["Data Integrity"],"operationId":"getIntegrityData","parameters":[{"name":"requestId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/zip":{}}}}}},"/api/integrity/getIntegrityResult/{params}":{"get":{"tags":["Data Integrity"],"operationId":"getIntegrityResult","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/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":{}}}}}},"/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":{}}}}},"post":{"tags":["Portlets"],"operationId":"layoutPost","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"text/html":{}}}}}},"/api/license/applyLicense":{"post":{"tags":["License"],"operationId":"applyLicense","parameters":[{"name":"params","in":"path","required":true,"schema":{"type":"string"}},{"name":"licenseText","in":"query","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"*/*":{}}}}}},"/api/license/delete/{params}":{"delete":{"tags":["License"],"operationId":"delete_5","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"*/*":{}}}}}},"/api/license/free/{params}":{"post":{"tags":["License"],"operationId":"freeLicense","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"*/*":{}}}}}},"/api/license/all/{params}":{"get":{"tags":["License"],"operationId":"getAll_1","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/license/pick/{params}":{"post":{"tags":["License"],"operationId":"pickLicense","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"*/*":{}}}}}},"/api/license/upload/{params}":{"post":{"tags":["License"],"operationId":"putZipFile","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"$ref":"#/components/schemas/FormDataContentDisposition"},"return":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"*/*":{}}}}}},"/api/license/requestCode/{params}":{"post":{"tags":["License"],"operationId":"requestLicense","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"*/*":{}}}}}},"/api/license/resetLicense/{params}":{"post":{"tags":["License"],"operationId":"resetLicense","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"*/*":{}}}}}},"/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}},"/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}},"/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}},"/api/v1/publishqueue":{"delete":{"tags":["Publishing"],"operationId":"deleteAssetsByIdentifiers","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/DeletePPQueueElementsByIdentifierForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/restexample/layout/{params}":{"get":{"tags":["Administration"],"operationId":"getLayout_2","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"text/html":{}}}}}},"/api/restexample/test/{params}":{"get":{"tags":["Administration"],"operationId":"loadJson","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/role/loadbyid/{params}":{"get":{"tags":["Roles"],"summary":"Load role by ID (deprecated)","description":"Returns detailed role information including all role properties. Used for loading complete role details in admin UI. This endpoint is deprecated.","operationId":"loadRoleByIdLegacy","parameters":[{"name":"params","in":"path","description":"URL parameters including role ID (id=roleId)","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"200":{"description":"Role loaded successfully","content":{"application/json":{"schema":{"type":"object","description":"Role details including DBFQN, FQN, description, permissions, id, name, and other role properties"}}}},"401":{"description":"Unauthorized - backend user authentication required","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}},"deprecated":true}},"/api/role/loadbyname/{params}":{"get":{"tags":["Roles"],"summary":"Load roles by name filter (deprecated)","description":"Returns a filtered role tree structure where leaf nodes contain the specified name. Used for role filtering in admin UI. This endpoint is deprecated.","operationId":"loadRolesByNameLegacy","parameters":[{"name":"params","in":"path","description":"URL parameters including name filter (name=filterText)","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"200":{"description":"Filtered roles loaded successfully","content":{"application/json":{"schema":{"type":"object","description":"Filtered role tree structure with identifier, label, and items containing matching roles"}}}},"401":{"description":"Unauthorized - backend user authentication required","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}},"deprecated":true}},"/api/role/loadchildren/{params}":{"get":{"tags":["Roles"],"summary":"Load role children (deprecated)","description":"Returns role hierarchy with first-level children for lazy-loading role tree in admin UI. If no ID provided, returns root roles. This endpoint is deprecated.","operationId":"loadRoleChildrenLegacy","parameters":[{"name":"params","in":"path","description":"URL parameters including role ID (id=roleId or empty for root roles)","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"200":{"description":"Role children loaded successfully","content":{"application/json":{"schema":{"type":"object","description":"Role hierarchy tree with child roles containing id, name, locked, and children properties"}}}},"401":{"description":"Unauthorized - backend user authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}},"deprecated":true}},"/api/rulesengine/layout/{params}":{"get":{"tags":["Rules Engine"],"operationId":"getLayout_3","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"text/html":{}}}}}},"/api/structure/{path}":{"get":{"tags":["Content Type"],"operationId":"getStructuresWithWYSIWYGFields","parameters":[{"name":"path","in":"path","required":true,"schema":{"pattern":".*","type":"string"}},{"name":"name","in":"query","schema":{"type":"string"}},{"name":"type","in":"path","required":true,"schema":{"type":"string"}},{"name":"callback","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/tags":{"get":{"tags":["Tag (v1)"],"summary":"List or search tags (deprecated)","description":"Lists all tags or searches by name with optional site filtering. If a name is provided, a search-by-name (like) operation is performed. If no matches are found for the site, global tags are searched. This endpoint is deprecated - use v2 TagResource instead.","operationId":"getTagsV1","parameters":[{"name":"name","in":"query","description":"Tag name to search for (supports partial matching)","schema":{"type":"string"}},{"name":"siteId","in":"query","description":"Site identifier to restrict tag search","schema":{"type":"string"}}],"responses":{"200":{"description":"Tags retrieved successfully","content":{"application/json":{"schema":{"type":"object","description":"Map of tag names to RestTag objects"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}}},"deprecated":true},"put":{"tags":["Tag (v1)"],"summary":"Update a tag (deprecated)","description":"Updates an existing tag's name and site association. Requires tagId, tagName, and siteId in the request body. This endpoint is deprecated - use v2 TagResource instead.","operationId":"updateTagV1","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/UpdateTagForm"}}}},"responses":{"200":{"description":"Tag updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityTagsView"}}}},"400":{"description":"Invalid or incomplete tag data provided","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"Tag not found for the given ID","content":{"application/json":{}}}},"deprecated":true},"post":{"tags":["Tag (v1)"],"summary":"Create tags (deprecated)","description":"Creates new tags and optionally links them to an owner user. This endpoint is deprecated - use v2 TagResource instead.","operationId":"addTagV1","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/TagForm"}}}},"responses":{"200":{"description":"Tags created successfully (may contain partial errors)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityTagOperationView"}}}},"400":{"description":"Invalid tag data provided","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}}},"deprecated":true}},"/api/v1/tags/{tagId}":{"delete":{"tags":["Tag (v1)"],"summary":"Delete a tag by ID (deprecated)","description":"Deletes a tag by its ID. The user must have EDIT permission on all contentlets associated with the tag. If the tag has no contentlet associations (orphan tag), deletion is allowed. This endpoint is deprecated - use v2 TagResource instead.","operationId":"deleteTagV1","parameters":[{"name":"tagId","in":"path","description":"Tag identifier to delete","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tag deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - user lacks permission to delete the tag","content":{"application/json":{}}},"404":{"description":"Tag not found for the given ID","content":{"application/json":{}}}},"deprecated":true}},"/api/v1/tags/inode/{inode}":{"get":{"tags":["Tag (v1)"],"summary":"Get tags by inode (deprecated)","description":"Retrieves all tag-inode associations for a given inode. This endpoint is deprecated - use v2 TagResource instead.","operationId":"findTagsByInodeV1","parameters":[{"name":"inode","in":"path","description":"Inode identifier to retrieve associated tags for","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tag-inode associations retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityTagInodesView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"No tags found for the given inode","content":{"application/json":{}}}},"deprecated":true},"delete":{"tags":["Tag (v1)"],"summary":"Remove all tag-inode links for an inode (deprecated)","description":"Breaks the link between an inode and all its associated tags. This endpoint is deprecated - use v2 TagResource instead.","operationId":"deleteTagInodesByInodeV1","parameters":[{"name":"inode","in":"path","description":"Inode identifier to remove all tag associations from","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tag-inode associations removed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}},"400":{"description":"Error removing tag-inode associations","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"No tags found for the given inode","content":{"application/json":{}}}},"deprecated":true}},"/api/v1/tags/{nameOrId}":{"get":{"tags":["Tag (v1)"],"summary":"Get tags by name or ID (deprecated)","description":"Looks up tags by tag name or tag ID. If the value is a UUID, lookup is performed by tag ID. Otherwise, lookup is performed by tag name. This endpoint is deprecated - use v2 TagResource instead.","operationId":"getTagsByNameOrIdV1","parameters":[{"name":"nameOrId","in":"path","description":"Tag name or tag UUID to look up","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tags found successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityTagsView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"No tags found matching the given name or ID","content":{"application/json":{}}}},"deprecated":true}},"/api/v1/tags/user/{userId}":{"get":{"tags":["Tag (v1)"],"summary":"Get tags by user ID (deprecated)","description":"Retrieves all tags owned by a given user. Returns tags that were assigned an owner during creation. This endpoint is deprecated - use v2 TagResource instead.","operationId":"getTagsByUserIdV1","parameters":[{"name":"userId","in":"path","description":"User identifier to retrieve owned tags for","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tags retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityTagsView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"No tags found for the given user ID","content":{"application/json":{}}}},"deprecated":true}},"/api/v1/tags/import":{"post":{"tags":["Tag (v1)"],"summary":"Import tags from file (deprecated)","description":"Imports tags from an uploaded file using multipart form data. This endpoint is deprecated - use v2 TagResource instead.","operationId":"importTagsV1","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FormDataMultiPart"}}}},"responses":{"200":{"description":"Tags imported successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}},"400":{"description":"Failure importing tags file","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}}},"deprecated":true}},"/api/v1/tags/tag/{nameOrId}/inode/{inode}":{"put":{"tags":["Tag (v1)"],"summary":"Link tags to an inode (deprecated)","description":"Binds a tag with a given inode. The lookup can be done via tag name or tag ID. If the tag name matches more than one tag, all matching tags will be bound. Use a tag ID instead of a name for more specific binding. This endpoint is deprecated - use v2 TagResource instead.","operationId":"linkTagsAndInodeV1","parameters":[{"name":"nameOrId","in":"path","description":"Tag name or tag UUID to link","required":true,"schema":{"type":"string"}},{"name":"inode","in":"path","description":"Inode identifier to link the tag(s) to","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tags linked to inode successfully (may contain partial errors)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityTagInodeOperationView"}}}},"400":{"description":"Error linking tag to inode","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"No tags found matching the given name or ID","content":{"application/json":{}}}},"deprecated":true}},"/api/testResource/testGet/{params}":{"get":{"operationId":"getDocumentCount","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/testResource/testPost":{"post":{"operationId":"saveTest","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"user":{"type":"string"},"password":{"type":"string"},"param1":{"type":"string"},"param2":{"type":"string"},"type":{"type":"string"},"callback":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/user/getloggedinuser/{params}":{"get":{"tags":["Users"],"summary":"Get logged in user (deprecated)","description":"Returns a JSON representation of the currently logged in user including userId, emailAddress, firstName, lastName, and roleId. This endpoint is deprecated - use v1 UserResource instead.","operationId":"getLoggedInUserLegacy","parameters":[{"name":"params","in":"path","description":"URL parameters for the request","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"200":{"description":"User information retrieved successfully","content":{"application/json":{"schema":{"type":"object","description":"User information containing userId, emailAddress, firstName, lastName, and roleId"}}}},"401":{"description":"Unauthorized - backend user authentication required","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}},"deprecated":true}},"/api/util/encodeQueryParamValue/{params}":{"get":{"tags":["Administration"],"operationId":"getLoggedInUser","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/widget/{params}":{"get":{"tags":["Widgets"],"operationId":"getWidget","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"text/plain; charset=UTF-8":{}}}}}},"/api/v1/agents/a11y/fix":{"post":{"tags":["Accessibility Agent"],"summary":"Run the accessibility fix agent on a page","description":"Resolves the page identifier to a live URL, URI and host id, mints a short-lived token for the calling user, and forwards the request to the configured a11y agent service. Returns the agent's report once the run completes. This call is synchronous and a full run can take minutes - use /fix/stream to receive progress as it happens. Requires the dotPageScanner-config App to carry the agent url and auth token.","operationId":"runA11yAgentFix","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/A11yAgentFixForm"}}}},"responses":{"200":{"description":"The agent's fix report, relayed verbatim from the agent service","content":{"application/json":{}}},"400":{"description":"identifier is missing, or the page could not be resolved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityView"}}}},"401":{"description":"Authentication required","content":{"application/json":{}}},"500":{"description":"The agent App is not configured, or the agent service failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityView"}}}}}}},"/api/v1/agents/a11y/fix/stream":{"post":{"tags":["Accessibility Agent"],"summary":"Run the accessibility fix agent, streaming progress over SSE","description":"Same as /fix, but relays the agent's Server-Sent Events as they arrive rather than waiting for the run to finish. Frames carry the run id, phase steps, progress counts, heartbeats, and a terminal done, aborted or error event. A configuration failure is reported as an SSE error frame rather than an HTTP status, because the response has already begun.","operationId":"streamA11yAgentFix","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/A11yAgentFixForm"}}}},"responses":{"200":{"description":"SSE stream of agent events (text/event-stream)","content":{"text/event-stream":{}}},"401":{"description":"Authentication required","content":{"application/json":{}}}}}},"/api/v1/agents/a11y/stop":{"post":{"tags":["Accessibility Agent"],"summary":"Stop an in-flight accessibility fix run","description":"Cooperatively stops the run identified by runId. The agent stops at its next safe checkpoint and the open /fix/stream connection receives a terminal aborted event carrying a partial report - fixes already applied are kept. Runs are addressed by runId rather than by caller identity, because the proxy mints a fresh token per request.","operationId":"stopA11yAgentRun","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/A11yAgentStopForm"}}}},"responses":{"202":{"description":"Stop signalled, or no such run was active - both are success","content":{"application/json":{}}},"400":{"description":"runId is missing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityView"}}}},"401":{"description":"Authentication required","content":{"application/json":{}}}}}},"/api/v1/achecker/guidelines":{"get":{"tags":["Accessibility Checker"],"summary":"Retrieves Accessibility Guidelines","description":"Returns the list of available Accessibility Guidelines that are used to validate content.","operationId":"getAccessibilityGuidelines","responses":{"200":{"description":"Guideline list retrieved successfully","content":{"application/json":{}}},"500":{"description":"Internal Server Error"}}}},"/api/v1/achecker/_validate":{"post":{"tags":["Accessibility Checker"],"summary":"Validates content","description":"Validates the given content against the one or more Accessibility Guidelines.","operationId":"postValidateContent","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"empty":{"type":"boolean"}},"additionalProperties":{"type":"string"}}}},"required":true},"responses":{"200":{"description":"Content validated successfully","content":{"application/json":{"example":"{\n \"entity\": {\n \"errors\": [\n {\n \"check\": {\n \"check_id\": 98,\n \"confidence\": 2,\n \"confidenceEnum\": \"POTENTIAL\",\n \"decision_fail\": \"Not all abbreviations are marked with the abbr element.\",\n \"decision_pass\": \"All abbreviations are marked with the abbr element.\",\n \"description\": \"If body element content is greater than 10 characters (English) this error will be generated.\",\n \"err\": \"Abbreviations may not be marked with abbr element.\",\n \"func\": \"return (BasicFunctions::getPlainTextLength() <= 10);\",\n \"how_to_repair\": \"\",\n \"html_tag\": \"body\",\n \"lang\": \"en\",\n \"long_description\": null,\n \"name\": \"Abbreviations must be marked with abbr element.\",\n \"note\": \"\",\n \"open_to_public\": 1,\n \"question\": \"Are there any abbreviations in the document that are not marked with the abbr element?\",\n \"rationale\": \"_RATIONALE_98\",\n \"repair_example\": \"\",\n \"search_str\": null,\n \"test_expected_result\": \"1. All abbreviations are expected to be marked with a valid abbr element.\",\n \"test_failed_result\": \"1. Mark all abbreviations with a valid abbr element.\",\n \"test_procedure\": \"1. Check the document for any text abbreviations.\\\\n2. If an abbreviation is found, check if it is properly marked with the abbr element.\",\n \"user_id\": 0\n },\n \"col_number\": 110,\n \"cssCode\": null,\n \"htmlCode\": \" Adventure travel done right Wherever you want to go, whatever you want to get into, we’ve go...\",\n \"image\": null,\n \"imageAlt\": null,\n \"line_number\": 0,\n \"success\": false\n },\n ...\n ...\n ],\n \"lang\": \"en\",\n \"results\": [\n {\n \"check\": {\n \"check_id\": 29,\n \"confidence\": 0,\n \"confidenceEnum\": \"KNOWN\",\n \"decision_fail\": \"\",\n \"decision_pass\": \"\",\n \"description\": \"Each document must contain a valid doctype declaration.\",\n \"err\": \"doctype declaration missing.\",\n \"func\": \"return (BasicFunctions::getNumOfTagInWholeContent(\\\\\\\"doctype\\\\\\\") > 0);\",\n \"how_to_repair\": \"Add a valid doctype declaration to the document.\",\n \"html_tag\": \"html\",\n \"lang\": \"en\",\n \"long_description\": null,\n \"name\": \"HTML content has a valid doctype declaration.\",\n \"note\": \"\",\n \"open_to_public\": 1,\n \"question\": \"\",\n \"rationale\": \"\",\n \"repair_example\": \"\",\n \"search_str\": null,\n \"test_expected_result\": \"1. HTML content has a valid doctype declaration.\",\n \"test_failed_result\": \"1. Add a valid doctype declaration to the document.\",\n \"test_procedure\": \"1. Check for the presence of a doctype declaration at the start of the document.\\\\n2. Check the content of the doctype declaration.\",\n \"user_id\": 0\n },\n \"col_number\": 110,\n \"cssCode\": null,\n \"htmlCode\": \" Adventure travel done right Wherever you want to go, what...\",\n \"image\": null,\n \"imageAlt\": null,\n \"line_number\": 0,\n \"success\": true\n },\n ...\n ...\n ]\n },\n \"errors\": [],\n \"i18nMessagesMap\": {},\n \"messages\": [],\n \"pagination\": null,\n \"permissions\": []\n}"}}},"400":{"description":"Bad Request"},"415":{"description":"Unsupported Media Type"},"500":{"description":"Internal Server Error"}}}},"/api/v1/analytics/content/siteauth/generate/{siteId}":{"get":{"tags":["Content Analytics"],"summary":"Generate Site Auth","description":"Generates and returns a Site Key that must be used by the client-side JS code to send custom Content Analytics Events","operationId":"generateSiteAuth","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The Site key was generated and returned successfully"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"404":{"description":"Site ID in path is not found or incorrect path"},"405":{"description":"Method Not Allowed"},"500":{"description":"Internal Server Error"}}}},"/api/v1/analytics/content/event":{"post":{"tags":["Content Analytics"],"summary":"Proxy analytics event ingest with site auth validation","description":"Validates the site_auth field in the JSON body via SiteAuthValidator, resolves the active site, injects site_id into context, and asynchronously forwards the body to {DOT_ANALYTICS_BASE_URL}/v1/event/ingest. The dotCMS-side path is a fixed match; the upstream sub-path is not caller-controllable.","operationId":"proxyAnalyticsEventRequest","requestBody":{"description":"JSON request body with a `context.site_auth` value and event payload","content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"description":"Successful upstream response","content":{"application/json":{"schema":{"type":"object","description":"dotCMS response envelope containing the upstream analytics data"}}}},"400":{"description":"Invalid siteAuth or upstream returned an error","content":{"application/json":{}}},"500":{"description":"Internal server error or upstream unreachable","content":{"application/json":{}}}}}},"/api/v1/analytics/{path}":{"get":{"tags":["Content Analytics"],"summary":"Proxy any analytics GET request","description":"Forwards any authenticated GET request to /v1/analytics/** to the dot-ca-event-manager service at /v1/**, preserving all query parameters. Requests are site-permission gated: the caller must have READ on the site resolved from ?siteId=, ?host_id=, or the session fallback.","operationId":"proxyAnalyticsGetRequest","parameters":[{"name":"path","in":"path","description":"Path to forward to the upstream analytics service","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"200":{"description":"Successful upstream response","content":{"application/json":{"schema":{"type":"object","description":"dotCMS response envelope containing the upstream analytics data"}}}},"400":{"description":"Site identifier could not be resolved","content":{"application/json":{}}},"401":{"description":"Unauthorized – backend user required","content":{"application/json":{}}},"403":{"description":"User lacks READ permission on the resolved site (error code SITE_ACCESS_DENIED)","content":{"application/json":{}}},"500":{"description":"Internal server error or upstream unreachable","content":{"application/json":{}}}}}},"/api/v1/announcements":{"get":{"tags":["Announcements"],"operationId":"announcements","parameters":[{"name":"refreshCache","in":"query","schema":{"type":"boolean"}},{"name":"limit","in":"query","schema":{"type":"integer","format":"int32"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityViewListAnnouncement"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntityViewListAnnouncement"}}}}}}},"/api/v1/apps":{"get":{"tags":["Apps"],"operationId":"listAvailableApps","parameters":[{"name":"filter","in":"query","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}},"post":{"tags":["Apps"],"operationId":"createApp","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FormDataMultiPart"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}},"delete":{"tags":["Apps"],"operationId":"deleteIndividualAppSecret","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/DeleteSecretForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/apps/{key}/{siteId}":{"get":{"tags":["Apps"],"operationId":"getAppDetail","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}},{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}},"put":{"tags":["Apps"],"operationId":"updateAppIndividualSecret","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}},{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/SecretForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}},"post":{"tags":["Apps"],"operationId":"createAppSecrets","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}},{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/SecretForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}},"delete":{"tags":["Apps"],"operationId":"deleteAllAppSecrets","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}},{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/apps/{key}":{"get":{"tags":["Apps"],"operationId":"getAppByKey","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}},"delete":{"tags":["Apps"],"operationId":"deleteApp","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}},{"name":"removeDescriptor","in":"query","schema":{"type":"boolean"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/apps/export":{"post":{"tags":["Apps"],"operationId":"exportSecrets","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/ExportSecretForm"}}}},"responses":{"default":{"description":"default response","content":{"application/octet-stream":{},"application/json":{}}}}}},"/api/v1/apps/import":{"post":{"tags":["Apps"],"operationId":"importSecrets","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FormDataMultiPart"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/assets/_archive":{"post":{"tags":["Web Assets"],"summary":"Archive asset","description":"Archive an asset (file) to make it inactive while preserving it in the system.","operationId":"archiveAsset","requestBody":{"description":"Asset archive request information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetArchiveRequestForm"}}},"required":true},"responses":{"200":{"description":"Asset archived successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBooleanView"}}}},"401":{"description":"Unauthorized access","content":{"application/json":{}}},"404":{"description":"Asset not found","content":{"application/json":{}}},"403":{"description":"Insufficient permissions to archive asset","content":{"application/json":{}}}}}},"/api/v1/assets/folders":{"put":{"tags":["Web Assets"],"summary":"Update existing folder","description":"Update an existing folder's configuration details and optionally rename it","operationId":"updateFolder","requestBody":{"description":"Folder update request with path and new configuration details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFolderForm"}}},"required":true},"responses":{"200":{"description":"Folder updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityView"}}}},"400":{"description":"Invalid request data or folder path","content":{"application/json":{}}},"401":{"description":"Unauthorized access","content":{"application/json":{}}},"404":{"description":"Folder not found at the specified path","content":{"application/json":{}}},"403":{"description":"Insufficient permissions to update folder","content":{"application/json":{}}}}},"post":{"tags":["Web Assets"],"summary":"Create new folder","description":"Create a new folder at the specified path with the provided configuration details","operationId":"createFolder","requestBody":{"description":"New folder creation request with path and configuration","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewFolderForm"}}},"required":true},"responses":{"200":{"description":"Folder created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityView"}}}},"400":{"description":"Invalid request data or folder path","content":{"application/json":{}}},"401":{"description":"Unauthorized access","content":{"application/json":{}}},"409":{"description":"Folder already exists at the specified path","content":{"application/json":{}}}}}},"/api/v1/assets/_delete":{"post":{"tags":["Web Assets"],"summary":"Delete asset permanently","description":"Permanently delete an asset (file) from the system using its path","operationId":"deleteAsset","requestBody":{"description":"Asset deletion request information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetDeletionRequestForm"}}},"required":true},"responses":{"200":{"description":"Asset deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBooleanView"}}}},"401":{"description":"Unauthorized access","content":{"application/json":{}}},"404":{"description":"Asset not found","content":{"application/json":{}}},"403":{"description":"Insufficient permissions to delete asset","content":{"application/json":{}}}}}},"/api/v1/assets/folders/_delete":{"post":{"tags":["Web Assets"],"summary":"Delete folder permanently","description":"Permanently delete a folder and all its contents from the system using its path","operationId":"deleteFolder","requestBody":{"description":"Folder deletion request information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderDeletionRequestForm"}}},"required":true},"responses":{"200":{"description":"Folder deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBooleanView"}}}},"401":{"description":"Unauthorized access","content":{"application/json":{}}},"404":{"description":"Folder not found","content":{"application/json":{}}},"403":{"description":"Insufficient permissions to delete folder","content":{"application/json":{}}}}}},"/api/v1/assets/_download":{"post":{"tags":["Web Assets"],"summary":"Download asset file","description":"Download the binary content of an asset file by path, language and version","operationId":"download","requestBody":{"description":"Asset download request information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetsRequestForm"}}},"required":true},"responses":{"200":{"description":"Asset file download started successfully","content":{"application/octet-stream":{}}},"401":{"description":"Unauthorized access","content":{"application/json":{}}},"404":{"description":"Asset not found","content":{"application/json":{}}}}}},"/api/v1/assets":{"put":{"tags":["Web Assets"],"summary":"Upload or update asset file","description":"Upload a new asset file or update an existing one at the specified path using multipart form data","operationId":"saveUpdateAsset","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"$ref":"#/components/schemas/FormDataContentDisposition"},"assetPath":{"type":"string"},"detail":{"$ref":"#/components/schemas/FileUploadDetail"}}}}}},"responses":{"200":{"description":"Asset uploaded/updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebAssetEntityView"}}}},"400":{"description":"Bad request - invalid file or path","content":{"application/json":{}}},"401":{"description":"Unauthorized access","content":{"application/json":{}}}}},"post":{"tags":["Web Assets"],"summary":"Get asset information by path","description":"Retrieve detailed information and metadata for an asset (file or folder) using its path","operationId":"getAssetsInfo","requestBody":{"description":"Asset path information","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AssetLookupRequestForm"}}},"required":true},"responses":{"200":{"description":"Asset information retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebAssetEntityView"}}}},"401":{"description":"Unauthorized access","content":{"application/json":{}}}}}},"/api/v1/apitoken/{tokenId}":{"delete":{"tags":["API Token"],"summary":"Deletes an API token","description":"Deletes an API token by identifier. May be performed on either active, expired, or revoked.\n\nReturned entity contains the property `deleted`, the value of which is the deleted token object.","operationId":"deleteApiTokenByIdV1","parameters":[{"name":"tokenId","in":"path","description":"Identifier of API token to be deleted.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Token successfully deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapView"},"example":{"entity":{"deleted":{"allowNetwork":null,"claims":{"label":"string"},"expired":false,"expiresDate":1822623941000,"id":"string","issueDate":1728061510000,"issuer":"string","modificationDate":1728069870000,"notBeforeDate":false,"requestingIp":"string","requestingUserId":"string","revoked":true,"revokedDate":1728069870000,"subject":"string","tokenType":"string","userId":"string","valid":false}},"errors":[],"i18nMessagesMap":{},"messages":[],"pagination":null,"permissions":[]}}}},"400":{"description":"Bad request"},"401":{"description":"Invalid user"},"404":{"description":"Token not found"},"500":{"description":"Unexpected server error"}}}},"/api/v1/apitoken/{userId}/tokens":{"get":{"tags":["API Token"],"summary":"Retrieves API tokens based on a user ID","description":"Accepts a user identifier and returns a list of API tokens associated with that user.\n\nThe returned list may optionally include or exclude tokens that have been revoked.\n\n","operationId":"getApiTokensByUserIdV1","parameters":[{"name":"userId","in":"path","description":"Identifier of user to check for tokens.","required":true,"schema":{"type":"string"}},{"name":"showRevoked","in":"query","description":"Determines whether revoked tokens are shown. Defaults to `false` if omitted.","schema":{"type":"boolean"}}],"responses":{"200":{"description":"User's API tokens successfully retrieved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapView"},"example":{"entity":{"tokens":[{"allowNetwork":null,"claims":{"label":"string"},"expired":false,"expiresDate":1822623941000,"id":"string","issueDate":1728061510000,"issuer":"string","modificationDate":1728061510000,"notBeforeDate":false,"requestingIp":"string","requestingUserId":"string","revoked":false,"revokedDate":null,"subject":"string","tokenType":"string","userId":"string","valid":true}]},"errors":[],"i18nMessagesMap":{},"messages":[],"pagination":null,"permissions":[]}}}},"400":{"description":"Bad request"},"401":{"description":"Invalid user"},"403":{"description":"Forbidden"},"404":{"description":"Invalid user"},"500":{"description":"Unexpected server error"}}}},"/api/v1/apitoken/expiring":{"get":{"tags":["API Token"],"summary":"Retrieves API tokens that are about to expire","description":"Returns a list of API tokens that will expire within the configured number of days.\n\nFor admin users, returns all expiring tokens from all users.\nFor limited users, returns only their own expiring tokens.\n\nThe number of days to look ahead can be configured via the EXPIRING_TOKEN_LOOKAHEAD_DAYS property (default: 7).","operationId":"getExpiringApiTokensV1","responses":{"200":{"description":"Expiring API tokens successfully retrieved","content":{"application/json":{"example":{"entity":{"tokens":[{"expiresDate":1844834400000,"id":"apie3362144-8906-460d-b16e-e46a5bf69aef","issueDate":1750183464000,"userId":"dotcms.org.1"},{"expiresDate":1844835400000,"id":"apie46a5bf69aef-8906-460d-asde-e46a5bf69aef","issueDate":1750183464000,"userId":"dotcms.org.1"}]},"errors":[],"i18nMessagesMap":{},"messages":[],"pagination":null,"permissions":[]}}}},"401":{"description":"Invalid user"},"403":{"description":"Forbidden"},"500":{"description":"Unexpected server error"}}}},"/api/v1/apitoken/{tokenId}/jwt":{"get":{"tags":["API Token"],"summary":"Generates a new JWT for an existing token","description":"Returns a JSON web token. This overwrites the JWT value associated with the specified token object.","operationId":"getJwtFromApiTokenV1","parameters":[{"name":"tokenId","in":"path","description":"Identifier of API token to receive a new JWT.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"JSON web token successfully created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityJwtView"},"example":{"entity":{"jwt":"string"},"errors":[],"i18nMessagesMap":{},"messages":[],"pagination":null,"permissions":[]}}}},"400":{"description":"Bad request"},"401":{"description":"Invalid user"},"403":{"description":"Forbidden"},"404":{"description":"Token not found"},"500":{"description":"Unexpected server error"}}}},"/api/v1/apitoken/remote":{"put":{"tags":["API Token"],"summary":"Generates a remote API token","description":"This endpoint takes as part of its payload authentication credentials for a user account on a remote dotCMS instance. It returns a token object that can be used to permit remote operation according to the role and permissions of the authenticated account.\n\nThis is used, for example, in configuring a [push publishing](https://www.dotcms.com/docs/latest/push-publishing) endpoint.\n\nUsable only by administrators.","operationId":"putGetRemoteTokenV1","requestBody":{"description":"PUT body consists of a JSON object containing three properties: `token`, concerning the token's direct properties; `remote`, defining the remote host, and `auth`, specifying remote user authentication.\n\nEach of these three top-level properties is itself an object containing further properties, listed fully below:\n\n| Properties | Value | Description |\n|----------------------------|---------|------------------------------------------------------------------------|\n| `token.network` | String | Network mask in which the token is active. |\n| `token.expirationSeconds` | String | Seconds until the token expires. |\n| `token.claims` | Object | Object containing the property `label`, defined below. |\n| `token.claims.label` | String | The name of the token generated. |\n| | | |\n| `remote.host` | String | Remote host for which to generate a token. |\n| `remote.port` | String | Port number for the remote host. |\n| `remote.protocol` | String | Web protocol used to connect to the remote host. |\n| | | |\n| `auth.login` | String | Email of account from which the remote token will derive permissions. |\n| `auth.password` | String | A string representing a base64-encoded password. |\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoteAPITokenForm"},"example":{"token":{"network":"0.0.0.0/0","expirationSeconds":"1000","claims":{"label":"Example"}},"remote":{"host":"dotcms-receiver.local","port":"8082","protocol":"http"},"auth":{"login":"admin@dotcms.com","password":"YWRtaW4="}}}},"required":true},"responses":{"200":{"description":"Remote token generated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityApiTokenWithJwtView"},"example":{"entity":{"jwt":"string","token":{"allowNetwork":"0.0.0.0/0","claims":{"label":"string"},"expired":false,"expiresDate":0,"id":"string","issueDate":0,"issuer":"string","modificationDate":0,"notBeforeDate":false,"requestingIp":"string","requestingUserId":"string","revoked":false,"revokedDate":0,"subject":"string","tokenType":"string","userId":"string","valid":true}},"errors":[],"i18nMessagesMap":{},"messages":[],"permissions":[]}}}},"400":{"description":"Bad request"},"401":{"description":"Invalid user"},"403":{"description":"Forbidden"},"415":{"description":"Unsupported Media Type"},"500":{"description":"Unexpected server error"}}}},"/api/v1/apitoken":{"post":{"tags":["API Token"],"summary":"Issues an API token","description":"Issues an API token to an authorized user account.\n\nReturns an object representing the issued token.","operationId":"postIssueApiTokenV1","requestBody":{"description":"This method requires a POST body of a JSON object containing the following properties.\n\n| Property | Value | Description |\n|-----------------|-----------|-----------------------------------------------|\n| `userId` | String | **Required.** ID of user attempting receiving |\n| `expirationSeconds` | Integer | **Required.** TTL of token in seconds. |\n| `network` | String | Network mask in which token is valid. Defaults to `0.0.0.0/0`, or any local network. |\n| `claims` | Object | Contains `label` property. |\n| `claims.label` | String | Sets a user-defined name for token. |\n| `shouldBeAdmin` | Boolean | If `true`, the call only succeeds if the token is being issued to an admin account. Defaults to `false` if omitted. |\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiTokenForm"},"example":{"userId":"string","expirationSeconds":0,"network":"string","claims":{"label":"string"},"shouldBeAdmin":false}}},"required":true},"responses":{"200":{"description":"Token successfully issued to user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityApiTokenWithJwtView"},"example":{"entity":{"jwt":"string","token":{"allowNetwork":"0.0.0.0/0","claims":{"label":"string"},"expired":false,"expiresDate":0,"id":"string","issueDate":0,"issuer":"string","modificationDate":0,"notBeforeDate":false,"requestingIp":"string","requestingUserId":"string","revoked":false,"revokedDate":0,"subject":"string","tokenType":"string","userId":"string","valid":true}},"errors":[],"i18nMessagesMap":{},"messages":[],"pagination":null,"permissions":[]}}}},"400":{"description":"Bad request"},"401":{"description":"Invalid user"},"403":{"description":"Forbidden"},"415":{"description":"Unsupported Media Type"},"500":{"description":"Unexpected server error"}}}},"/api/v1/apitoken/{tokenId}/revoke":{"put":{"tags":["API Token"],"summary":"Revokes an API token","description":"Revokes a token by its identifier.\n\n Returned entity contains the property `revoked`, whose value is an object representing the revoked token.","operationId":"putRevokeTokenByIdV1","parameters":[{"name":"tokenId","in":"path","description":"Identifier of API token to be revoked","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Token revoked successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapView"},"example":{"entity":{"revoked":{"allowNetwork":null,"claims":{"label":"string"},"expired":false,"expiresDate":1822623941000,"id":"string","issueDate":1728061510000,"issuer":"string","modificationDate":1728069870000,"notBeforeDate":false,"requestingIp":"string","requestingUserId":"string","revoked":true,"revokedDate":1728069870000,"subject":"string","tokenType":"string","userId":"string","valid":false}},"errors":[],"i18nMessagesMap":{},"messages":[],"pagination":null,"permissions":[]}}}},"400":{"description":"Bad request"},"401":{"description":"Invalid user"},"403":{"description":"Forbidden"},"404":{"description":"Token not found"},"500":{"description":"Unexpected server error"}}}},"/api/v1/authentication":{"post":{"tags":["Authentication"],"summary":"Verifies user or application authentication","description":"Takes a user's login ID and password and checks them against the user rolls.\n\nIf the user is found and authenticated, a session is created.\n\nOtherwise the system will return an 'authentication failed' message.\n\n","operationId":"postAuthenticationV1","requestBody":{"description":"This method takes a user's credentials and language preferences to authenticate them.\n\nRequires a POST body consisting of a JSON object containing the following properties:\n\n| **Property** | **Value** | **Description** |\n|--------------|-----------|-----------------------------------------------|\n| `userId` | String | **Required.** ID of user attempting to log in |\n| `password` | String | User password |\n| `language` | String | Preferred language for user |\n| `country` | String | Country where user is located |\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthenticationForm"}}},"required":true},"responses":{"200":{"description":"User authentication successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapView"}}}},"401":{"description":"User not authenticated"},"403":{"description":"Forbidden request"},"415":{"description":"Unsupported Media Type"},"500":{"description":"Unexpected error"}}}},"/api/v1/authentication/logInUser":{"get":{"tags":["Authentication"],"summary":"Retrieves user data","description":"Provides information about any users that are currently in a session.\n\nThis retrieved data will be formatted into a JSON response body.\n\n","operationId":"getLogInUserV1","responses":{"200":{"description":"User data successfully collected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapMapView"}}}},"400":{"description":"Bad request"},"401":{"description":"Unauthorized request"},"404":{"description":"User not found"}}}},"/api/v1/forgotpassword":{"post":{"tags":["Authentication"],"summary":"Send password reset email","description":"Sends a password reset email to the specified user. Returns the email address where the reset link was sent.","operationId":"forgotPassword","requestBody":{"description":"Forgot password form containing user ID or email address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotPasswordForm"}}},"required":true},"responses":{"200":{"description":"Password reset email sent successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityForgotPasswordView"}}}},"400":{"description":"Bad request - invalid email address or user not found (if configured to show)","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}}},"/api/v1/loginform":{"post":{"tags":["Authentication"],"summary":"Get login form configuration","description":"Retrieves login form configuration including company details, available languages, and localized messages","operationId":"loginForm","requestBody":{"description":"Internationalization form containing language and country preferences","content":{"application/json":{"schema":{"$ref":"#/components/schemas/I18NForm"}}},"required":true},"responses":{"200":{"description":"Login form configuration retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityLoginFormView"}}}},"403":{"description":"Forbidden - security exception","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}}},"/api/v1/logout":{"get":{"tags":["Authentication"],"summary":"Logout user","description":"Logs out the current user, invalidating their session and optionally providing a redirect URL","operationId":"logoutUser","responses":{"200":{"description":"User logged out successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}},"403":{"description":"Forbidden - security exception during logout","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}}},"/api/v1/changePassword":{"post":{"tags":["Authentication"],"summary":"Reset user password","description":"Resets a user's password using a valid token received via email or other secure channel","operationId":"resetPassword","requestBody":{"description":"Reset password form containing token and new password","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordForm"}}},"required":true},"responses":{"200":{"description":"Password reset successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPasswordResetView"}}}},"400":{"description":"Bad request - invalid login, token, or password","content":{"application/json":{}}},"403":{"description":"Forbidden - token expired or invalid","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}}},"/api/v1/browser":{"post":{"tags":["Browser Tree"],"operationId":"getFolderContent","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/BrowserQueryForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/browser/selectedfolder":{"get":{"tags":["Browser Tree"],"operationId":"getSelectFolder","responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}},"put":{"tags":["Browser Tree"],"operationId":"selectFolder","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/OpenFolderForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/browsertree/sitename/{sitename}/uri":{"get":{"tags":["Browser Tree"],"operationId":"loadAssetsUnder","parameters":[{"name":"sitename","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}},"deprecated":true}},"/api/v1/browsertree/sitename/{sitename}/uri/{uri}":{"get":{"tags":["Browser Tree"],"operationId":"loadAssetsUnder_1","parameters":[{"name":"sitename","in":"path","required":true,"schema":{"type":"string"}},{"name":"uri","in":"path","required":true,"schema":{"pattern":".+","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}},"deprecated":true}},"/api/v1/categories":{"get":{"tags":["Categories"],"summary":"Get paginated list of categories","description":"Returns a paginated list of categories. Supports filtering by name, sorting, and optionally including the count of child categories for each result.","operationId":"getCategories","parameters":[{"name":"filter","in":"query","description":"Filter string to match against category names","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (zero-based)","schema":{"type":"integer","format":"int32"}},{"name":"per_page","in":"query","description":"Number of items per page","schema":{"type":"integer","format":"int32"}},{"name":"orderby","in":"query","description":"Field to order results by","schema":{"type":"string","default":"category_name"}},{"name":"direction","in":"query","description":"Sort direction: ASC or DESC","schema":{"type":"string","default":"ASC"}},{"name":"showChildrenCount","in":"query","description":"Whether to include children count for each category","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Paginated categories retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityCategoryView"}}}},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"}}},"put":{"tags":["Categories"],"summary":"Update an existing category","description":"Updates a working version of an existing category. The form must contain the inode of the category to update.","operationId":"updateCategory","requestBody":{"description":"Category form with updated properties including inode","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryForm"}}},"required":true},"responses":{"200":{"description":"Category updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityCategoryView"}}}},"400":{"description":"Bad request"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions to update categories"},"404":{"description":"Category not found"}}},"post":{"tags":["Categories"],"summary":"Create a new category","description":"Creates a new category using the provided form data. The category name is required.","operationId":"createCategory","requestBody":{"description":"Category form with name and properties","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryForm"}}},"required":true},"responses":{"200":{"description":"Category created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityCategoryView"}}}},"400":{"description":"Bad request — category name is required"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"}}},"delete":{"tags":["Categories"],"summary":"Delete categories by inodes","description":"Deletes one or more categories and all their descendants at every depth. EDIT permission is validated on each selected category and every descendant before anything is deleted; a category that fails validation is skipped whole. Accepts a JSON array of category inodes. Inodes that could not be deleted are reported in the `fails` list of the result with the failure reason (category does not exist, insufficient permissions, or a permission-protected descendant). `successCount` counts the requested inodes that were deleted, while `deletedCount` counts every category actually removed, descendants included.","operationId":"deleteCategories","requestBody":{"description":"JSON payload containing a list of the inodes of categories to delete.","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}},"required":true},"responses":{"200":{"description":"Bulk delete result returned","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityCategoryBulkDeleteResultView"}}}},"400":{"description":"Bad request"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"}}}},"/api/v1/categories/_export":{"get":{"tags":["Categories"],"summary":"Export categories as CSV","description":"Exports categories to a CSV file. Optionally filter by name and scope to a parent category inode.","operationId":"exportCategories","parameters":[{"name":"contextInode","in":"query","description":"Context category inode to export from","schema":{"type":"string"}},{"name":"filter","in":"query","description":"Filter pattern to match category names","schema":{"type":"string"}}],"responses":{"200":{"description":"CSV file streamed successfully","content":{"text/csv":{}}},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"404":{"description":"Context category not found"}}}},"/api/v1/categories/{idOrKey}":{"get":{"tags":["Categories"],"summary":"Get a category by ID or key","description":"Retrieves a single category by either its inode (ID) or its unique key. First attempts to find by inode; if not found, searches by key.","operationId":"getCategoryByIdOrKey","parameters":[{"name":"idOrKey","in":"path","description":"Category ID (inode) or key","required":true,"schema":{"type":"string"}},{"name":"showChildrenCount","in":"query","description":"Whether to include children count","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Category retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityCategoryView"}}}},"400":{"description":"Bad request — idOrKey is required"},"401":{"description":"Authentication required"},"404":{"description":"Category not found"}}}},"/api/v1/categories/children":{"get":{"tags":["Categories"],"summary":"Get children of a category","description":"Returns a paginated list of child categories for the specified parent category inode. When 'allLevels' is true, returns categories at any depth; otherwise only immediate children.","operationId":"getCategoryChildren","parameters":[{"name":"filter","in":"query","description":"Filter text to search child categories","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number for pagination","schema":{"type":"integer","format":"int32"}},{"name":"per_page","in":"query","description":"Number of items per page","schema":{"type":"integer","format":"int32"}},{"name":"orderby","in":"query","description":"Field to order results by","schema":{"type":"string","default":"category_name"}},{"name":"direction","in":"query","description":"Sort direction (ASC or DESC)","schema":{"type":"string","default":"ASC"}},{"name":"inode","in":"query","description":"Parent category inode to get children for","schema":{"type":"string"}},{"name":"showChildrenCount","in":"query","description":"Whether to include children count for each category","schema":{"type":"boolean"}},{"name":"allLevels","in":"query","description":"Whether to include all nested levels","schema":{"type":"boolean"}},{"name":"parentList","in":"query","description":"Whether to include parent list hierarchy","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Children categories retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityCategoryWithChildCountView"}}}},"400":{"description":"Bad request"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"404":{"description":"Parent category not found"}}}},"/api/v1/categories/hierarchy":{"post":{"tags":["Categories"],"summary":"Get category hierarchy for multiple categories","description":"Retrieves the parent hierarchy for a set of categories specified by their keys. Returns parent lists for each category, starting from the top-level parent down to the direct parent. Categories that don't exist are ignored.","operationId":"getCategoryHierarchy","requestBody":{"description":"Category keys form containing array of category keys","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryKeysForm"}}},"required":true},"responses":{"200":{"description":"Category hierarchies retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HierarchyShortCategoriesResponseView"}}}},"400":{"description":"Bad request - invalid category keys form"},"401":{"description":"Unauthorized - user authentication required"}}}},"/api/v1/categories/_import":{"post":{"tags":["Categories"],"summary":"Import categories from a CSV file","description":"Imports categories from an uploaded CSV file. The 'exportType' parameter controls the import strategy: 'replace' deletes existing categories before importing, 'merge' adds or updates without removing existing ones.","operationId":"importCategories","requestBody":{"description":"CSV file containing categories to be imported.","content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/CategoryImportFormSchema"}}},"required":true},"responses":{"200":{"description":"Import result returned","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBulkResultView"}}}},"400":{"description":"Bad request or invalid file"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"}}}},"/api/v1/categories/_sort":{"put":{"tags":["Categories"],"summary":"Update category sort order","description":"Updates the sort order of one or more existing categories.","operationId":"updateCategorySortOrder","requestBody":{"description":"List of category inodes to delete","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryEditForm"}}},"required":true},"responses":{"200":{"description":"Sort order updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityCategoryView"}}}},"400":{"description":"Bad request"},"403":{"description":"Insufficient permissions"},"401":{"description":"Authentication required"}}}},"/api/v1/configuration/branding":{"get":{"tags":["System Configuration"],"summary":"Get company configuration","description":"Returns the full company configuration including branding, authentication settings, and metadata for the admin editing UI.","operationId":"getCompanyConfig","responses":{"200":{"description":"Company configuration retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityCompanyConfigView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - CMS Administrator role required","content":{"application/json":{}}}}},"put":{"tags":["System Configuration"],"summary":"Save company basic info and branding","description":"Updates the company's portal URL, email address, branding colors, logos, and background image. Navigation bar logo requires Enterprise license.","operationId":"saveBasicInfo","requestBody":{"description":"Company basic info and branding settings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyBasicInfoForm"}}},"required":true},"responses":{"200":{"description":"Company basic info updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityCompanyConfigView"}}}},"400":{"description":"Bad request - invalid parameters","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - CMS Administrator role required","content":{"application/json":{}}}}}},"/api/v1/configuration/_regenerateKey":{"post":{"tags":["System Configuration"],"summary":"Regenerate company security key","description":"Regenerates the company's security key and returns the SHA-256 digest of the new key. This operation cannot be undone.","operationId":"regenerateKey_1","responses":{"200":{"description":"Security key regenerated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - CMS Administrator role required","content":{"application/json":{}}}}}},"/api/v1/configuration/authentication":{"put":{"tags":["System Configuration"],"summary":"Save company authentication type","description":"Updates the authentication method used for user login. Accepts 'emailAddress' or 'userId'.","operationId":"saveAuthType","requestBody":{"description":"Authentication type setting","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyAuthTypeForm"}}},"required":true},"responses":{"200":{"description":"Authentication type updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityCompanyConfigView"}}}},"400":{"description":"Bad request - invalid auth type","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - CMS Administrator role required","content":{"application/json":{}}}}}},"/api/v1/configuration/locale":{"put":{"tags":["System Configuration"],"summary":"Save company locale info","description":"Updates the locale (language and timezone) for the current company. This sets the default language and timezone for the system.","operationId":"saveLocaleInfo","requestBody":{"description":"Locale settings to apply","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyLocaleForm"}}},"required":true},"responses":{"200":{"description":"Locale settings updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityCompanyConfigView"}}}},"400":{"description":"Invalid locale parameters (e.g. invalid timezone)","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - CMS Administrator role required","content":{"application/json":{}}}}}},"/api/v1/containers/_archive":{"put":{"tags":["Containers"],"summary":"Archives a container","description":"Archives the specified container. The user must have Edit permissions on the container.","operationId":"archiveContainer","parameters":[{"name":"containerId","in":"query","description":"Container identifier to archive","schema":{"type":"string"}}],"responses":{"200":{"description":"Container archived successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleContainerView"}}}},"400":{"description":"Bad request - Container ID is required"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks edit permissions"},"404":{"description":"Container not found"}}}},"/api/v1/containers/_bulkarchive":{"put":{"tags":["Containers"],"summary":"Archives multiple containers","description":"Archives a list of containers by their identifiers. Returns a summary of successful and failed archive operations. The user must have Edit permissions on each container.","operationId":"bulkArchiveContainers","requestBody":{"description":"List of container identifiers to archive","content":{"*/*":{"schema":{"type":"array","items":{"type":"string"}}}},"required":true},"responses":{"200":{"description":"Bulk archive results with success and failure counts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBulkResultView"}}}},"400":{"description":"Bad request - Container identifiers list is required"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks edit permissions"}}}},"/api/v1/containers/_bulkdelete":{"delete":{"tags":["Containers"],"summary":"Deletes multiple containers","description":"Deletes a list of containers by their identifiers. Returns a summary of successful and failed deletions. The user must have Edit permissions on each container.","operationId":"bulkDeleteContainers","requestBody":{"description":"List of container identifiers to delete","content":{"*/*":{"schema":{"type":"array","items":{"type":"string"}}}},"required":true},"responses":{"200":{"description":"Bulk delete results with success and failure counts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBulkResultView"}}}},"400":{"description":"Bad request - Container identifiers list is required"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks required permissions"}}}},"/api/v1/containers/_bulkpublish":{"put":{"tags":["Containers"],"summary":"Publishes multiple containers","description":"Publishes a list of containers by their identifiers. Returns a summary of successful and failed publish operations. The user must have Publish permissions on each container.","operationId":"bulkPublishContainers","requestBody":{"description":"List of container identifiers to publish","content":{"*/*":{"schema":{"type":"array","items":{"type":"string"}}}},"required":true},"responses":{"200":{"description":"Bulk publish results with success and failure counts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBulkResultView"}}}},"400":{"description":"Bad request - Container identifiers list is required"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks publish permissions"}}}},"/api/v1/containers/_bulkunarchive":{"put":{"tags":["Containers"],"summary":"Unarchives multiple containers","description":"Unarchives a list of containers by their identifiers. Returns a summary of successful and failed unarchive operations. The user must have Edit permissions on each container.","operationId":"bulkUnarchiveContainers","requestBody":{"description":"List of container identifiers to unarchive","content":{"*/*":{"schema":{"type":"array","items":{"type":"string"}}}},"required":true},"responses":{"200":{"description":"Bulk unarchive results with success and failure counts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBulkResultView"}}}},"400":{"description":"Bad request - Container identifiers list is required"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks edit permissions"}}}},"/api/v1/containers/_bulkunpublish":{"put":{"tags":["Containers"],"summary":"Unpublishes multiple containers","description":"Unpublishes a list of containers by their identifiers. Returns a summary of successful and failed unpublish operations. The user must have Publish permissions on each container.","operationId":"bulkUnpublishContainers","requestBody":{"description":"List of container identifiers to unpublish","content":{"*/*":{"schema":{"type":"array","items":{"type":"string"}}}},"required":true},"responses":{"200":{"description":"Bulk unpublish results with success and failure counts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBulkResultView"}}}},"400":{"description":"Bad request - Container identifiers list is required"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks publish permissions"}}}},"/api/v1/containers/{containerId}/content/{contentletId}":{"get":{"tags":["Containers"],"summary":"Renders content HTML within a container","description":"Generates the rendered HTML for a specific contentlet within a container. The container ID is provided as a path parameter.","operationId":"getContainerContentById","parameters":[{"name":"containerId","in":"path","description":"Container identifier (UUID or path)","required":true,"schema":{"type":"string"}},{"name":"contentletId","in":"path","description":"Contentlet identifier","required":true,"schema":{"type":"string"}},{"name":"pageInode","in":"query","description":"Page inode for context rendering","schema":{"type":"string"}}],"responses":{"200":{"description":"Content rendered successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityContainerObjectMapView"}}}},"400":{"description":"Bad request - Invalid parameters"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks required permissions"},"404":{"description":"Container or contentlet not found"}}}},"/api/v1/containers/content/{contentletId}":{"get":{"tags":["Containers"],"summary":"Renders content HTML with container ID as query param","description":"Generates the rendered HTML for a specific contentlet within a container. The container ID is passed as a query parameter, which is useful for file-asset containers where the container ID is a path.","operationId":"getContainerContentByQueryParam","parameters":[{"name":"containerId","in":"query","description":"Container identifier (UUID or file-asset path)","schema":{"type":"string"}},{"name":"pageInode","in":"query","description":"Page inode for context rendering","schema":{"type":"string"}},{"name":"contentletId","in":"path","description":"Contentlet identifier","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Content rendered successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityContainerObjectMapView"}}}},"400":{"description":"Bad request - Invalid parameters"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks required permissions"},"404":{"description":"Container or contentlet not found"}}}},"/api/v1/containers/{containerId}/form/{formId}":{"get":{"tags":["Containers"],"summary":"Renders a form within a container","description":"Returns HTML content for a form rendered within the specified container. This is used to display forms with container styling and layout.","operationId":"containerForm","parameters":[{"name":"containerId","in":"path","description":"Container identifier (UUID or path)","required":true,"schema":{"type":"string"}},{"name":"formId","in":"path","description":"Form identifier","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Form rendered successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityContainerObjectMapView"}}}},"400":{"description":"Bad request - Invalid container or form ID"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks required permissions"},"404":{"description":"Container or form not found"},"500":{"description":"Internal server error"}}}},"/api/v1/containers/form/{formId}":{"get":{"tags":["Containers"],"summary":"Renders a form with container ID as query param","description":"Returns HTML content for a form rendered within the specified container. The container ID is passed as a query parameter, which is useful for file-asset containers where the container ID is a path.","operationId":"getContainerFormByQueryParam","parameters":[{"name":"containerId","in":"query","description":"Container identifier (UUID or file-asset path)","schema":{"type":"string"}},{"name":"formId","in":"path","description":"Form identifier","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Form rendered successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityContainerObjectMapView"}}}},"400":{"description":"Bad request - Invalid parameters"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks required permissions"},"404":{"description":"Container or form not found"}}}},"/api/v1/containers/{id}/_copy":{"post":{"tags":["Containers"],"summary":"Copies a container to the current host","description":"Creates a copy of the specified container on the current host. The user must have backend access and appropriate permissions.","operationId":"copyContainer","parameters":[{"name":"id","in":"path","description":"Container identifier to copy","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Container copied successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityContainerView"}}}},"400":{"description":"Bad request - Container ID is required"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks required permissions"},"404":{"description":"Container not found"}}}},"/api/v1/containers":{"get":{"tags":["Containers"],"summary":"Retrieves a paginated list of Containers","description":"Returns a list of Container objects based on filtering and pagination parameters. Containers are layout components that define how content is displayed on pages.","operationId":"getContainers","parameters":[{"name":"filter","in":"query","description":"Filter containers by title pattern","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number for pagination (starting from 1)","schema":{"type":"integer","format":"int32"}},{"name":"per_page","in":"query","description":"Number of items per page","schema":{"type":"integer","format":"int32"}},{"name":"orderby","in":"query","description":"Field to order results by","schema":{"type":"string","default":"title"}},{"name":"direction","in":"query","description":"Sort direction: ASC or DESC","schema":{"type":"string","default":"ASC"}},{"name":"host","in":"query","description":"Filter containers by host ID","schema":{"type":"string"}},{"name":"system","in":"query","description":"Include system containers in results","schema":{"type":"boolean"}},{"name":"archive","in":"query","description":"Include archived containers in results","schema":{"type":"boolean"}},{"name":"content_type","in":"query","description":"Filter containers by content type ID or variable name","schema":{"type":"string"}}],"responses":{"200":{"description":"Containers retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPaginatedArrayListMapView"}}}},"400":{"description":"Bad request - Invalid parameters"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks required permissions"},"500":{"description":"Internal server error"}}},"put":{"tags":["Containers"],"summary":"Updates an existing container","description":"Updates a container's working version with the provided configuration. The container must exist and the user must have edit permissions.","operationId":"updateContainer","requestBody":{"description":"Updated container configuration data including identifier and modified properties","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerForm"}}},"required":true},"responses":{"200":{"description":"Container updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleContainerView"}}}},"400":{"description":"Bad request - Invalid container data"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks edit permissions"},"404":{"description":"Container not found"},"500":{"description":"Internal server error"}}},"post":{"tags":["Containers"],"summary":"Creates a new container","description":"Creates and publishes a new container with the provided configuration. The container will be saved as both working and live versions.","operationId":"saveContainer","requestBody":{"description":"Container configuration data including title, code, content type structures, and display settings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerForm"}}},"required":true},"responses":{"200":{"description":"Container created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleContainerView"}}}},"400":{"description":"Bad request - Invalid container data"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks create permissions"},"500":{"description":"Internal server error"}}},"delete":{"tags":["Containers"],"summary":"Deletes a container","description":"Permanently deletes the specified container. The user must have Edit permissions on the container.","operationId":"deleteContainer","parameters":[{"name":"containerId","in":"query","description":"Container identifier to delete","schema":{"type":"string"}}],"responses":{"200":{"description":"Container deletion result (true if deleted, false otherwise)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBooleanView"}}}},"400":{"description":"Bad request - Container ID is required"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks edit permissions"},"404":{"description":"Container not found"}}}},"/api/v1/containers/live":{"get":{"tags":["Containers"],"summary":"Retrieves a live container by ID","description":"Returns the live (published) version of a container. Optionally includes associated content type information.","operationId":"getLiveContainer","parameters":[{"name":"containerId","in":"query","description":"Container identifier","schema":{"type":"string"}},{"name":"includeContentType","in":"query","description":"Include associated content type information","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Live container retrieved successfully. Returns ContainerView by default, or ContainerWithContentTypesView if includeContentType=true.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleContainerView"}}}},"400":{"description":"Bad request - Invalid container ID"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks required permissions"},"404":{"description":"Live container not found"},"500":{"description":"Internal server error"}}}},"/api/v1/containers/working":{"get":{"tags":["Containers"],"summary":"Retrieves a working container by ID","description":"Returns the working (draft) version of a container. Optionally includes associated content type information.","operationId":"getWorkingContainer","parameters":[{"name":"containerId","in":"query","description":"Container identifier","schema":{"type":"string"}},{"name":"includeContentType","in":"query","description":"Include associated content type information","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Working container retrieved successfully. Returns ContainerView by default, or ContainerWithContentTypesView if includeContentType=true.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleContainerView"}}}},"400":{"description":"Bad request - Invalid container ID"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks required permissions"},"404":{"description":"Working container not found"},"500":{"description":"Internal server error"}}}},"/api/v1/containers/_publish":{"put":{"tags":["Containers"],"summary":"Publishes a container","description":"Makes a container live by publishing it. The container must exist and the user must have publish permissions.","operationId":"publishContainer","parameters":[{"name":"containerId","in":"query","description":"Container identifier to publish","schema":{"type":"string"}}],"responses":{"200":{"description":"Container published successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleContainerView"}}}},"400":{"description":"Bad request - Container ID is required"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks publish permissions"},"404":{"description":"Container not found"},"500":{"description":"Internal server error"}}}},"/api/v1/containers/delete/{containerId}/content/{contentletId}/uid/{uid}":{"delete":{"tags":["Containers"],"summary":"Removes content from a container","description":"Removes a specific contentlet from a container at a particular position. This affects the container's content layout and rendering.","operationId":"removeContentletFromContainer","parameters":[{"name":"containerId","in":"path","description":"Container identifier","required":true,"schema":{"type":"string"}},{"name":"contentletId","in":"path","description":"Contentlet identifier","required":true,"schema":{"type":"string"}},{"name":"order","in":"query","description":"Order position of the content","schema":{"type":"integer","format":"int64"}},{"name":"uid","in":"path","description":"Unique identifier for the content instance","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Content removed successfully","content":{"application/json":{"schema":{"type":"string","description":"Confirmation string 'ok'"}}}},"400":{"description":"Bad request - Invalid parameters"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks required permissions"},"404":{"description":"Container, content, or UID not found"},"500":{"description":"Internal server error"}}}},"/api/v1/containers/_unarchive":{"put":{"tags":["Containers"],"summary":"Unarchives a container","description":"Unarchives the specified container, restoring it to active status. The user must have Edit permissions on the container.","operationId":"unarchiveContainer","parameters":[{"name":"containerId","in":"query","description":"Container identifier to unarchive","schema":{"type":"string"}}],"responses":{"200":{"description":"Container unarchived successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleContainerView"}}}},"400":{"description":"Bad request - Container ID is required"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks edit permissions"},"404":{"description":"Container not found"}}}},"/api/v1/containers/_unpublish":{"put":{"tags":["Containers"],"summary":"Unpublishes a container","description":"Removes a container from live status by unpublishing it. The container must exist and the user must have unpublish permissions.","operationId":"unpublishContainer","parameters":[{"name":"containerId","in":"query","description":"Container identifier to unpublish","schema":{"type":"string"}}],"responses":{"200":{"description":"Container unpublished successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleContainerView"}}}},"400":{"description":"Bad request - Container ID is required"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks unpublish permissions"},"404":{"description":"Container not found"},"500":{"description":"Internal server error"}}}},"/api/v1/contentrelationships/{params}":{"get":{"tags":["Content"],"summary":"Get content with relationships (deprecated)","description":"Retrieves content with relationships based on query parameters, identifier, or inode. This endpoint is deprecated - use /v1/content with depth parameter instead.","operationId":"getContentRelationships","parameters":[{"name":"params","in":"path","description":"Query parameters, identifier, or inode for content lookup","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"200":{"description":"Content with relationships retrieved successfully","content":{"application/json":{"schema":{"type":"object","description":"Content with relationships in JSON format including contentlets and their related content"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}},"deprecated":true}},"/api/v1/contentreport/folder/{folder}":{"get":{"tags":["Content Report"],"summary":"Generate folder content report","description":"Generates a detailed report of the different Content Types living under a Folder and the number of content items for each type. Supports both folder ID and folder path (requires site parameter).","operationId":"getFolderContentReport","parameters":[{"name":"folder","in":"path","description":"Folder ID or path to generate the report for","required":true,"schema":{"pattern":".*","type":"string"}},{"name":"site","in":"query","description":"Site ID or key (required when using folder path)","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number for pagination","schema":{"type":"integer","format":"int32"}},{"name":"per_page","in":"query","description":"Number of items per page","schema":{"type":"integer","format":"int32"}},{"name":"orderby","in":"query","description":"Field to order results by","schema":{"type":"string","default":"upper(name)"}},{"name":"direction","in":"query","description":"Sort direction (ASC or DESC)","schema":{"type":"string","default":"ASC"}}],"responses":{"200":{"description":"Content Report for the specified Folder ID/path, or an empty list if either the Folder doesn't exist, or no content is found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentReportView"}}}}}}},"/api/v1/contentreport/site/{site}":{"get":{"tags":["Content Report"],"summary":"Generate site content report","description":"Generates a detailed report of the different Content Types living under a Site and the number of content items for each type. Useful for data analysis and deletion planning.","operationId":"getSiteContentReport","parameters":[{"name":"site","in":"path","description":"Site ID or key to generate the report for","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number for pagination","schema":{"type":"integer","format":"int32"}},{"name":"per_page","in":"query","description":"Number of items per page","schema":{"type":"integer","format":"int32"}},{"name":"orderby","in":"query","description":"Field to order results by","schema":{"type":"string","default":"upper(name)"}},{"name":"direction","in":"query","description":"Sort direction (ASC or DESC)","schema":{"type":"string","default":"ASC"}}],"responses":{"200":{"description":"Content Report for the specified Site ID/Key, or an empty list if either the Site doesn't exist, or no content is found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseSiteVariablesEntityView"}}}}}}},"/api/v1/content/_canlock/{inodeOrIdentifier}":{"get":{"tags":["Content"],"summary":"Check if a contentlet can be locked","description":"Checks if the contentlet specified by its inode or identifier can be locked by the current user.","operationId":"canLockContent","parameters":[{"name":"inodeOrIdentifier","in":"path","description":"Contentlet inode or identifier","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","description":"Language ID for content localization","schema":{"type":"string","default":"-1"}}],"responses":{"200":{"description":"Successfully retrieved lock status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapView"}}}},"400":{"description":"Bad request"},"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"404":{"description":"Content not found"},"500":{"description":"Internal Server Error"}}}},"/api/v1/content/{identifier}/languages":{"get":{"tags":["Content"],"summary":"Check content language versions","description":"Retrieves all available languages for a contentlet and indicates which languages have content versions","operationId":"checkContentLanguageVersions","parameters":[{"name":"identifier","in":"path","description":"Identifier of contentlet whose language status to display.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Language versions retrieved successfully","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"404":{"description":"Not found - contentlet identifier not found","content":{"application/json":{}}}}}},"/api/v1/content/{identifier}/references/count":{"get":{"tags":["Content"],"summary":"Get contentlet references count","description":"Retrieves the total number of references to a specific contentlet by its identifier","operationId":"getContentletReferencesCount","parameters":[{"name":"identifier","in":"path","description":"Content identifier","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"References count retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityCountView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"404":{"description":"Not found - contentlet with identifier not found","content":{"application/json":{}}}}}},"/api/v1/content/{inodeOrIdentifier}":{"get":{"tags":["Content"],"summary":"Retrieves a contentlet by identifier or inode","description":"Returns a single contentlet based on its identifier or inode. This is the primary endpoint for fetching content data with support for language, variants, and relationship depth.","operationId":"getContent","parameters":[{"name":"inodeOrIdentifier","in":"path","description":"Contentlet identifier or inode","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","description":"Language ID for content localization","schema":{"type":"string","default":""}},{"name":"variantName","in":"query","description":"Variant name for A/B testing","schema":{"type":"string","default":"DEFAULT"}},{"name":"depth","in":"query","description":"Relationship depth to include (-1 for no relationships)","schema":{"type":"integer","format":"int32","default":-1}}],"responses":{"200":{"description":"Contentlet retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapView"}}}},"400":{"description":"Bad request - Invalid identifier format"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks read permissions"},"404":{"description":"Contentlet not found"},"500":{"description":"Internal server error"}}}},"/api/v1/content/{inodeOrIdentifier}/references":{"get":{"tags":["Content"],"summary":"Get contentlet references","description":"Retrieves all references to a specific contentlet, including pages, containers, and personas that reference it","operationId":"getContentletReferences","parameters":[{"name":"inodeOrIdentifier","in":"path","description":"Content inode or identifier","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","description":"Language ID for content localization","schema":{"type":"string","default":""},"example":1}],"responses":{"200":{"description":"References retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityContentReferenceListView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - user lacks read permission on the contentlet","content":{"application/json":{}}},"404":{"description":"Not found - contentlet not found","content":{"application/json":{}}}}}},"/api/v1/content/{identifier}/push/history":{"get":{"tags":["Content"],"summary":"Contentlet Push History","description":"Returns the push history of a contentlet","operationId":"getContentletPushHistory","parameters":[{"name":"identifier","in":"path","description":"ID of the Contentlet whose push history will be retrieved.","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Maximum number or results being returned, for pagination purposes.","schema":{"type":"integer","format":"int32"}},{"name":"offset","in":"query","description":"Page number of the results being returned, for pagination purposes.","schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"History data retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPaginatedDataView"}}}},"401":{"description":"Authentication required.","content":{"application/json":{}}},"404":{"description":"The specified identifier does not match any contentlet.","content":{"application/json":{}}},"500":{"description":"An internal dotCMS error has occurred.","content":{"application/json":{}}}}}},"/api/v1/content/_lock/{inodeOrIdentifier}":{"put":{"tags":["Content"],"summary":"Lock a given contentlet by the current user","description":"If the user is allowed to lock the contentlet specified by its inode or identifier, the contentlet will be locked.","operationId":"lockContent","parameters":[{"name":"inodeOrIdentifier","in":"path","description":"Contentlet inode or identifier","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","description":"Language ID for content localization","schema":{"type":"string","default":"-1"}}],"responses":{"200":{"description":"Successfully locked contentlet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapView"}}}},"400":{"description":"Bad request"},"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"404":{"description":"Content not found"},"500":{"description":"Internal Server Error"}}}},"/api/v1/content/related":{"post":{"tags":["Content"],"summary":"Pull Related Content","description":"Retrieves related content for a contentlet based on relationship field configuration and query conditions","operationId":"pullRelatedContent","requestBody":{"description":"Pull related content request parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PullRelatedForm"}}},"required":true},"responses":{"200":{"description":"Related content retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityListMapView"}}}},"400":{"description":"Bad request - contentlet does not have a relationship field","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"404":{"description":"Not found - contentlet not found","content":{"application/json":{}}}}}},"/api/v1/content/_refresh/{identifierOrInode}":{"put":{"tags":["Content"],"summary":"Refresh a contentlet","description":"Reindexes and clears cache for the contentlet specified by its identifier or inode. This operation forces the content to be refreshed in both the search index and application cache.","operationId":"refreshContent","parameters":[{"name":"identifierOrInode","in":"path","description":"Contentlet identifier or inode","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","description":"Language ID for content localization","schema":{"type":"string","default":"-1"}}],"responses":{"200":{"description":"Successfully refreshed contentlet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBooleanView"}}}},"400":{"description":"Bad request - Invalid identifier format"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks write permissions"},"404":{"description":"Content not found"},"500":{"description":"Internal Server Error"}}}},"/api/v1/content/_draft":{"put":{"tags":["Content"],"summary":"Saves a content draft","description":"Creates or updates a draft version of a contentlet without triggering workflow. Drafts allow content editors to save work in progress without publishing.\n\n**Block Editor (Story Block) fields:** send the value as a **Markdown or HTML** string — you do not need to hand-author the underlying ProseMirror/JSON document. dotCMS converts it to the Block Editor (ProseMirror JSON) structure automatically on save, so the field reads back as structured content with no editor round-trip required. A value that is already a valid Tiptap/ProseMirror JSON document is detected and stored unchanged. Example: `\"body\": \"## Intro\\n\\nHello **world**.\"`.\n\n**Rich blocks in Markdown:** blocks that plain Markdown cannot express are written as fenced code blocks whose info string is a `dotcms-*` label and whose body is a small JSON object. Example — embed a contentlet:\n\n```dotcms-content\\n{\"identifier\": \"\", \"languageId\": 1}\\n```\n\nSupported labels and payload fields (**bold** = required):\n- `dotcms-content` → embedded contentlet: **`identifier`**, `languageId` (default 1). The server rebuilds the full embed data from the identifier on every read.\n- `dotcms-image` → dotCMS-bound or decorated image: **`identifier` or `src`**; optional `alt`, `title`, `href`, `target`, `textWrap`, `textAlign`, `languageId`. Plain external images need no fence — standard `![alt](url \"title\")` works.\n- `dotcms-video` → video: **`identifier` or `src`**; optional `mimeType`, `width`, `height`, `languageId`.\n- `dotcms-youtube` → YouTube embed: **`src`**; optional `start` (seconds), `width`, `height`.\n- `dotcms-grid` → layout grid: the verbatim `gridBlock` node JSON (`{\"type\":\"gridBlock\",\"attrs\":{\"columns\":[n,n]},\"content\":[…two gridColumn nodes…]}`).\n- `dotcms-node` → any other node type verbatim (`{\"type\": \"\", …}`) — the fallback for custom blocks.\n\n**Rich blocks in HTML:** the same labels are namespaced custom elements. Scalar payloads ride as attributes with **hyphenated names** (HTML lowercases attribute names, so `languageId` is spelled `language-id`, `mimeType` is `mime-type`): `\" language-id=\"1\">`. `dotcms-ai`, `dotcms-grid` and `dotcms-node` take the same JSON object as the element's text body instead (HTML-escape `<` and `&` inside JSON string values). Always write an explicit closing tag — HTML parsing ignores the `/` in `` and would swallow the content after it. Both carriers produce identical stored documents.\n\nBlock styling (e.g. text alignment) is set by an HTML comment on its own line immediately before the block it decorates, in Markdown and HTML alike: ``.\n\nA Markdown/HTML write **fully replaces** the stored document; when stored rich blocks are not carried over in the submitted value, the save still succeeds and an advisory warning listing the replaced blocks is returned in the response `messages` field — carry the blocks over as fences or elements to preserve them. An invalid payload degrades to an ordinary code block (or is dropped when it carries no text to keep), never an error.","operationId":"saveDraft","parameters":[{"name":"inode","in":"query","description":"Content inode for existing content","schema":{"type":"string"}},{"name":"identifier","in":"query","description":"Content identifier for existing content","schema":{"type":"string"}},{"name":"indexPolicy","in":"query","description":"Index policy (DEFER_UNTIL_PUBLISH, FORCE, WAIT_FOR)","schema":{"type":"string"}},{"name":"language","in":"query","description":"Language ID for content localization","schema":{"type":"string","default":"-1"}}],"requestBody":{"description":"Content data and field values","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentForm"}}},"required":true},"responses":{"200":{"description":"Draft saved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityContentletView"}}}},"400":{"description":"Bad request - Invalid content data"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks write permissions"},"404":{"description":"Content not found"},"500":{"description":"Internal server error"}}}},"/api/v1/content/search":{"post":{"tags":["Content"],"summary":"Retrieves content from the dotCMS repository","description":"Abstracts the generation of the required Lucene query to look for user searchable fields in a Content Type, and returns the expected results. Payload info:\n\n| Property | Type | Description |\n|---------------------------------|---------|-------------------------------------------------------|\n| `globalSearch` | String | Global search term (like the main search box) |\n| `searchableFieldsByContentType` | Object | Content-type specific field searches. Value object consists of content type variables as keys, and objects as values, the latter consisting of the system variables of fields as keys, and query strings as values. See table below for how to interact with different field types, and the example request for how to structure the payload. |\n| `systemSearchableFields` | Object | System-level filters: `siteid`, `languageId`, `folderId`, `workflowSchemeId`, `workflowStepId`, and `variantName` (defaults to \"DEFAULT\"). `systemHostContent` determines whether to include content from the SYSTEM_HOST (defaults to \"true\"). |\n| `archivedContent` | Boolean String | Include archived content (\"true\"/\"false\") |\n| `unpublishedContent` | Boolean String | Include unpublished content (\"true\"/\"false\") |\n| `lockedContent` | Boolean String | Include locked content (\"true\"/\"false\") |\n| `orderBy` | String | Sort criteria (defaults to \"score,modDate desc\") |\n| `page` | Integer | Page number for pagination |\n| `perPage` | Integer | Results per page |\n\nWhen using `searchableFieldsByContentType`, different fields may require different string types:\n\n| Field Type | Description |\n|-----------------------------|---------------------------------------------|\n| title, textArea, wysiwyg | Text search |\n| category | Comma-separated category IDs |\n| checkbox, multiSelect | Comma-separated values (not labels) |\n| radio, select | Values (not labels) |\n| date, dateAndTime | Date or range: \"2023-01-01 TO 2023-12-31\" |\n| time | Time or range with TO |\n| tag | Comma-separated tag names |\n| relationships | Child contentlet ID |\n| json, keyValue | Matches any string in JSON |\n| binary, blockEditor, custom | Text search ","operationId":"search","requestBody":{"description":"Content search parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentSearchForm"},"example":{"globalSearch":"test","searchableFieldsByContentType":{"Blog":{"title":"test","tags":"tag1"}},"systemSearchableFields":{"siteId":"173aff42881a55a562cec436180999cf","languageId":1},"orderBy":"modDate desc","perPage":20,"page":1}}},"required":true},"responses":{"200":{"description":"The query has been executed. It's possible that no contents matched the search criteria.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchView"}}}},"400":{"description":"Bad request. Malformed JSON body"},"401":{"description":"Invalid User, or not logged in"},"403":{"description":"Forbidden"},"500":{"description":"Internal Server Error"}}}},"/api/v1/content/_unlock/{inodeOrIdentifier}":{"put":{"tags":["Content"],"summary":"Unlock a given contentlet by the current user","description":"If the user is allowed to unlock the contentlet specified by its inode or identifier, the contentlet will be unlocked.","operationId":"unlockContent","parameters":[{"name":"inodeOrIdentifier","in":"path","description":"Contentlet inode or identifier","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","description":"Language ID for content localization","schema":{"type":"string","default":"-1"}}],"responses":{"200":{"description":"Successfully unlocked contentlet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapView"}}}},"400":{"description":"Bad request"},"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"404":{"description":"Content not found"},"500":{"description":"Internal Server Error"}}}},"/api/v1/content/_search":{"post":{"tags":["Content"],"summary":"Search content with Lucene syntax","description":"Performs a comprehensive content search using [Lucene query syntax](https://dev.dotcms.com/docs/content-search-syntax). Supports filtering, sorting, pagination, and depth-based relationship loading. Returns structured JSON with search metadata and contentlet results.\n\n> **Note:** This is a wrapper around the former `api/content/_search`. Both paths remain valid for backwards compatibility, but the `v1` path is preferred.","operationId":"wrapperLuceneSearch","parameters":[{"name":"rememberQuery","in":"query","description":"Store query in session for Query Tool portlet","schema":{"type":"boolean","default":false}}],"requestBody":{"description":"Search criteria including query, sort, pagination and filters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchForm"},"example":{"query":"+systemType:false +languageId:1 +deleted:false +working:true +variant:default","sort":"modDate desc","limit":20,"offset":0}}},"required":true},"responses":{"200":{"description":"Search completed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySearchView"}}}},"400":{"description":"Invalid search parameters or malformed query","content":{"application/json":{}}},"401":{"description":"Authentication required","content":{"application/json":{}}},"403":{"description":"Insufficient permissions to access content","content":{"application/json":{}}},"500":{"description":"Internal server error during search","content":{"application/json":{}}}}}},"/api/v1/content/versions/{inode}":{"get":{"tags":["Content"],"summary":"Find content by inode","description":"Retrieves a specific content version by its inode","operationId":"findByInode","parameters":[{"name":"inode","in":"path","description":"Content inode","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Content found successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapView"}}}},"400":{"description":"Bad request - invalid inode format","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"404":{"description":"Not found - content with inode not found","content":{"application/json":{}}}}}},"/api/v1/content/versions":{"get":{"tags":["Content"],"summary":"Find content versions","description":"Retrieves all versions for content by identifier or inodes, with optional grouping by language","operationId":"findVersions","parameters":[{"name":"inodes","in":"query","description":"Comma-separated list of content inodes","schema":{"type":"string"}},{"name":"identifier","in":"query","description":"Content identifier (takes precedence over inodes)","schema":{"type":"string"}},{"name":"groupByLang","in":"query","description":"Group results by language (true/1 or false/0)","schema":{"type":"string"},"example":false},{"name":"limit","in":"query","description":"Maximum number of results (min: 20, max: 100)","schema":{"type":"integer","format":"int32"},"example":20}],"responses":{"200":{"description":"Content versions retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapView"}}}},"400":{"description":"Bad request - missing identifier/inodes or invalid parameters","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"404":{"description":"Not found - content not found","content":{"application/json":{}}}}}},"/api/v1/content/versions/id/{identifier}/history":{"get":{"tags":["Content"],"summary":"Contentlet History","description":"Returns the history of a contentlet with the minimum expected information, as seen in the History tab in the Content Edition page.","operationId":"history","parameters":[{"name":"identifier","in":"path","description":"The Identifier of the Contentlet whose history will be retrieved","required":true,"schema":{"type":"string"}},{"name":"languageId","in":"query","description":"The Language ID that the history will be filtered by","required":true,"schema":{"type":"string"}},{"name":"groupByLang","in":"query","description":"Specified whether the history must be grouped by language or not","schema":{"type":"boolean","default":false}},{"name":"bringOldVersions","in":"query","description":"Specified whether the history must include old versions or not","schema":{"type":"boolean","default":true}},{"name":"direction","in":"query","description":"Sort direction: Choose between ascending or descending.","schema":{"type":"string","enum":["ASC","DESC"],"default":"DESC"}},{"name":"limit","in":"query","description":"Maximum number or results being returned, for pagination purposes.","schema":{"type":"integer","format":"int32"}},{"name":"offset","in":"query","description":"Page number of the results being returned, for pagination purposes.","schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"History data retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPaginatedDataView"}}}},"400":{"description":"The identifier path parameter was not specified, or one of the specified parameters is invalid.","content":{"application/json":{}}},"401":{"description":"Authentication required.","content":{"application/json":{}}},"404":{"description":"The specified identifier does not match any contentlet.","content":{"application/json":{}}},"500":{"description":"An internal dotCMS error has occurred.","content":{"application/json":{}}}}}},"/api/v1/content/resourcelinks/field/{field}":{"get":{"tags":["Content"],"summary":"Get resource link for specific field","description":"Retrieves a resource link for a specific field of a contentlet identified by inode or identifier","operationId":"findResourceLink","parameters":[{"name":"field","in":"path","description":"Field variable name","required":true,"schema":{"type":"string"}},{"name":"inode","in":"query","description":"Content inode","schema":{"type":"string"}},{"name":"identifier","in":"query","description":"Content identifier","schema":{"type":"string"}},{"name":"language","in":"query","description":"Language ID","schema":{"type":"string","default":"-1"},"example":1}],"responses":{"200":{"description":"Resource link retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapStringObjectView"}}}},"400":{"description":"Bad request - missing inode/identifier parameter","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - download restricted","content":{"application/json":{}}},"404":{"description":"Not found - contentlet or field not found","content":{"application/json":{}}}}}},"/api/v1/content/resourcelinks":{"get":{"tags":["Content"],"summary":"Get all resource links for contentlet","description":"Retrieves resource links for all binary fields of a contentlet identified by inode or identifier","operationId":"findResourceLinks","parameters":[{"name":"inode","in":"query","description":"Content inode","schema":{"type":"string"}},{"name":"identifier","in":"query","description":"Content identifier","schema":{"type":"string"}},{"name":"language","in":"query","description":"Language ID","schema":{"type":"string","default":"-1"},"example":1}],"responses":{"200":{"description":"Resource links retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapStringObjectView"}}}},"400":{"description":"Bad request - missing inode/identifier parameter","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - download restricted","content":{"application/json":{}}}}}},"/api/v1/content/_bulkrefresh":{"post":{"tags":["Content"],"summary":"Reindex a selection of contentlets","description":"Clears the contentlet cache and reindexes every selected contentlet, all versions of each. Returns a job id. This is accepted work, not finished work: completion is pushed to the submitting user over the websocket. Not a full index rebuild.","operationId":"bulkRefreshContent","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkRefreshForm"}}}},"responses":{"202":{"description":"Accepted - reindex job enqueued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBulkRefreshSubmitView"}}}},"400":{"description":"Bad request - empty selection or over the configured item cap"},"401":{"description":"Unauthorized - no backend user session"},"403":{"description":"Forbidden - not a CMS Power User or CMS Administrator"},"415":{"description":"Unsupported Media Type"},"500":{"description":"Internal Server Error - the job could not be created"}}}},"/api/v1/content/_import/abandoned":{"get":{"tags":["Content Import","Content"],"summary":"Retrieves abandoned content import jobs","description":"Fetches a paginated list of abandoned content import jobs (jobs with state ABANDONED). Results can be paginated using query parameters.","operationId":"getAbandonedContentImportJobs","parameters":[{"name":"page","in":"query","description":"Page number to retrieve (1-based indexing).","schema":{"type":"integer","format":"int32","default":1}},{"name":"pageSize","in":"query","description":"Number of records per page.","schema":{"type":"integer","format":"int32","default":20}}],"responses":{"200":{"description":"Successfully retrieved the paginated list of abandoned content import jobs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityJobPaginatedResultView"}}}},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User does not have necessary permissions to view jobs."},"500":{"description":"Internal Server Error: An unexpected error occurred while retrieving jobs."}}}},"/api/v1/content/_import/active":{"get":{"tags":["Content Import","Content"],"summary":"Retrieves active content import jobs","description":"Fetches a paginated list of active content import jobs (jobs with state NEW, PROCESSING, or WAITING). Results can be paginated using query parameters.","operationId":"getActiveContentImportJobs","parameters":[{"name":"page","in":"query","description":"Page number to retrieve (1-based indexing).","schema":{"type":"integer","format":"int32","default":1}},{"name":"pageSize","in":"query","description":"Number of records per page.","schema":{"type":"integer","format":"int32","default":20}}],"responses":{"200":{"description":"Successfully retrieved the paginated list of active content import jobs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityJobPaginatedResultView"}}}},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User does not have necessary permissions to view jobs."},"500":{"description":"Internal Server Error: An unexpected error occurred while retrieving jobs."}}}},"/api/v1/content/_import/{jobId}/cancel":{"post":{"tags":["Content Import","Content"],"summary":"Cancel a content import job","description":"Requests cancellation of a specific content import job identified by its ID. Note that cancellation is asynchronous and may not be immediate.","operationId":"cancelContentImportJob","parameters":[{"name":"jobId","in":"path","description":"The unique identifier (UUID) of the job to be cancelled.","required":true,"schema":{"type":"string","format":"uuid","example":"e6d9bae8-657b-4e2f-8524-c0222db66355"}}],"responses":{"200":{"description":"Cancellation request successfully sent to the job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"},"example":{"entity":"Cancellation request successfully sent to job e6d9bae8-657b-4e2f-8524-c0222db66355","errors":[],"i18nMessagesMap":{},"messages":[],"pagination":null,"permissions":[]}}}},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User does not have permissions to cancel the specified job."},"404":{"description":"Not Found: Job with the specified ID could not be found or is already completed/cancelled."},"500":{"description":"Internal Server Error: An unexpected error occurred while attempting to cancel the job."}}}},"/api/v1/content/_import/canceled":{"get":{"tags":["Content Import","Content"],"summary":"Retrieves canceled content import jobs","description":"Fetches a paginated list of canceled content import jobs (jobs with state CANCELED). Results can be paginated using query parameters.","operationId":"getCanceledContentImportJobs","parameters":[{"name":"page","in":"query","description":"Page number to retrieve (1-based indexing).","schema":{"type":"integer","format":"int32","default":1}},{"name":"pageSize","in":"query","description":"Number of records per page.","schema":{"type":"integer","format":"int32","default":20}}],"responses":{"200":{"description":"Successfully retrieved the paginated list of canceled content import jobs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityJobPaginatedResultView"}}}},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User does not have necessary permissions to view jobs."},"500":{"description":"Internal Server Error: An unexpected error occurred while retrieving jobs."}}}},"/api/v1/content/_import/completed":{"get":{"tags":["Content Import","Content"],"summary":"Retrieves completed content import jobs","description":"Fetches a paginated list of completed content import jobs (jobs with state COMPLETED). Results can be paginated using query parameters.","operationId":"getCompletedContentImportJobs","parameters":[{"name":"page","in":"query","description":"Page number to retrieve (1-based indexing).","schema":{"type":"integer","format":"int32","default":1}},{"name":"pageSize","in":"query","description":"Number of records per page.","schema":{"type":"integer","format":"int32","default":20}}],"responses":{"200":{"description":"Successfully retrieved the paginated list of completed content import jobs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityJobPaginatedResultView"}}}},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User does not have necessary permissions to view jobs."},"500":{"description":"Internal Server Error: An unexpected error occurred while retrieving jobs."}}}},"/api/v1/content/_import/failed":{"get":{"tags":["Content Import","Content"],"summary":"Retrieves failed content import jobs","description":"Fetches a paginated list of failed content import jobs (jobs with state FAILED). Results can be paginated using query parameters.","operationId":"getFailedContentImportJobs","parameters":[{"name":"page","in":"query","description":"Page number to retrieve (1-based indexing).","schema":{"type":"integer","format":"int32","default":1}},{"name":"pageSize","in":"query","description":"Number of records per page.","schema":{"type":"integer","format":"int32","default":20}}],"responses":{"200":{"description":"Successfully retrieved the paginated list of failed content import jobs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityJobPaginatedResultView"}}}},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User does not have necessary permissions to view jobs."},"500":{"description":"Internal Server Error: An unexpected error occurred while retrieving jobs."}}}},"/api/v1/content/_import/{jobId}":{"get":{"tags":["Content Import","Content"],"summary":"Retrieves the status of a content import job","description":"Fetches the detailed current status of a specific content import job identified by its ID.","operationId":"getJobStatus","parameters":[{"name":"jobId","in":"path","description":"The unique identifier (UUID) of the job whose status is to be retrieved.","required":true,"schema":{"type":"string","format":"uuid","example":"e6d9bae8-657b-4e2f-8524-c0222db66355"}}],"responses":{"200":{"description":"Successfully retrieved job status. The entity contains detailed information about the job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityJobView"}}}},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User does not have permissions to view the specified job."},"404":{"description":"Not Found: Job with the specified ID could not be found."},"500":{"description":"Internal Server Error: An unexpected error occurred while retrieving the job status."}}}},"/api/v1/content/_import":{"get":{"tags":["Content Import","Content"],"summary":"Retrieves content import jobs","description":"Fetches a paginated list of all content import jobs regardless of state. Results can be paginated using query parameters.","operationId":"getContentImportJobs","parameters":[{"name":"page","in":"query","description":"Page number to retrieve (1-based indexing).","schema":{"type":"integer","format":"int32","default":1}},{"name":"pageSize","in":"query","description":"Number of records per page.","schema":{"type":"integer","format":"int32","default":20}}],"responses":{"200":{"description":"Successfully retrieved the paginated list of content import jobs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityJobPaginatedResultView"}}}},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User does not have necessary permissions to view jobs."},"500":{"description":"Internal Server Error: An unexpected error occurred while retrieving jobs."}}},"post":{"tags":["Content Import","Content"],"summary":"Imports content from a CSV file","description":"Creates and enqueues a new content import job. Requires a CSV file and a JSON string representing import parameters.","operationId":"importContent","requestBody":{"description":"This endpoint accepts a `multipart/form-data` request with two fields:\n\n| **Field** | **Type** | **Required** | **Description** |\n|-----------|----------|--------------|-----------------|\n| `file` | File | ✅ Yes | The CSV file to import. Must contain content rows and match the expected structure for the content type. |\n| `form` | String | ✅ Yes | A JSON string containing the import parameters. See structure below. |\n\n**`form` field structure:**\n\n| **Property** | **Type** | **Required** | **Default** | **Description** |\n|----------------------|------------|--------------|-------------|-----------------|\n| `contentType` | String | ✅ Yes | – | Content Type variable or ID to import data into. |\n| `language` | String | ❌ No | Default language | Language code (e.g., `en-US`) or language ID. |\n| `workflowActionId` | String | ✅ Yes | – | Workflow Action UUID to apply to imported content. |\n| `fields` | String[] | ❌ No | – | List of field variables or IDs used as keys for content updates. |\n| `stopOnError` | Boolean | ❌ No | `false` | Whether to stop import on first validation error. |\n| `commitGranularity` | Integer | ❌ No | `100` | Number of rows to commit in each transaction batch. |\n\n**Example `form` value:**\n\n```json\n{\n \"contentType\": \"webPageContent\",\n \"language\": \"en-US\",\n \"workflowActionId\": \"b9d89c80-3d88-4311-8365-187323c96436\",\n \"fields\": [\"title\"],\n \"stopOnError\": false,\n \"commitGranularity\": 100\n}\n```","content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ContentImportParamsSchema"}}},"required":true},"responses":{"200":{"description":"Content import job successfully created and enqueued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityJobStatusView"}}}},"400":{"description":"Bad Request: Invalid parameters or malformed request (e.g., missing file, invalid JSON in 'form', file not CSV)."},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User does not have necessary permissions for content import or workflow action."},"404":{"description":"Not Found: Specified Content Type or Language could not be found."},"500":{"description":"Internal Server Error: An unexpected error occurred during job creation or processing."}}}},"/api/v1/content/_import/{jobId}/monitor":{"get":{"tags":["Content Import","Content"],"summary":"Monitor a content import job in real-time","description":"Establishes a Server-Sent Events (SSE) connection to monitor the progress of a specific content import job in real-time. This endpoint will continuously send updates as the job progresses, including status changes and completion information.","operationId":"monitorContentImportJobs","parameters":[{"name":"jobId","in":"path","description":"The unique identifier (UUID) of the job whose status is to be retrieved.","required":true,"schema":{"type":"string","format":"uuid","example":"e6d9bae8-657b-4e2f-8524-c0222db66355"}}],"responses":{"200":{"description":"Server-Sent Events stream established successfully. Events will be sent as the job progresses.","content":{"text/event-stream":{"schema":{"$ref":"#/components/schemas/EventOutput"}}}},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User does not have permissions to monitor the specified job."},"404":{"description":"Not Found: Job with the specified ID could not be found."},"500":{"description":"Internal Server Error: An unexpected error occurred while establishing the monitoring connection."}}}},"/api/v1/content/_import/successful":{"get":{"tags":["Content Import","Content"],"summary":"Retrieves successful content import jobs","description":"Fetches a paginated list of successful content import jobs (jobs with state COMPLETED and successful result). Results can be paginated using query parameters.","operationId":"getSuccessfulContentImportJobs","parameters":[{"name":"page","in":"query","description":"Page number to retrieve (1-based indexing).","schema":{"type":"integer","format":"int32","default":1}},{"name":"pageSize","in":"query","description":"Number of records per page.","schema":{"type":"integer","format":"int32","default":20}}],"responses":{"200":{"description":"Successfully retrieved the paginated list of successful content import jobs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityJobPaginatedResultView"}}}},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User does not have necessary permissions to view jobs."},"500":{"description":"Internal Server Error: An unexpected error occurred while retrieving jobs."}}}},"/api/v1/content/_import/_validate":{"post":{"tags":["Content Import","Content"],"summary":"Validates content import from a CSV file","description":"Creates and enqueues a content import job in preview mode. This validates the CSV data against the specified Content Type, language, and workflow action without actually importing content.","operationId":"validateContentImport","requestBody":{"description":"This endpoint accepts a `multipart/form-data` request with two fields:\n\n| **Field** | **Type** | **Required** | **Description** |\n|-----------|----------|--------------|-----------------|\n| `file` | File | ✅ Yes | The CSV file to import. Must contain content rows and match the expected structure for the content type. |\n| `form` | String | ✅ Yes | A JSON string containing the import parameters. See structure below. |\n\n**`form` field structure:**\n\n| **Property** | **Type** | **Required** | **Default** | **Description** |\n|----------------------|------------|--------------|-------------|-----------------|\n| `contentType` | String | ✅ Yes | – | Content Type variable or ID to import data into. |\n| `language` | String | ❌ No | Default language | Language code (e.g., `en-US`) or language ID. |\n| `workflowActionId` | String | ✅ Yes | – | Workflow Action UUID to apply to imported content. |\n| `fields` | String[] | ❌ No | – | List of field variables or IDs used as keys for content updates. |\n| `stopOnError` | Boolean | ❌ No | `false` | Whether to stop import on first validation error. |\n| `commitGranularity` | Integer | ❌ No | `100` | Number of rows to commit in each transaction batch. |\n\n**Example `form` value:**\n\n```json\n{\n \"contentType\": \"webPageContent\",\n \"language\": \"en-US\",\n \"workflowActionId\": \"b9d89c80-3d88-4311-8365-187323c96436\",\n \"fields\": [\"title\"],\n \"stopOnError\": false,\n \"commitGranularity\": 100\n}\n```","content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ContentImportParamsSchema"}}},"required":true},"responses":{"200":{"description":"Content import validation job successfully created and enqueued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityJobStatusView"},"example":{"entity":{"jobId":"e6d9bae8-657b-4e2f-8524-c0222db66355","statusUrl":"http://localhost:8080/api/v1/_import/e6d9bae8-657b-4e2f-8524-c0222db66355"},"errors":[],"i18nMessagesMap":{},"messages":[],"pagination":null,"permissions":[]}}}},"400":{"description":"Bad Request: Invalid parameters or malformed request (e.g., missing file, invalid JSON in 'form', file not CSV)."},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User does not have necessary permissions for validation or workflow action."},"404":{"description":"Not Found: Specified Content Type or Language could not be found."},"500":{"description":"Internal Server Error: An unexpected error occurred during job creation or processing."}}}},"/api/v1/contenttype/{baseVariableName}/_copy":{"post":{"tags":["Content Type"],"summary":"Copies a content type","description":"Creates a new content type by copying an existing one.\n\nReturns resulting content type.","operationId":"postContentTypeCopy","parameters":[{"name":"baseVariableName","in":"path","description":"The variable name of the content type to copy.\n\nExample value: `htmlpageasset` (Default page content type)","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Requires POST body consisting of a JSON object with the following properties:\n\n| Property | Type | Description |\n|----------|--------|-------------|\n| `name` | String | **Required.** Name of new content type |\n| `variable` | String | Velocity variable name of the new content type |\n| `folder` | String | Folder in which new content type will live |\n| `host` | String | Site or host to which the new content type will belong |\n| `icon` | String | System icon to represent content type |\n\nThe copy preserves: `description`, `host`, `folder`, full `fields[]` (with new field IDs), layout (Row/Column markers), `metadata`, and workflow assignments. Unspecified values default to those of the original content type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CopyContentTypeForm"},"example":{"name":"Copied Content Type Name","variable":"copiedContentTypeVar","folder":"SYSTEM_FOLDER","host":"8a7d5e23-da1e-420a-b4f0-471e7da8ea2d","icon":"event_note"}}},"required":true},"responses":{"200":{"description":"Content type copied successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityContentTypeOperationView"},"example":{"errors":[{"errorCode":"string","message":"string","fieldName":"string"}],"entity":{"baseType":"string","clazz":"string","defaultType":true,"description":"string","fields":[],"fixed":true,"folder":"string","folderPath":"string","host":"string","iDate":0,"icon":"string","id":"string","layout":[],"metadata":{},"modDate":0,"multilingualable":true,"name":"string1","siteName":"string","sortOrder":0,"system":true,"systemActionMappings":{},"variable":"string","versionable":true,"workflows":[]},"messages":[{"message":"string"}],"i18nMessagesMap":{"additionalProp1":"string","additionalProp2":"string","additionalProp3":"string"},"permissions":["string"],"pagination":{"currentPage":0,"perPage":0,"totalEntries":0}}}}},"400":{"description":"Bad Request"},"403":{"description":"Forbidden"},"415":{"description":"Unsupported Media Type"},"500":{"description":"Internal Server Error"}}}},"/api/v1/contenttype":{"get":{"tags":["Content Type"],"summary":"Retrieves a list of content types","description":"Returns a list of content type objects based on the filtering criteria.","operationId":"getContentType","parameters":[{"name":"filter","in":"query","description":"String to filter/search for specific content types; leave blank to return all.","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number in response pagination.\n\nDefault: `1`","schema":{"type":"integer","format":"int64"}},{"name":"per_page","in":"query","description":"Number of results per page for pagination.\n\nDefault: `10`","schema":{"type":"integer","format":"int64"}},{"name":"orderby","in":"query","description":"Column(s) to sort the results. Multiple columns can be combined in a comma-separated list. Column names can also be set within a SQL string function, such as `upper()`.\n\nSome possible values:\n\n`name`, `velocity_var_name`, `mod_date`, `sort_order`\n\n`description`, `structuretype`, `category`, `inode`","schema":{"type":"string","default":"upper(name)"}},{"name":"direction","in":"query","description":"Sort direction: choose between ascending or descending.","schema":{"type":"string","enum":["ASC","DESC"],"default":"ASC"}},{"name":"type","in":"query","description":"Variable name of [base content type](https://www.dotcms.com/docs/latest/base-content-types).","style":"form","schema":{"type":"array","items":{"type":"string","enum":["ANY","CONTENT","WIDGET","FORM","FILEASSET","HTMLPAGE","PERSONA","VANITY_URL","KEY_VALUE","DOTASSET"]},"enum":["ANY","CONTENT","WIDGET","FORM","FILEASSET","HTMLPAGE","PERSONA","VANITY_URL","KEY_VALUE","DOTASSET"]}},{"name":"host","in":"query","description":"Filter by site identifier.","schema":{"type":"string"}},{"name":"sites","in":"query","description":"Multi-site filter: Takes comma-separated list of site identifiers or keys.","schema":{"type":"string"}},{"name":"ensure","in":"query","description":"Guarantee Content Types to be included in the response: Comma-separated content type keys (e.g. `activity, blog, product`).","schema":{"type":"string"}},{"name":"system","in":"query","description":"Whether to include system Content Types (e.g. Host, Favorite Page) in the response.\n\nWhen `true` or omitted, system Content Types are included (default, backward-compatible). When `false`, they are excluded. Combines with `filter`.","schema":{"type":"boolean","default":true}}],"responses":{"200":{"description":"Content types retrieved successfully","content":{"application/json":{"example":{"entity":[{"baseType":"string","clazz":"string","defaultType":true,"description":"string","fixed":true,"folder":"string","folderPath":"string","host":"string","iDate":0,"icon":"string","id":"string","layout":[],"metadata":{},"modDate":0,"multilingualable":true,"nEntries":0,"name":"string","siteName":"string","sortOrder":0,"system":true,"variable":"string","versionable":true,"workflows":[]}],"errors":[],"i18nMessagesMap":{},"messages":[],"pagination":{"currentPage":0,"perPage":0,"totalEntries":0},"permissions":[]}}}},"403":{"description":"Forbidden"},"500":{"description":"Internal Server Error"}}},"post":{"tags":["Content Type"],"summary":"Creates one or more content types","description":"Creates one or more content types specified in the JSON payload.\n\n Returns a list entity containing the created content type objects.","operationId":"postContentTypeCreate","requestBody":{"description":"Accepts either a single content-type object or an array. The body is the content-type object directly (not wrapped in a 'contentType' envelope).\n\n**Required properties:**\n- `clazz` *(string)* — the base type, as a case-insensitive base-type name: `CONTENT`, `WIDGET`, `FORM`, `FILEASSET`, `HTMLPAGE`, `PERSONA`, `VANITY_URL`, `KEY_VALUE`, or `DOTASSET`.\n- `name` *(string)* — display name\n\n**Common optional properties:**\n- `variable` *(string)* — Velocity variable name (unique, alphanumeric, starts with a letter; auto-generated if omitted)\n- `host` *(string)* — site identifier UUID or the literal `SYSTEM_HOST` (defaults to the default site)\n- `folder` *(string)* — folder identifier UUID or the literal `SYSTEM_FOLDER` (defaults to `SYSTEM_FOLDER`)\n- `description` *(string)*\n- `workflow` *(array of workflow scheme UUIDs)* — e.g. `[\"d61a59e1-a49c-46f2-a929-db2b4bfa88b2\"]` for System Workflow. ⚠️ **Note:** this is `workflow` (singular) in the request. GET responses return `workflows` (plural, array of objects) — clients round-tripping an object must rename this key.\n- `fields` *(array of field objects)* — see field schema below (`ContentTypeFieldView`)\n- `metadata` *(object)* — known keys: `CONTENT_EDITOR2_ENABLED` (boolean), `DOT_STYLE_EDITOR_SCHEMA` (JSON string)\n- `systemActionMappings` *(object)* — maps system actions (`NEW`, `EDIT`, `PUBLISH`, `UNPUBLISH`, `ARCHIVE`, `UNARCHIVE`, `DELETE`, `DESTROY`) to workflow action UUIDs\n\n**WIDGET content types:** Creating `clazz: WIDGET` automatically adds `widgetTitle`, `widgetUsage`, `widgetCode`, and `widgetPreexecute`. `widgetCode` is an `ImmutableConstantField`; set the field's `values` property on the content type. Putting `widgetCode` in a workflow contentlet body is silently ignored.\n\n**Field object schema** (each item in `fields[]`):\n- `clazz` *(string, required)* — the field type as a case-insensitive short name: `TEXT`, `TEXT_AREA`, `STORY_BLOCK_FIELD`, `WYSIWYG`, `BINARY`, `IMAGE`, `FILE`, `TAG`, `CATEGORY`, `CHECKBOX`, `RADIO`, `SELECT`, `MULTI_SELECT`, `DATE`, `TIME`, `DATE_TIME`, `KEY_VALUE`, `JSON_FIELD`, `CONSTANT`, `HIDDEN`, `CUSTOM_FIELD`, `RELATIONSHIP`, `ROW_FIELD` *(layout marker)*, `COLUMN_FIELD` *(layout marker)*. The fully-qualified `Immutable*` class name is also accepted.\n- `name`, `variable`, `dataType` (one of `TEXT`, `LONG_TEXT`, `SYSTEM`, `BOOL`, `INTEGER`, `FLOAT`, `DATE`), `required`, `indexed`, `listed`, `sortOrder` *(integer, position in the fields array)*\n- ⚠️ **`dataType` is the storage type, not the UI type.** Asset-reference fields — `ImmutableImageField`, `ImmutableFileField`, `ImmutableBinaryField` — use `dataType: TEXT` (they store a reference in a text column), **never** `SYSTEM`. Reserve `SYSTEM` for true layout/tab/relationship system fields (rows, columns, dividers, permission/relationship tabs).\n- `values` *(string)* — for Radio/Select/Checkbox: newline-separated `Display|value` pairs. For a boolean field use `ImmutableRadioField` + `dataType: BOOL` + `values: 'True|true\\r\\nFalse|false'` — there is no dedicated Boolean field class.\n\n**Layout encoding:** Rows and columns are regular field entries placed in `fields[]`. `ImmutableRowField` begins a new row; `ImmutableColumnField` begins a new column inside that row; following content fields belong to the most-recent column until the next marker.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentTypeRequestView"},"example":[{"clazz":"CONTENT","defaultType":false,"name":"The Content Type 1","description":"THE DESCRIPTION","host":"48190c8c-42c4-46af-8d1a-0cd5db894797","owner":"dotcms.org.1","variable":"TheContentType1","fixed":false,"system":false,"folder":"SYSTEM_FOLDER","systemActionMappings":{"NEW":"ceca71a0-deee-4999-bd47-b01baa1bcfc8","PUBLISH":"ceca71a0-deee-4999-bd47-b01baa1bcfc8"},"workflow":["d61a59e1-a49c-46f2-a929-db2b4bfa88b2"]},{"clazz":"CONTENT","defaultType":false,"name":"The Content Type 2","description":"THE DESCRIPTION","host":"48190c8c-42c4-46af-8d1a-0cd5db894797","owner":"dotcms.org.1","variable":"TheContentType2","fixed":false,"system":false,"folder":"SYSTEM_FOLDER","workflow":["d61a59e1-a49c-46f2-a929-db2b4bfa88b2"]}]}},"required":true},"responses":{"200":{"description":"Content type(s) created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityListMapView"},"example":{"entity":[{"baseType":"string","clazz":"string","defaultType":true,"description":"string","fields":[],"fixed":true,"folder":"string","folderPath":"string","host":"string","iDate":0,"icon":"string","id":"string","layout":[],"metadata":{},"modDate":0,"multilingualable":true,"name":"string","owner":"string","siteName":"string","sortOrder":0,"system":true,"systemActionMappings":{},"variable":"string","versionable":true,"workflows":[]}],"errors":[],"i18nMessagesMap":{},"messages":[],"pagination":null,"permissions":[]}}}},"400":{"description":"Bad Request"},"403":{"description":"Forbidden"},"415":{"description":"Unsupported Media Type"},"500":{"description":"Internal Server Error"}}}},"/api/v1/contenttype/id/{idOrVar}":{"get":{"tags":["Content Type"],"summary":"Retrieves a single content type","description":"Returns one content type based on the provided ID or Velocity variable name.\n\nThe response includes a `fields[]` array describing every field on the type. Each field has a `clazz` property (e.g. `ImmutableBinaryField`, `ImmutableImageField`, `ImmutableTextField`) that determines what values the field accepts. This is particularly important for file-like fields: `ImmutableBinaryField` only accepts a `temp_` from `POST /api/v1/temp`; `ImmutableImageField` accepts a `temp_` or a dotAsset `identifier`. Always inspect `fields[].clazz` before attempting to set binary or image field values via the workflow fire endpoint.","operationId":"getContentTypeIdVar","parameters":[{"name":"idOrVar","in":"path","description":"The ID or Velocity variable name of the content type to retrieve.\n\nVariable name example: `htmlpageasset` (Default page content type)","required":true,"schema":{"type":"string"}},{"name":"languageId","in":"query","description":"The language ID for localization.","schema":{"type":"integer","format":"int64"}},{"name":"live","in":"query","description":"Determines whether live versions of language variables are used in the returned object.","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Content type retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityContentTypeDetailView"},"example":{"entity":[{"baseType":"string","clazz":"string","defaultType":true,"description":"string","fields":[],"fixed":false,"folder":"string","folderPath":"string","host":"string","iDate":0,"icon":"string","id":"string","layout":[],"metadata":{},"modDate":0,"multilingualable":true,"name":"string","siteName":"string","sortOrder":0,"system":true,"variable":"string","systemActionMappings":{},"versionable":true,"workflows":[]}],"errors":[],"i18nMessagesMap":{},"messages":[],"pagination":{"currentPage":0,"perPage":0,"totalEntries":0},"permissions":[]}}}},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Internal Server Error"}}},"put":{"tags":["Content Type"],"summary":"Updates a content type","description":"Updates the content type based on the given ID or Velocity variable name.\n\n⚠️ **Destructive semantics.** (with one exception). This endpoint treats the request body as the full desired state. Any editable property (including items in `fields[]`) absent from the body will be removed. **Exception: `metadata`** — if the `metadata` key is absent from the request body, the server preserves the existing metadata unchanged. To explicitly clear all metadata, send `\"metadata\": null`.\n\n**Recommended update pattern:**\n1. `GET /api/v1/contenttype/id/{idOrVar}` to fetch the current object.\n2. Mutate the returned object in place. Rename `workflows` (array of objects) → `workflow` (array of UUIDs) before sending.\n3. PUT the entire mutated object back.\n\nThis is also the only supported way to add, remove, or modify individual fields — the `/api/v1/contenttype/{typeId}/fields/**` family is deprecated in favor of this full-CT PUT.\n\n⚠️ **`systemActionMappings` is validated on write.** Each entry's `workflowAction.id` must still exist; if a mapping points to a deleted workflow action, the entire PUT fails with `\"The workflow action with the id does not exists\"`. When round-tripping the object, prune `systemActionMappings` entries you do not intend to update — or omit the `systemActionMappings` property entirely if no mapping changes are needed.","operationId":"putContentTypeUpdate","parameters":[{"name":"idOrVar","in":"path","description":"The ID or Velocity variable name of the content type to update.\n\nExample value: `htmlpageasset` (Default page content type)","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The minimum required properties for a successful update are `clazz`, `id`, and `name`.\n\nMay also optionally include the following special properties:\n\n| Property | Value | Description |\n|-|-|-|\n| `systemActionMappings` | JSON Object | Maps [Default Workflow Actions](https://www.dotcms.com/docs/latest/managing-workflows#DefaultActions) (as keys) to workflow action identifiers (as values) for this content type.|\n| `workflow` | List of Strings | A list of identifiers of workflow schemes to be associated with the content type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentTypeRequestView"},"example":{"clazz":"com.dotcms.contenttype.model.type.ImmutableSimpleContentType","defaultType":false,"id":"39fecdb0-46cc-40a9-a056-f2e1a80ea78c","name":"The Content Type 2","description":"THE DESCRIPTION 2","host":"48190c8c-42c4-46af-8d1a-0cd5db894797","owner":"dotcms.org.1","variable":"TheContentType1","fixed":false,"system":false,"folder":"SYSTEM_FOLDER","workflow":["d61a59e1-a49c-46f2-a929-db2b4bfa88b2"]}}},"required":true},"responses":{"200":{"description":"Content type updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityContentTypeDetailView"},"example":{"entity":{"baseType":"string","clazz":"string","defaultType":true,"fields":[],"fixed":true,"folder":"string","folderPath":"string","host":"string","iDate":0,"icon":"string","id":"string","layout":[],"metadata":{},"modDate":0,"multilingualable":true,"name":"string","siteName":"string","sortOrder":0,"system":true,"systemActionMappings":{},"variable":"string","versionable":true,"workflows":[]},"errors":[],"i18nMessagesMap":{},"messages":[],"pagination":null,"permissions":[]}}}},"400":{"description":"Bad Request"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"415":{"description":"Unsupported Media Type"},"500":{"description":"Internal Server Error"}}},"delete":{"tags":["Content Type"],"summary":"Deletes a content type","description":"Deletes the content type based on the provided ID or Velocity variable name.\n\n⚠️ **Note:** The `entity` field in the response is a **JSON-encoded string**, not an object. Typed clients must call `JSON.parse(entity)` before use to get `{ \"deleted\": \"\" }`. This differs from other endpoints in the same family where `entity` is a direct object.","operationId":"deleteContentType","parameters":[{"name":"idOrVar","in":"path","description":"The ID or Velocity variable name of the content type to delete.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Content type deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityContentTypeJsonView"},"example":{"entity":"{\"deleted\":\"string\"}","errors":[],"i18nMessagesMap":{},"messages":[],"pagination":null,"permissions":[]}}}},"403":{"description":"Forbidden"},"404":{"description":"Content type not found"},"500":{"description":"Internal Server Error"}}}},"/api/v1/contenttype/_filter":{"post":{"tags":["Content Type"],"summary":"Filters content types","description":"Returns the list of content type objects that match the specified filter, with optional pagination criteria.\n\nFor simple substring filtering without pagination control, `GET /api/v1/contenttype?filter=` is equivalent and simpler. Use `_filter` when you need pagination, ordering, and direction together.","operationId":"postContentTypeFilter","requestBody":{"description":"Requires POST body consisting of a JSON object with the following properties:\n\n| Property | Type | Description |\n|----------|--------|-------------|\n| `filter` | JSON Object | Contains three properties:
`query`A simple query returning full or partial matches.
`types`A comma-separated list of specific content type variables.
`sites`A comma-separated list of site identifiers or keys.
|\n| `page` | Integer | Which page of results to show. Defaults to `1`. |\n| `perPage` | Integer | Number of results to display per page. Defaults to `10`. |\n| `orderBy` | String | Sorting parameter: `name` (default), `velocity_var_name`, `mod_date`, or `sort_order`. |\n| `direction` | String | `ASC` (default) or `DESC` for ascending or descending. |","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilteredContentTypesForm"},"example":{"filter":{"query":"","types":"Blog,Activity","sites":"demo.dotcms.com,SYSTEM_HOST"},"page":1,"perPage":10,"orderBy":"name","direction":"ASC"}}},"required":true},"responses":{"200":{"description":"Content types filtered successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityListContentTypeView"},"example":{"entity":[{"baseType":"string","clazz":"string","defaultType":true,"description":"string","fixed":false,"folder":"string","folderPath":"string","host":"string","iDate":0,"icon":"string","id":"string","layout":[],"metadata":{},"modDate":0,"multilingualable":true,"nEntries":0,"name":"string","siteName":"string","sortOrder":0,"system":true,"variable":"string","versionable":true,"workflows":[]}],"errors":[],"i18nMessagesMap":{},"messages":[],"pagination":{"currentPage":0,"perPage":0,"totalEntries":0},"permissions":[]}}}},"400":{"description":"Bad Request"},"403":{"description":"Forbidden"},"415":{"description":"Unsupported Media Type"},"500":{"description":"Internal Server Error"}}}},"/api/v1/contenttype/page":{"get":{"tags":["getPagesContentTypes","Content Type"],"summary":"Retrieves a list of content types for a page","description":"Returns a list of content type objects based on the filtering criteria.","operationId":"getPagesContentTypes","parameters":[{"name":"pagePathOrId","in":"query","description":"The URL or Identifier of the page to filter content types for the palette","schema":{"type":"string"}},{"name":"language","in":"query","description":"Optional Language id","schema":{"type":"string","default":"-1"}},{"name":"filter","in":"query","description":"String to filter/search for specific content types; leave blank to return all.","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number in response pagination.\n\nDefault: `1`","schema":{"type":"integer","format":"int64","default":1}},{"name":"per_page","in":"query","description":"Number of results per page for pagination.\n\nDefault: `10`","schema":{"type":"integer","format":"int64","default":10}},{"name":"orderby","in":"query","description":"Column(s) to sort the results. Multiple columns can be combined in a comma-separated list. Column names can also be set within a SQL string function, such as `upper()`.\n\nSome possible values:\n\n`name`, `velocity_var_name`, `mod_date`, `sort_order`\n\n`description`, `structuretype`, `category`, `inode`","schema":{"type":"string","default":"usage"}},{"name":"direction","in":"query","description":"Sort direction: choose between ascending or descending.","schema":{"type":"string","enum":["ASC","DESC"],"default":"ASC"}},{"name":"type","in":"query","description":"List of variable names of [base content type](https://www.dotcms.com/docs/latest/base-content-types).","style":"form","schema":{"type":"array","items":{"type":"string","enum":["ANY","CONTENT","WIDGET","FORM","FILEASSET","HTMLPAGE","PERSONA","VANITY_URL","KEY_VALUE","DOTASSET"]},"enum":["ANY","CONTENT","WIDGET","FORM","FILEASSET","HTMLPAGE","PERSONA","VANITY_URL","KEY_VALUE","DOTASSET"]}},{"name":"host","in":"query","description":"Filter by site identifier.","schema":{"type":"string"}}],"responses":{"200":{"description":"Content types retrieved successfully","content":{"application/json":{"example":{"entity":[{"baseType":"string","clazz":"string","defaultType":true,"description":"string","fixed":true,"folder":"string","folderPath":"string","host":"string","iDate":0,"icon":"string","id":"string","layout":[],"metadata":{},"modDate":0,"multilingualable":true,"nEntries":0,"name":"string","siteName":"string","sortOrder":0,"system":true,"variable":"string","versionable":true,"workflows":[]}],"errors":[],"i18nMessagesMap":{},"messages":[],"pagination":{"currentPage":0,"perPage":0,"totalEntries":0},"permissions":[]}}}},"403":{"description":"Forbidden"},"500":{"description":"Internal Server Error"}}}},"/api/v1/contenttype/basetypes":{"get":{"tags":["Content Type"],"summary":"Retrieves base content types","description":"Returns a list of base content types.","operationId":"getContentTypeBaseTypes","responses":{"200":{"description":"Base content types retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBaseContentTypesView"},"example":{"entity":[{"index":"int","label":"string","name":"string","types":null}],"errors":[],"i18nMessagesMap":{},"messages":[],"pagination":null,"permissions":[]}}}},"500":{"description":"Internal Server Error"}}}},"/api/v1/contenttype/render/id/{idOrVar}":{"get":{"tags":["Content Type"],"summary":"Retrieves a single content type with their rendered custom fields","description":"Returns a content type based on the provided ID or Velocity variable name. Additionally, the Velocity code in all of its custom fields will be parsed.","operationId":"getContentTypeRenderedCustomFieldIdVar","parameters":[{"name":"idOrVar","in":"path","description":"The ID or Velocity variable name of the content type to retrieve.\n\nVariable name example: `htmlpageasset` (Default page content type)","required":true,"schema":{"type":"string"}},{"name":"languageId","in":"query","description":"The language ID for localization.","schema":{"type":"integer","format":"int64"}},{"name":"live","in":"query","description":"Determines whether live versions of language variables are used in the returned object.","schema":{"type":"boolean"}},{"name":"inode","in":"query","description":"Optional contentlet inode. When provided, contentlet-specific Velocity variables ($inode, $identifier, $lang, etc.) will be available when rendering Custom Fields.","schema":{"type":"string"}}],"responses":{"200":{"description":"Content type retrieved successfully","content":{"application/json":{"example":{"entity":[{"baseType":"string","clazz":"string","defaultType":true,"description":"string","fields":[],"fixed":false,"folder":"string","folderPath":"string","host":"string","iDate":0,"icon":"string","id":"string","layout":[],"metadata":{},"modDate":0,"multilingualable":true,"name":"string","siteName":"string","sortOrder":0,"system":true,"variable":"string","systemActionMappings":{},"versionable":true,"workflows":[]}],"errors":[],"i18nMessagesMap":{},"messages":[],"pagination":{"currentPage":0,"perPage":0,"totalEntries":0},"permissions":[]}}}},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Internal Server Error"}}}},"/api/v1/contenttype/id/{idOrVar}/metadata":{"patch":{"tags":["Content Type"],"summary":"Updates the metadata of a Content Type","description":"Merges the provided key/value pairs into the Content Type's `metadata` map without touching fields, workflows, or any other structural property. Keys present in the body are added or overwritten; keys absent from the body are left unchanged. To remove a key, set its value explicitly to `null`.\n\nKnown metadata keys:\n- `CONTENT_EDITOR2_ENABLED` *(boolean)* — enables the new content editor\n- `DOT_STYLE_EDITOR_SCHEMA` *(JSON string)* — Style Editor schema definition","operationId":"updateContentTypeMetadata","parameters":[{"name":"idOrVar","in":"path","description":"The ID or Velocity variable name of the Content Type to update.\n\nExample value: `htmlpageasset` (Default page content type)","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"A flat JSON object whose keys are merged into the Content Type's existing metadata. Set a key's value to `null` to remove it. An absent or empty body is treated as a no-op — the current metadata is returned unchanged with HTTP 200.","content":{"application/json":{"schema":{"type":"object","description":"Metadata key/value pairs to merge"},"example":{"DOT_STYLE_EDITOR_SCHEMA":"{\"contentType\":\"htmlpageasset\",\"sections\":[{\"title\":\"New Section\",\"fields\":[{\"type\":\"dropdown\",\"label\":\"Color\",\"id\":\"color\",\"config\":{\"options\":[{\"label\":\"Red\",\"value\":\"red\"}]}}]}]}"}}}},"responses":{"200":{"description":"Metadata updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityContentTypeDetailView"}}}},"400":{"description":"Bad request — invalid JSON body"},"401":{"description":"User not authenticated"},"403":{"description":"User does not have permission to edit this Content Type"},"404":{"description":"Content Type not found"},"500":{"description":"Internal server error"}}}},"/api/v1/contenttype/{typeId}/fields":{"get":{"tags":["Content Type Field"],"summary":"Get content type fields (deprecated)","description":"Retrieves all fields for a specific content type. Use v2 API instead for new implementations.","operationId":"getContentTypeFieldsV1","parameters":[{"name":"typeId","in":"path","description":"Content type ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Fields retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityListMapView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"Content type not found","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}},"deprecated":true},"put":{"tags":["Content Type Field"],"summary":"Update content type fields (deprecated)","description":"Updates multiple fields for a content type. Use v2 API instead.","operationId":"updateContentTypeFieldsV1","parameters":[{"name":"typeId","in":"path","description":"Content type ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Array of field objects to save on the content type.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContentTypeFieldView"}}}},"required":true},"responses":{"200":{"description":"Fields updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityListMapView"}}}},"400":{"description":"Bad request - invalid field data","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"Not found - content type not found","content":{"application/json":{}}}},"deprecated":true},"post":{"tags":["Content Type Field"],"summary":"Create content type field (deprecated)","description":"Creates a new field for a content type. Use v2 API instead.","operationId":"createContentTypeFieldV1","parameters":[{"name":"typeId","in":"path","description":"Content type ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"A SINGLE field object to create on the content type. This endpoint creates exactly one field: if you pass a JSON array, only the first element is saved (it returns 200 and silently drops the rest). To add multiple fields at once, use PUT /api/v1/contenttype/{typeId}/fields (which takes an array), or include them inline as the 'fields' array when creating the content type via POST /api/v1/contenttype.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentTypeFieldView"}}},"required":true},"responses":{"200":{"description":"Field created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapStringObjectView"}}}},"400":{"description":"Bad request - invalid field data","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"Not found - content type not found","content":{"application/json":{}}}},"deprecated":true},"delete":{"tags":["Content Type Field"],"summary":"Delete multiple fields (deprecated)","description":"Deletes multiple fields from a content type by their field IDs. Use v2 API instead for new implementations.","operationId":"deleteContentTypeFieldsV1","parameters":[{"name":"typeId","in":"path","description":"Content type ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Array of field IDs to delete","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}},"required":true},"responses":{"200":{"description":"Fields deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapView"}}}},"400":{"description":"Bad request - invalid field IDs","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"Content type or one or more fields not found","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}},"deprecated":true}},"/api/v1/contenttype/{typeId}/fields/id/{fieldId}":{"get":{"tags":["Content Type Field"],"summary":"Get content type field by ID (deprecated)","description":"Retrieves a specific field from a content type by its unique field ID. Use v2 API instead for new implementations.","operationId":"getContentTypeFieldByIdV1","parameters":[{"name":"typeId","in":"path","description":"Content type ID","required":true,"schema":{"type":"string"}},{"name":"fieldId","in":"path","description":"Field ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Field retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapStringObjectView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"Content type or field not found","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}},"deprecated":true},"put":{"tags":["Content Type Field"],"summary":"Update content type field by ID (deprecated)","description":"Updates a specific field in a content type by its field ID. Use v2 API instead for new implementations.","operationId":"updateContentTypeFieldByIdV1","parameters":[{"name":"typeId","in":"path","description":"Content type ID","required":true,"schema":{"type":"string"}},{"name":"fieldId","in":"path","description":"Field ID to update","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Field JSON data with updates","content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"description":"Field updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapStringObjectView"}}}},"400":{"description":"Bad request - invalid field data or missing field ID","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"Content type or field not found","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}},"deprecated":true},"delete":{"tags":["Content Type Field"],"summary":"Delete content type field by ID (deprecated)","description":"Deletes a specific field from a content type by its field ID. Use v2 API instead for new implementations.","operationId":"deleteContentTypeFieldByIdV1","parameters":[{"name":"typeId","in":"path","description":"Content type ID","required":true,"schema":{"type":"string"}},{"name":"fieldId","in":"path","description":"Field ID to delete","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Field deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"Content type or field not found","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}},"deprecated":true}},"/api/v1/contenttype/{typeId}/fields/var/{fieldVar}":{"get":{"tags":["Content Type Field"],"summary":"Get content type field by variable name (deprecated)","description":"Retrieves a specific field from a content type by its variable name. Use v2 API instead for new implementations.","operationId":"getContentTypeFieldByVariableV1","parameters":[{"name":"typeId","in":"path","description":"Content type ID","required":true,"schema":{"type":"string"}},{"name":"fieldVar","in":"path","description":"Field variable name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Field retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapStringObjectView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"Content type or field not found","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}},"deprecated":true},"put":{"tags":["Content Type Field"],"summary":"Update content type field by variable name (deprecated)","description":"Updates a specific field in a content type by its variable name. Use v2 API instead for new implementations.","operationId":"updateContentTypeFieldByVariableV1","parameters":[{"name":"typeId","in":"path","description":"Content type ID","required":true,"schema":{"type":"string"}},{"name":"fieldVar","in":"path","description":"Field variable name to update","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Field JSON data with updates","content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"description":"Field updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapStringObjectView"}}}},"400":{"description":"Bad request - invalid field data","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"Content type or field not found","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}},"deprecated":true},"delete":{"tags":["Content Type Field"],"summary":"Delete content type field by variable name (deprecated)","description":"Deletes a specific field from a content type by its variable name. Use v2 API instead for new implementations.","operationId":"deleteContentTypeFieldByVariableV1","parameters":[{"name":"typeId","in":"path","description":"Content type ID","required":true,"schema":{"type":"string"}},{"name":"fieldVar","in":"path","description":"Field variable name to delete","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Field deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"Content type or field not found","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}},"deprecated":true}},"/api/v1/contenttype/{typeId}/fields/id/{fieldId}/variables":{"get":{"tags":["Content Type Field"],"summary":"Get field variables by field ID","description":"Retrieves all field variables for a specific field identified by its ID","operationId":"getFieldVariablesByFieldId","parameters":[{"name":"typeId","in":"path","description":"Content type ID","required":true,"schema":{"type":"string"}},{"name":"fieldId","in":"path","description":"Field ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Field variables retrieved successfully","content":{"application/json":{}}},"404":{"description":"Not found - field not found","content":{"application/json":{}}}}},"post":{"tags":["Content Type Field"],"summary":"Create field variable by field ID","description":"Creates a new field variable for a specific field identified by its ID","operationId":"createFieldVariableByFieldId","parameters":[{"name":"typeId","in":"path","description":"Content type ID","required":true,"schema":{"type":"string"}},{"name":"fieldId","in":"path","description":"Field ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Field variable data","content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"description":"Field variable created successfully","content":{"application/json":{}}},"400":{"description":"Bad request - invalid field variable data","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"Not found - field not found","content":{"application/json":{}}}}}},"/api/v1/contenttype/{typeId}/fields/var/{fieldVar}/variables":{"get":{"tags":["Content Type Field"],"summary":"Get field variables by field variable name","description":"Retrieves all field variables for a specific field identified by its velocity variable name","operationId":"getFieldVariablesByFieldVar","parameters":[{"name":"typeId","in":"path","description":"Content type ID","required":true,"schema":{"type":"string"}},{"name":"fieldVar","in":"path","description":"Field velocity variable name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Field variables retrieved successfully","content":{"application/json":{}}},"404":{"description":"Not found - field not found","content":{"application/json":{}}}}},"post":{"tags":["Content Type Field"],"summary":"Create field variable by field variable name","description":"Creates a new field variable for a specific field identified by its velocity variable name","operationId":"createFieldVariableByFieldVar","parameters":[{"name":"typeId","in":"path","description":"Content type ID","required":true,"schema":{"type":"string"}},{"name":"fieldVar","in":"path","description":"Field velocity variable name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Field variable data","content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"description":"Field variable created successfully","content":{"application/json":{}}},"400":{"description":"Bad request - invalid field variable data","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"Not found - field not found","content":{"application/json":{}}}}}},"/api/v1/contenttype/{typeId}/fields/id/{fieldId}/variables/id/{fieldVarId}":{"get":{"tags":["Content Type Field"],"summary":"Get specific field variable by field ID","description":"Retrieves a specific field variable by field ID and variable ID","operationId":"getFieldVariableByFieldId","parameters":[{"name":"typeId","in":"path","description":"Content type ID","required":true,"schema":{"type":"string"}},{"name":"fieldId","in":"path","description":"Field ID","required":true,"schema":{"type":"string"}},{"name":"fieldVarId","in":"path","description":"Field variable ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Field variable retrieved successfully","content":{"application/json":{}}},"404":{"description":"Not found - field or field variable not found","content":{"application/json":{}}}}},"put":{"tags":["Content Type Field"],"summary":"Update field variable by field ID","description":"Updates an existing field variable for a specific field identified by its ID","operationId":"updateFieldVariableByFieldId","parameters":[{"name":"typeId","in":"path","description":"Content type ID","required":true,"schema":{"type":"string"}},{"name":"fieldId","in":"path","description":"Field ID","required":true,"schema":{"type":"string"}},{"name":"fieldVarId","in":"path","description":"Field variable ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Updated field variable data","content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"description":"Field variable updated successfully","content":{"application/json":{}}},"400":{"description":"Bad request - invalid field variable data","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"Not found - field or field variable not found","content":{"application/json":{}}}}},"delete":{"tags":["Content Type Field"],"summary":"Delete field variable by field ID","description":"Deletes a specific field variable for a field identified by its ID","operationId":"deleteFieldVariableByFieldId","parameters":[{"name":"typeId","in":"path","description":"Content type ID","required":true,"schema":{"type":"string"}},{"name":"fieldId","in":"path","description":"Field ID","required":true,"schema":{"type":"string"}},{"name":"fieldVarId","in":"path","description":"Field variable ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Field variable deleted successfully","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"Not found - field or field variable not found","content":{"application/json":{}}}}}},"/api/v1/contenttype/{typeId}/fields/var/{fieldVar}/variables/id/{fieldVarId}":{"get":{"tags":["Content Type Field"],"summary":"Get specific field variable by field variable name","description":"Retrieves a specific field variable by field velocity variable name and variable ID","operationId":"getFieldVariableByFieldVar","parameters":[{"name":"typeId","in":"path","description":"Content type ID","required":true,"schema":{"type":"string"}},{"name":"fieldVar","in":"path","description":"Field velocity variable name","required":true,"schema":{"type":"string"}},{"name":"fieldVarId","in":"path","description":"Field variable ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Field variable retrieved successfully","content":{"application/json":{}}},"404":{"description":"Not found - field or field variable not found","content":{"application/json":{}}}}},"put":{"tags":["Content Type Field"],"summary":"Update field variable by field variable name","description":"Updates an existing field variable for a specific field identified by its velocity variable name","operationId":"updateFieldVariableByFieldVar","parameters":[{"name":"typeId","in":"path","description":"Content type ID","required":true,"schema":{"type":"string"}},{"name":"fieldVar","in":"path","description":"Field velocity variable name","required":true,"schema":{"type":"string"}},{"name":"fieldVarId","in":"path","description":"Field variable ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Updated field variable data","content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"description":"Field variable updated successfully","content":{"application/json":{}}},"400":{"description":"Bad request - invalid field variable data","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"Not found - field or field variable not found","content":{"application/json":{}}}}},"delete":{"tags":["Content Type Field"],"summary":"Delete field variable by field variable name","description":"Deletes a specific field variable for a field identified by its velocity variable name","operationId":"deleteFieldVariableByFieldVar","parameters":[{"name":"typeId","in":"path","description":"Content type ID","required":true,"schema":{"type":"string"}},{"name":"fieldVar","in":"path","description":"Field velocity variable name","required":true,"schema":{"type":"string"}},{"name":"fieldVarId","in":"path","description":"Field variable ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Field variable deleted successfully","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"Not found - field or field variable not found","content":{"application/json":{}}}}}},"/api/v1/ema":{"get":{"tags":["Apps"],"operationId":"getDetails","responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/ws/v1/system/events":{"get":{"tags":["Administration"],"operationId":"getEvents","parameters":[{"name":"lastcallback","in":"query","schema":{"type":"integer","format":"int64"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/ws/v1/system/syncevents":{"get":{"tags":["Administration"],"operationId":"getSyncEvents","parameters":[{"name":"lastcallback","in":"query","schema":{"type":"integer","format":"int64"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/experiments/{experimentId}/variants":{"post":{"tags":["Experiment"],"operationId":"addVariant","parameters":[{"name":"experimentId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddVariantForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}}}}}}},"/api/v1/experiments/{experimentId}/_archive":{"put":{"tags":["Experiment"],"operationId":"archive","parameters":[{"name":"experimentId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityExperimentView"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntityExperimentView"}}}}}}},"/api/v1/experiments/scheduled/{experimentId}/_cancel":{"post":{"tags":["Experiment"],"operationId":"cancel","parameters":[{"name":"experimentId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}}}}}}},"/api/v1/experiments":{"get":{"tags":["Experiment"],"operationId":"list","parameters":[{"name":"pageId","in":"query","schema":{"type":"string"}},{"name":"name","in":"query","schema":{"type":"string"}},{"name":"status","in":"query","schema":{"uniqueItems":true,"type":"array","items":{"type":"string","enum":["RUNNING","SCHEDULED","ENDED","DRAFT","ARCHIVED"]}}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityExperimentView"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntityExperimentView"}}}}}},"post":{"tags":["Experiment"],"operationId":"create_2","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/ExperimentForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}}}}}}},"/api/v1/experiments/{experimentId}":{"delete":{"tags":["Experiment"],"operationId":"delete_6","parameters":[{"name":"experimentId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityViewString"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntityViewString"}}}}}},"patch":{"tags":["Experiment"],"operationId":"update_2","parameters":[{"name":"experimentId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/ExperimentForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}}}}}}},"/api/v1/experiments/{experimentId}/goals/primary":{"delete":{"tags":["Experiment"],"operationId":"deleteGoal","parameters":[{"name":"experimentId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}}}}}}},"/api/v1/experiments/{experimentId}/targetingConditions/{id}":{"delete":{"tags":["Experiment"],"operationId":"deleteTargetingCondition","parameters":[{"name":"experimentId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}}}}}}},"/api/v1/experiments/{experimentId}/variants/{name}":{"put":{"tags":["Experiment"],"operationId":"updateVariant","parameters":[{"name":"experimentId","in":"path","required":true,"schema":{"type":"string"}},{"name":"name","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentVariantForm"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ExperimentVariantForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}}}}}},"delete":{"tags":["Experiment"],"operationId":"deleteVariant","parameters":[{"name":"experimentId","in":"path","required":true,"schema":{"type":"string"}},{"name":"name","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}}}}}}},"/api/v1/experiments/{experimentId}/_end":{"post":{"tags":["Experiment"],"operationId":"end","parameters":[{"name":"experimentId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}}}}}}},"/api/v1/experiments/{id}":{"get":{"tags":["Experiment"],"operationId":"get_3","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}}}}}}},"/api/v1/experiments/{id}/results":{"get":{"tags":["Experiment"],"operationId":"getResult","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityExperimentResults"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntityExperimentResults"}}}}}}},"/api/v1/experiments/health":{"get":{"tags":["Experiment"],"operationId":"healthcheck","responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityView"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntityView"}}}}}}},"/api/v1/experiments/isUserIncluded":{"post":{"tags":["Experiment"],"operationId":"isUserIncluded","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExcludedExperimentListForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityExperimentSelectedView"}}}}}}},"/api/v1/experiments/{experimentId}/variants/{name}/_promote":{"put":{"tags":["Experiment"],"operationId":"promoteVariant","parameters":[{"name":"experimentId","in":"path","required":true,"schema":{"type":"string"}},{"name":"name","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentVariantForm"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ExperimentVariantForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}}}}}}},"/api/v1/experiments/{experimentId}/_start":{"post":{"tags":["Experiment"],"operationId":"start","parameters":[{"name":"experimentId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntitySingleExperimentView"}}}}}}},"/api/v1/content/fileassets/{inode}/resourcelink":{"get":{"tags":["File Assets"],"operationId":"findResourceLink_1","parameters":[{"name":"inode","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json;charset=UTF-8":{}}}}}},"/api/v1/folder/createfolders/{siteName}":{"post":{"tags":["Folders"],"summary":"Create folders by paths on a site","description":"Creates one or more folders on the specified site. The request body is a raw JSON array of folder paths (e.g., [\"/path1\", \"/path2/subpath\"]). Nested paths will create intermediate folders as needed.","operationId":"createFoldersBySiteName","parameters":[{"name":"siteName","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"responses":{"200":{"description":"Folders created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityListView"}}}},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"404":{"description":"Site not found"}}}},"/api/v1/folder/{siteName}":{"delete":{"tags":["Folders"],"summary":"Delete one or more path for a site","description":"Delete one or more path for a site if they exist","operationId":"deleteFoldersBySiteName","parameters":[{"name":"siteName","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"responses":{"200":{"description":"Folders deleted successfully","content":{"application/json":{"example":{"entity":["/folder-1/folder-2/target-folder"],"errors":[],"i18nMessagesMap":{},"messages":[],"pagination":null,"permissions":[]}}}},"401":{"description":"Unauthorized access"},"404":{"description":"Folders not found"},"403":{"description":"Insufficient permissions to delete folders"}}}},"/api/v1/folder/{folderId}":{"get":{"tags":["Folders"],"summary":"Find a folder by ID","description":"Retrieves a folder by its identifier. Returns 404 if the folder does not exist.","operationId":"findFolderById","parameters":[{"name":"folderId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Folder retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityFolderView"}}}},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"404":{"description":"Folder not found"}}}},"/api/v1/folder/byPath":{"post":{"tags":["Folders"],"summary":"Find subfolders by path (deprecated)","description":"Retrieves subfolders of a given path, filtered by the path sent. This endpoint is deprecated — use GET /api/v1/folder/search instead.","operationId":"findSubFoldersByPath","parameters":[{"name":"offset","in":"query","description":"Number of results to skip for pagination. Must be >= 0.","schema":{"type":"integer","format":"int32","default":0}},{"name":"limit","in":"query","description":"Maximum number of results to return. Default 40. Use -1 for unlimited (capped at 10000 as a safety limit).","schema":{"type":"integer","format":"int32","default":40}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/SearchByPathForm"}}}},"responses":{"200":{"description":"Subfolders retrieved successfully (deprecated endpoint)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityFolderSearchResultView"}}}},"400":{"description":"Path property must be sent"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"404":{"description":"Site not found"}},"deprecated":true}},"/api/v1/folder/siteId/{siteId}/path/{path}":{"get":{"tags":["Folders"],"summary":"Load folder and subfolders by path","description":"Finds a folder by the given path within the specified site and returns the folder along with all its subfolders, respecting the user's permissions.","operationId":"loadFolderAndSubFoldersByPath","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"path","in":"path","required":true,"schema":{"pattern":".+","type":"string"}}],"responses":{"200":{"description":"Folder and subfolders retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityFolderWithSubfoldersView"}}}},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"404":{"description":"Folder not found"}}}},"/api/v1/folder/sitename/{siteName}/uri/{uri}":{"get":{"tags":["Folders"],"summary":"Load a folder by site name and URI","description":"Retrieves a folder by its URI path within the specified site.","operationId":"loadFolderByURI","parameters":[{"name":"siteName","in":"path","description":"Site hostname the folder lives on (e.g. 'demo.dotcms.com').","required":true,"schema":{"type":"string"}},{"name":"uri","in":"path","description":"Folder path within the site, as a plain path — e.g. 'application/themes/travel' (a leading slash is optional and added if missing). Embedded slashes are allowed (they select nested folders). Pass the raw path; do NOT percent-encode the slashes (a pre-encoded '%2F...' will not match).","required":true,"schema":{"pattern":".+","type":"string"}}],"responses":{"200":{"description":"Folder retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityFolderView"}}}},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"404":{"description":"Folder not found"}}}},"/api/v1/folder/search":{"get":{"tags":["Folders"],"summary":"Search folders","description":"Returns folders within a site matching an optional name filter and/or path scope. Supports recursive depth control, standard pagination, and sorting. With no 'name' and default path '/' + recursive=true, all site folders are returned. Each folder carries the detail fields a folder-edit form needs (title, sortOrder, filesMasks, defaultFileType, showOnMenu, defaultBaseType). Set 'includePermissions=true' to also receive the permission types the requesting user holds on each folder; that flag caps 'perPage' (see the parameter description).","operationId":"searchFolders","parameters":[{"name":"name","in":"query","description":"Optional case-insensitive partial match on folder name (minimum 2 characters when provided)","schema":{"type":"string"}},{"name":"path","in":"query","description":"Path scope for the search. Defaults to '/' (site root).","schema":{"type":"string","default":"/"}},{"name":"recursive","in":"query","description":"false = direct children of 'path' only (default); true = search all descendants","schema":{"type":"boolean","default":false}},{"name":"siteId","in":"query","description":"Site ID to scope the search (required)","schema":{"type":"string"}},{"name":"orderby","in":"query","description":"Column to sort by.","schema":{"type":"string","enum":["name","mod_date"],"default":"name"}},{"name":"direction","in":"query","description":"Sort direction","schema":{"type":"string","enum":["ASC","DESC"],"default":"ASC"}},{"name":"page","in":"query","description":"Page number (1-based, default 1)","schema":{"type":"integer","format":"int32","default":1}},{"name":"per_page","in":"query","description":"Number of results per page (default 40)","schema":{"type":"integer","format":"int32","default":40}},{"name":"includePermissions","in":"query","description":"When true, each returned folder includes a 'permissions' array with the permission types the requesting user holds on it (READ, EDIT, PUBLISH, EDIT_PERMISSIONS, CAN_ADD_CHILDREN). When false (the default) 'permissions' is null — meaning 'not requested', which is not the same as an empty array ('requested, no grants'). Because permissions are resolved per page, enabling this flag caps 'perPage' at the value of the 'content.drive.folder.search.permissions.max.per.page' configuration property (default 200); a larger 'perPage' is rejected with a 400.","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Paginated list of matching folders","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityFolderSearchView"}}}},"400":{"description":"'siteId' is required; 'name' must be at least 2 characters if provided; 'perPage' exceeds the maximum allowed when 'includePermissions' is true"},"401":{"description":"User is not authenticated"},"500":{"description":"Internal server error"}}}},"/api/v1/folder/{id}/file-browser-selected":{"put":{"tags":["Folders"],"summary":"Select folder in file browser","description":"Marks a folder as the currently selected folder in the file browser session.","operationId":"selectFolderInFileBrowser","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Folder selected successfully"},"401":{"description":"Authentication required"}}}},"/api/v1/form/{idOrVar}/successCallback":{"get":{"tags":["Forms"],"operationId":"getSuccessCallbackFunction","parameters":[{"name":"idOrVar","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/javascript":{}}}}}},"/api/v1/health/check/{checkName}":{"get":{"tags":["Health"],"summary":"Get specific health check result","description":"Returns the result of a specific health check identified by name. Useful for monitoring individual components or debugging specific health issues.","operationId":"getHealthCheck","parameters":[{"name":"checkName","in":"path","description":"Name of the health check to retrieve","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully retrieved health check result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityView"}}}},"403":{"description":"Forbidden - Authentication required"},"404":{"description":"Health check not found"},"500":{"description":"Internal Server Error"}}}},"/api/v1/health/checks":{"get":{"tags":["Health"],"summary":"Get all health check names","description":"Returns a list of all registered health check names. Useful for discovering available health checks and building monitoring interfaces.","operationId":"getHealthCheckNames","responses":{"200":{"description":"Successfully retrieved health check names","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityView"}}}},"403":{"description":"Forbidden - Authentication required"},"500":{"description":"Internal Server Error"}}}},"/api/v1/health/liveness":{"get":{"tags":["Health"],"summary":"Get liveness health status","description":"Returns liveness health checks suitable for application dashboards. This endpoint provides detailed JSON information about critical system components required for the application to be considered alive.","operationId":"getLivenessHealth","responses":{"200":{"description":"Successfully retrieved liveness health status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityView"}}}},"403":{"description":"Forbidden - Authentication required"},"500":{"description":"Internal Server Error"}}}},"/api/v1/health":{"get":{"tags":["Health"],"summary":"Get overall health status","description":"Returns comprehensive health status including all registered health checks. Authentication requirements are controlled by the health.detailed.authentication.required configuration property.","operationId":"getOverallHealth","responses":{"200":{"description":"Successfully retrieved overall health status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityView"}}}},"403":{"description":"Forbidden - Authentication required"},"500":{"description":"Internal Server Error"}}}},"/api/v1/health/readiness":{"get":{"tags":["Health"],"summary":"Get readiness health status","description":"Returns readiness health checks to determine if the application is ready to receive traffic. This endpoint provides detailed JSON information about system components required for the application to be considered ready to serve requests.","operationId":"getReadinessHealth","responses":{"200":{"description":"Successfully retrieved readiness health status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityView"}}}},"500":{"description":"Internal Server Error"}}}},"/api/v1/health/status":{"get":{"tags":["Health"],"summary":"Get system status summary","description":"Returns a simple boolean summary of system health status with alive and ready flags. Provides a quick overview of system health without detailed check information.","operationId":"getSystemStatus","responses":{"200":{"description":"Successfully retrieved system status summary","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityView"}}}},"403":{"description":"Forbidden - Authentication required"},"500":{"description":"Internal Server Error"}}}},"/api/v1/health/refresh/{checkName}":{"post":{"tags":["Health"],"summary":"Force refresh a specific health check","description":"Triggers an immediate refresh of a specific health check identified by name, bypassing any caching mechanisms. Useful for testing individual components or getting up-to-date status after targeted maintenance.","operationId":"refreshHealthCheck","parameters":[{"name":"checkName","in":"path","description":"Name of the health check to refresh","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully refreshed the health check","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityView"}}}},"403":{"description":"Forbidden - Authentication required"},"404":{"description":"Health check not found"},"500":{"description":"Internal Server Error"}}}},"/api/v1/health/refresh":{"post":{"tags":["Health"],"summary":"Force refresh all health checks","description":"Triggers an immediate refresh of all registered health checks, bypassing any caching mechanisms. Useful for getting up-to-date health status after configuration changes or system maintenance.","operationId":"refreshHealthChecks","responses":{"200":{"description":"Successfully triggered health checks refresh","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityView"}}}},"403":{"description":"Forbidden - Authentication required"},"500":{"description":"Internal Server Error"}}}},"/api/v1/esindex/activate/{params}":{"put":{"tags":["Search Index"],"operationId":"activateIndex","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"*/*":{}}}},"deprecated":true}},"/api/v1/esindex/clear/{params}":{"put":{"tags":["Search Index"],"operationId":"clearIndex","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"*/*":{}}}},"deprecated":true}},"/api/v1/esindex/close/{params}":{"put":{"tags":["Search Index"],"operationId":"closeIndex","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"*/*":{}}}},"deprecated":true}},"/api/v1/esindex/create/{params}":{"put":{"tags":["Search Index"],"operationId":"createIndex","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"text/plain":{}}}},"deprecated":true}},"/api/v1/esindex/deactivate/{params}":{"put":{"tags":["Search Index"],"operationId":"deactivateIndex","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"*/*":{}}}},"deprecated":true}},"/api/v1/esindex/failed":{"get":{"tags":["Search Index"],"operationId":"downloadRemainingRecordsAsCsv","responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"delete":{"tags":["Search Index"],"operationId":"deleteFailedRecords","responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/esindex/{indexName}":{"put":{"tags":["Search Index"],"operationId":"modIndex","parameters":[{"name":"indexName","in":"path","required":true,"schema":{"pattern":".*","type":"string"}},{"name":"action","in":"query","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"delete":{"tags":["Search Index"],"operationId":"deleteIndex","parameters":[{"name":"indexName","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/esindex/cache":{"delete":{"tags":["Search Index"],"operationId":"flushIndiciesCache","responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/esindex/active/{params}":{"get":{"tags":["Search Index"],"operationId":"getActive","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"text/plain":{}}}},"deprecated":true}},"/api/v1/esindex/cluster":{"get":{"tags":["Search Index"],"operationId":"getClusterStats","responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/esindex":{"get":{"tags":["Search Index"],"operationId":"getIndexStatus","responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/esindex/reindex":{"get":{"tags":["Search Index"],"operationId":"getReindexationProgress","responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"post":{"tags":["Search Index"],"operationId":"startReindex","parameters":[{"name":"contentType","in":"query","schema":{"type":"string","default":"DOTALL"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"delete":{"tags":["Search Index"],"operationId":"stopReindexation","parameters":[{"name":"switch","in":"query","schema":{"type":"boolean","default":true}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/esindex/indexlist/{params}":{"get":{"tags":["Search Index"],"operationId":"indexList","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/esindex/open/{params}":{"put":{"tags":["Search Index"],"operationId":"openIndex","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"*/*":{}}}},"deprecated":true}},"/api/v1/esindex/optimize":{"post":{"tags":["Search Index"],"operationId":"optimizeIndices","responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/jobs/abandoned":{"get":{"tags":["Job Queue"],"summary":"Retrieves abandoned jobs","description":"Fetches a paginated list of abandoned jobs. Results can be paginated using query parameters.","operationId":"getAbandonedJobs","parameters":[{"name":"page","in":"query","description":"Page number to retrieve (1-based indexing).","schema":{"type":"integer","format":"int32","default":1}},{"name":"pageSize","in":"query","description":"Number of records per page.","schema":{"type":"integer","format":"int32","default":20}}],"responses":{"200":{"description":"Successfully retrieved the paginated list of abandoned jobs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityJobPaginatedResultView"}}}},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User does not have necessary permissions to view jobs."},"500":{"description":"Internal Server Error: An unexpected error occurred while retrieving jobs."}}}},"/api/v1/jobs/active":{"get":{"tags":["Job Queue"],"summary":"Retrieves active jobs","description":"Fetches a paginated list of active jobs. Results can be paginated using query parameters.","operationId":"getActiveJobs","parameters":[{"name":"page","in":"query","description":"Page number to retrieve (1-based indexing).","schema":{"type":"integer","format":"int32","default":1}},{"name":"pageSize","in":"query","description":"Number of records per page.","schema":{"type":"integer","format":"int32","default":20}}],"responses":{"200":{"description":"Successfully retrieved the paginated list of active jobs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityJobPaginatedResultView"}}}},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User does not have necessary permissions to view jobs."},"500":{"description":"Internal Server Error: An unexpected error occurred while retrieving jobs."}}}},"/api/v1/jobs/{queueName}/active":{"get":{"tags":["Job Queue"],"summary":"Retrieves active jobs in a queue","description":"Fetches a paginated list of active jobs. Results can be paginated using query parameters.for the specified queue.","operationId":"getActiveJobsByQueue","parameters":[{"name":"queueName","in":"path","description":"Logical name of the queue.","required":true,"schema":{"type":"string","example":"image-processing"}},{"name":"page","in":"query","description":"Page number to retrieve (1-based indexing).","schema":{"type":"integer","format":"int32","default":1}},{"name":"pageSize","in":"query","description":"Number of records per page.","schema":{"type":"integer","format":"int32","default":20}}],"responses":{"200":{"description":"Successfully retrieved active jobs for the queue.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityJobPaginatedResultView"}}}},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User does not have permission to view jobs in this queue."},"404":{"description":"Not Found: Queue with the specified name does not exist."},"500":{"description":"Internal Server Error: An unexpected error occurred while retrieving jobs."}}}},"/api/v1/jobs/{jobId}/cancel":{"post":{"tags":["Job Queue"],"summary":"Cancel a job","description":"Sends an asynchronous cancellation request for the specified job. The job may still complete if it has already finished or cannot be interrupted.","operationId":"cancelJobQueueJob","parameters":[{"name":"jobId","in":"path","description":"Unique identifier (UUID) of the job to cancel.","required":true,"schema":{"type":"string","format":"uuid","example":"e6d9bae8-657b-4e2f-8524-c0222db66355"}}],"responses":{"200":{"description":"Cancellation request accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"},"example":{"entity":"Cancellation request successfully sent to job e6d9bae8-657b-4e2f-8524-c0222db66355"}}}},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User does not have permission to cancel this job."},"404":{"description":"Not Found: Job with the specified ID does not exist or is already completed/cancelled."},"500":{"description":"Internal Server Error: An unexpected error occurred while attempting to cancel the job."}}}},"/api/v1/jobs/canceled":{"get":{"tags":["Job Queue"],"summary":"Retrieves canceled jobs","description":"Fetches a paginated list of canceled jobs. Results can be paginated using query parameters.","operationId":"getCanceledJobs","parameters":[{"name":"page","in":"query","description":"Page number to retrieve (1-based indexing).","schema":{"type":"integer","format":"int32","default":1}},{"name":"pageSize","in":"query","description":"Number of records per page.","schema":{"type":"integer","format":"int32","default":20}}],"responses":{"200":{"description":"Successfully retrieved the paginated list of canceled jobs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityJobPaginatedResultView"}}}},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User lacks permission to view jobs."},"500":{"description":"Internal Server Error: An unexpected error occurred while retrieving jobs."}}}},"/api/v1/jobs/completed":{"get":{"tags":["Job Queue"],"summary":"Retrieves completed jobs","description":"Fetches a paginated list of completed jobs. Results can be paginated using query parameters.","operationId":"getCompletedJobs","parameters":[{"name":"page","in":"query","description":"Page number to retrieve (1-based indexing).","schema":{"type":"integer","format":"int32","default":1}},{"name":"pageSize","in":"query","description":"Number of records per page.","schema":{"type":"integer","format":"int32","default":20}}],"responses":{"200":{"description":"Successfully retrieved the paginated list of completed jobs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityJobPaginatedResultView"}}}},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User does not have necessary permissions to view jobs."},"500":{"description":"Internal Server Error: An unexpected error occurred while retrieving jobs."}}}},"/api/v1/jobs/{queueName}/upload":{"post":{"tags":["Job Queue"],"summary":"Creates a new job with form data","description":"Creates and queues a new background job with multipart form data parameters. Returns the job ID and initial status information.","operationId":"createJobWithFormData","parameters":[{"name":"queueName","in":"path","description":"Name of the job queue to submit to","required":true,"schema":{"type":"string","example":"image-processing"}}],"requestBody":{"description":"This endpoint accepts a `multipart/form-data` request with two fields:\n\n| **Field** | **Type** | **Required** | **Description** |\n|-----------|----------|--------------|-----------------|\n| `file` | File | ❌ No | The file to be processed by the queue.|\n| `form` | String | ❌ No | A JSON string containing job-specific parameters.|\n\n**Example `form` value:**\n\n```json\n{\n \"contentType\":\"CustomContentType\", \"workflowActionId\":\"Workflow-UUID\", \"language\":\"en-us\", \"stopOnError\":true,\n}\n```","content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/JobParamsSchema"}}}},"responses":{"200":{"description":"Job created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityJobStatusView"},"example":{"entity":{"jobId":"e6d9bae8-657b-4e2f-8524-c0222db66355","statusUrl":"http://localhost:8080/api/v1/_import/e6d9bae8-657b-4e2f-8524-c0222db66355"},"errors":[],"i18nMessagesMap":{},"messages":[],"pagination":null,"permissions":[]}}}},"400":{"description":"Bad Request: Invalid parameters, malformed multipart payload, or file issues."},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User lacks permission to enqueue jobs in the specified queue."},"404":{"description":"Not Found: Queue with the specified name does not exist."},"500":{"description":"Internal Server Error: An unexpected error occurred while creating the job."}}}},"/api/v1/jobs/{queueName}":{"post":{"tags":["Job Queue"],"summary":"Creates a new job with JSON parameters","description":"Creates and queues a new background job with JSON parameters. Returns the job ID and initial status information.","operationId":"createJobWithJson","parameters":[{"name":"queueName","in":"path","description":"Name of the job queue to submit to","required":true,"schema":{"type":"string","example":"image-processing"}}],"requestBody":{"description":"Job parameters as JSON key-value pairs","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"required":true},"responses":{"200":{"description":"Job created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityJobStatusView"},"example":{"entity":{"jobId":"e6d9bae8-657b-4e2f-8524-c0222db66355","statusUrl":"http://localhost:8080/api/v1/_import/e6d9bae8-657b-4e2f-8524-c0222db66355"},"errors":[],"i18nMessagesMap":{},"messages":[],"pagination":null,"permissions":[]}}}},"400":{"description":"Bad Request: Invalid parameters or malformed JSON."},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User lacks permission to enqueue jobs in the specified queue."},"404":{"description":"Not Found: Queue with the specified name does not exist."},"500":{"description":"Internal Server Error: An unexpected error occurred while creating the job."}}}},"/api/v1/jobs/failed":{"get":{"tags":["Job Queue"],"summary":"Retrieves failed jobs","description":"Fetches a paginated list of failed jobs. Results can be paginated using query parameters.","operationId":"getFailedJobs","parameters":[{"name":"page","in":"query","description":"Page number to retrieve (1-based indexing).","schema":{"type":"integer","format":"int32","default":1}},{"name":"pageSize","in":"query","description":"Number of records per page.","schema":{"type":"integer","format":"int32","default":20}}],"responses":{"200":{"description":"Successfully retrieved the paginated list of failed jobs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityJobPaginatedResultView"}}}},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User does not have necessary permissions to view jobs."},"500":{"description":"Internal Server Error: An unexpected error occurred while retrieving jobs."}}}},"/api/v1/jobs/{jobId}/status":{"get":{"tags":["Job Queue"],"summary":"Retrieves job status information","description":"Returns detailed status information for a specific job including progress, state, and results.","operationId":"getJobStatus_1","parameters":[{"name":"jobId","in":"path","description":"Unique identifier (UUID) of the job.","required":true,"schema":{"type":"string","format":"uuid","example":"e6d9bae8-657b-4e2f-8524-c0222db66355"}}],"responses":{"200":{"description":"Job status retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityView"}}}},"400":{"description":"Bad request - Invalid job ID"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks required permissions"},"404":{"description":"Job not found"},"500":{"description":"Internal server error"}}}},"/api/v1/jobs/queues":{"get":{"tags":["Job Queue"],"summary":"Retrieves available job queues","description":"Returns a list of all available job queue names that can be used for submitting jobs.","operationId":"getQueues","responses":{"200":{"description":"Queues retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityView"}}}},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks required permissions"},"500":{"description":"Internal server error"}}}},"/api/v1/jobs":{"get":{"tags":["Job Queue"],"summary":"Retrieves jobs","description":"Fetches a paginated list of all jobs regardless of state. Results can be paginated using query parameters.","operationId":"listJobs","parameters":[{"name":"page","in":"query","description":"Page number to retrieve (1-based indexing).","schema":{"type":"integer","format":"int32","default":1}},{"name":"pageSize","in":"query","description":"Number of records per page.","schema":{"type":"integer","format":"int32","default":20}}],"responses":{"200":{"description":"Successfully retrieved the paginated list of jobs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityJobPaginatedResultView"}}}},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User does not have necessary permissions to view jobs."},"500":{"description":"Internal Server Error: An unexpected error occurred while retrieving jobs."}}}},"/api/v1/jobs/{jobId}/monitor":{"get":{"tags":["Job Queue"],"summary":"Monitor a job in real time","description":"Establishes a Server-Sent Events (SSE) connection to monitor the progress of a specific job in real-time. This endpoint will continuously send updates as the job progresses, including status changes and completion information.","operationId":"monitorJob","parameters":[{"name":"jobId","in":"path","description":"The unique identifier (UUID) of the job whose status is to be retrieved.","required":true,"schema":{"type":"string","format":"uuid","example":"e6d9bae8-657b-4e2f-8524-c0222db66355"}}],"responses":{"200":{"description":"Server-Sent Events stream established successfully. Events will be sent as the job progresses.","content":{"text/event-stream":{"schema":{"$ref":"#/components/schemas/EventOutput"}}}},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User does not have permissions to monitor the specified job."},"404":{"description":"Not Found: Job with the specified ID could not be found."},"500":{"description":"Internal Server Error: An unexpected error occurred while establishing the monitoring connection."}}}},"/api/v1/jobs/successful":{"get":{"tags":["Job Queue"],"summary":"Retrieves successful jobs","description":"Fetches a paginated list of successful jobs. Results can be paginated using query parameters.","operationId":"getSuccessfulJobs","parameters":[{"name":"page","in":"query","description":"Page number to retrieve (1-based).","schema":{"type":"integer","format":"int32","default":1}},{"name":"pageSize","in":"query","description":"Number of records per page.","schema":{"type":"integer","format":"int32","default":20}}],"responses":{"200":{"description":"Successfully retrieved the paginated list of successful jobs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityJobPaginatedResultView"}}}},"401":{"description":"Unauthorized: Invalid or missing user authentication."},"403":{"description":"Forbidden: User does not have necessary permissions to view jobs."},"500":{"description":"Internal Server Error: An unexpected error occurred while retrieving jobs."}}}},"/api/v1/languages/i18n":{"post":{"tags":["Language"],"summary":"Get internationalized messages","description":"Retrieves internationalized (i18n) message strings for the specified locale and message keys. The locale is determined from the request body's country and language fields. Returns a map of message keys to their translated string values.","operationId":"getI18nMessages","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/I18NForm"}}}},"responses":{"200":{"description":"Messages returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapStringStringView"}}}},"400":{"description":"Invalid request form data"},"401":{"description":"Authentication required"},"500":{"description":"Internal server error"}}}},"/api/v1/languages":{"get":{"tags":["Language"],"summary":"List all available languages","description":"Returns all configured languages in the system, keyed by language code. Each entry contains the full language details including country, language code, and display name.","operationId":"listLanguages","responses":{"200":{"description":"Languages returned successfully","content":{"application/json":{"schema":{"type":"object","description":"Map of language codes to language details (RestLanguage objects)"}}}},"401":{"description":"Authentication required"}}}},"/api/v1/jvm":{"get":{"tags":["Administration"],"operationId":"getJvmInfo","responses":{"default":{"description":"default response","content":{"application/octet-stream":{},"application/json":{}}}}}},"/api/v1/maintenance/_contentlets":{"delete":{"tags":["Maintenance"],"summary":"Bulk delete contentlets by identifier","description":"Permanently destroys contentlets and all their language siblings. Bypasses trash. Each contentlet is destroyed independently — one failure does not block others.","operationId":"deleteContentlets","requestBody":{"description":"List of contentlet identifiers to permanently destroy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteContentletsForm"}}},"required":true},"responses":{"200":{"description":"Bulk deletion completed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityDeleteContentletsResultView"}}}},"400":{"description":"Bad request - missing or empty identifiers","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - CMS Administrator role required","content":{"application/json":{}}}}}},"/api/v1/maintenance/_pushedAssets":{"delete":{"tags":["Maintenance"],"summary":"Delete all pushed assets records","description":"Deletes ALL records from the pushed assets tracking table. Clears push publishing history, making all assets appear as \"never pushed\" to all endpoints.","operationId":"deletePushedAssets","responses":{"200":{"description":"Pushed assets deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - CMS Administrator role required","content":{"application/json":{}}}}}},"/api/v1/maintenance/_systemJobs/{group}/{name}":{"delete":{"tags":["Maintenance"],"summary":"Delete a Quartz scheduler job","description":"Removes a Quartz scheduler job (and all associated triggers) from the scheduler by its group and name. Used to clean up errored or orphaned jobs after upgrades. Returns 404 if no matching job exists in the scheduler.","operationId":"deleteSystemJob","parameters":[{"name":"group","in":"path","description":"Quartz job group name","required":true,"schema":{"type":"string"}},{"name":"name","in":"path","description":"Quartz job name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Job deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySystemJobDeleteView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - CMS Administrator role and Maintenance portlet access required","content":{"application/json":{}}},"404":{"description":"No job matches the supplied group and name","content":{"application/json":{}}}}}},"/api/v1/maintenance/_downloadAssets":{"get":{"tags":["Maintenance"],"operationId":"downloadAssets","parameters":[{"name":"oldAssets","in":"query","schema":{"type":"boolean","default":true}},{"name":"maxSize","in":"query","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/octet-stream":{},"application/json":{}}}}}},"/api/v1/maintenance/_downloadClusterLog/{fileName}":{"get":{"tags":["Maintenance"],"operationId":"downloadClusterLogFile","parameters":[{"name":"fileName","in":"path","required":true,"schema":{"pattern":".+","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/octet-stream":{},"application/json":{}}}}}},"/api/v1/maintenance/_downloadDb":{"get":{"tags":["Maintenance"],"operationId":"downloadDb","responses":{"default":{"description":"default response","content":{"application/octet-stream":{},"application/json":{}}}}}},"/api/v1/maintenance/_downloadLog/{fileName}":{"get":{"tags":["Maintenance"],"operationId":"downloadLogFile","parameters":[{"name":"fileName","in":"path","required":true,"schema":{"pattern":".+","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/octet-stream":{},"application/json":{}}}}}},"/api/v1/maintenance/_downloadStarter":{"get":{"tags":["Maintenance"],"operationId":"downloadStarter","parameters":[{"name":"maxSize","in":"query","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/octet-stream":{},"application/json":{}}}}}},"/api/v1/maintenance/_downloadStarterWithAssets":{"get":{"tags":["Maintenance"],"operationId":"downloadStarterWithAssets","parameters":[{"name":"oldAssets","in":"query","schema":{"type":"boolean","default":true}},{"name":"maxSize","in":"query","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/octet-stream":{},"application/json":{}}}}}},"/api/v1/maintenance/_oldVersions":{"delete":{"tags":["Maintenance"],"summary":"Drop old asset versions","description":"Deletes all versions of versionable objects (contentlets, containers, templates, links, workflow history) older than the specified date. Can take minutes on large datasets.","operationId":"dropOldVersions","parameters":[{"name":"date","in":"query","description":"Cutoff date in yyyy-MM-dd format. Versions older than this are deleted.","required":true,"schema":{"type":"string"},"example":"2025-06-15"}],"responses":{"200":{"description":"Old versions deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityDropOldVersionsResultView"}}}},"400":{"description":"Bad request - missing or invalid date format","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - CMS Administrator role required","content":{"application/json":{}}}}}},"/api/v1/maintenance/assets/_clean":{"get":{"tags":["Maintenance"],"summary":"Get latest clean-assets job","description":"Returns the most recent clean-assets job (active, or most recently completed). Returns null entity if no clean-assets job has ever run.","operationId":"getLatestCleanAssetsJob","responses":{"200":{"description":"Latest job status","content":{"application/json":{"schema":{"type":"object","description":"ResponseEntityView wrapping the latest Job (id, state, progress, result) or null if none exists"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - CMS Administrator role required","content":{"application/json":{}}}}},"post":{"tags":["Maintenance"],"summary":"Request a clean-assets job","description":"Enqueues a clean orphan assets job on the cluster job queue. Returns immediately with {jobId, statusUrl}. Rejects with 409 Conflict if a clean-assets job is already pending or running anywhere in the cluster.","operationId":"requestCleanAssetsJob","responses":{"200":{"description":"Job enqueued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityJobStatusView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - CMS Administrator role required","content":{"application/json":{}}},"409":{"description":"Conflict - a clean-assets job is already running","content":{"application/json":{}}}}}},"/api/v1/maintenance/assets/_fix":{"get":{"tags":["Maintenance"],"summary":"Get latest fix-assets job","description":"Returns the most recent fix-assets job (active, or most recently completed). Returns null entity if no fix-assets job has ever run.","operationId":"getLatestFixAssetsJob","responses":{"200":{"description":"Latest job status","content":{"application/json":{"schema":{"type":"object","description":"ResponseEntityView wrapping the latest Job (id, state, progress, result) or null if none exists"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - CMS Administrator role required","content":{"application/json":{}}}}},"post":{"tags":["Maintenance"],"summary":"Request a fix-assets job","description":"Enqueues a fix-assets inconsistencies job on the cluster job queue. Returns immediately with {jobId, statusUrl}. Rejects with 409 Conflict if a fix-assets job is already pending or running anywhere in the cluster.","operationId":"requestFixAssetsJob","responses":{"200":{"description":"Job enqueued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityJobStatusView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - CMS Administrator role required","content":{"application/json":{}}},"409":{"description":"Conflict - a fix-assets job is already running","content":{"application/json":{}}}}}},"/api/v1/maintenance/_threads":{"get":{"tags":["Maintenance"],"summary":"JVM thread dump","description":"Returns a full JVM thread dump as structured JSON, including state, priority, stack traces, locked monitors/synchronizers, and deadlock detection. Use hideSystem=true (default) to filter to dotCMS threads only.","operationId":"getThreadDump","parameters":[{"name":"hideSystem","in":"query","description":"When true (default), only return threads with com.dotmarketing or com.dotcms frames","schema":{"type":"boolean","default":true}}],"responses":{"200":{"description":"Thread dump captured","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityThreadDumpView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - CMS Administrator role required","content":{"application/json":{}}}}}},"/api/v1/maintenance/_threads/info":{"get":{"tags":["Maintenance"],"summary":"JVM thread info","description":"Returns lightweight JVM startup and thread-count summary (start time, uptime, current and peak thread count).","operationId":"getThreadInfo","responses":{"200":{"description":"JVM thread info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityThreadSystemInfoView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - CMS Administrator role required","content":{"application/json":{}}}}}},"/api/v1/maintenance/_pgDumpAvailable":{"get":{"tags":["Maintenance"],"operationId":"isPgDumpAvailable","responses":{"default":{"description":"default response","content":{"text/plain":{}}}}}},"/api/v1/maintenance/_sessions":{"get":{"tags":["Maintenance"],"summary":"List active HTTP sessions","description":"Returns every active HTTP session tracked by SessionMonitor. Real session ids are never exposed; each entry instead carries a short HMAC-derived token that must be passed back to DELETE /v1/maintenance/_sessions/{token} to invalidate the session. The CSRF secret used to derive these tokens is stored in the caller's HTTP session and is valid for 15 minutes — re-call this endpoint to refresh.","operationId":"listSessions","responses":{"200":{"description":"List of active sessions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySessionListView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - CMS Administrator role required","content":{"application/json":{}}}}},"delete":{"tags":["Maintenance"],"summary":"Invalidate all sessions except the caller's","description":"Walks every active HTTP session tracked by SessionMonitor, skips the caller's own session, and invalidates the rest. Returns the count of invalidated sessions.","operationId":"killAllSessions","responses":{"200":{"description":"Sessions invalidated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityKillSessionsResultView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - CMS Administrator role required","content":{"application/json":{}}}}}},"/api/v1/maintenance/_sessions/{token}":{"delete":{"tags":["Maintenance"],"summary":"Invalidate a single session","description":"Invalidates the session whose HMAC-obfuscated token is supplied. The caller's own session cannot be invalidated this way. The CSRF secret must have been issued by GET /v1/maintenance/_sessions within the last 15 minutes — otherwise this endpoint returns 403 and the client must re-list to refresh.","operationId":"killSession","parameters":[{"name":"token","in":"path","description":"HMAC-obfuscated session token returned by GET /_sessions","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Session invalidated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}},"400":{"description":"Bad request - attempting to invalidate caller's own session","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - missing or expired CSRF token, or insufficient role","content":{"application/json":{}}},"404":{"description":"No active session matches the supplied token","content":{"application/json":{}}}}}},"/api/v1/maintenance/_systemJobs":{"get":{"tags":["Maintenance"],"summary":"List Quartz scheduler jobs","description":"Returns every Quartz scheduler job across all job groups, with trigger details (next fire time, misfire instruction) and current running status. Errored jobs (e.g. class not found after upgrade) are returned with an 'error' field so admins can clean them up. Note: these are Quartz scheduler jobs, NOT the JobQueueManager jobs exposed at /api/v1/jobs — those are a separate system.","operationId":"listSystemJobs","responses":{"200":{"description":"List of Quartz scheduler jobs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySystemJobListView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - CMS Administrator role and Maintenance portlet access required","content":{"application/json":{}}}}}},"/api/v1/maintenance/_searchAndReplace":{"post":{"tags":["Maintenance"],"summary":"Database-wide search and replace","description":"Performs a find/replace across text content in contentlets, containers, templates, fields, and links. Only affects working/live versions. This is a dangerous, irreversible operation. Returns 200 with hasErrors=true if some tables failed — check the response body.","operationId":"searchAndReplace","requestBody":{"description":"Search and replace parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchAndReplaceForm"}}},"required":true},"responses":{"200":{"description":"Search and replace completed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySearchAndReplaceResultView"}}}},"400":{"description":"Bad request - searchString is empty or missing","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - CMS Administrator role required","content":{"application/json":{}}}}}},"/api/v1/maintenance/_shutdown":{"delete":{"tags":["Maintenance"],"operationId":"shutdown","responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/maintenance/_shutdownCluster":{"delete":{"tags":["Maintenance"],"operationId":"shutdownCluster","parameters":[{"name":"rollingDelay","in":"query","schema":{"type":"integer","format":"int32","default":60}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/menu":{"get":{"tags":["Navigation"],"operationId":"getMenus","responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/notification/delete":{"put":{"tags":["Notifications"],"operationId":"delete_7","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/DeleteForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/notification/id/{id}":{"delete":{"tags":["Notifications"],"operationId":"delete_8","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/notification/getNewNotificationsCount":{"get":{"tags":["Notifications"],"operationId":"getNewNotificationsCount","parameters":[{"name":"params","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/notification/getNotifications/{params}":{"get":{"tags":["Notifications"],"operationId":"getNotifications","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}},{"name":"Range","in":"header","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/notification/markAsRead":{"put":{"tags":["Notifications"],"operationId":"markAsRead","responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/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"}}}},"/api/v1/nav/{uri}":{"get":{"tags":["Navigation"],"summary":"Get site navigation tree","description":"Returns the dotCMS site navigation tree starting at the given **folder** URI, up to the specified depth. Only objects marked as 'show on menu' are included. The URI must resolve to a folder — page URIs (e.g., '/index', '/about-us/team') will return 404. Use '/' to fetch the navigation tree for the site root.","operationId":"getNavigationTree","parameters":[{"name":"uri","in":"path","description":"Starting folder URI for the navigation tree (e.g., '/about-us', '/blog', or '/' for the site root). Must resolve to a folder — page URIs return 404.","required":true,"schema":{"pattern":".*","type":"string"}},{"name":"depth","in":"query","description":"Total number of levels to include, counting the starting node as level 1. depth=1 returns only the starting node with no children; depth=2 returns the node plus its direct children. Values exceeding the actual tree depth return the full subtree. Values less than 1 are treated as 1. (default: 1)","schema":{"type":"integer","format":"int32"}},{"name":"languageId","in":"query","description":"Tags each returned node with this language ID. Note: folder names are language-neutral in dotCMS and are not translated — this parameter only affects the 'languageId' attribute on each node, not the visible 'title'. Defaults to the language of the current request.","schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Navigation tree retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapView"}}}},"400":{"description":"Invalid depth or languageId parameter"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"404":{"description":"Navigation path not found"}}}},"/api/v1/page/{pageId}/content":{"post":{"tags":["Page"],"summary":"Replace the content mapping of a page","description":"Replaces all container-to-contentlet assignments for the page (DEFAULT variant, or a named variant when 'variantName' is provided). This is a full replacement, not a patch: omitting a container slot removes its content. The body is a bare JSON array of container entries; each entry maps one container instance to its ordered list of contentlets. Duplicate entries are merged automatically. To build the payload, fetch GET /api/v1/page/json/{uri} first (faster than /render — no Velocity execution): use 'page.containers' for the path-based identifier and 'page.layout.body.rows[].columns[].containers[]' for the uuid of each slot.","operationId":"addContentToPage","parameters":[{"name":"pageId","in":"path","description":"Identifier of the HTML Page to update","required":true,"schema":{"type":"string"}},{"name":"variantName","in":"query","description":"Variant name for A/B testing (defaults to DEFAULT)","schema":{"type":"string"}}],"requestBody":{"description":"Array of container entries. Full replacement: omitting a slot removes its content from the page.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PageContainerEntryView"}},"example":[{"identifier":"//demo.dotcms.com/application/containers/default/","uuid":"10","contentletsId":["7b33f0b474ba3b82c3a908b81dce5e2c"]}]}},"required":true},"responses":{"200":{"description":"Contentlets saved successfully","content":{"application/json":{"example":{"entity":[{"containerId":"some-container-id","contentletId":"some-contentlet-id","uuid":"some-uuid"},{"containerId":"other-container-id","contentletId":"other-contentlet-id","uuid":"other-uuid"}],"errors":[],"i18nMessagesMap":{},"messages":[],"pagination":null,"permissions":[]}}}},"400":{"description":"Bad request or data exception"},"409":{"description":"Conflict — net content loss exceeds the configured threshold; refresh and retry"}}}},"/api/v1/page/{pageId}/languages":{"get":{"tags":["Page"],"summary":"Check page availability by language (deprecated)","description":"Returns all available languages in dotCMS, each with a flag indicating whether the page is available in that language. This endpoint is deprecated -- use the more generic ContentResource.getExistingLanguagesForContent endpoint instead.","operationId":"checkPageLanguageVersions","parameters":[{"name":"pageId","in":"path","description":"Identifier of the HTML Page to check language versions for","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Language availability list retrieved successfully (deprecated endpoint)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityLanguagesForPageView"}}}},"401":{"description":"Authentication required"},"404":{"description":"Page not found"}},"deprecated":true}},"/api/v1/page/_check-permission":{"post":{"tags":["Page"],"summary":"Check user permission on a page","description":"Returns true if the page exists and the current user has the specified permission type over it. Supports both regular HTML pages and URL-mapped content. The permission type defaults to READ if not specified.","operationId":"checkPagePermission","requestBody":{"description":"Form with page path, host ID, language ID, and permission type to check","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PageCheckPermissionForm"}}},"required":true},"responses":{"200":{"description":"Permission check result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBooleanView"}}}},"401":{"description":"Authentication required"},"404":{"description":"Page not found at the specified path"}}}},"/api/v1/page/copyContent":{"put":{"tags":["Page"],"summary":"Copy a contentlet on a page","description":"Creates a copy of a contentlet that is part of the multi-tree on a page. The contentlet must exist and be associated with the page specified in the form. Returns the copied contentlet as a map of properties.","operationId":"copyPageContent","requestBody":{"description":"Form containing the contentlet and page information for the copy operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CopyContentletForm"}}},"required":true},"responses":{"200":{"description":"Contentlet copied successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapView"}}}},"400":{"description":"Bad request - form is required or contentlet not found"},"401":{"description":"Authentication required"},"403":{"description":"User does not have required permissions"}}}},"/api/v1/page/{pageId}/_deepcopy":{"put":{"tags":["Page"],"summary":"Deep copy a page and all its content","description":"Creates a deep copy of a page: (1) creates a copy of the page itself, and (2) for each contentlet in the multi-tree related to the page, creates a copy. Returns the copied page as a map of properties.","operationId":"deepCopyPage","parameters":[{"name":"pageId","in":"path","description":"Identifier of the HTML Page to deep copy","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Page deep copied successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapView"}}}},"401":{"description":"Authentication required"},"403":{"description":"User does not have required permissions"},"404":{"description":"Page not found"}}}},"/api/v1/page/actions":{"post":{"tags":["Page"],"summary":"Find available workflow actions for a page","description":"Returns the page data along with the list of available workflow actions for the specified page path. Supports both regular HTML pages and URL-mapped content. The response includes the page contentlet properties and the workflow actions that the current user can perform.","operationId":"findAvailablePageActions","requestBody":{"description":"Form with page path, host ID, language ID, and render mode for action lookup","content":{"*/*":{"schema":{"$ref":"#/components/schemas/FindAvailableActionsForm"}}},"required":true},"responses":{"200":{"description":"Available workflow actions retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPageWorkflowActionsView"}}}},"401":{"description":"Authentication required"},"404":{"description":"Page not found at the specified path and language"}}}},"/api/v1/page/{pageId}/content/tree":{"get":{"tags":["Page"],"summary":"Get the multi-tree content structure of a page","description":"Returns the multi-tree data associated with a page, which represents the mapping between containers, contentlets, and their positions on the page. Each entry includes the page ID, container ID, contentlet ID, relation type, tree order, personalization, and variant ID.","operationId":"getPageContentTree","parameters":[{"name":"pageId","in":"path","description":"Identifier of the HTML Page","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Content tree retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMulitreeView"}}}},"401":{"description":"Authentication required"},"403":{"description":"User does not have required permissions"},"404":{"description":"Page not found"}}}},"/api/v1/page/{pageId}/render/versions":{"get":{"tags":["Page"],"summary":"Get live and preview render versions of a page","description":"Returns the page render for both the live and preview (working) versions. Includes a boolean 'diff' flag indicating whether the live and preview versions differ.","operationId":"getPageRenderVersions","parameters":[{"name":"pageId","in":"path","description":"Identifier of the HTML Page","required":true,"schema":{"type":"string"}},{"name":"langId","in":"query","description":"Language ID (defaults to the system default language)","schema":{"type":"string"}}],"responses":{"200":{"description":"Page render versions retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPageLivePreviewVersionView"}}}},"401":{"description":"Authentication required"},"403":{"description":"User does not have required permissions"},"404":{"description":"Page not found"}}}},"/api/v1/page/types":{"get":{"tags":["Page"],"summary":"Get content types associated with pages","description":"Returns all content types associated with pages, including both the base HTMLPAGE type and all content types with URL map patterns. Results are paginated and can be filtered and sorted.","operationId":"getPageContentTypes","parameters":[{"name":"filter","in":"query","description":"Filter text for content type names","schema":{"type":"string","default":""}},{"name":"page","in":"query","description":"Page number for pagination (zero-based)","schema":{"type":"integer","format":"int32"}},{"name":"per_page","in":"query","description":"Number of results per page","schema":{"type":"integer","format":"int32"}},{"name":"orderby","in":"query","description":"Field to order results by (default: UPPER(name))","schema":{"type":"string","default":"UPPER(name)"}},{"name":"direction","in":"query","description":"Sort direction: ASC or DESC (default: ASC)","schema":{"type":"string","default":"ASC"}}],"responses":{"200":{"description":"Page content types retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPaginatedDataView"}}}},"401":{"description":"Authentication required"},"403":{"description":"User does not have required permissions"}}}},"/api/v1/page/{pageId}/personas":{"get":{"tags":["Page"],"summary":"Get personalized personas for a page","description":"Returns a paginated list of personas with a flag indicating whether each persona has been customized (personalized) on the specified page. Useful for identifying which personas have page-specific content variations.","operationId":"getPersonalizedPersonasOnPage","parameters":[{"name":"filter","in":"query","description":"Filter text to narrow persona results","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number for pagination (zero-based)","schema":{"type":"integer","format":"int32"}},{"name":"per_page","in":"query","description":"Number of results per page","schema":{"type":"integer","format":"int32"}},{"name":"orderby","in":"query","description":"Field to order results by (default: title)","schema":{"type":"string","default":"title"}},{"name":"direction","in":"query","description":"Sort direction: ASC or DESC (default: ASC)","schema":{"type":"string","default":"ASC"}},{"name":"hostId","in":"query","description":"Host identifier to scope persona lookup","schema":{"type":"string"}},{"name":"pageId","in":"path","description":"Identifier of the HTML Page","required":true,"schema":{"type":"string"}},{"name":"respectFrontEndRoles","in":"query","description":"Whether to respect front-end roles for permission checks","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Personas with personalization flags retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityListPersonalizationPersonaPageView"}}}},"401":{"description":"Authentication required"},"403":{"description":"User does not have required permissions"},"404":{"description":"Page not found"}}}},"/api/v1/page/_render-sources/{uri}":{"get":{"tags":["Page"],"summary":"Get render sources for a page","description":"Returns references only (path + identifier, no file content, no container code) mapping a rendered page to its source files. The page is identified by a URI path segment, exactly like `GET /api/v1/page/render/{uri}`.\n\nThe URI must be a plain path (e.g. `index`, `about/team`). To address a specific site, use the `host_id` query parameter.\n\nIncludes the page reference, theme VTL files, all containers referenced by the template (only content types actually placed under the applied persona/variant are included), and widget contentlets placed on the page.\n\n**Widget source field:**\nEach widget entry includes a `source` field:\n- `FILE` — the widget's Velocity lives in a file asset; `path` and `identifier` are populated. Retrieve the VTL content via `GET /api/v2/assets`.\n- `CODE` — the widget's Velocity is inline (in the content type's `widgetCode` field and/or the contentlet's own fields). No `path`/`identifier` are returned. Retrieve the content type definition via `GET /api/v1/contenttype/id/{contentTypeVar}` and the placed contentlet via `GET /api/v1/content/id/{contentletId}`.\n\n**Other source lookups:**\n- Theme folder files: `GET /api/v1/folder/sitename/{site}/uri/{uri}`\n- DB container code: `GET /api/v1/containers/working?containerId=&includeContentType=true`\n- FILE container VTL content: `GET /api/v2/assets`","operationId":"getPageRenderSources","parameters":[{"name":"uri","in":"path","description":"Page URI path (e.g. 'index' or 'about/team'). Must be a plain path without an embedded host; use host_id to target a specific site.","required":true,"schema":{"pattern":".*","type":"string"}},{"name":"host_id","in":"query","description":"Explicit host identifier; if omitted the default site is used","schema":{"type":"string"}},{"name":"language_id","in":"query","description":"Language identifier; defaults to the default language","schema":{"type":"string"}},{"name":"persona_id","in":"query","description":"Persona contentlet identifier for personalization lookup","schema":{"type":"string"}},{"name":"variantName","in":"query","description":"Variant name; defaults to DEFAULT","schema":{"type":"string"}},{"name":"mode","in":"query","description":"Page mode: EDIT_MODE, PREVIEW_MODE, LIVE; defaults to PREVIEW_MODE","schema":{"type":"string"}}],"responses":{"200":{"description":"Render sources retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPageRenderSourcesView"}}}},"400":{"description":"Invalid request parameter (e.g. an unknown mode value)"},"403":{"description":"User does not have READ permission on the page"},"404":{"description":"Page not found, wrong language, or unknown host"}}}},"/api/v1/page/json/{uri}":{"get":{"tags":["Page"],"summary":"Get page metadata as JSON by URI","description":"Returns the metadata (the objects that make up an HTML Page) in JSON format based on the specified URI. If the URI maps to a Vanity URL, a 200 Forward returns the actual page metadata, while a 301/302 redirect returns an empty page JSON with the Vanity URL properties. Supports Time Machine via the publishDate parameter (ISO 8601 format).\n\nThe URI must be a plain page path (no embedded host). To read a page on a NON-default site, pass the `host_id` query parameter (backend users only); without it the current/default site is used. The `//host/uri` path form is NOT supported.","operationId":"getPageJsonByUri","parameters":[{"name":"uri","in":"path","description":"Path to the HTML Page or Vanity URL (e.g., 'about-us/locations/index'). Must be a plain path with no embedded host; use host_id to target a specific site.","required":true,"schema":{"pattern":".*","type":"string"}},{"name":"host_id","in":"query","description":"Explicit site to read against, given as a host identifier (UUID). Backend users only; if omitted the current/default site is used.","schema":{"type":"string"}},{"name":"mode","in":"query","description":"Page mode for rendering (e.g., EDIT_MODE, PREVIEW_MODE, LIVE)","schema":{"type":"string"}},{"name":"com.dotmarketing.persona.id","in":"query","description":"Persona identifier to render the page with personalization","schema":{"type":"string"}},{"name":"language_id","in":"query","description":"Language ID for the page content","schema":{"type":"string"}},{"name":"device_inode","in":"query","description":"Device inode for responsive rendering dimensions","schema":{"type":"string"}},{"name":"publishDate","in":"query","description":"Time Machine date in ISO 8601 format to view page as it was at a specific point in time","schema":{"type":"string"}}],"responses":{"200":{"description":"Page metadata retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityEmptyPageView"}}}},"400":{"description":"Bad request"},"401":{"description":"Authentication required"},"403":{"description":"User does not have required permissions"},"404":{"description":"Page not found"}}}},"/api/v1/page/render/{uri}":{"get":{"tags":["Page"],"summary":"Get rendered page metadata by URI","description":"Returns the metadata of an HTML Page including its rendered HTML code and container content in JSON format based on the specified URI. If the URI maps to a Vanity URL, a 200 Forward returns the actual rendered page, while a 301/302 redirect returns an empty page JSON with Vanity URL properties. Supports Time Machine via the publishDate parameter (ISO 8601 format). For EMA (Enterprise Marketing Automation) requests, this may delegate to the JSON endpoint when the rendered attribute is not required.\n\nThe URI must be a plain page path (no embedded host). To render a page on a NON-default site, pass the `host_id` query parameter (backend users only); without it the current/default site is used. The `//host/uri` path form is NOT supported.","operationId":"getPageRenderByUri","parameters":[{"name":"uri","in":"path","description":"Path to the HTML Page or Vanity URL (e.g., 'about-us/locations/index'). Must be a plain path with no embedded host; use host_id to target a specific site.","required":true,"schema":{"pattern":".*","type":"string"}},{"name":"host_id","in":"query","description":"Explicit site to render against, given as a host identifier (UUID). Backend users only; if omitted the current/default site is used.","schema":{"type":"string"}},{"name":"mode","in":"query","description":"Page mode for rendering (e.g., EDIT_MODE, PREVIEW_MODE, LIVE)","schema":{"type":"string"}},{"name":"com.dotmarketing.persona.id","in":"query","description":"Persona identifier to render the page with personalization","schema":{"type":"string"}},{"name":"language_id","in":"query","description":"Language ID for the page content","schema":{"type":"string"}},{"name":"device_inode","in":"query","description":"Device inode for responsive rendering dimensions","schema":{"type":"string"}},{"name":"publishDate","in":"query","description":"Time Machine date in ISO 8601 format to view page as it was at a specific point in time","schema":{"type":"string"}}],"responses":{"200":{"description":"Rendered page retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPageView"}}}},"400":{"description":"Bad request"},"401":{"description":"Authentication required"},"403":{"description":"User does not have required permissions"},"404":{"description":"Page not found"}}}},"/api/v1/page/renderHTML/{uri}":{"get":{"tags":["Page"],"summary":"Render page as raw HTML","description":"Returns the rendered HTML content of a page without the JSON metadata wrapper. Useful for retrieving the raw HTML output of a page for embedding or server-side rendering.\n\nThe page is identified by a plain URI path (e.g. `index`, `about/team`). To render a page on a NON-default site, pass the `host_id` query parameter (backend users only); without it the current/default site is used. The `//host/uri` path form is NOT supported — the URI must not embed a host.","operationId":"renderPageHtmlOnly","parameters":[{"name":"uri","in":"path","description":"Plain page URI path (e.g. 'index' or 'about/team'). Must not embed a host; use host_id to target a specific site.","required":true,"schema":{"pattern":".*","type":"string"}},{"name":"host_id","in":"query","description":"Explicit site to render against, given as a host identifier (UUID). Backend users only; if omitted the current/default site is used.","schema":{"type":"string"}},{"name":"mode","in":"query","description":"Page mode for rendering (default: LIVE_ADMIN)","schema":{"type":"string","default":"LIVE_ADMIN"}}],"responses":{"200":{"description":"Page HTML rendered successfully","content":{"application/html":{"schema":{"type":"string"}}}},"401":{"description":"Authentication required"},"404":{"description":"Page not found"}}}},"/api/v1/page/layout":{"post":{"tags":["Page"],"summary":"Saves a page template","description":"Handles saving of a page template using provided data. Method processes the request and returns HTTP response indicating a complete save operation.","operationId":"postPageLayout","requestBody":{"description":"POST body consists of a JSON object containing one property called 'PageForm', which contains a template layout for the page","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageForm"}}},"required":true},"responses":{"200":{"description":"Page template saved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityTemplateView"}}}},"400":{"description":"Bad request or data exception"},"404":{"description":"Page not found"}}}},"/api/v1/page/{pageId}/layout":{"post":{"tags":["Page"],"summary":"Links template and page","description":"Takes a saved template and links it to an HTML page.\n\nAny pages with a template already linked will update with the new link.\n\nOtherwise a new template will be created without making any changes to previous templates.\n\nReturns the rendered page.\n\n","operationId":"postPageLayoutHTMLLink","parameters":[{"name":"pageId","in":"path","description":"ID for the page will link to","required":true,"schema":{"type":"string"}},{"name":"variantName","in":"query","schema":{"type":"string"}}],"requestBody":{"description":"POST body consists of a JSON object containing one property called 'PageForm', which contains information about the layout of a page's template ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageForm"}}},"required":true},"responses":{"200":{"description":"Page template linked to HTML and saved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPageView"}}}},"400":{"description":"Bad request or data exception"},"404":{"description":"Page not found"}}}},"/api/v1/page/search":{"get":{"tags":["Page"],"summary":"Search pages by path","description":"Returns all pages whose path matches the given filter. If the path starts with '//', the segment after the double-slash is treated as the site name for filtering. Results can be filtered to live versions only and/or pages from live sites only.","operationId":"searchPages","parameters":[{"name":"path","in":"query","description":"Path to filter pages by; prefix with '//' to include site name (e.g., '//demo.dotcms.com/about')","required":true,"schema":{"type":"string"}},{"name":"live","in":"query","description":"If true, return only live versions; if false, return both live and working versions","schema":{"type":"boolean"}},{"name":"onlyLiveSites","in":"query","description":"If true, filter results to only include pages from live sites","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Pages matching the search criteria","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityContentletMapsView"}}}},"401":{"description":"Authentication required"},"403":{"description":"User does not have required permissions"}}}},"/api/v1/page/{pageId}/styles":{"put":{"tags":["Page"],"summary":"Update contentlet styles in a page","description":"Updates style properties for contentlets within containers on a specific page. Only updates the styleProperties field without modifying page structure.","operationId":"updateStyles","parameters":[{"name":"pageId","in":"path","description":"Page identifier","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"List of containers with contentlet style updates. Each container includes its ID, UUID, and dynamic properties where contentlet IDs are keys with their style properties as values.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentWithStylesForm"}}},"required":true},"responses":{"200":{"description":"Contentlet styles updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityContentView"}}}},"400":{"description":"Invalid request - empty container entries or invalid contentlet references","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - user does not have EDIT permission on the page","content":{"application/json":{}}},"404":{"description":"Page not found","content":{"application/json":{}}}}}},"/api/v1/page-scanner/a11y/check":{"post":{"tags":["Accessibility Checker"],"operationId":"a11yCheck","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageScanCheckForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/page-scanner/geo/check":{"post":{"tags":["Accessibility Checker"],"operationId":"geoCheck","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageScanCheckForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/personalization/pagepersonas":{"post":{"tags":["Personalization"],"summary":"Personalize page containers","description":"Copies the current content associated to page containers with default personalization and creates a new set with the specified persona personalization. Requires edit permission on the page.","operationId":"personalizePageContainers","requestBody":{"description":"Personalization form data with page ID and persona tag","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalizationPersonaPageForm"}}},"required":true},"responses":{"200":{"description":"Page containers personalized successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPersonalizationView"}}}},"400":{"description":"Bad request - invalid page ID, persona tag, or missing parameters","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient edit permissions on page","content":{"application/json":{}}},"404":{"description":"Page or persona not found","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}}},"/api/v1/personalization/pagepersonas/page/{pageId}/personalization/{personalization}":{"delete":{"tags":["Personalization"],"summary":"Delete page personalization","description":"Deletes a personalization persona for a page. Can remove any persona personalization for page containers except the default personalization. Requires edit permission on the page.","operationId":"personalizePageContainers_1","parameters":[{"name":"pageId","in":"path","description":"Page identifier","required":true,"schema":{"type":"string"}},{"name":"personalization","in":"path","description":"Personalization/persona tag to delete","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Page personalization deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}},"400":{"description":"Bad request - invalid parameters, trying to delete default personalization, or persona doesn't exist","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient edit permissions on page","content":{"application/json":{}}},"404":{"description":"Page not found","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}}},"/api/v1/personas":{"get":{"tags":["Personas"],"summary":"List personas","description":"Returns all personas for the current site. Site can be determined from session or header.","operationId":"list_1","responses":{"200":{"description":"Personas retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapStringRestPersonaView"}}}},"400":{"description":"Bad request - site ID required or invalid","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}}},"/api/v1/personas/{id}":{"get":{"tags":["Personas"],"summary":"Get persona by ID","description":"Returns a specific persona by its identifier","operationId":"self","parameters":[{"name":"siteId","in":"path","description":"Site identifier","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Persona identifier","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Persona retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestPersona"}}}},"400":{"description":"Bad request - persona ID or site ID required","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"Persona not found","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}}},"/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":{}}}}}},"/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":{}}}}}},"/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":{}}}}}},"/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":{}}}}}},"/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":{}}}}}},"/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":{}}}}}},"/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":{}}}}}},"/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":{}}}}},"post":{"tags":["Portlets"],"operationId":"saveNew","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomPortletForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/toolgroups/{layoutId}/_addtouser":{"put":{"tags":["Administration"],"operationId":"addToolGroupToUser","parameters":[{"name":"layoutId","in":"path","required":true,"schema":{"type":"string"}},{"name":"userid","in":"query","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/toolgroups/{layoutId}/_removefromuser":{"put":{"tags":["Administration"],"operationId":"deleteToolGroupFromUser","parameters":[{"name":"layoutId","in":"path","required":true,"schema":{"type":"string"}},{"name":"userid","in":"query","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/toolgroups/{layoutId}/_userHasLayout":{"get":{"tags":["Administration"],"operationId":"userHasLayout","parameters":[{"name":"layoutId","in":"path","required":true,"schema":{"type":"string"}},{"name":"userid","in":"query","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/bundles/assets":{"post":{"tags":["Publishing"],"summary":"Add assets to a bundle","description":"Adds assets to an existing bundle or creates a new bundle. Bundle resolution: (1) look up by bundleId, (2) if not found, look up unsent bundles by bundleName, (3) if still not found, auto-create a new bundle. A non-matching bundleId does NOT return 404 — it falls through to name lookup and then auto-creation. Assets already in the bundle are silently skipped (idempotent). Individual asset failures (e.g., no publish permission) are reported in the errors list as human-readable strings, not as HTTP errors.","operationId":"addAssetsToBundle","requestBody":{"description":"Assets to add and target bundle information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddAssetsToBundleForm"}}},"required":true},"responses":{"200":{"description":"Assets processed (check errors list for per-asset failures)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityAddAssetsToBundleView"}}}},"400":{"description":"Invalid request (e.g., empty assetIds)","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"bundleId provided but not found and no bundleName fallback","content":{"application/json":{}}},"409":{"description":"Cannot add assets while bundle is in BUNDLING, SENDING_TO_ENDPOINTS, or PUBLISHING_BUNDLE status","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}}},"/api/v1/bundles/{bundleId}/assets":{"delete":{"tags":["Publishing"],"summary":"Remove assets from an unpushed bundle","description":"Removes one or more assets from an unpushed bundle. Each asset is processed independently with per-asset results. Assets not found in the bundle return success=false.","operationId":"removeAssetsFromBundle","parameters":[{"name":"bundleId","in":"path","description":"Bundle identifier","required":true,"schema":{"type":"string"},"example":"550e8400-e29b-41d4-a716-446655440000"}],"requestBody":{"description":"Assets to remove from the bundle","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveAssetsFromBundleForm"}}},"required":true},"responses":{"200":{"description":"Removal completed (check per-asset success flags)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityRemoveAssetsFromBundleView"}}}},"400":{"description":"Invalid request (e.g., blank bundleId, empty assetIds)","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"Bundle not found","content":{"application/json":{}}},"409":{"description":"Cannot remove assets while bundle is in BUNDLING, SENDING_TO_ENDPOINTS, or PUBLISHING_BUNDLE status","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}}},"/api/v1/publishing/{bundleId}":{"get":{"tags":["Publishing"],"summary":"Get publishing job details","description":"Returns detailed status, environments, endpoints, and timestamps for a specific publishing bundle. Includes per-endpoint success/failure status with error messages and stack traces for failed endpoints.","operationId":"getPublishingJobDetails","parameters":[{"name":"bundleId","in":"path","description":"Bundle identifier","required":true,"schema":{"type":"string"},"example":"01KJWNJM2C67DM56GHBJ4S7B89"}],"responses":{"200":{"description":"Publishing job details retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPublishingJobDetailView"}}}},"400":{"description":"Invalid bundle ID format","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"Bundle not found","content":{"application/json":{}}}}},"delete":{"tags":["Publishing"],"summary":"Delete a publishing job","description":"Removes a specific bundle from the publishing queue. Cannot delete bundles that are actively publishing (BUNDLING, SENDING_TO_ENDPOINTS, PUBLISHING_BUNDLE).","operationId":"deletePublishingJob","parameters":[{"name":"bundleId","in":"path","description":"Bundle identifier","required":true,"schema":{"type":"string"},"example":"01KJWNJM2C67DM56GHBJ4S7B89"}],"responses":{"200":{"description":"Bundle deleted successfully","content":{"application/json":{"schema":{"type":"object","description":"Success response with message","example":{"message":"Bundle deleted successfully"}}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"404":{"description":"Bundle not found in either the publishing audit history or the bundle table","content":{"application/json":{}}},"409":{"description":"Cannot delete bundle while publishing is in progress","content":{"application/json":{}}}}}},"/api/v1/publishing":{"get":{"tags":["Publishing"],"summary":"List publishing jobs","description":"Returns a paginated list of publishing jobs combining audit status and bundle metadata. Supports filtering by status and bundle name/ID. Each job includes asset preview (first 3 assets), environment count, and timing information.","operationId":"listPublishingJobs","parameters":[{"name":"page","in":"query","description":"Page number (starts from 1)","schema":{"type":"integer","format":"int32","default":1},"example":1},{"name":"per_page","in":"query","description":"Results per page (1-500)","schema":{"type":"integer","format":"int32","default":50},"example":50},{"name":"filter","in":"query","description":"Case-insensitive partial match filter on bundle_id and bundle name","schema":{"type":"string"},"example":"staging"},{"name":"status","in":"query","description":"Comma-separated status values to filter (e.g., SUCCESS,FAILED_TO_PUBLISH). Valid values: SCHEDULED, BUNDLE_REQUESTED, WAITING_FOR_PUBLISHING, BUNDLING, SENDING_TO_ENDPOINTS, PUBLISHING_BUNDLE, BUNDLE_SENT_SUCCESSFULLY, RECEIVED_BUNDLE, BUNDLE_SAVED_SUCCESSFULLY, SUCCESS, SUCCESS_WITH_WARNINGS, FAILED_TO_BUNDLE, FAILED_TO_SENT, FAILED_TO_SEND_TO_ALL_GROUPS, FAILED_TO_SEND_TO_SOME_GROUPS, FAILED_TO_PUBLISH, FAILED_INTEGRITY_CHECK, INVALID_TOKEN, LICENSE_REQUIRED. SCHEDULED = bundles pushed with a future publishDate not yet picked up by the publisher cron.","schema":{"type":"string"},"example":"SUCCESS,FAILED_TO_PUBLISH"}],"responses":{"200":{"description":"Publishing jobs retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPublishingJobsView"}}}},"400":{"description":"Invalid request parameters (e.g., invalid status value, pagination out of range)","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}}}}},"/api/v1/publishing/purge":{"delete":{"tags":["Publishing"],"summary":"Bulk delete publishing jobs by status","description":"Removes all bundles matching the specified status filter. Cannot purge in-progress bundles (BUNDLING, SENDING_TO_ENDPOINTS, PUBLISHING_BUNDLE). If no status specified, uses safe defaults (all terminal + queued statuses). IMPORTANT: This endpoint processes asynchronously. Results are delivered via WebSocket system messages to browser clients. Non-browser API clients will not receive completion notifications.","operationId":"purgePublishingJobs","parameters":[{"name":"status","in":"query","description":"Comma-separated status values to purge. If omitted, uses safe defaults (all terminal + queued, excludes in-progress). Cannot include: BUNDLING, SENDING_TO_ENDPOINTS, PUBLISHING_BUNDLE. Valid values: BUNDLE_REQUESTED, WAITING_FOR_PUBLISHING, BUNDLE_SENT_SUCCESSFULLY, RECEIVED_BUNDLE, BUNDLE_SAVED_SUCCESSFULLY, SUCCESS, SUCCESS_WITH_WARNINGS, FAILED_TO_BUNDLE, FAILED_TO_SENT, FAILED_TO_SEND_TO_ALL_GROUPS, FAILED_TO_SEND_TO_SOME_GROUPS, FAILED_TO_PUBLISH, FAILED_INTEGRITY_CHECK, INVALID_TOKEN, LICENSE_REQUIRED","schema":{"type":"string"},"example":"SUCCESS,FAILED_TO_PUBLISH"}],"responses":{"200":{"description":"Purge operation initiated (processes in background). The result is delivered as a system notification to the triggering user's browser session. Non-browser API clients will not receive the completion event.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPurgeView"}}}},"400":{"description":"Invalid status value or attempted to purge in-progress statuses","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}}}}},"/api/v1/publishing/push/{bundleId}":{"post":{"tags":["Publishing"],"summary":"Push bundle to environments","description":"Queues an existing bundle for publishing to specified environments. The bundle must exist and have assets already added. Supports publish, expire, and publishexpire operations with ISO 8601 date/time format.","operationId":"pushBundle","parameters":[{"name":"bundleId","in":"path","description":"Bundle identifier","required":true,"schema":{"type":"string"},"example":"01KJWNJM2C67DM56GHBJ4S7B89"}],"requestBody":{"description":"Push configuration including operation type, dates, environments, and filter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PushBundleForm"}}},"required":true},"responses":{"200":{"description":"Bundle successfully queued for publishing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPushBundleResultView"}}}},"400":{"description":"Invalid request (missing required fields, invalid operation, invalid date format)","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - no permission to use specified environments","content":{"application/json":{}}},"404":{"description":"Bundle or environment not found","content":{"application/json":{}}}}}},"/api/v1/publishing/retry":{"post":{"tags":["Publishing"],"summary":"Retry failed or successful bundles","description":"Re-attempts sending bundles that were previously pushed but failed, partially failed, or succeeded but need re-synchronization. Supports bulk operations with per-bundle results.","operationId":"retryBundles","requestBody":{"description":"Retry request containing bundle IDs and options","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetryBundlesForm"}}},"required":true},"responses":{"200":{"description":"Retry operation completed (check individual results for success/failure)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityRetryBundlesView"}}}},"400":{"description":"Invalid request parameters (e.g., empty bundleIds, invalid deliveryStrategy)","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}}}}},"/api/v1/pushpublish/filters/{filterKey}":{"get":{"tags":["Publishing"],"operationId":"getFilter","parameters":[{"name":"filterKey","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}},"delete":{"tags":["Publishing"],"operationId":"deleteFilter","parameters":[{"name":"filterKey","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/pushpublish/filters":{"get":{"tags":["Publishing"],"operationId":"getFilters","responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}},"put":{"tags":["Publishing"],"operationId":"updateFromForm","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/FilterDescriptorForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}},"post":{"tags":["Publishing"],"operationId":"saveFromForm","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/FilterDescriptorForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/relationships/cardinalities":{"get":{"tags":["Relationships"],"operationId":"getCardinality","responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/relationships":{"get":{"tags":["Relationships"],"operationId":"getOneSidedRelationships","parameters":[{"name":"contentTypeId","in":"query","schema":{"type":"string"}},{"name":"page","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"per_page","in":"query","schema":{"type":"integer","format":"int32","default":0}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/report-issue":{"post":{"tags":["Workflow"],"summary":"Report a dotCMS UI issue","description":"Creates a Bug contentlet in the configured upstream reporting dotCMS instance.","operationId":"reportIssue","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FormDataMultiPart"}}}},"responses":{"200":{"description":"Issue reported","content":{"application/json":{}}},"400":{"description":"Invalid report payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityView"}}}},"502":{"description":"Reporting service unavailable or unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityView"}}}}}}},"/api/v1/site/{siteId}/_archive":{"put":{"tags":["Site"],"summary":"Archive a site","description":"Archives the specified site. The default site cannot be archived. If the site is locked, it will be unlocked before archiving. The 'siteId' parameter is the site identifier (also known as 'hostId' or 'host' in other parts of the API).","operationId":"archiveSite","parameters":[{"name":"siteId","in":"path","description":"Identifier of the site to archive (siteId/hostId are used interchangeably)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Site archived successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySiteView"}}}},"400":{"description":"Cannot archive the default site, or site does not exist"},"401":{"description":"Unauthorized access"},"403":{"description":"User does not have permission to archive sites"},"404":{"description":"Site not found"}}}},"/api/v1/site/_copy":{"put":{"tags":["Site"],"summary":"Copy a site","description":"Creates a new site by copying an existing one. Optionally copies templates, containers, folders, links, content on pages, content on site, site variables, and content types based on the provided copy options. Asset copying runs as a background job. Requires an Enterprise license.","operationId":"copySite","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/CopySiteForm"}}}},"responses":{"200":{"description":"Site copied successfully and background asset copy initiated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySiteView"}}}},"400":{"description":"Invalid copy parameters"},"401":{"description":"Unauthorized access"},"403":{"description":"User does not have permission or missing Enterprise license"},"404":{"description":"Source site not found"}}}},"/api/v1/site":{"get":{"tags":["Site"],"summary":"List sites with pagination","description":"Returns a paginated list of sites that the currently logged-in user has access to. Supports filtering by name, archived status, live status, and system site inclusion.","operationId":"getSites","parameters":[{"name":"filter","in":"query","description":"Filter string for site names. Use '*' suffix for wildcard matching, or 'all' to return all sites","schema":{"type":"string"}},{"name":"archive","in":"query","description":"Include archived sites in the results","schema":{"type":"boolean"}},{"name":"live","in":"query","description":"Filter to show only live sites","schema":{"type":"boolean"}},{"name":"system","in":"query","description":"Include the system site in the results","schema":{"type":"boolean"}},{"name":"page","in":"query","description":"Page number for pagination (zero-based)","schema":{"type":"integer","format":"int32"}},{"name":"per_page","in":"query","description":"Number of results per page","schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"Paginated list of sites retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityListMapView"}}}},"403":{"description":"User does not have permission to access sites"},"500":{"description":"Internal server error"}}},"put":{"tags":["Site"],"summary":"Update an existing site","description":"Updates the properties of an existing site. The site to update is identified by the 'id' query parameter (also referred to as 'siteId' or 'hostId' in other parts of the API). Requires access to the Sites portlet.","operationId":"updateSite","parameters":[{"name":"id","in":"query","description":"Identifier of the site to update (siteId/hostId are used interchangeably)","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Updated site properties. 'siteName' (the hostname) is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteForm"}}},"required":true},"responses":{"200":{"description":"Site updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySiteView"}}}},"400":{"description":"Invalid site data (e.g., missing site name or id)"},"401":{"description":"Unauthorized access"},"403":{"description":"User does not have permission to update sites"},"404":{"description":"Site not found"}}},"post":{"tags":["Site"],"summary":"Create a new site","description":"Creates a new site with the provided properties including hostname, aliases, tag storage, SEO settings, and optional site variables.","operationId":"createSite","requestBody":{"description":"Site properties to create. 'siteName' (the hostname) is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteForm"}}},"required":true},"responses":{"200":{"description":"Site created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySiteView"}}}},"400":{"description":"Invalid site data (e.g., missing site name, invalid identifier format)"},"401":{"description":"Unauthorized access"},"403":{"description":"User does not have permission to create sites"},"409":{"description":"Site with the same name already exists"}}}},"/api/v1/site/currentSite":{"get":{"tags":["Site"],"summary":"Get the current site for the logged-in user","description":"Returns the site currently selected in the user's HTTP session. Used by the Site Selector component in the UI. If no site is set in the session, the first available site for the user is returned.","operationId":"getCurrentSite","responses":{"200":{"description":"Current site retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityHostView"}}}},"403":{"description":"User does not have permission to access sites"},"500":{"description":"Internal server error"}}}},"/api/v1/site/defaultSite":{"get":{"tags":["Site"],"summary":"Get the default site","description":"Returns the site marked as the default site in the system.","operationId":"getDefaultSite","responses":{"200":{"description":"Default site retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityHostView"}}}},"403":{"description":"User does not have permission to access sites"},"500":{"description":"Internal server error"}}}},"/api/v1/site/{siteId}":{"get":{"tags":["Site"],"summary":"Get a site by its identifier","description":"Retrieves the full details of a site by its identifier. The 'siteId' parameter is the site identifier (also known as 'hostId' or 'host' in other parts of the API).","operationId":"getSiteById","parameters":[{"name":"siteId","in":"path","description":"Identifier of the site to retrieve (siteId/hostId are used interchangeably)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Site retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySiteView"}}}},"401":{"description":"Unauthorized access"},"403":{"description":"User does not have permission to access this site"},"404":{"description":"Site not found"}}},"delete":{"tags":["Site"],"summary":"Delete a site","description":"Deletes the specified site asynchronously. The default site cannot be deleted; you must first mark another site as default before deleting. The 'siteId' parameter is the site identifier (also known as 'hostId' or 'host' in other parts of the API).","operationId":"deleteSite","parameters":[{"name":"siteId","in":"path","description":"Identifier of the site to delete (siteId/hostId are used interchangeably)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Site deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBooleanView"}}}},"400":{"description":"Cannot delete the default site, or site does not exist"},"401":{"description":"Unauthorized access"},"403":{"description":"User does not have permission to delete sites"}}}},"/api/v1/site/thumbnails":{"get":{"tags":["Site"],"summary":"Get thumbnails for all sites","description":"Returns a list of all sites with their thumbnail information, including hostId, hostInode, hostName, hasThumbnail flag, and tagStorage. The system site is excluded from results.","operationId":"findAllSiteThumbnails","responses":{"200":{"description":"Site thumbnails retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityListMapView"}}}},"403":{"description":"User does not have permission to access sites"},"500":{"description":"Internal server error"}}}},"/api/v1/site/_byname":{"post":{"tags":["Site"],"summary":"Find a site by name","description":"Finds a site by its hostname. The site name is sent via POST body to avoid URL-escaping issues with special characters in hostnames.","operationId":"findSiteByName","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/SearchSiteByNameForm"}}}},"responses":{"200":{"description":"Site found successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySiteView"}}}},"400":{"description":"Site name is null or invalid"},"401":{"description":"Unauthorized access"},"403":{"description":"User does not have permission to access sites"},"404":{"description":"Site not found"}}}},"/api/v1/site/{siteId}/setup_progress":{"get":{"tags":["Site"],"summary":"Get site setup progress","description":"Returns the progress of a background site asset copy operation. This is used after a site copy to track the progress of the asset copying job. The 'siteId' parameter is the site identifier (also known as 'hostId' or 'host' in other parts of the API).","operationId":"getSiteSetupProgress","parameters":[{"name":"siteId","in":"path","description":"Identifier of the site whose setup progress to retrieve (siteId/hostId are used interchangeably)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Site setup progress retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySiteSetupProgressView"}}}},"401":{"description":"Unauthorized access"},"403":{"description":"User does not have permission to access site setup progress"}}}},"/api/v1/site/variable/{siteId}":{"get":{"tags":["Site"],"summary":"Retrieve the Site Variables for a site","description":"Returns all site variables associated with the specified site, including variable names, keys, values, and last modifier information. The 'siteId' parameter is the site identifier (also known as 'hostId' or 'host' in other parts of the API).","operationId":"getSiteVariables","parameters":[{"name":"siteId","in":"path","description":"Identifier of the site whose variables to retrieve (siteId/hostId are used interchangeably)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Site variables retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseSiteVariablesEntityView"}}}},"401":{"description":"Unauthorized access"},"403":{"description":"User does not have permission to access site variables"},"404":{"description":"When the site id does not exist"}}}},"/api/v1/site/{siteId}/_makedefault":{"put":{"tags":["Site"],"summary":"Mark a site as the default","description":"Sets the specified site as the default site for the system. The 'siteId' parameter is the site identifier (also known as 'hostId' or 'host' in other parts of the API).","operationId":"makeDefaultSite","parameters":[{"name":"siteId","in":"path","description":"Identifier of the site to mark as default (siteId/hostId are used interchangeably)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Site marked as default successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBooleanView"}}}},"400":{"description":"Site does not exist"},"401":{"description":"Unauthorized access"},"403":{"description":"User does not have permission to change the default site"}}}},"/api/v1/site/{siteId}/_publish":{"put":{"tags":["Site"],"summary":"Publish a site","description":"Publishes the specified site, making it live and accessible. The 'siteId' parameter is the site identifier (also known as 'hostId' or 'host' in other parts of the API).","operationId":"publishSite","parameters":[{"name":"siteId","in":"path","description":"Identifier of the site to publish (siteId/hostId are used interchangeably)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Site published successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySiteView"}}}},"400":{"description":"Site does not exist"},"401":{"description":"Unauthorized access"},"403":{"description":"User does not have permission to publish sites"}}}},"/api/v1/site/variable":{"put":{"tags":["Site"],"summary":"Save a Site Variable","description":"Creates or updates a site variable for the specified site. If an ID or matching key is provided, the existing variable is updated; otherwise a new one is created.","operationId":"saveSiteVariable","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/SiteVariableForm"}}}},"responses":{"200":{"description":"Site variable saved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseHostVariableEntityView"}}}},"400":{"description":"When a required value is not sent"},"401":{"description":"Unauthorized access"},"403":{"description":"User does not have permission to manage site variables"}}}},"/api/v1/site/switch":{"put":{"tags":["Site"],"summary":"Switch to the user's default site","description":"Switches the current user's active site to their default site.","operationId":"switchToDefaultSite","responses":{"200":{"description":"Switched to default site successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityHostView"}}}},"403":{"description":"User does not have permission"},"500":{"description":"Internal server error"}}}},"/api/v1/site/switch/{id}":{"put":{"tags":["Site"],"summary":"Switch to a specific site","description":"Switches the current user's active site to the specified site. The 'id' path parameter represents the site identifier (also referred to as 'siteId' or 'hostId' in the API).","operationId":"switchSiteById","parameters":[{"name":"id","in":"path","description":"Identifier of the site to switch to (siteId/hostId are used interchangeably)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Site switched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySiteSwitchView"}}}},"403":{"description":"User does not have permission to access the specified site"},"404":{"description":"Site not found"},"500":{"description":"Internal server error"}}}},"/api/v1/site/{siteId}/_unarchive":{"put":{"tags":["Site"],"summary":"Unarchive a site","description":"Restores a previously archived site to its active state. The 'siteId' parameter is the site identifier (also known as 'hostId' or 'host' in other parts of the API).","operationId":"unarchiveSite","parameters":[{"name":"siteId","in":"path","description":"Identifier of the site to unarchive (siteId/hostId are used interchangeably)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Site unarchived successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySiteView"}}}},"400":{"description":"Site does not exist"},"401":{"description":"Unauthorized access"},"403":{"description":"User does not have permission to unarchive sites"}}}},"/api/v1/site/{siteId}/_unpublish":{"put":{"tags":["Site"],"summary":"Unpublish a site","description":"Unpublishes the specified site, removing it from live status. The 'siteId' parameter is the site identifier (also known as 'hostId' or 'host' in other parts of the API).","operationId":"unpublishSite","parameters":[{"name":"siteId","in":"path","description":"Identifier of the site to unpublish (siteId/hostId are used interchangeably)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Site unpublished successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySiteView"}}}},"401":{"description":"Unauthorized access"},"403":{"description":"User does not have permission to unpublish sites"},"404":{"description":"Site not found"}}}},"/api/v1/sites/{siteId}/ruleengine/rules":{"get":{"tags":["Rules Engine"],"operationId":"list_2","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/RestRule"}}},"application/javascript":{"schema":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/RestRule"}}}}}}},"post":{"tags":["Rules Engine"],"operationId":"add","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestRule"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/sites/{siteId}/ruleengine/rules/{ruleId}":{"get":{"tags":["Rules Engine"],"operationId":"self_1","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"ruleId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestRule"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/RestRule"}}}}}},"put":{"tags":["Rules Engine"],"operationId":"update_3","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"ruleId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestRule"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestRule"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/RestRule"}}}}}},"delete":{"tags":["Rules Engine"],"operationId":"remove","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"ruleId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"*/*":{}}}}}},"/api/v1/sites/{siteId}/ruleengine/actions":{"post":{"tags":["Rules Engine"],"operationId":"add_1","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestRuleAction"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/sites/{siteId}/ruleengine/actions/{actionId}":{"get":{"tags":["Rules Engine"],"operationId":"self_2","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"actionId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestRuleAction"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/RestRuleAction"}}}}}},"put":{"tags":["Rules Engine"],"operationId":"update_4","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"actionId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestRuleAction"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestRuleAction"}}}}}},"delete":{"tags":["Rules Engine"],"operationId":"remove_1","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"actionId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/sites/{siteId}/ruleengine/rules/{ruleId}/conditionGroups":{"get":{"tags":["Rules Engine"],"operationId":"list_3","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"ruleId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"post":{"tags":["Rules Engine"],"operationId":"add_2","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"ruleId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestConditionGroup"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/sites/{siteId}/ruleengine/rules/{ruleId}/conditionGroups/{conditionGroupId}":{"delete":{"tags":["Rules Engine"],"operationId":"remove_2","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"ruleId","in":"path","required":true,"schema":{"type":"string"}},{"name":"conditionGroupId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"*/*":{}}}}}},"/api/v1/sites/{siteId}/ruleengine/rules/{ruleId}/conditionGroups/{groupId}":{"get":{"tags":["Rules Engine"],"operationId":"self_3","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"ruleId","in":"path","required":true,"schema":{"type":"string"}},{"name":"groupId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestConditionGroup"}}}}}},"put":{"tags":["Rules Engine"],"operationId":"update_5","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"ruleId","in":"path","required":true,"schema":{"type":"string"}},{"name":"groupId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestConditionGroup"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestConditionGroup"}}}}}}},"/api/v1/sites/{siteId}/ruleengine/conditions":{"post":{"tags":["Rules Engine"],"operationId":"add_3","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestCondition"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/sites/{siteId}/ruleengine/conditions/{conditionId}":{"get":{"tags":["Rules Engine"],"operationId":"self_4","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"conditionId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"put":{"tags":["Rules Engine"],"operationId":"update_6","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"conditionId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestCondition"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestCondition"}}}}}},"delete":{"tags":["Rules Engine"],"operationId":"remove_3","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"conditionId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"*/*":{}}}}}},"/api/v1/sites/{siteId}/ruleengine/conditions/{conditionId}/conditionValues":{"get":{"tags":["Rules Engine"],"operationId":"list_4","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"conditionId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"post":{"tags":["Rules Engine"],"operationId":"add_4","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"conditionId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestConditionValue"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/sites/{siteId}/ruleengine/conditions/{conditionId}/conditionValues/{valueId}":{"get":{"tags":["Rules Engine"],"operationId":"self_5","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"conditionId","in":"path","required":true,"schema":{"type":"string"}},{"name":"valueId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"put":{"tags":["Rules Engine"],"operationId":"update_7","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"conditionId","in":"path","required":true,"schema":{"type":"string"}},{"name":"valueId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestConditionValue"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestConditionValue"}}}}}},"delete":{"tags":["Rules Engine"],"operationId":"remove_4","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"conditionId","in":"path","required":true,"schema":{"type":"string"}},{"name":"valueId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"*/*":{}}}}}},"/api/v1/appconfiguration":{"get":{"tags":["System Configuration"],"operationId":"list_5","responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/configuration/config":{"get":{"tags":["System Configuration"],"summary":"Retrieve whitelisted configuration values","description":"Returns a map of configuration key to value for each requested key that is present in the server whitelist. Boolean feature-flag keys (those in BOOLEAN_FEATURE_FLAGS) are normalised to the lowercase strings \"true\" or \"false\" regardless of how they are stored in the properties file; undefined flags return the sentinel string \"NOT_FOUND\". Keys prefixed with \"number:\" return an Integer, \"list:\" returns an array of strings, \"boolean:\" returns a native JSON boolean. All other whitelisted keys return their raw string value. Keys not on the whitelist are silently excluded.","operationId":"getConfigVariables","parameters":[{"name":"keys","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Map of key to configuration value","content":{"application/json":{"schema":{"type":"object","description":"Map of configuration key to value. Value type depends on the key: normalised string \"true\"/\"false\" for boolean feature flags, \"NOT_FOUND\" for undefined flags, Integer for number:-prefixed keys, array for list:-prefixed keys, native boolean for boolean:-prefixed keys, raw string otherwise.","example":{"FEATURE_FLAG_EXPERIMENTS":"true","EMAIL_SYSTEM_ADDRESS":"admin@example.com","FEATURE_FLAG_UVE_STYLE_EDITOR":"NOT_FOUND"}}}}},"401":{"description":"User is not authenticated"}}}},"/api/v1/configuration":{"get":{"tags":["System Configuration"],"operationId":"list_6","responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}},"put":{"tags":["System Configuration"],"operationId":"set","requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"}}}}},"responses":{"default":{"description":"default response","content":{"*/*":{}}}}}},"/api/v1/configuration/_validateCompanyEmail":{"post":{"tags":["System Configuration"],"operationId":"validateEmail","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/CompanyEmailForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/system/request-draining-test/status":{"get":{"operationId":"getShutdownStatus","responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityViewMapStringObject"}}}}}}},"/api/v1/system/request-draining-test/long-request":{"get":{"operationId":"longRunningRequest","parameters":[{"name":"duration","in":"query","schema":{"type":"integer","format":"int64","default":5000}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityViewMapStringObject"}}}}}}},"/api/v1/system/request-draining-test/simulate-active-requests":{"get":{"operationId":"simulateActiveRequests","parameters":[{"name":"count","in":"query","schema":{"type":"integer","format":"int32","default":1}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityViewMapStringObject"}}}}}}},"/api/v1/system-table/{key}":{"get":{"tags":["System Configuration"],"operationId":"get_4","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}}}},"delete":{"tags":["System Configuration"],"operationId":"delete_9","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}}}}},"/api/v1/system-table/_delete":{"delete":{"tags":["System Configuration"],"operationId":"deleteWithKey","requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}}}}},"/api/v1/system-table":{"get":{"tags":["System Configuration"],"operationId":"getAll_2","responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityViewMapStringString"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntityViewMapStringString"}}}}}},"put":{"tags":["System Configuration"],"summary":"Updates an existing system table entry","description":"Updates the value of an existing key in the system table, or returns a 404 if the key does not exist. The change is applied cluster wide: every node is notified and re-resolves the key, so the request does not need to be repeated against each node.","operationId":"update_8","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyValueForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}}}},"post":{"tags":["System Configuration"],"summary":"Saves or updates a system table entry","description":"Saves or updates the value of a key in the system table. The change is applied cluster wide: every node is notified and re-resolves the key, so the request does not need to be repeated against each node.","operationId":"save","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/KeyValueForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}}}}},"/api/v1/upgradetask":{"post":{"tags":["Maintenance"],"operationId":"upgrade","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/UpgradeTaskForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/caches/menucache":{"delete":{"tags":["Maintenance","Cache Management"],"summary":"Deletes the menu cache","description":"Just deletes the menu cache by request","operationId":"deleteMenuCache","responses":{"200":{"description":"Action(s) returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}},"500":{"description":"General Error"}}}},"/api/v1/caches/provider/{provider}/flush":{"delete":{"tags":["Cache Management"],"summary":"Flush all caches","description":"Flushes all caches across all providers, resets permission references, and reloads PushPublishing filters. The provider path parameter is ignored.","operationId":"flushAll","parameters":[{"name":"provider","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"200":{"description":"All caches flushed successfully"},"401":{"description":"Unauthorized - authentication required"},"403":{"description":"Forbidden - requires maintenance portlet access"}}}},"/api/v1/caches/provider/{provider}/flush/{group}":{"delete":{"tags":["Cache Management"],"operationId":"flushGroup","parameters":[{"name":"provider","in":"path","required":true,"schema":{"pattern":".*","type":"string"}},{"name":"group","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/caches/provider/{provider}/flush/{group}/{id}":{"delete":{"tags":["Cache Management"],"operationId":"flushObject","parameters":[{"name":"provider","in":"path","required":true,"schema":{"pattern":".*","type":"string"}},{"name":"group","in":"path","required":true,"schema":{"pattern":".*","type":"string"}},{"name":"id","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/caches/region/{regionName}":{"delete":{"tags":["Cache Management"],"summary":"Flush a cache region","description":"Flushes a specific cache region across all providers, resets permission references, and conditionally reloads PushPublishing filters. Pass 'all' to flush all caches.","operationId":"flushRegion","parameters":[{"name":"regionName","in":"path","description":"Cache region name (case-insensitive, as returned by GET /api/v1/caches) or 'all' to flush all caches","required":true,"schema":{"pattern":".*","type":"string"},"example":"Permission"}],"responses":{"200":{"description":"Cache region flushed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}},"400":{"description":"Bad request - unknown cache region name"},"401":{"description":"Unauthorized - authentication required"},"403":{"description":"Forbidden - requires maintenance portlet access"}}}},"/api/v1/caches/stats":{"get":{"tags":["Cache Management"],"summary":"Get cache statistics","description":"Returns JVM memory information and per-provider per-region cache statistics including hit counts, miss counts, and memory usage.","operationId":"getCacheStats","responses":{"200":{"description":"Cache statistics retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityCacheStatsView"}}}},"401":{"description":"Unauthorized - authentication required"},"403":{"description":"Forbidden - requires maintenance portlet access"}}}},"/api/v1/caches/provider/{provider}/keys/{group}":{"get":{"tags":["Cache Management"],"operationId":"getKeys","parameters":[{"name":"provider","in":"path","required":true,"schema":{"pattern":".*","type":"string"}},{"name":"group","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/caches":{"get":{"tags":["Cache Management"],"summary":"List cache region names","description":"Returns an alphabetically sorted list of all cache region names. Used to populate the flush-cache dropdown in the Maintenance portlet Cache tab.","operationId":"listRegions","responses":{"200":{"description":"Cache regions retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityListStringView"}}}},"401":{"description":"Unauthorized - authentication required"},"403":{"description":"Forbidden - requires maintenance portlet access"}}}},"/api/v1/caches/provider/{provider}/object/{group}/{id}":{"get":{"tags":["Cache Management"],"operationId":"showObject","parameters":[{"name":"provider","in":"path","required":true,"schema":{"pattern":".*","type":"string"}},{"name":"group","in":"path","required":true,"schema":{"pattern":".*","type":"string"}},{"name":"id","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/caches/provider/{provider}/objects/{group}":{"get":{"tags":["Cache Management"],"operationId":"showObjects","parameters":[{"name":"provider","in":"path","required":true,"schema":{"pattern":".*","type":"string"}},{"name":"group","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/caches/providers/{group}":{"get":{"tags":["Cache Management"],"operationId":"showProviders","parameters":[{"name":"group","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/caches/provider/{provider}/{group}":{"get":{"tags":["Cache Management"],"operationId":"showProviders_1","parameters":[{"name":"provider","in":"path","required":true,"schema":{"pattern":".*","type":"string"}},{"name":"group","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/system/i18n/{lang}/{rsrc}":{"get":{"tags":["Internationalization"],"operationId":"list_7","parameters":[{"name":"lang","in":"path","required":true,"schema":{"pattern":"[\\w]{2,3}(?:-?[\\w]{2})?","type":"string"}},{"name":"rsrc","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/logger":{"get":{"tags":["System Logging"],"operationId":"getLoggers","responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}},"put":{"tags":["System Logging"],"operationId":"changeLoggerLevel","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/ChangeLoggerForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/logger/{loggerName}":{"get":{"tags":["System Logging"],"operationId":"getLogger","parameters":[{"name":"loggerName","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/{a}":{"get":{"tags":["System Monitoring"],"operationId":"heavyCheck","responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/{a}/{a}":{"get":{"tags":["System Monitoring"],"operationId":"ready","responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/permissions/{assetId}":{"get":{"tags":["Permissions"],"summary":"Get asset permissions","description":"Retrieves permissions for a specific asset by its identifier (inode or identifier). Returns asset metadata, a paginated list of roles with their permission levels, and pagination information. Supports all permissionable asset types including hosts, folders, contentlets, templates, containers, categories, links, and rules.","operationId":"getAssetPermissions","parameters":[{"name":"assetId","in":"path","description":"Asset identifier (inode or identifier)","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number for pagination (1-indexed)","schema":{"type":"integer","format":"int32","default":1},"example":1},{"name":"per_page","in":"query","description":"Number of roles to return per page (max: 100)","schema":{"type":"integer","format":"int32","default":40},"example":40}],"responses":{"200":{"description":"Permissions retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPaginatedDataView"}}}},"400":{"description":"Bad request - invalid query parameters (page < 1 or per_page not in 1-100 range)","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - user lacks permission to view asset","content":{"application/json":{}}},"404":{"description":"Asset not found","content":{"application/json":{}}}}},"put":{"tags":["Permissions"],"summary":"Update asset permissions","description":"Replaces all permissions for a specific asset. If the asset is currently inheriting permissions, inheritance will be automatically broken. Only admin users can access this endpoint. Use cascade=true to trigger an async job that removes individual permissions from descendant assets.","operationId":"updateAssetPermissions","parameters":[{"name":"assetId","in":"path","description":"Asset identifier (inode or identifier)","required":true,"schema":{"type":"string"}},{"name":"cascade","in":"query","description":"If true, triggers async job to cascade permissions to descendants","schema":{"type":"boolean","default":false}}],"requestBody":{"description":"Permission update data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAssetPermissionsForm"}}},"required":true},"responses":{"200":{"description":"Permissions updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityUpdatePermissionsView"}}}},"400":{"description":"Bad request - invalid request body or role IDs","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - user is not admin or lacks EDIT_PERMISSIONS on asset","content":{"application/json":{}}},"404":{"description":"Asset not found","content":{"application/json":{}}},"500":{"description":"Failed to update permissions","content":{"application/json":{}}}}}},"/api/v1/permissions/_bycontent":{"get":{"tags":["Permissions"],"summary":"Get permission for a Contentlet","description":"Retrieves permissions for a specific contentlet by its identifier. Only admin users can access this endpoint. Optionally filter by permission type (READ, WRITE, PUBLISH).","operationId":"getByContentlet","parameters":[{"name":"contentletId","in":"query","description":"Contentlet identifier","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","description":"Permission type (READ, WRITE, PUBLISH)","schema":{"type":"string","default":"READ"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPermissionView"}}}},"403":{"description":"If not admin user"}}}},"/api/v1/permissions/_bycontent/_groupbytype":{"get":{"tags":["Permissions"],"summary":"Get permissions roles group by type for a Contentlet","description":"Retrieves permissions for a specific contentlet grouped by permission type (READ, WRITE, PUBLISH). Only admin users or content owners can access this endpoint.","operationId":"getByContentletGroupByType","parameters":[{"name":"contentletId","in":"query","description":"Contentlet identifier","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPermissionView"}}}},"403":{"description":"If not admin user"}}}},"/api/v1/permissions":{"get":{"tags":["Permissions"],"summary":"Get permission metadata","description":"Returns available permission levels and scopes that can be assigned to users and roles","operationId":"getPermissionMetadata","responses":{"200":{"description":"Permission metadata retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPermissionMetadataView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - frontend user attempted access (backend user required)","content":{"application/json":{}}}}}},"/api/v1/permissions/_bypermissiontype":{"get":{"tags":["Permissions"],"summary":"Get permissions by permission type","description":"Load a map of permission type indexed by permissionable types and permissions","operationId":"getPermissionsByPermissionType","parameters":[{"name":"userid","in":"query","description":"User ID","schema":{"type":"string"}},{"name":"permission","in":"query","description":"Permission type (READ, WRITE)","schema":{"type":"string"}},{"name":"permissiontype","in":"query","description":"Permissionable types","schema":{"type":"string"}}],"responses":{"200":{"description":"Permissions retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPermissionsByTypeView"}}}},"400":{"description":"Bad request - invalid parameters","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}}}}},"/api/v1/permissions/role/{roleId}":{"get":{"tags":["Permissions"],"summary":"Get role permissions","description":"Retrieves all hosts and folders where a role has permissions defined, organized by asset with full permission matrices. Admin users can view any role. Non-admin users can only view permissions for roles they belong to.","operationId":"getRolePermissions","parameters":[{"name":"roleId","in":"path","description":"Role identifier","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Role permissions retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityRolePermissionsView"}}}},"400":{"description":"Bad request - invalid role id","content":{"application/json":{}}},"403":{"description":"Forbidden - user does not have access to view this role's permissions","content":{"application/json":{}}}}}},"/api/v1/permissions/user/{userId}":{"get":{"tags":["Permissions"],"summary":"Get user permissions","description":"Retrieves permissions for a user's individual role, organized by assets (hosts and folders). Admin users can view any user's permissions. Non-admin users can only view their own permissions.","operationId":"getUserPermissions","parameters":[{"name":"userId","in":"path","description":"User ID or email address","required":true,"schema":{"type":"string"},"example":"dotcms.org.1"},{"name":"page","in":"query","description":"Page number (1-based)","schema":{"type":"integer","format":"int32","default":1}},{"name":"per_page","in":"query","description":"Items per page","schema":{"type":"integer","format":"int32","default":40}}],"responses":{"200":{"description":"User permissions retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPaginatedDataView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - non-admin user attempted to view another user's permissions","content":{"application/json":{}}},"404":{"description":"User not found","content":{"application/json":{}}}}}},"/api/v1/permissions/{assetId}/_reset":{"put":{"tags":["Permissions"],"summary":"Reset asset permissions to inherited","description":"Removes all individual permissions from an asset, making it inherit permissions from its parent in the hierarchy. Only admin users can access this endpoint. Returns 409 Conflict if the asset already inherits.","operationId":"resetAssetPermissions","parameters":[{"name":"assetId","in":"path","description":"Asset identifier (inode or identifier)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Permissions reset successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityResetPermissionsView"}}}},"400":{"description":"Bad request - invalid asset ID","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - user is not admin","content":{"application/json":{}}},"404":{"description":"Asset not found","content":{"application/json":{}}},"409":{"description":"Conflict - asset already inherits permissions from parent","content":{"application/json":{}}}}}},"/api/v1/permissions/role/{roleId}/asset/{assetId}":{"put":{"tags":["Permissions"],"summary":"Update role permissions on asset","description":"Updates permissions for a specific role on a host or folder. Automatically breaks permission inheritance if the asset currently inherits. Only admin users can access this endpoint. Omitting a scope preserves existing permissions; empty array removes permissions.","operationId":"updateRolePermissions","parameters":[{"name":"roleId","in":"path","description":"Role identifier","required":true,"schema":{"type":"string"}},{"name":"assetId","in":"path","description":"Asset identifier (Host ID, Host Name, or Folder ID)","required":true,"schema":{"type":"string"}},{"name":"cascade","in":"query","description":"If true, cascades permissions to all child assets","schema":{"type":"boolean","default":false}}],"requestBody":{"description":"Permission data by scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRolePermissionsForm"}}},"required":true},"responses":{"200":{"description":"Permissions updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityUpdateRolePermissionsView"}}}},"400":{"description":"Bad request - invalid permission level or scope","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - user lacks EDIT_PERMISSIONS on asset or is not admin","content":{"application/json":{}}},"404":{"description":"Role or asset not found","content":{"application/json":{}}},"500":{"description":"Failed to update permissions","content":{"application/json":{}}}}}},"/api/v1/permissions/user/{userId}/asset/{assetId}":{"put":{"tags":["Permissions"],"summary":"Update user permissions on asset","description":"Saves permissions for a user's individual role on a specific asset (host or folder). This endpoint assigns permissions directly to the user's individual role. If the asset inherits permissions, inheritance will be broken automatically before saving. Optionally cascade permissions to descendants (removes their individual permissions). Only admin users can update permissions.","operationId":"updateUserPermissions","parameters":[{"name":"userId","in":"path","description":"User ID or email address","required":true,"schema":{"type":"string"},"example":"dotcms.org.1"},{"name":"assetId","in":"path","description":"Asset identifier (host ID or folder inode)","required":true,"schema":{"type":"string"},"example":"48190c8c-42c4-46af-8d1a-0cd5db894797"}],"requestBody":{"description":"Permission updates to apply. Use empty arrays to remove all permissions for a scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveUserPermissionsForm"}}},"required":true},"responses":{"200":{"description":"User permissions updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySaveUserPermissionsView"}}}},"400":{"description":"Bad request - invalid input (see error message for details)","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - admin access required or user lacks EDIT_PERMISSIONS on asset","content":{"application/json":{}}},"404":{"description":"User or asset not found","content":{"application/json":{}}}}}},"/api/v1/redis/{key}":{"get":{"tags":["System"],"operationId":"get_5","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}},"delete":{"tags":["System"],"operationId":"delete_10","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/redis/hash/{key}":{"get":{"tags":["System"],"operationId":"getHash","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}},"delete":{"tags":["System"],"operationId":"deleteHash","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/redis/echo/{message}":{"get":{"tags":["System"],"operationId":"echo","parameters":[{"name":"message","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/redis/incr/{key}":{"get":{"tags":["System"],"operationId":"getIncrement","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}},"put":{"tags":["System"],"operationId":"incrementAsync","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/redis/ping":{"get":{"tags":["System"],"operationId":"ping","responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/redis":{"put":{"tags":["System"],"operationId":"set_1","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/SetForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/redis/hash":{"put":{"tags":["System"],"operationId":"setHash","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/SetHashForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/roles":{"get":{"tags":["Roles"],"summary":"Load root roles","description":"Loads the root roles with optional children roles","operationId":"loadRootRoles","parameters":[{"name":"loadChildrenRoles","in":"query","description":"Load children roles","schema":{"type":"boolean","default":true}}],"responses":{"200":{"description":"Root roles retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityRoleViewListView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - backend user required","content":{"application/json":{}}}}},"post":{"tags":["Roles"],"summary":"Create new role","description":"Creates a new role in the system. Only admins can add roles.","operationId":"createRole","requestBody":{"description":"Role information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleForm"}}},"required":true},"responses":{"200":{"description":"Role created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleResponseEntityView"}}}},"400":{"description":"Bad request - invalid role data or role name failed","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - admin permissions required","content":{"application/json":{}}}}}},"/api/v1/roles/{roleid}/users/{userId}":{"post":{"tags":["Roles"],"summary":"Grant a role to a user","description":"Grants the role to the user as a DIRECT membership. The operation is IDEMPOTENT: granting a role the user already holds returns 200 and changes nothing — no duplicate membership is created and retries are safe, even when the role's editUsers flag has since been turned off. Note the inherited-membership behavior (legacy parity): role membership is inherited DOWN the role tree, so a user holding a parent role implicitly holds every child role. Granting a role the user already INHERITS this way also returns 200 but does NOT create a direct membership — the user will not appear in the role's direct-users list afterwards. Roles whose editUsers flag is false cannot be granted (403); workflow and system roles are non-grantable because that flag is false on them.","operationId":"addUserToRole","parameters":[{"name":"roleid","in":"path","description":"Id of the role to grant","required":true,"schema":{"type":"string"}},{"name":"userId","in":"path","description":"Id of the user to grant the role to","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"User holds the role after the call; the response carries the granted roleId and a minimal user payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityRoleUserGrantView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - admin permissions required, or the role's editUsers flag is false","content":{"application/json":{}}},"404":{"description":"Role or user not found","content":{"application/json":{}}}}}},"/api/v1/roles/checkuserroles/userid/{userId}/roleids/{roleIds}":{"get":{"tags":["Roles"],"summary":"Check user roles","description":"Verifies that a user is assigned to one of the specified role IDs","operationId":"checkUserRoles","parameters":[{"name":"userId","in":"path","description":"User ID to check","required":true,"schema":{"type":"string"}},{"name":"roleIds","in":"path","description":"Comma-separated list of role IDs","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Role check completed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityRoleOperationView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}}},"/api/v1/roles/{roleid}":{"get":{"tags":["Roles"],"summary":"Load role by role ID","description":"Load role based on the role id with optional children roles","operationId":"loadRoleByRoleId","parameters":[{"name":"roleid","in":"path","description":"Role ID","required":true,"schema":{"type":"string"}},{"name":"loadChildrenRoles","in":"query","description":"Load children roles","schema":{"type":"boolean","default":true}}],"responses":{"200":{"description":"Role retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityRoleDetailView"}}}},"400":{"description":"Bad request - invalid role ID","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - backend user required","content":{"application/json":{}}},"404":{"description":"Role not found","content":{"application/json":{}}}}},"put":{"tags":["Roles"],"summary":"Update a role","description":"Updates an existing role's name, key, description, can-grant flags and parent. PUT is a full replace: every field of the role is overwritten from the request body, so clients must send the complete role representation — omitted fields are reset (booleans default to false, omitted roleKey/description are cleared, omitted parentRoleId reparents to root). A null parentRoleId turns the role into a root role. Reparenting under the role's own descendant is rejected. System and locked roles cannot be updated. Note: the role is updated in place — grants and permissions attached to the role are preserved.","operationId":"updateRole","parameters":[{"name":"roleid","in":"path","description":"Id of the role to update","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Role information — same shape as POST /v1/roles","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleForm"}}},"required":true},"responses":{"200":{"description":"Role updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityRoleDetailView"}}}},"400":{"description":"Bad request - invalid role name, or the reparent would create a hierarchy cycle","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - admin permissions required, or the role is a system or locked role","content":{"application/json":{}}},"404":{"description":"Role or parent role not found","content":{"application/json":{}}},"409":{"description":"Conflict - duplicate role key, or duplicate role name under the same parent","content":{"application/json":{}}}}},"delete":{"tags":["Roles"],"summary":"Delete a role","description":"Deletes a role. The deletion CASCADES and is not reversible: the role is removed from all users that have it, all permissions granted to the role are deleted, and its layout (tool-group) assignments are detached. The response reports how many users were affected. Deletion is rejected when the role has child roles or is referenced by a workflow action's Assign To (409), and for system or locked roles (403).","operationId":"deleteRole","parameters":[{"name":"roleid","in":"path","description":"Id of the role to delete","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Role deleted successfully; usersAffected reports the cascade blast radius","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityRoleDeletionView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - admin permissions required, or the role is a system or locked role","content":{"application/json":{}}},"404":{"description":"Role not found","content":{"application/json":{}}},"409":{"description":"Conflict - the role has child roles, or a workflow action references it","content":{"application/json":{}}}}}},"/api/v1/roles/layouts":{"get":{"tags":["Roles"],"summary":"Get all layouts","description":"Get all layouts (tool groups) in the system. Requires an authenticated back-end user with access to the Roles portlet.","operationId":"getAllLayouts","responses":{"200":{"description":"Layouts retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayoutMapResponseEntityView"}}}},"401":{"description":"Unauthorized - authentication required, or the caller is not a backend user with access to the Roles portlet","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}},"post":{"tags":["Roles"],"summary":"Save role layouts","description":"Saves a set of layouts to a role","operationId":"saveRoleLayouts","requestBody":{"description":"Role and layout information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleLayoutForm"}}},"required":true},"responses":{"200":{"description":"Layouts saved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityRoleOperationView"}}}},"400":{"description":"Bad request - invalid role or layout data","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - admin permissions required","content":{"application/json":{}}}}},"delete":{"tags":["Roles"],"summary":"Delete role layouts","description":"Deletes a set of layouts from a role","operationId":"deleteRoleLayouts","requestBody":{"description":"Role and layout information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleLayoutForm"}}},"required":true},"responses":{"200":{"description":"Layouts deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityRoleOperationView"}}}},"400":{"description":"Bad request - invalid role or layout data","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - admin permissions required","content":{"application/json":{}}}}}},"/api/v1/roles/{roleId}/layouts":{"get":{"tags":["Roles"],"summary":"Find role layouts","description":"Returns a collection of layouts associated to a role","operationId":"findRoleLayouts","parameters":[{"name":"roleId","in":"path","description":"Role ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Role layouts retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityLayoutList"}}}},"400":{"description":"Bad request - invalid role ID","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - roles portlet access required","content":{"application/json":{}}}}}},"/api/v1/roles/users/{userIdOrEmail}":{"get":{"tags":["Roles"],"summary":"Load user roles","description":"Loads the user roles","operationId":"loadUserRoles","parameters":[{"name":"userIdOrEmail","in":"path","description":"User id or email","required":true,"schema":{"type":"string","default":"true"}}],"responses":{"200":{"description":"User roles retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityRoleViewListView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - backend user required","content":{"application/json":{}}}}}},"/api/v1/roles/{roleid}/rolehierarchyanduserroles":{"get":{"tags":["Roles"],"summary":"Load users and roles by role ID","description":"Load the user and roles by role id with optional hierarchy and filtering","operationId":"loadUsersAndRolesByRoleId","parameters":[{"name":"roleid","in":"path","description":"Role ID","required":true,"schema":{"type":"string"}},{"name":"roleHierarchyForAssign","in":"query","description":"Include role hierarchy","schema":{"type":"boolean","default":false}},{"name":"name","in":"query","description":"Role name filter prefix","schema":{"type":"string"}}],"responses":{"200":{"description":"Users and roles retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityRoleListView"}}}},"400":{"description":"Bad request - invalid role ID","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - backend user required","content":{"application/json":{}}},"404":{"description":"Role not found","content":{"application/json":{}}}}}},"/api/v1/roles/{roleid}/users":{"get":{"tags":["Roles"],"summary":"Get the users directly granted a role","description":"Returns the paginated list of users directly granted the given role, using the standard user serialization (email address included). Grants inherited through the role hierarchy are not included.","operationId":"loadUsersByRoleId","parameters":[{"name":"roleid","in":"path","description":"Id of the role to list users for","required":true,"schema":{"type":"string"}},{"name":"filter","in":"query","description":"Filter matching user id, first name, last name, email or full name","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number for pagination","schema":{"type":"integer","format":"int32","default":1}},{"name":"per_page","in":"query","description":"Number of items per page","schema":{"type":"integer","format":"int32","default":40}},{"name":"orderby","in":"query","description":"Column name for sorting results","schema":{"type":"string"}},{"name":"direction","in":"query","description":"Sorting direction: ASC or DESC","schema":{"type":"string","default":"ASC"}}],"responses":{"200":{"description":"Users retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPaginatedDataView"}}}},"400":{"description":"Bad request - invalid pagination or sorting parameters","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - roles portlet access required","content":{"application/json":{}}},"404":{"description":"Role not found","content":{"application/json":{}}}}},"delete":{"tags":["Roles"],"summary":"Remove users from a role","description":"Bulk-removes the DIRECT membership of the given users from the role. The batch has PARTIAL-SUCCESS semantics: it never fails as a whole once the role resolves — every removable membership is removed and every other entry is reported in the skipped list with a reason: not_found (no user matches the id), inherited (the user is not a direct member — the membership is inherited through the role hierarchy, or the user is not a member at all; inherited membership can only be revoked by removing the user from the ancestor role that grants it), or error (unexpected per-user failure, logged server-side). Removals are committed per user, so entries already processed stay removed regardless of later entries. Only user-assignable roles (editUsers=true) accept membership changes: a role whose editUsers flag is false — e.g. a user's individual role or a system role — is rejected with 403 for the whole request, mirroring the grant endpoint.","operationId":"removeUsersFromRole","parameters":[{"name":"roleid","in":"path","description":"Id of the role to remove users from","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Ids of the users to remove from the role","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleUsersForm"}}},"required":true},"responses":{"200":{"description":"Batch processed; removedUserIds and skipped report the per-user outcomes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityRoleUsersRemovalView"}}}},"400":{"description":"Bad request - missing body, empty userIds, or null/blank entries","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - admin permissions required, or the role's editUsers flag is false","content":{"application/json":{}}},"404":{"description":"Role not found","content":{"application/json":{}}}}}},"/api/v1/roles/_search":{"get":{"tags":["Roles"],"summary":"Search Roles","description":"Search and filter roles by name, key, or ID with pagination support. Includes options to filter by workflow roles.","operationId":"searchRoles","parameters":[{"name":"searchName","in":"query","description":"Value to filter by role name","schema":{"type":"string","default":""}},{"name":"searchKey","in":"query","description":"Value to filter by role key","schema":{"type":"string","default":""}},{"name":"roleId","in":"query","description":"Value for specific role id","schema":{"type":"string","default":""}},{"name":"start","in":"query","description":"Offset on pagination","schema":{"type":"integer","format":"int32","default":0}},{"name":"count","in":"query","description":"Size on pagination","schema":{"type":"integer","format":"int32","default":20}},{"name":"includeUserRoles","in":"query","description":"Set false if do not want to include user rules","schema":{"type":"boolean","default":true}},{"name":"includeWorkflowRoles","in":"query","description":"Set to true if want to include the workflow roles","schema":{"type":"boolean","default":false}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySmallRoleView"}}}}}}},"/api/v1/system/ruleengine/actionlets":{"get":{"tags":["Rules Engine"],"operationId":"list_8","responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/system/ruleengine/conditionlets":{"get":{"tags":["Rules Engine"],"operationId":"list_9","responses":{"default":{"description":"default response","content":{"application/json":{}}}}}},"/api/v1/storages/hello":{"get":{"tags":["System Storage"],"operationId":"hello","responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/storages/chain/_replicate/{from}/to/{to}":{"get":{"tags":["System Storage"],"operationId":"replicateStorages","parameters":[{"name":"from","in":"path","required":true,"schema":{"type":"string","enum":["FILE_SYSTEM","DB","S3","MEMORY","DEFAULT_CHAIN","CHAIN1","CHAIN2","CHAIN3"]}},{"name":"to","in":"path","required":true,"schema":{"type":"array","items":{"type":"object","properties":{"matrixParameters":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"path":{"type":"string"}}}}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/logs/{fileName}/_tail":{"get":{"tags":["TailLog"],"operationId":"getLogs","parameters":[{"name":"fileName","in":"path","required":true,"schema":{"pattern":".+","type":"string"}},{"name":"linesBack","in":"query","schema":{"type":"integer","format":"int32"}}],"responses":{"default":{"description":"default response","content":{"text/event-stream":{"schema":{"$ref":"#/components/schemas/EventOutput"}}}}}}},"/api/v1/logs":{"get":{"tags":["TailLog"],"summary":"List available log files","description":"Returns log file names from the configured log folder (TAIL_LOG_LOG_FOLDER), filtered by TAIL_LOG_FILE_REGEX and sorted alphabetically. The names are used as the {fileName} path parameter for the tail and download endpoints.","operationId":"listLogFiles","responses":{"200":{"description":"Sorted list of log file names","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityListStringView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - CMS Administrator role and Maintenance portlet access required","content":{"application/json":{}}}}}},"/api/v1/temp/byUrl":{"post":{"tags":["Temporary Files"],"summary":"Create temporary file from a remote URL","description":"Downloads a file from the specified remote URL and stores it as a temporary resource. The temporary file can then be referenced when creating content. The URL must pass validation to prevent SSRF attacks. Anonymous access can be allowed via the TEMP_RESOURCE_ALLOW_ANONYMOUS configuration property.\n\n**Use this endpoint to supply files for binary and image fields** (`ImmutableBinaryField`, `ImmutableImageField`) when a file is already accessible by URL. Send `{\"remoteUrl\": \"https://example.com/image.jpg\"}` and pass `tempFiles[0].id` (e.g. `\"temp_5311313004\"`) as the field value in the workflow fire endpoint. See `PUT /api/v1/workflow/actions/default/fire/{systemAction}` for the full pattern.","operationId":"createTempFileFromUrl","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoteUrlForm"}}}},"responses":{"200":{"description":"Temporary file created from URL successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TempFilesView"},"example":{"tempFiles":[{"id":"temp_5311313004","fileName":"hero.jpg","length":84471,"mimeType":"image/jpeg","image":true,"referenceUrl":"/dA/temp_5311313004/tmp/hero.jpg","metadata":{"contentType":"image/jpeg","height":522,"width":900,"fileSize":84471,"isImage":true}}]}}}},"400":{"description":"Invalid URL, missing URL, or invalid origin/referer"},"401":{"description":"Authentication required (when anonymous access is disabled)"},"404":{"description":"Temp file resource is not enabled"}}}},"/api/v1/temp":{"post":{"tags":["Temporary Files"],"summary":"Upload temporary files via multipart form","description":"Uploads one or more files as temporary resources via multipart form data. Files are stored temporarily and can be referenced when creating content. The response streams back a JSON object with the created temporary file references. Anonymous access can be allowed via the TEMP_RESOURCE_ALLOW_ANONYMOUS configuration property.\n\n**Use this endpoint to supply files for binary and image fields** (`ImmutableBinaryField`, `ImmutableImageField`) when creating or updating contentlets. After uploading, pass `tempFiles[0].id` (e.g. `\"temp_5311313004\"`) as the field value in the workflow fire endpoint. See `PUT /api/v1/workflow/actions/default/fire/{systemAction}` for the full pattern.","operationId":"uploadTempFileMultipart","parameters":[{"name":"maxFileLength","in":"query","description":"Maximum file length in bytes (-1 for default)","schema":{"type":"string","default":"-1"}}],"requestBody":{"description":"Multipart form data with one or more files to upload temporarily. Files are stored for a limited time and can be referenced when creating content.","content":{"multipart/form-data":{"schema":{"type":"object","description":"One or more file parts to upload"}}},"required":true},"responses":{"200":{"description":"Temporary files created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TempFilesView"},"example":{"tempFiles":[{"id":"temp_5311313004","fileName":"hero.jpg","length":84471,"mimeType":"image/jpeg","image":true,"referenceUrl":"/dA/temp_5311313004/tmp/hero.jpg","metadata":{"contentType":"image/jpeg","height":522,"width":900,"fileSize":84471,"isImage":true}}]}}}},"400":{"description":"Invalid file, origin, or referer"},"401":{"description":"Authentication required (when anonymous access is disabled)"},"404":{"description":"Temp file resource is not enabled"}}}},"/api/v1/templates/_archive":{"put":{"tags":["Template"],"summary":"Archive templates in bulk","description":"Archives one or more templates identified by their identifiers. The user must have Edit permissions on each template. Returns a bulk result with success count and details of any failures.","operationId":"archiveTemplates","requestBody":{"description":"List of template identifiers to archive","content":{"*/*":{"schema":{"type":"array","items":{"type":"string"}}}},"required":true},"responses":{"200":{"description":"Bulk archive operation completed. Check the response body for individual success/failure details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBulkResultView"}}}},"400":{"description":"Request body is empty or not a valid list of identifiers","content":{"application/json":{}}},"401":{"description":"Authentication required","content":{"application/json":{}}}}}},"/api/v1/templates/{templateId}/_copy":{"put":{"tags":["Template"],"summary":"Copy a template","description":"Creates a duplicate of the specified template. The copy will be a new working version with a new identifier. Returns 404 if the template does not exist.","operationId":"copyTemplate","parameters":[{"name":"templateId","in":"path","description":"Template identifier to copy","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Template copied successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityTemplateView"}}}},"401":{"description":"Authentication required","content":{"application/json":{}}},"404":{"description":"Template with the given identifier does not exist","content":{"application/json":{}}}}}},"/api/v1/templates":{"get":{"tags":["Template"],"summary":"List templates","description":"Returns a paginated list of templates that the authenticated user has READ permissions on. Each template returned is the current working version. Results can be filtered by title, site, and archive status. Use hostId='*' to search across all sites.","operationId":"listTemplates","parameters":[{"name":"filter","in":"query","description":"Filter templates by title or identifier pattern","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number to return (zero-based)","schema":{"type":"integer","format":"int32"}},{"name":"per_page","in":"query","description":"Number of items per page (default: 40)","schema":{"type":"integer","format":"int32","default":40}},{"name":"orderby","in":"query","description":"Field to order results by (default: mod_date)","schema":{"type":"string","default":"mod_date"}},{"name":"direction","in":"query","description":"Sort direction: ASC or DESC (default: DESC)","schema":{"type":"string","default":"DESC"}},{"name":"host","in":"query","description":"Site identifier to filter templates by. Use '*' to search across all sites","schema":{"type":"string"}},{"name":"archive","in":"query","description":"If true, returns only archived templates (default: false)","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Paginated list of templates returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityListTemplateView"}}}},"401":{"description":"Authentication required","content":{"application/json":{}}}}},"put":{"tags":["Template"],"summary":"Update an existing template","description":"Saves a new working version of an existing template. The form must contain the template identifier. The 'theme' field in the form corresponds to the theme folder identifier (referred to as 'themeId' in other endpoints). Returns 404 if the template does not exist.\n\nWhen `drawed` is true: `body` is REQUIRED and non-empty (else 400 'body required when drawed'), and `theme` MUST resolve to a theme **folder** identifier (else 400 'theme must be a folder identifier'). Include `drawedBody` (the layout JSON) so the template stays a real drawn template.\n\nFor a themed drawn template, `body` is a generated compatibility shell and is not used to assemble the rendered page; the theme's `template.vtl` and `drawedBody` are authoritative. A persisted `/themes/null/` reference in that shell is benign, and changing `body` does not repair or affect themed drawn rendering because the server regenerates it.","operationId":"updateTemplate","requestBody":{"description":"Template data to update. Must include the template identifier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateForm"}}},"required":true},"responses":{"200":{"description":"Template updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityTemplateView"}}}},"400":{"description":"Invalid template data","content":{"application/json":{}}},"401":{"description":"Authentication required","content":{"application/json":{}}},"404":{"description":"Template with the given identifier does not exist","content":{"application/json":{}}}}},"post":{"tags":["Template"],"summary":"Create a new template","description":"Creates a new working version of a template. The 'theme' field in the form corresponds to the theme folder identifier (referred to as 'themeId' in other endpoints). If a layout is provided, the template is saved as a designed (drawed) template with its layout.\n\nWhen `drawed` is true (a layout-designer template): `body` is REQUIRED and must be non-empty (a null body returns 400 'body required when drawed'), and `theme` MUST resolve to a theme **folder** identifier — a host id or other non-folder id returns 400 'theme must be a folder identifier'. Provide `drawedBody` (the layout JSON) as well so the template is a real drawn template.\n\nFor a themed drawn template, `body` is a generated compatibility shell and is not the render source; rendering flows through the theme's `template.vtl` and `drawedBody`. The stored shell may contain `/themes/null/` even when `theme` and `themeName` are correct. That value is benign for this template kind, and PUT-updating `body` will only cause the shell to be regenerated.","operationId":"createTemplate","requestBody":{"description":"Template data to create","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateForm"}}},"required":true},"responses":{"200":{"description":"Template created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityTemplateView"}}}},"400":{"description":"Invalid template data","content":{"application/json":{}}},"401":{"description":"Authentication required","content":{"application/json":{}}}}},"delete":{"tags":["Template"],"summary":"Delete templates in bulk","description":"Permanently deletes one or more templates identified by their identifiers. Each template must be archived and have no page dependencies (no pages referencing it). The user must have Edit permissions. Returns a bulk result with success count and details of any failures.","operationId":"deleteTemplates","requestBody":{"description":"List of template identifiers to delete","content":{"*/*":{"schema":{"type":"array","items":{"type":"string"}}}},"required":true},"responses":{"200":{"description":"Bulk delete operation completed. Check the response body for individual success/failure details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBulkResultView"}}}},"400":{"description":"Request body is empty or not a valid list of identifiers","content":{"application/json":{}}},"401":{"description":"Authentication required","content":{"application/json":{}}}}}},"/api/v1/templates/image":{"post":{"tags":["Template"],"summary":"Get the image associated with a template","description":"Returns metadata about the image contentlet associated with a template, including the image's inode, name, identifier, and file extension. Returns 404 if the template does not exist or has no associated image.","operationId":"fetchTemplateImage","requestBody":{"description":"Form containing the template identifier to look up the image for","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateImageForm"}}},"required":true},"responses":{"200":{"description":"Template image metadata returned successfully","content":{"application/json":{"schema":{"type":"object","description":"Template image metadata containing inode, name, identifier, and file extension of the associated image contentlet"}}}},"401":{"description":"Authentication required","content":{"application/json":{}}},"404":{"description":"Template does not exist or has no associated image","content":{"application/json":{}}}}}},"/api/v1/templates/{templateId}/live":{"get":{"tags":["Template"],"summary":"Get live version of a template","description":"Returns the live (published) version of a template identified by its identifier. Throws a 404 error if no live version exists.","operationId":"getLiveTemplateById","parameters":[{"name":"templateId","in":"path","description":"Template identifier","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Live template version returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityTemplateView"}}}},"401":{"description":"Authentication required","content":{"application/json":{}}},"404":{"description":"Live version of the template does not exist","content":{"application/json":{}}}}}},"/api/v1/templates/{templateId}/working":{"get":{"tags":["Template"],"summary":"Get working version of a template","description":"Returns the working (latest draft) version of a template identified by its identifier. Throws a 404 error if the template does not exist.","operationId":"getWorkingTemplateById","parameters":[{"name":"templateId","in":"path","description":"Template identifier","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Working template version returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityTemplateView"}}}},"401":{"description":"Authentication required","content":{"application/json":{}}},"404":{"description":"Working version of the template does not exist","content":{"application/json":{}}}}}},"/api/v1/templates/_publish":{"put":{"tags":["Template"],"summary":"Publish templates in bulk","description":"Publishes one or more templates identified by their identifiers. The user must have Publish permissions on each template, and the templates must not be archived. Returns a bulk result with success count and details of any failures.","operationId":"publishTemplates","requestBody":{"description":"List of template identifiers to publish","content":{"*/*":{"schema":{"type":"array","items":{"type":"string"}}}},"required":true},"responses":{"200":{"description":"Bulk publish operation completed. Check the response body for individual success/failure details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBulkResultView"}}}},"400":{"description":"Request body is empty or not a valid list of identifiers","content":{"application/json":{}}},"401":{"description":"Authentication required","content":{"application/json":{}}}}}},"/api/v1/templates/_savepublish":{"put":{"tags":["Template"],"summary":"Save and publish a template","description":"Saves and immediately publishes a template in a single operation. If the form contains an identifier, it updates the existing template; otherwise, it creates a new one. The 'theme' field in the form corresponds to the theme folder identifier (referred to as 'themeId' in other endpoints). Requires Publish permissions.","operationId":"saveAndPublishTemplate","requestBody":{"description":"Template data to save and publish. Optionally include identifier to update an existing template.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/TemplateForm"}}},"required":true},"responses":{"200":{"description":"Template saved and published successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityTemplateView"}}}},"400":{"description":"Invalid template data","content":{"application/json":{}}},"401":{"description":"Authentication required","content":{"application/json":{}}},"403":{"description":"User does not have Publish permissions on the template","content":{"application/json":{}}}}}},"/api/v1/templates/draft":{"put":{"tags":["Template"],"summary":"Save a template as draft","description":"Saves a new draft version of an existing template without publishing it. The form must contain the template identifier. The 'theme' field in the form corresponds to the theme folder identifier (referred to as 'themeId' in other endpoints). Returns 404 if the template does not exist.","operationId":"saveTemplateDraft","requestBody":{"description":"Template draft data to save. Must include the template identifier.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/TemplateForm"}}},"required":true},"responses":{"200":{"description":"Template draft saved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityTemplateView"}}}},"400":{"description":"Invalid template data","content":{"application/json":{}}},"401":{"description":"Authentication required","content":{"application/json":{}}},"404":{"description":"Template with the given identifier does not exist","content":{"application/json":{}}}}}},"/api/v1/templates/_unarchive":{"put":{"tags":["Template"],"summary":"Unarchive templates in bulk","description":"Unarchives one or more previously archived templates identified by their identifiers. The user must have Edit permissions on each template and the templates must be currently archived. Returns a bulk result with success count and details of any failures.","operationId":"unarchiveTemplates","requestBody":{"description":"List of template identifiers to unarchive","content":{"*/*":{"schema":{"type":"array","items":{"type":"string"}}}},"required":true},"responses":{"200":{"description":"Bulk unarchive operation completed. Check the response body for individual success/failure details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBulkResultView"}}}},"400":{"description":"Request body is empty or not a valid list of identifiers","content":{"application/json":{}}},"401":{"description":"Authentication required","content":{"application/json":{}}}}}},"/api/v1/templates/_unpublish":{"put":{"tags":["Template"],"summary":"Unpublish templates in bulk","description":"Unpublishes one or more templates identified by their identifiers. The user must have Publish permissions on each template, and the templates must not be archived. Returns a bulk result with success count and details of any failures.","operationId":"unpublishTemplates","requestBody":{"description":"List of template identifiers to unpublish","content":{"*/*":{"schema":{"type":"array","items":{"type":"string"}}}},"required":true},"responses":{"200":{"description":"Bulk unpublish operation completed. Check the response body for individual success/failure details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBulkResultView"}}}},"400":{"description":"Request body is empty or not a valid list of identifiers","content":{"application/json":{}}},"401":{"description":"Authentication required","content":{"application/json":{}}}}}},"/api/v1/themes/id/{id}":{"get":{"tags":["Theme"],"summary":"Get theme by ID","description":"Returns a single theme given its folder inode ID. The 'theme' identifier in this endpoint corresponds to 'themeId' used in template endpoints.","operationId":"findThemeById","parameters":[{"name":"id","in":"path","description":"Theme folder inode identifier","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Theme returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapStringObjectView"}}}},"401":{"description":"Authentication required"},"404":{"description":"Theme not found"}}}},"/api/v1/themes":{"get":{"tags":["Theme"],"summary":"List themes with pagination","description":"Returns a paginated list of themes for a given host (site). Results can be filtered by a search parameter and sorted in ascending or descending order. The hostId parameter is required. Note: The 'theme' identifier returned by this endpoint corresponds to 'themeId' used in template endpoints.","operationId":"findThemes","parameters":[{"name":"hostId","in":"query","description":"Host (site) identifier to filter themes by (required)","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number for pagination","schema":{"type":"integer","format":"int32"}},{"name":"per_page","in":"query","description":"Number of items per page (-1 for default)","schema":{"type":"integer","format":"int32","default":-1}},{"name":"direction","in":"query","description":"Sort direction: ASC or DESC","schema":{"type":"string","default":"ASC"}},{"name":"searchParam","in":"query","description":"Search term to filter themes (Lucene criteria: +catchall:*searchParam*)","schema":{"type":"string"}}],"responses":{"200":{"description":"Themes returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPaginatedArrayListMapView"}}}},"400":{"description":"Missing or invalid hostId parameter"},"401":{"description":"Authentication required"}}}},"/api/v1/usage/summary":{"get":{"tags":["Usage"],"summary":"Get usage dashboard summary","description":"Retrieves key business metrics optimized for dashboard display including content, sites, users, and system metrics. Supports optional profile parameter (MINIMAL, STANDARD, FULL) to override the default metric collection profile.","operationId":"getSummary","parameters":[{"name":"profile","in":"query","description":"Metric collection profile to use. MINIMAL (default): Fast collection with 10-15 core metrics. STANDARD: Comprehensive collection with ~50 metrics. FULL: Complete collection with all available metrics. This allows administrators to view additional metrics beyond the default MINIMAL profile.","schema":{"type":"string","enum":["MINIMAL","STANDARD","FULL"],"default":"MINIMAL"}}],"responses":{"200":{"description":"Dashboard summary retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityUsageSummaryView"}}}},"400":{"description":"Invalid profile parameter"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"500":{"description":"Internal Server Error"}}}},"/api/v1/users/activate/{userId}":{"patch":{"tags":["Users"],"summary":"Active an existing user.","operationId":"activateUser","parameters":[{"name":"userId","in":"path","description":"Identifier of an user.\n\nExample value: `b9d89c80-3d88-4311-8365-187323c96436` ","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"If success returns a map with the user + user id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUserMapEntityView"}}}},"403":{"description":"If the user is not an admin or access to the role + user layouts or does have permission, it will return a 403.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUserMapEntityView"}}}},"404":{"description":"If the user to update does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUserMapEntityView"}}}},"400":{"description":"If the user information is not valid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUserMapEntityView"}}}}}}},"/api/v1/users":{"put":{"tags":["Users"],"summary":"Update an existing user.","description":"Updates an existing user's information including personal details, roles, and account settings. Only admin users or users with appropriate portlet access can perform this operation. The optional roles list carries role KEYS and is the user's complete desired set of user-assignable roles (editUsers=true): omit the field to leave roles untouched, send a non-empty list to replace the user-assignable role set, or send an empty list to remove all of the user's user-assignable roles. System-managed memberships (e.g. the user's individual role) are never modified, keys that resolve to no role are ignored, and null or blank entries are rejected with 400. Note that roles without a key cannot be expressed in this list — manage those through the role-centric /v1/roles/{roleId}/users endpoints instead.","operationId":"updateUser","requestBody":{"description":"User update data including personal information, roles, and account settings. The roles list (role keys) is the complete desired set of user-assignable roles: absent = untouched, empty = remove all user-assignable roles, non-empty = replace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserForm"}}},"required":true},"responses":{"200":{"description":"If success returns a map with the user + user id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityUserUpdateView"}}}},"403":{"description":"If the user is not an admin or access to the role + user layouts or does have permission, it will return a 403.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseSiteVariablesEntityView"}}}},"404":{"description":"If the user to update does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseSiteVariablesEntityView"}}}},"400":{"description":"If the user information is not valid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseSiteVariablesEntityView"}}}}}},"post":{"tags":["Users"],"summary":"Create user","description":"Creates a new user. Requires admin privileges or access to Users and Roles portlets. FirstName, LastName, Email and Password are required","operationId":"createUser","requestBody":{"description":"User creation data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserForm"}}},"required":true},"responses":{"200":{"description":"User created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityUserUpdateView"}}}},"400":{"description":"Bad request - missing required fields or invalid data","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions to create users","content":{"application/json":{}}},"409":{"description":"Conflict - user already exists","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}}},"/api/v1/users/deactivate/{userId}":{"patch":{"tags":["Users"],"summary":"Deactivate an existing user.","operationId":"deactivateUser","parameters":[{"name":"userId","in":"path","description":"Identifier of an user.\n\nExample value: `b9d89c80-3d88-4311-8365-187323c96436` ","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"If success returns a map with the user + user id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUserMapEntityView"}}}},"403":{"description":"If the user is not an admin or access to the role + user layouts or does have permission, it will return a 403.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUserMapEntityView"}}}},"404":{"description":"If the user to update does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUserMapEntityView"}}}},"400":{"description":"If the user information is not valid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUserMapEntityView"}}}}}}},"/api/v1/users/{userId}":{"get":{"tags":["Users"],"summary":"Find an user","description":"Returns an user","operationId":"findUser","parameters":[{"name":"userId","in":"path","description":"Identifier of user to retrieve","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"User retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUserMapEntityView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}}}},"delete":{"tags":["Users"],"summary":"Deletes an existing user.","description":"Deletes a user account and reassigns all associated content and permissions to a replacement user. Only admin users or users with appropriate portlet access can perform this operation.","operationId":"deleteUser","parameters":[{"name":"userId","in":"path","description":"Identifier of an user.\n\nExample value: `b9d89c80-3d88-4311-8365-187323c96436` ","required":true,"schema":{"type":"string"}},{"name":"replacementUserId","in":"query","description":"Identifier of an user.\n\nExample value: `b9d89c80-3d88-4311-8365-187323c96436` ","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"If success returns a map with the user + user id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUserDeletedEntityView"}}}},"403":{"description":"If the user is not an admin or access to the role + user layouts or does have permission, it will return a 403.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUserDeletedEntityView"}}}},"404":{"description":"If the user to update does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUserDeletedEntityView"}}}},"400":{"description":"If the user information is not valid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUserDeletedEntityView"}}}}}}},"/api/v1/users/filter":{"get":{"tags":["Users"],"summary":"Filter users","description":"Returns a list of dotCMS users based on specified search criteria with pagination support","operationId":"filterUsers","parameters":[{"name":"query","in":"query","description":"Filter users by user ID, first name, last name, email address, or full name -- or parts of any of them","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number for pagination","schema":{"type":"integer","format":"int32","default":0}},{"name":"per_page","in":"query","description":"Number of items per page","schema":{"type":"integer","format":"int32","default":40}},{"name":"orderby","in":"query","description":"Column name for sorting results","schema":{"type":"string"}},{"name":"direction","in":"query","description":"Sorting direction: ASC or DESC","schema":{"type":"string","default":"ASC"}},{"name":"includeanonymous","in":"query","description":"Include anonymous user in results","schema":{"type":"boolean"}},{"name":"includedefault","in":"query","description":"Include default user in results","schema":{"type":"boolean"}},{"name":"assetinode","in":"query","description":"Asset inode for permission-based filtering","schema":{"type":"string"}},{"name":"permission","in":"query","description":"Permission type for asset-based filtering","schema":{"type":"integer","format":"int32"}},{"name":"roleKey","in":"query","description":"Role key(s) to restrict results to users holding any of them; repeatable and/or comma-separated, e.g. roleKey=DOTCMS_BACK_END_USER","schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"Users retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityListUserView"}}}},"400":{"description":"Bad request - a provided roleKey does not match any existing Role","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}}}}},"/api/v1/users/loginas":{"post":{"tags":["Users"],"summary":"Login as user","description":"Performs user impersonation via the 'Login As' feature, allowing administrators to simulate another user's session","operationId":"loginAsUser","requestBody":{"description":"Login as credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginAsForm"}}},"required":true},"responses":{"200":{"description":"Login as operation successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityLoginAsView"}}}},"400":{"description":"Bad request - invalid user credentials","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication failed","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions or missing Login As role","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}}},"/api/v1/users/loginAsData":{"get":{"tags":["Users"],"summary":"Get login as data","description":"Returns a paginated list of users that can be impersonated (excludes anonymous and default users)","operationId":"getLoginAsData","parameters":[{"name":"filter","in":"query","description":"Filter for user search","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number for pagination","schema":{"type":"integer","format":"int32"}},{"name":"per_page","in":"query","description":"Number of items per page","schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"User list retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityListUserView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}}},"/api/v1/users/logoutas":{"put":{"tags":["Users"],"summary":"Logout as user","description":"Ends user impersonation session and reverts back to the original administrator user","operationId":"logoutAsUser","responses":{"200":{"description":"Logout as operation successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityLoginAsView"}}}},"400":{"description":"Bad request - invalid session state","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}}},"/api/v1/users/current":{"get":{"tags":["Users"],"summary":"Get current user","description":"Returns information about the currently authenticated user","operationId":"getCurrentUser","responses":{"200":{"description":"Current user information retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestUser"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"400":{"description":"Bad request - could not provide current user","content":{"application/json":{}}}}},"put":{"tags":["Users"],"summary":"Update current user","description":"Updates information for the currently authenticated user. May require reauthentication if critical fields are changed.","operationId":"updateCurrentUser","requestBody":{"description":"Current user update data including personal information and password changes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCurrentUserForm"}}},"required":true},"responses":{"200":{"description":"User information updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityUserUpdateView"}}}},"400":{"description":"Bad request - invalid user data or password requirements","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}}},"/api/v1/variants":{"post":{"tags":["Variants"],"summary":"Creates a new content variant","description":"Creates a new content variant with the specified name and description. Variants allow for A/B testing and personalization of content.","operationId":"addVariant_1","requestBody":{"description":"Variant configuration including name and description","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VariantForm"}}},"required":true},"responses":{"200":{"description":"Variant created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityVariantView"}}}},"400":{"description":"Bad request - Invalid variant data or variant already exists"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks required permissions"},"500":{"description":"Internal server error"}}}},"/api/v1/variants/{variantName}/_promote":{"put":{"tags":["Variants"],"summary":"Promotes a variant to become the default","description":"Promotes a content variant to replace the default content version. This action makes the variant content live for all users.","operationId":"promoteVariant_1","parameters":[{"name":"variantName","in":"path","description":"Name of the variant to promote","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Variant promoted successfully"},"400":{"description":"Bad request - Invalid variant name"},"401":{"description":"Unauthorized - User not authenticated"},"403":{"description":"Forbidden - User lacks required permissions"},"404":{"description":"Variant not found"},"500":{"description":"Internal server error"}}}},"/api/v1/versionables/{versionableInode}/_bringback":{"put":{"tags":["Variants"],"operationId":"bringBack","parameters":[{"name":"versionableInode","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/versionables/{versionableInode}":{"delete":{"tags":["Variants"],"operationId":"deleteVersion","parameters":[{"name":"versionableInode","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v1/versionables/{versionableInodeOrIdentifier}":{"get":{"tags":["Variants"],"operationId":"findVersionable","parameters":[{"name":"versionableInodeOrIdentifier","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/vtl/{folder}":{"get":{"tags":["Templates"],"operationId":"get_6","parameters":[{"name":"folder","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}},"put":{"tags":["Templates"],"operationId":"putMultipart_2","parameters":[{"name":"folder","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FormDataMultiPart"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}},"post":{"tags":["Templates"],"operationId":"postMultipart_2","parameters":[{"name":"folder","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FormDataMultiPart"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}},"delete":{"tags":["Templates"],"operationId":"delete_11","parameters":[{"name":"folder","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}},"patch":{"tags":["Templates"],"operationId":"patchMultipart_2","parameters":[{"name":"folder","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FormDataMultiPart"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}}},"/api/vtl/{folder}/{pathParam}":{"get":{"tags":["Templates"],"operationId":"get_7","parameters":[{"name":"folder","in":"path","required":true,"schema":{"type":"string"}},{"name":"pathParam","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}},"put":{"tags":["Templates"],"operationId":"putMultipart_3","parameters":[{"name":"pathParam","in":"path","required":true,"schema":{"pattern":".*","type":"string"}},{"name":"folder","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FormDataMultiPart"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}},"post":{"tags":["Templates"],"operationId":"postMultipart_3","parameters":[{"name":"pathParam","in":"path","required":true,"schema":{"pattern":".*","type":"string"}},{"name":"folder","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FormDataMultiPart"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}},"delete":{"tags":["Templates"],"operationId":"delete_12","parameters":[{"name":"folder","in":"path","required":true,"schema":{"type":"string"}},{"name":"pathParam","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}},"patch":{"tags":["Templates"],"operationId":"patchMultipart_3","parameters":[{"name":"pathParam","in":"path","required":true,"schema":{"pattern":".*","type":"string"}},{"name":"folder","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FormDataMultiPart"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/xml":{},"text/plain":{}}}}}},"/api/vtl/dynamic/{pathParam}":{"get":{"tags":["Templates"],"summary":"Evaluate inline Velocity code (GET)","description":"Evaluates Velocity (VTL) code supplied directly in the request body — no `.vtl` file on disk is required — and returns the result. The code is read from a `velocity` property of the JSON body (properly escaped), or the body may be the raw VTL itself.\n\nThe caller requires the **Scripting Developer** role.\n\n**Response shape** is decided by the submitted code:\n- If the code populates `$dotJSON` (e.g. `$dotJSON.put(\"key\", ...)`), the response is that JSON object.\n- Otherwise the raw evaluated output is returned, with the content type set by the script (defaults to `text/plain`).\n\n**Velocity errors** (syntax/parse errors, method-invocation failures, missing resources) are reported as a `400` with a structured body so an automated caller can locate and fix the offending code instead of receiving partial output. Application-level errors set by the script via `$dotJSON.put(\"errors\", ...)` are also returned as `400`.\n\n**Warnings** — dotCMS evaluates Velocity in non-strict mode, so an undefined reference (`$noSuchVar`) renders as literal text and a method returning `null` produces no output. These likely-typos are collected and, on a successful response, returned in the `X-Dot-Velocity-Warnings` header (a JSON array); on a `400` they appear in the `warnings` field of the body.","operationId":"dynamicGet_2","parameters":[{"name":"pathParam","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}}}},"responses":{"200":{"description":"Velocity evaluated successfully; body is the raw output or the JSON object produced by the script"},"400":{"description":"The submitted Velocity failed to parse or evaluate, or the script reported errors. The body carries the Velocity error detail (message, error type, and line/column when available).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VelocityErrorResponseView"}}}},"403":{"description":"User lacks the Scripting Developer role"}}},"put":{"tags":["Templates"],"summary":"Evaluate inline Velocity code (PUT)","description":"Evaluates Velocity (VTL) code supplied directly in the request body — no `.vtl` file on disk is required — and returns the result. The code is read from a `velocity` property of the JSON body (properly escaped), or the body may be the raw VTL itself.\n\nThe caller requires the **Scripting Developer** role.\n\n**Response shape** is decided by the submitted code:\n- If the code populates `$dotJSON` (e.g. `$dotJSON.put(\"key\", ...)`), the response is that JSON object.\n- Otherwise the raw evaluated output is returned, with the content type set by the script (defaults to `text/plain`).\n\n**Velocity errors** (syntax/parse errors, method-invocation failures, missing resources) are reported as a `400` with a structured body so an automated caller can locate and fix the offending code instead of receiving partial output. Application-level errors set by the script via `$dotJSON.put(\"errors\", ...)` are also returned as `400`.\n\n**Warnings** — dotCMS evaluates Velocity in non-strict mode, so an undefined reference (`$noSuchVar`) renders as literal text and a method returning `null` produces no output. These likely-typos are collected and, on a successful response, returned in the `X-Dot-Velocity-Warnings` header (a JSON array); on a `400` they appear in the `warnings` field of the body.","operationId":"dynamicPut_2","parameters":[{"name":"pathParam","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}}}},"responses":{"200":{"description":"Velocity evaluated successfully; body is the raw output or the JSON object produced by the script"},"400":{"description":"The submitted Velocity failed to parse or evaluate, or the script reported errors. The body carries the Velocity error detail (message, error type, and line/column when available).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VelocityErrorResponseView"}}}},"403":{"description":"User lacks the Scripting Developer role"}}},"post":{"tags":["Templates"],"summary":"Evaluate inline Velocity code (POST)","description":"Evaluates Velocity (VTL) code supplied directly in the request body — no `.vtl` file on disk is required — and returns the result. The code is read from a `velocity` property of the JSON body (properly escaped), or the body may be the raw VTL itself.\n\nThe caller requires the **Scripting Developer** role.\n\n**Response shape** is decided by the submitted code:\n- If the code populates `$dotJSON` (e.g. `$dotJSON.put(\"key\", ...)`), the response is that JSON object.\n- Otherwise the raw evaluated output is returned, with the content type set by the script (defaults to `text/plain`).\n\n**Velocity errors** (syntax/parse errors, method-invocation failures, missing resources) are reported as a `400` with a structured body so an automated caller can locate and fix the offending code instead of receiving partial output. Application-level errors set by the script via `$dotJSON.put(\"errors\", ...)` are also returned as `400`.\n\n**Warnings** — dotCMS evaluates Velocity in non-strict mode, so an undefined reference (`$noSuchVar`) renders as literal text and a method returning `null` produces no output. These likely-typos are collected and, on a successful response, returned in the `X-Dot-Velocity-Warnings` header (a JSON array); on a `400` they appear in the `warnings` field of the body.","operationId":"dynamicPost_2","parameters":[{"name":"pathParam","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}}}},"responses":{"200":{"description":"Velocity evaluated successfully; body is the raw output or the JSON object produced by the script"},"400":{"description":"The submitted Velocity failed to parse or evaluate, or the script reported errors. The body carries the Velocity error detail (message, error type, and line/column when available).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VelocityErrorResponseView"}}}},"403":{"description":"User lacks the Scripting Developer role"}}},"delete":{"tags":["Templates"],"summary":"Evaluate inline Velocity code (DELETE)","description":"Evaluates Velocity (VTL) code supplied directly in the request body — no `.vtl` file on disk is required — and returns the result. The code is read from a `velocity` property of the JSON body (properly escaped), or the body may be the raw VTL itself.\n\nThe caller requires the **Scripting Developer** role.\n\n**Response shape** is decided by the submitted code:\n- If the code populates `$dotJSON` (e.g. `$dotJSON.put(\"key\", ...)`), the response is that JSON object.\n- Otherwise the raw evaluated output is returned, with the content type set by the script (defaults to `text/plain`).\n\n**Velocity errors** (syntax/parse errors, method-invocation failures, missing resources) are reported as a `400` with a structured body so an automated caller can locate and fix the offending code instead of receiving partial output. Application-level errors set by the script via `$dotJSON.put(\"errors\", ...)` are also returned as `400`.\n\n**Warnings** — dotCMS evaluates Velocity in non-strict mode, so an undefined reference (`$noSuchVar`) renders as literal text and a method returning `null` produces no output. These likely-typos are collected and, on a successful response, returned in the `X-Dot-Velocity-Warnings` header (a JSON array); on a `400` they appear in the `warnings` field of the body.","operationId":"dynamicDelete_1","parameters":[{"name":"pathParam","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}}}},"responses":{"200":{"description":"Velocity evaluated successfully; body is the raw output or the JSON object produced by the script"},"400":{"description":"The submitted Velocity failed to parse or evaluate, or the script reported errors. The body carries the Velocity error detail (message, error type, and line/column when available).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VelocityErrorResponseView"}}}},"403":{"description":"User lacks the Scripting Developer role"}}},"patch":{"tags":["Templates"],"summary":"Evaluate inline Velocity code (PATCH)","description":"Evaluates Velocity (VTL) code supplied directly in the request body — no `.vtl` file on disk is required — and returns the result. The code is read from a `velocity` property of the JSON body (properly escaped), or the body may be the raw VTL itself.\n\nThe caller requires the **Scripting Developer** role.\n\n**Response shape** is decided by the submitted code:\n- If the code populates `$dotJSON` (e.g. `$dotJSON.put(\"key\", ...)`), the response is that JSON object.\n- Otherwise the raw evaluated output is returned, with the content type set by the script (defaults to `text/plain`).\n\n**Velocity errors** (syntax/parse errors, method-invocation failures, missing resources) are reported as a `400` with a structured body so an automated caller can locate and fix the offending code instead of receiving partial output. Application-level errors set by the script via `$dotJSON.put(\"errors\", ...)` are also returned as `400`.\n\n**Warnings** — dotCMS evaluates Velocity in non-strict mode, so an undefined reference (`$noSuchVar`) renders as literal text and a method returning `null` produces no output. These likely-typos are collected and, on a successful response, returned in the `X-Dot-Velocity-Warnings` header (a JSON array); on a `400` they appear in the `warnings` field of the body.","operationId":"dynamicPatch_1","parameters":[{"name":"pathParam","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}}}},"responses":{"200":{"description":"Velocity evaluated successfully; body is the raw output or the JSON object produced by the script"},"400":{"description":"The submitted Velocity failed to parse or evaluate, or the script reported errors. The body carries the Velocity error detail (message, error type, and line/column when available).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VelocityErrorResponseView"}}}},"403":{"description":"User lacks the Scripting Developer role"}}}},"/api/vtl/dynamic":{"get":{"tags":["Templates"],"summary":"Evaluate inline Velocity code (GET)","description":"Evaluates Velocity (VTL) code supplied directly in the request body — no `.vtl` file on disk is required — and returns the result. The code is read from a `velocity` property of the JSON body (properly escaped), or the body may be the raw VTL itself.\n\nThe caller requires the **Scripting Developer** role.\n\n**Response shape** is decided by the submitted code:\n- If the code populates `$dotJSON` (e.g. `$dotJSON.put(\"key\", ...)`), the response is that JSON object.\n- Otherwise the raw evaluated output is returned, with the content type set by the script (defaults to `text/plain`).\n\n**Velocity errors** (syntax/parse errors, method-invocation failures, missing resources) are reported as a `400` with a structured body so an automated caller can locate and fix the offending code instead of receiving partial output. Application-level errors set by the script via `$dotJSON.put(\"errors\", ...)` are also returned as `400`.\n\n**Warnings** — dotCMS evaluates Velocity in non-strict mode, so an undefined reference (`$noSuchVar`) renders as literal text and a method returning `null` produces no output. These likely-typos are collected and, on a successful response, returned in the `X-Dot-Velocity-Warnings` header (a JSON array); on a `400` they appear in the `warnings` field of the body.","operationId":"dynamicGetNoPath","requestBody":{"content":{"application/json":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}}}},"responses":{"200":{"description":"Velocity evaluated successfully; body is the raw output or the JSON object produced by the script"},"400":{"description":"The submitted Velocity failed to parse or evaluate, or the script reported errors. The body carries the Velocity error detail (message, error type, and line/column when available).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VelocityErrorResponseView"}}}},"403":{"description":"User lacks the Scripting Developer role"}}},"put":{"tags":["Templates"],"summary":"Evaluate inline Velocity code (PUT)","description":"Evaluates Velocity (VTL) code supplied directly in the request body — no `.vtl` file on disk is required — and returns the result. The code is read from a `velocity` property of the JSON body (properly escaped), or the body may be the raw VTL itself.\n\nThe caller requires the **Scripting Developer** role.\n\n**Response shape** is decided by the submitted code:\n- If the code populates `$dotJSON` (e.g. `$dotJSON.put(\"key\", ...)`), the response is that JSON object.\n- Otherwise the raw evaluated output is returned, with the content type set by the script (defaults to `text/plain`).\n\n**Velocity errors** (syntax/parse errors, method-invocation failures, missing resources) are reported as a `400` with a structured body so an automated caller can locate and fix the offending code instead of receiving partial output. Application-level errors set by the script via `$dotJSON.put(\"errors\", ...)` are also returned as `400`.\n\n**Warnings** — dotCMS evaluates Velocity in non-strict mode, so an undefined reference (`$noSuchVar`) renders as literal text and a method returning `null` produces no output. These likely-typos are collected and, on a successful response, returned in the `X-Dot-Velocity-Warnings` header (a JSON array); on a `400` they appear in the `warnings` field of the body.","operationId":"dynamicPutNoPath","requestBody":{"content":{"application/json":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}}}},"responses":{"200":{"description":"Velocity evaluated successfully; body is the raw output or the JSON object produced by the script"},"400":{"description":"The submitted Velocity failed to parse or evaluate, or the script reported errors. The body carries the Velocity error detail (message, error type, and line/column when available).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VelocityErrorResponseView"}}}},"403":{"description":"User lacks the Scripting Developer role"}}},"post":{"tags":["Templates"],"summary":"Evaluate inline Velocity code (POST)","description":"Evaluates Velocity (VTL) code supplied directly in the request body — no `.vtl` file on disk is required — and returns the result. The code is read from a `velocity` property of the JSON body (properly escaped), or the body may be the raw VTL itself.\n\nThe caller requires the **Scripting Developer** role.\n\n**Response shape** is decided by the submitted code:\n- If the code populates `$dotJSON` (e.g. `$dotJSON.put(\"key\", ...)`), the response is that JSON object.\n- Otherwise the raw evaluated output is returned, with the content type set by the script (defaults to `text/plain`).\n\n**Velocity errors** (syntax/parse errors, method-invocation failures, missing resources) are reported as a `400` with a structured body so an automated caller can locate and fix the offending code instead of receiving partial output. Application-level errors set by the script via `$dotJSON.put(\"errors\", ...)` are also returned as `400`.\n\n**Warnings** — dotCMS evaluates Velocity in non-strict mode, so an undefined reference (`$noSuchVar`) renders as literal text and a method returning `null` produces no output. These likely-typos are collected and, on a successful response, returned in the `X-Dot-Velocity-Warnings` header (a JSON array); on a `400` they appear in the `warnings` field of the body.","operationId":"dynamicPostNoPath","requestBody":{"content":{"application/json":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}}}},"responses":{"200":{"description":"Velocity evaluated successfully; body is the raw output or the JSON object produced by the script"},"400":{"description":"The submitted Velocity failed to parse or evaluate, or the script reported errors. The body carries the Velocity error detail (message, error type, and line/column when available).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VelocityErrorResponseView"}}}},"403":{"description":"User lacks the Scripting Developer role"}}}},"/api/v1/workflow/actions/separator":{"post":{"tags":["Workflow"],"summary":"Creates workflow action separator","description":"Creates a [workflow action] separator(https://www.dotcms.com/docs/latest/managing-workflows#Actions) from the properties specified in the payload. Returns the created workflow action.","operationId":"addSeparatorAction","requestBody":{"description":"Body consists of a JSON object containing a [workflow action](https://www.dotcms.com/docs/latest/managing-workflows#Actions) form. This includes the following properties:\n\n| Property | Type | Description |\n|-|-|-|\n| `schemeId` | String | The [workflow scheme](https://www.dotcms.com/docs/latest/managing-workflows#Schemes) under which the action will be created. |\n| `stepId` | String | The [workflow step](https://www.dotcms.com/docs/latest","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowActionSeparatorForm"}}},"required":true},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Workflow action created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowAction"}}}},"400":{"description":"Bad request"},"415":{"description":"Unsupported Media Type"}}}},"/api/v1/workflow/steps":{"post":{"tags":["Workflow"],"summary":"Add a new workflow step","description":"Creates a [workflow step](https://www.dotcms.com/docs/latest/managing-workflows#Steps).\n\nReturns an object representing the step.","operationId":"postAddWorkflowStep","requestBody":{"description":"Body consists of a JSON object containing a workflow step update form. This includes the following properties:\n\n| Property | Type | Description |\n|-|-|-|\n| `schemeId` | String | The identifier of the [workflow scheme](https://www.dotcms.com/docs/latest/managing-workflows#Schemes) to which the step will be added. |\n| `stepName` | String | The name of the workflow step. |\n| `enableEscalation` | Boolean | Determines whether a step is capable of automatic escalation to the next step. (Read more about [schedule-enabled workflows](https://www.dotcms.com/docs/latest/schedule-enabled-workflow).) |\n| `escalationAction` | String | The identifier of the workflow action to execute on automatic escalation. **Must be an empty string (`\"\"`) when `enableEscalation: false`** — `null` or omitting the key returns `400 \"may not be null\"`. |\n| `escalationTime` | String | The time, in seconds, before the workflow automatically escalates. |\n| `stepResolved` | Boolean | If true, any content which enters this workflow step will be considered resolved.\nContent in a resolved step will not appear in the workflow queues of any users.\n |\n\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowStepAddForm"}}},"required":true},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Created workflow step successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityWorkflowStepView"}}}},"400":{"description":"Bad request"},"415":{"description":"Unsupported Media Type"}}}},"/api/v1/workflow/schemes/{schemeId}/copy":{"post":{"tags":["Workflow"],"summary":"Copy a workflow scheme","description":"Copy a [workflow scheme](https://www.dotcms.com/docs/latest/managing-workflows#Schemes).\n\n A name for the new scheme may be provided either by parameter or by POST body property; if no name is supplied, the name will be that of the copied workflow scheme with the current Unix epoch timestamp integer appended.\n\nReturns copied workflow scheme on success.","operationId":"postCopyScheme","parameters":[{"name":"schemeId","in":"path","description":"Identifier of workflow scheme.\n\nExample value: `d61a59e1-a49c-46f2-a929-db2b4bfa88b2` (Default system workflow)","required":true,"schema":{"type":"string"}},{"name":"name","in":"query","description":"Name of new scheme from copy.\n\nNote: A name with a length less than 2 characters or greater than 100 may require renaming before certain actions, such as archiving, can be taken on it.","schema":{"type":"string"}}],"requestBody":{"description":"Body consists of a `name` property; an alternate way to supply the name of the new scheme, instead of parameter.\n\n Name supplied this way must be at minimum 2 and at maximum 100 characters in length.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowCopyForm"}}}},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Copied workflow scheme successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityWorkflowSchemeView"}}}},"400":{"description":"Bad request"},"404":{"description":"Workflow scheme not found"},"415":{"description":"Unsupported Media Type"}}}},"/api/v1/workflow/actions/{actionId}":{"get":{"tags":["Workflow"],"summary":"Find action by ID","description":"Returns a [workflow action](https://www.dotcms.com/docs/latest/managing-workflows#Actions) object.","operationId":"getWorkflowActionByActionId","parameters":[{"name":"actionId","in":"path","description":"Identifier of the workflow action to return.\n\nExample value: `b9d89c80-3d88-4311-8365-187323c96436` (Default system workflow \"Publish\" action)","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Action returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityWorkflowActionView"}}}},"404":{"description":"Workflow action not found"}}},"put":{"tags":["Workflow"],"summary":"Update an existing workflow action","description":"Updates a [workflow action](https://www.dotcms.com/docs/latest/managing-workflows#Actions) based on the payload properties.\n\nReturns updated workflow action.\n\n","operationId":"putSaveActionsByWorkflowActionForm","parameters":[{"name":"actionId","in":"path","description":"Identifier of workflow action to update.\n\nExample value: `b9d89c80-3d88-4311-8365-187323c96436` (Default system workflow \"Publish\" action)","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Body consists of a JSON object containing the same form data as used above in `POST /v1/workflow/actions`. However, this endpoint uses the form's properties differently, as noted below:\n\n| Property | Type | Description |\n|-|-|-|\n| `schemeId` | String | The [workflow scheme](https://www.dotcms.com/docs/latest/managing-workflows#Schemes) under which the action will be created. |\n| `actionName` | String | The name of the workflow action. Multiple actions of the same name can coexist with different identifiers. |\n| `whoCanUse` | List of Strings | A list of identifiers representing [users](https://www.dotcms.com/docs/latest/user-management), [role keys](https://www.dotcms.com/docs/latest/adding-roles), or [other user categories](https://www.dotcms.com/docs/latest/managing-workflows#ActionWho) allowed to use this action. This list can be empty. |\n| `actionIcon` | String | The icon to associate with the action. Example: `workflowIcon`. |\n| `actionCommentable` | Boolean | Whether this action supports comments. |\n| `showOn` | List of Strings | List defining under which of the eight valid [workflow states](https://www.dotcms.com/docs/latest/managing-workflows#ActionShow) the action is visible. States must be specified uppercase, such as `NEW` or `LOCKED`. There is no single state for ALL; each state must be listed. |\n| `actionNextStep` | String | The identifier of the step to enter after performing the action; `currentstep` is also a valid value. |\n| `actionNextAssign` | String | A user identifier or role key (such as `CMS Anonymous`) to serve as the default entry in the assignment dropdown. |\n| `actionCondition` | String | [Custom Velocity code](https://www.dotcms.com/docs/latest/managing-workflows#ActionAssign) to be executed along with the action. |\n| `actionAssignable` | Boolean | Whether this action can be assigned. |\n| `actionRoleHierarchyForAssign` | Boolean | If true, non-administrators cannot assign tasks to administrators. |\n| `metadata` | Object | Optional. Additional metadata to include in the action definition. |\n| `actionId` | String | Omit; not used in this endpoint. |\n| `stepId` | String | Omit; not used in this endpoint. |\n\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowActionForm"}}},"required":true},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Updated workflow action successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityWorkflowActionView"}}}},"400":{"description":"Bad request"},"415":{"description":"Unsupported Media Type"}}},"delete":{"tags":["Workflow"],"summary":"Delete a workflow action","description":"Deletes a [workflow action](https://www.dotcms.com/docs/latest/managing-workflows#Actions) from all [steps](https://www.dotcms.com/docs/latest/managing-workflows#Steps) in which it appears.\n\nReturns \"Ok\" on success.\n\n","operationId":"deleteWorkflowActionByActionId","parameters":[{"name":"actionId","in":"path","description":"Identifier of the workflow action to delete.","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Workflow action deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}},"404":{"description":"Workflow action not found"}}}},"/api/v1/workflow/steps/{stepId}/actions/{actionId}":{"get":{"tags":["Workflow"],"summary":"Find a workflow action within a step","description":"Returns a [workflow action](https://www.dotcms.com/docs/latest/managing-workflows#Actions) if it exists within a specific [step](https://www.dotcms.com/docs/latest/managing-workflows#Steps).","operationId":"getWorkflowActionByStepActionId","parameters":[{"name":"stepId","in":"path","description":"Identifier of a workflow step.\n\nExample value: `ee24a4cb-2d15-4c98-b1bd-6327126451f3` (Default system workflow \"Draft\" step)","required":true,"schema":{"type":"string"}},{"name":"actionId","in":"path","description":"Identifier of a workflow action.\n\nExample value: `b9d89c80-3d88-4311-8365-187323c96436` (Default system workflow \"Publish\" action)","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Action returned successfully from step","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityWorkflowActionView"}}}},"404":{"description":"Workflow action not found within specified step"}}},"delete":{"tags":["Workflow"],"summary":"Remove a workflow action from a step","description":"Deletes an [action](https://www.dotcms.com/docs/latest/managing-workflows#Actions) from a single [workflow step](https://www.dotcms.com/docs/latest/managing-workflows#Steps).\n\nReturns \"Ok\" on success.\n\nIf the action exists on other steps, removing it from one step will not delete the action outright.","operationId":"deleteWorkflowActionFromStepByActionId","parameters":[{"name":"actionId","in":"path","description":"Identifier of the workflow action to remove.","required":true,"schema":{"type":"string"}},{"name":"stepId","in":"path","description":"Identifier of the step containing the action.","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Workflow action removed from step successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}},"404":{"description":"Workflow action not found"}}}},"/api/v1/workflow/actionlets/{actionletId}":{"delete":{"tags":["Workflow"],"summary":"Remove an actionlet from a workflow action","description":"Removes an [actionlet](https://www.dotcms.com/docs/latest/workflow-sub-actions), or sub-action, from a [workflow action](https://www.dotcms.com/docs/latest/managing-workflows#Actions). This deletes only the actionlet's binding to the action utilizing it, and leaves the actionlet category intact.\n\nTo find the identifier, you can call `GET /workflow/actions/{actionId}/actionlets`.\n\nReturns \"Ok\" on success.\n\n","operationId":"deleteWorkflowActionletFromAction","parameters":[{"name":"actionletId","in":"path","description":"Identifier of the actionlet to delete.","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Workflow actionlet deleted from action successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}},"404":{"description":"Workflow action not found"}}}},"/api/v1/workflow/schemes/{schemeId}":{"put":{"tags":["Workflow"],"summary":"Update a workflow scheme","description":"Updates a [workflow scheme](https://www.dotcms.com/docs/latest/managing-workflows#Schemes).\n\nReturns updated scheme on success.","operationId":"putUpdateWorkflowScheme","parameters":[{"name":"schemeId","in":"path","description":"Identifier of workflow scheme.\n\nExample value: `d61a59e1-a49c-46f2-a929-db2b4bfa88b2` (Default system workflow)","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The request body consists of the following three properties:\n\n| Property | Type | Description |\n|-|-|-|\n| `schemeName` | String | The workflow scheme's name. |\n| `schemeDescription` | String | A description of the scheme. |\n| `schemeArchived` | Boolean | If `true`, the scheme will be be placed in an archived state. |\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowSchemeForm"}}}},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Updated workflow scheme successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}},"400":{"description":"Bad request"},"404":{"description":"Workflow scheme not found."},"415":{"description":"Unsupported Media Type"}}},"delete":{"tags":["Workflow"],"summary":"Delete a workflow scheme","description":"Deletes a [workflow scheme](https://www.dotcms.com/docs/latest/managing-workflows#Schemes)\n\nScheme must already be in an archived state.\n\nReturns deleted workflow scheme on success.","operationId":"deleteWorkflowSchemeById","parameters":[{"name":"schemeId","in":"path","description":"Identifier of workflow scheme to delete.","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Workflow scheme deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityWorkflowSchemeView"}}}},"404":{"description":"Workflow scheme not found"}}}},"/api/v1/workflow/steps/{stepId}":{"get":{"tags":["Workflow"],"summary":"Retrieves a workflow step","description":"Returns a [workflow step](https://www.dotcms.com/docs/latest/managing-workflows#Steps) by identifier.","operationId":"getFindWorkflowStepById","parameters":[{"name":"stepId","in":"path","description":"Identifier of the step to retrieve.\n\nExample: `ee24a4cb-2d15-4c98-b1bd-6327126451f3` (Default system workflow Draft step)","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Found workflow step successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityWorkflowStepView"}}}},"400":{"description":"Bad request"},"404":{"description":"Workflow step not found."}}},"put":{"tags":["Workflow"],"summary":"Update an existing workflow step","description":"Updates a [workflow step](https://www.dotcms.com/docs/latest/managing-workflows#Steps).\n\nReturns an object representing the updated step.","operationId":"putUpdateWorkflowStepById","parameters":[{"name":"stepId","in":"path","description":"Identifier of the step to update.\n\nExample: `ee24a4cb-2d15-4c98-b1bd-6327126451f3` (Default system workflow Draft step)","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Body consists of a JSON object containing a workflow step update form. This includes the following properties:\n\n| Property | Type | Description |\n|-|-|-|\n| `stepOrder` | Integer | The position of the step within the [workflow scheme](https://www.dotcms.com/docs/latest/managing-workflows#Schemes), with `0` being the first. |\n| `stepName` | String | The name of the workflow step. |\n| `enableEscalation` | Boolean | Determines whether a step is capable of automatic escalation to the next step. (Read more about [schedule-enabled workflows](https://www.dotcms.com/docs/latest/schedule-enabled-workflow).) |\n| `escalationAction` | String | The identifier of the workflow action to execute on automatic escalation. |\n| `escalationTime` | String | The time, in seconds, before the workflow automatically escalates. |\n| `stepResolved` | Boolean | If true, any content which enters this workflow step will be considered resolved.\nContent in a resolved step will not appear in the workflow queues of any users.\n |\n\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowStepUpdateForm"}}},"required":true},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Updated workflow step successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityWorkflowStepView"}}}},"400":{"description":"Bad request"},"415":{"description":"Unsupported Media Type"}}},"delete":{"tags":["Workflow"],"summary":"Delete a workflow step","description":"Deletes a [step](https://www.dotcms.com/docs/latest/managing-workflows#Steps) from a [workflow scheme](https://www.dotcms.com/docs/latest/managing-workflows#Schemes).\n\nReturns the deleted workflow step object.","operationId":"deleteWorkflowStepById","parameters":[{"name":"stepId","in":"path","description":"Identifier of a workflow step to delete.","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Workflow step deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityWorkflowStepView"}}}},"404":{"description":"Workflow action not found"}}}},"/api/v1/workflow/system/actions/{identifier}":{"delete":{"tags":["Workflow"],"summary":"Delete default system action binding by action id","description":"Deletes a [default system action](https://www.dotcms.com/docs/latest/managing-workflows#DefaultActions) binding.\n\nReturns the deleted system action object.\n\nThis method is minimally destructive, as it neither deletes a [workflow action](https://www.dotcms.com/docs/latest/managing-workflows#Actions), nor removes any system action category. Instead, it dissolves the association between the two, which can be re-established any time.\n\nTo find a suitable identifier, you can use `GET /system/actions/{workflowActionId}` and find it in the immediate `identifier` property of any of the objects returned in the entity.","operationId":"deleteSystemActionByActionId","parameters":[{"name":"identifier","in":"path","description":"Identifier of the system action mapping to delete.\n\nExample value: `59995336-187e-442a-b398-04b9f137eabd` (Demo starter binding that maps `DELETE` system action to the \"Destroy\" workflow action for the Blog content type)","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"System action binding deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySystemActionWorkflowActionMapping"}}}},"404":{"description":"Workflow action not found"}}}},"/api/v1/workflow/actions/{actionId}/condition":{"get":{"tags":["Workflow"],"summary":"Find condition by action ID","description":"Returns a string representing the \"condition\" on the selected action.\n\nMore specifically: if the workflow action has anything in its [Custom Code](https://www.dotcms.com/docs/latest/custom-workflow-actions) field, the result is evaluated as Velocity, and the output is returned.","operationId":"getWorkflowConditionByActionId","parameters":[{"name":"actionId","in":"path","description":"Identifier of a workflow action to check for condition.\n\nExample value: `b9d89c80-3d88-4311-8365-187323c96436` (Default system workflow \"Publish\" action)","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Condition returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}},"404":{"description":"Workflow action not found"}}}},"/api/v1/workflow/schemes/{schemeIdOrVariable}/export":{"get":{"tags":["Workflow"],"summary":"Export a workflow scheme","description":"Export a [workflow scheme](https://www.dotcms.com/docs/latest/managing-workflows#Schemes).\n\nReturns the full workflow scheme, along with steps, actions, permissions, etc., on success.","operationId":"getExportScheme","parameters":[{"name":"schemeIdOrVariable","in":"path","description":"Identifier or variable name of the workflow scheme to export.","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Exported workflow scheme successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityWorkflowSchemeView"},"example":{"entity":{"permissions":[{"bitPermission":false,"id":0,"individualPermission":true,"inode":"string","permission":0,"roleId":"string","type":"string"}],"workflowObject":{"actionClassParams":[{"actionClassId":"string","id":null,"key":"string","value":null}],"actionClasses":[{"actionId":"string","actionlet":{"actionClass":"string","howTo":"string","localizedHowto":"string","localizedName":"string","name":"string","nextStep":null,"parameters":[{"defaultValue":"","displayName":"string","key":"string","required":false}]},"clazz":"string","id":"string","name":"string","order":0}],"actionSteps":[{"actionId":"string","actionOrder":"0","stepId":"string"}],"actions":[{"assignable":false,"commentable":false,"condition":"","icon":"string","id":"string","metadata":null,"name":"string","nextAssign":"string","nextStep":"string","nextStepCurrentStep":true,"order":0,"owner":null,"roleHierarchyForAssign":false,"schemeId":"string","showOn":[]}],"schemeSystemActionWorkflowActionMappings":[{"identifier":"string","owner":{"archived":false,"creationDate":1723806880187,"defaultScheme":false,"description":"string","entryActionId":null,"id":"string","mandatory":false,"modDate":1723796816309,"name":"string","system":false,"variableName":"string"},"systemAction":"string","workflowAction":{"assignable":false,"commentable":false,"condition":"","icon":"string","id":"string","metadata":null,"name":"string","nextAssign":"string","nextStep":"string","nextStepCurrentStep":true,"order":0,"owner":null,"roleHierarchyForAssign":false,"schemeId":"string","showOn":[]},"ownerContentType":false,"ownerScheme":true}],"schemes":[{"archived":false,"creationDate":1723806880187,"defaultScheme":false,"description":"string","entryActionId":null,"id":"string","mandatory":false,"modDate":1723796816309,"name":"string","system":false,"variableName":"string"}],"steps":[{"creationDate":1723806894533,"enableEscalation":false,"escalationAction":null,"escalationTime":0,"id":"string","myOrder":0,"name":"string","resolved":false,"schemeId":"string"}],"version":"string"}},"errors":[],"i18nMessagesMap":{},"messages":[],"pagination":null,"permissions":[]}}}},"400":{"description":"Bad request"},"404":{"description":"Workflow scheme not found"}}}},"/api/v1/workflow/actionlets":{"get":{"tags":["Workflow"],"summary":"Find all workflow actionlets","description":"Returns a list of all workflow actionlets — a.k.a. [workflow sub-actions](https://www.dotcms.com/docs/latest/workflow-sub-actions). The returned list is complete and does not use pagination.","operationId":"getWorkflowActionlets","responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Workflow actionlets returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityWorkflowActionletsView"}}}}}}},"/api/v1/workflow/actions/{actionId}/actionlets":{"get":{"tags":["Workflow"],"summary":"Find workflow actionlets by workflow action","description":"Returns a list of the workflow actionlets — a.k.a. [workflow sub-actions](https://www.dotcms.com/docs/latest/workflow-sub-actions) — associated with a specified workflow action.","operationId":"getWorkflowActionletsByActionId","parameters":[{"name":"actionId","in":"path","description":"Identifier of workflow action to examine for actionlets.\n\nExample value: `b9d89c80-3d88-4311-8365-187323c96436` (Default system workflow \"Publish\" action)","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Workflow actionlets returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityWorkflowActionClassesView"},"example":{"entity":[{"actionId":"string","actionlet":{"actionClass":"string","howTo":"string","localizedHowto":"string","localizedName":"string","name":"string","nextStep":null,"parameters":[{"displayName":"string","key":"string","defaultValue":"string","required":true}]},"clazz":"string","id":"string","name":"string","order":0}],"errors":[],"i18nMessagesMap":{},"messages":[],"pagination":null,"permissions":[]}}}},"404":{"description":"Workflow action not found"}}},"post":{"tags":["Workflow"],"summary":"Adds an actionlet to a workflow action","description":"Adds an actionlet — a.k.a. a [workflow sub-action](https://www.dotcms.com/docs/latest/workflow-sub-actions) — to a [workflow action](https://www.dotcms.com/docs/latest/managing-workflows#Actions).\n\nReturns \"Ok\" on success.","operationId":"postAddActionletToActionById","parameters":[{"name":"actionId","in":"path","description":"Identifier of workflow action to receive actionlet.\n\nExample value: `b9d89c80-3d88-4311-8365-187323c96436` (Default system workflow \"Publish\" action)","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Body consists of a JSON object containing a workflow action form. This includes the following properties:\n\n| Property | Type | Description |\n|-|-|-|\n| `actionletClass` | String | The class of the actionlet to be assigned.

Example: `com.dotcms.rendering.js.JsScriptActionlet` |\n| `order` | Integer | The position of the actionlet within the action's sequence. |\n| `parameters` | Object | Further parameters and properties are conveyed here, depending on the particulars of the selected actionlet.

For a complete list of possible parameters, refer to the various keys listed in `GET /workflow/actionlets`. |\n\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowActionletActionForm"}}},"required":true},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Workflow actionlet assigned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"},"example":{"errors":[{"errorCode":"string","message":"string","fieldName":"string"}],"entity":"Ok","messages":[{"message":"string"}],"i18nMessagesMap":{"additionalProp1":"string","additionalProp2":"string","additionalProp3":"string"},"permissions":["string"],"pagination":{"currentPage":0,"perPage":0,"totalEntries":0}}}}},"400":{"description":"Bad request"},"415":{"description":"Unsupported Media Type"}}}},"/api/v1/workflow/schemes/{schemeId}/actions":{"get":{"tags":["Workflow"],"summary":"Find all actions in a workflow scheme","description":"Returns a list of [workflow actions](https://www.dotcms.com/docs/latest/managing-workflows#Actions) associated with a specified [workflow scheme](https://www.dotcms.com/docs/latest/managing-workflows#Schemes).","operationId":"getWorkflowActionsBySchemeId","parameters":[{"name":"schemeId","in":"path","description":"Identifier of workflow scheme.\n\nExample value: `d61a59e1-a49c-46f2-a929-db2b4bfa88b2` (Default system workflow)","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Actions returned successfully from workflow scheme","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityWorkflowActionsView"}}}},"404":{"description":"Workflow scheme not found"}}}},"/api/v1/workflow/schemes/actions/{systemAction}":{"post":{"tags":["Workflow"],"summary":"Finds workflow actions by schemes and system action","description":"Returns a list of [workflow actions](https://www.dotcms.com/docs/latest/managing-workflows#Actions) associated with [workflow schemes](https://www.dotcms.com/docs/latest/managing-workflows#Schemes), further filtered by [default system actions](https://www.dotcms.com/docs/latest/managing-workflows#DefaultActions).","operationId":"postFindActionsBySchemesAndSystemAction","parameters":[{"name":"systemAction","in":"path","description":"Default system action.","required":true,"schema":{"type":"string","enum":["NEW","EDIT","PUBLISH","UNPUBLISH","ARCHIVE","UNARCHIVE","DELETE","DESTROY"]}}],"requestBody":{"description":"Body consists of a JSON object containing a single property called `schemes`, which contains a list of workflow scheme identifier strings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowSchemesForm"},"example":{"schemes":["d61a59e1-a49c-46f2-a929-db2b4bfa88b2"]}}},"required":true},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Workflow action(s) returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityWorkflowActionsView"}}}},"400":{"description":"Bad request"},"415":{"description":"Unsupported Media Type"}}}},"/api/v1/workflow/steps/{stepId}/actions":{"get":{"tags":["Workflow"],"summary":"Find all actions in a workflow step","description":"Returns a list of [workflow actions](https://www.dotcms.com/docs/latest/managing-workflows#Actions) associated with a specified [workflow step](https://www.dotcms.com/docs/latest/managing-workflows#Steps).","operationId":"getWorkflowActionsByStepId","parameters":[{"name":"stepId","in":"path","description":"Identifier of a workflow step.\n\nExample value: `ee24a4cb-2d15-4c98-b1bd-6327126451f3` (Default system workflow \"Draft\" step)","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Actions returned successfully from step","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityWorkflowActionsView"}}}},"404":{"description":"Workflow step not found"}}},"post":{"tags":["Workflow"],"summary":"Adds a workflow action to a workflow step","description":"Assigns a single [workflow action](https://www.dotcms.com/docs/latest/managing-workflows#Actions) to a [workflow step](https://www.dotcms.com/docs/latest/managing-workflows#Steps). Returns \"Ok\" on success.","operationId":"postActionToStepById","parameters":[{"name":"stepId","in":"path","description":"Identifier of a workflow step to receive a new action.\n\nExample value: `ee24a4cb-2d15-4c98-b1bd-6327126451f3` (Default system workflow \"Draft\" step)","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Body consists of a JSON object with a single property:\n\n| Property | Type | Description |\n|-|-|-|\n| `actionId` | String | The identifier of the workflow action to assign to the step specified in the parameter. |\n\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowActionStepForm"},"example":{"actionId":"b9d89c80-3d88-4311-8365-187323c96436"}}},"required":true},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Workflow action added to step successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"},"example":{"errors":[{"errorCode":"string","message":"string","fieldName":"string"}],"entity":"Ok","messages":[{"message":"string"}],"i18nMessagesMap":{"additionalProp1":"string","additionalProp2":"string","additionalProp3":"string"},"permissions":["string"],"pagination":{"currentPage":0,"perPage":0,"totalEntries":0}}}}},"400":{"description":"Bad request"},"415":{"description":"Unsupported Media Type"}}}},"/api/v1/workflow/schemes/schemescontenttypes/{contentTypeId}":{"get":{"tags":["Workflow"],"summary":"Find workflow schemes by content type id","description":"Fetches [workflow schemes](https://www.dotcms.com/docs/latest/managing-workflows#Schemes) associated with a content type by its identifier. Returns an entity containing two properties:\n\n| Property | Description |\n|----------|-------------|\n| `contentTypeSchemes` | A list of schemes associated with the specified content type. |\n| `schemes` | A list of non-archived schemes, irrespective of relation to the content type. |","operationId":"getWorkflowSchemesByContentTypeId","parameters":[{"name":"contentTypeId","in":"path","description":"Identifier of content type to examine for workflow schemes.\n\nExample value: `c541abb1-69b3-4bc5-8430-5e09e5239cc8` (Default page content type)","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Scheme(s) returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemesAndSchemesContentTypeView"}}}},"404":{"description":"Content type ID not found"}}}},"/api/v1/workflow/contenttypes/schemes":{"get":{"tags":["Workflow"],"summary":"Find workflow schemes for multiple content types","description":"Returns workflow [schemes](https://www.dotcms.com/docs/latest/managing-workflows#Schemes) grouped by content type for a list of content type identifiers. Each entry in the response maps a resolved content type to its associated schemes. Unknown or unresolvable identifiers are reported in the `errors` array of the response body (field `fieldName` contains the original input token; `errorCode` is `CONTENT_TYPE_NOT_FOUND`). At least one non-blank identifier is required; an empty or missing `contentTypeIds` parameter returns 400. Maximum 100 tokens per request (checked before deduplication).","operationId":"getWorkflowSchemesByContentTypeList","parameters":[{"name":"contentTypeIds","in":"query","description":"Content type identifiers. Repeat the parameter (?contentTypeIds=a&contentTypeIds=b) or comma-separate values (?contentTypeIds=a,b). Both formats may be mixed. Max 100 distinct IDs.","schema":{"type":"array","items":{"type":"string"}}}],"responses":{"401":{"description":"User does not have permission"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Schemes returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityContentTypeWorkflowSchemesView"}}}},"400":{"description":"contentTypeIds is empty or all tokens are blank; or more than 100 tokens supplied"}}}},"/api/v1/workflow/contentlet/{inode}/actions":{"get":{"tags":["Workflow"],"summary":"Finds workflow actions by content inode","description":"Returns a list of [workflow actions](https://www.dotcms.com/docs/latest/managing-workflows#Actions) associated with a [contentlet](https://www.dotcms.com/docs/latest/content#Contentlets) specified by inode.\n\nReturns `[]` when the contentlet is in a terminal/resolved step with no available actions. An empty list does not distinguish 'no actions because terminal step' from 'no actions because permissions' — call `GET /api/v1/workflow/status/{inode}` to inspect the current step (`stepResolved: true` indicates terminal).\n\nEach action item includes an `actionInputs[]` array advertising the body keys the action expects. For some actions (e.g. Move, Copy) this list is currently empty even though the action requires body input; consult `PUT /api/v1/workflow/actions/{actionId}/fire` for documented body shapes.","operationId":"getWorkflowActionsByContentletInode","parameters":[{"name":"inode","in":"path","description":"Inode of contentlet to examine for workflow actions.\n\n","required":true,"schema":{"type":"string"}},{"name":"renderMode","in":"query","description":"*Optional.* Case-insensitive parameter indicating how results are to be displayed.\n\nIn listing mode, all associated actions are returned; in editing mode (the default), it returns only the actions accessible to the contentlet's current workflow step.","schema":{"type":"string","enum":["EDITING","LISTING"],"default":"EDITING"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Scheme(s) returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityWorkflowActionsView"}}}},"404":{"description":"Contentlet not found"}}}},"/api/v1/workflow/defaultactions/contenttype/{contentTypeId}":{"get":{"tags":["Workflow"],"summary":"Find possible default actions by content type","description":"Returns a list of actions that may be used as a [default action](https://www.dotcms.com/docs/latest/managing-workflows#DefaultActions) for a specified [content type](https://www.dotcms.com/docs/latest/content-types), along with their associated [workflow schemes](https://www.dotcms.com/docs/latest/managing-workflows#Schemes).","operationId":"getDefaultActionsByContentTypeId","parameters":[{"name":"contentTypeId","in":"path","description":"Identifier or variable of content type to examine for actions.\n\nExample ID: `c541abb1-69b3-4bc5-8430-5e09e5239cc8` (Default page content type)\n\nExample Variable: `htmlpageasset` (Default page content type)","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Default action(s) returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityDefaultWorkflowActionsView"}}}},"404":{"description":"Content type not found"}}}},"/api/v1/workflow/defaultactions/schemes":{"get":{"tags":["Workflow"],"summary":"Find possible default actions by scheme(s)","description":"Returns a list of actions that are eligible to be used as a [default action](https://www.dotcms.com/docs/latest/managing-workflows#DefaultActions) for one or more [workflow schemes](https://www.dotcms.com/docs/latest/managing-workflows#Schemes).","operationId":"getDefaultActionsBySchemeIds","parameters":[{"name":"ids","in":"query","description":"Comma-separated list of workflow scheme identifiers.","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Action(s) returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityDefaultWorkflowActionsView"}}}},"404":{"description":"Workflow action not found"}}}},"/api/v1/workflow/initialactions/contenttype/{contentTypeId}":{"get":{"tags":["Workflow"],"summary":"Find initial actions by content type","description":"Returns a list of available actions of the initial/first step(s) of the workflow scheme(s) associated with a [content type](https://www.dotcms.com/docs/latest/content-types).","operationId":"getInitialActionsByContentTypeId","parameters":[{"name":"contentTypeId","in":"path","description":"Identifier or variable of content type to examine for initial actions.\n\nExample ID: `c541abb1-69b3-4bc5-8430-5e09e5239cc8` (Default page content type)\n\nExample Variable: `htmlpageasset` (Default page content type)","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Initial action(s) returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityDefaultWorkflowActionsView"}}}},"404":{"description":"Content type not found"}}}},"/api/v1/workflow/schemes":{"get":{"tags":["Workflow"],"summary":"Find workflow schemes","description":"Returns workflow schemes. Can be filtered by content type and/or live status through optional query parameters.","operationId":"getWorkflowSchemes","parameters":[{"name":"contentTypeId","in":"query","description":"Optional filter parameter that takes a content type identifier and returns all [workflow schemes](https://www.dotcms.com/docs/latest/managing-workflows#Schemes) associated with that type.\n\nLeave blank to return all workflow schemes.\n\nExample value: `c541abb1-69b3-4bc5-8430-5e09e5239cc8` (Default page content type)","schema":{"type":"string"}},{"name":"showArchived","in":"query","description":"If `true`, includes archived schemes in response.","schema":{"type":"boolean","default":true}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Scheme(s) returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityWorkflowSchemesView"}}}},"404":{"description":"Workflow scheme not found"}}},"post":{"tags":["Workflow"],"summary":"Create a workflow scheme","description":"Create a [workflow scheme](https://www.dotcms.com/docs/latest/managing-workflows#Schemes).\n\n Returns created workflow scheme on success.","operationId":"postSaveScheme","requestBody":{"description":"The request body consists of the following three properties:\n\n| Property | Type | Description |\n|-|-|-|\n| `schemeName` | String | The workflow scheme's name. |\n| `schemeDescription` | String | A description of the scheme. |\n| `schemeArchived` | Boolean | If `true`, the scheme will be created in an archived state. |\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowSchemeForm"}}},"required":true},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Copied workflow scheme successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityWorkflowSchemeView"}}}},"400":{"description":"Bad request"},"415":{"description":"Unsupported Media Type"}}}},"/api/v1/workflow/schemes/{schemeId}/steps":{"get":{"tags":["Workflow"],"summary":"Find steps by workflow scheme ID","description":"Returns a list of [steps](https://www.dotcms.com/docs/latest/managing-workflows#Steps) associated with a [workflow scheme](https://www.dotcms.com/docs/latest/managing-workflows#Schemes).","operationId":"getWorkflowStepsBySchemeId","parameters":[{"name":"schemeId","in":"path","description":"Identifier of workflow scheme.\n\nExample value: `d61a59e1-a49c-46f2-a929-db2b4bfa88b2` (Default system workflow)","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Scheme(s) returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityWorkflowStepsView"}}}},"404":{"description":"Workflow scheme not found"}}}},"/api/v1/workflow/contenttypes/{contentTypeVarOrId}/system/actions":{"get":{"tags":["Workflow"],"summary":"Find default system actions mapped to a content type","description":"Returns a list of [default system actions](https://www.dotcms.com/docs/latest/managing-workflows#DefaultActions) associated with a specified [content type](https://www.dotcms.com/docs/latest/content-types).\n\nAn empty list means only that no *default system-action mappings* (e.g. NEW, PUBLISH) are configured for this content type — it does **not** mean the content type lacks a workflow or that publishing will fail. You can still fire actions on its content by ID via `PUT /api/v1/workflow/actions/{actionId}/fire`, or fire a default system action via `PUT /api/v1/workflow/actions/default/fire/{systemAction}` (which resolves the action from the scheme attached to the content type). Do not treat an empty response as a blocker.","operationId":"getSystemActionMappingsByContentType","parameters":[{"name":"contentTypeVarOrId","in":"path","description":"The ID or Velocity variable of the content type to inspectfor default system action bindings.\n\nExample value: `htmlpageasset` (Default page content type)","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Action(s) returned successfully from content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySystemActionWorkflowActionMappings"}}}},"404":{"description":"Content Type not found"}}}},"/api/v1/workflow/schemes/{schemeId}/system/actions":{"get":{"tags":["Workflow"],"summary":"Find default system actions mapped to a workflow scheme","description":"Returns a list of [default system actions](https://www.dotcms.com/docs/latest/managing-workflows#DefaultActions) associated with a specified [workflow scheme](https://www.dotcms.com/docs/latest/managing-workflows#Schemes).","operationId":"getSystemActionMappingsBySchemeId","parameters":[{"name":"schemeId","in":"path","description":"Identifier of workflow scheme.\n\nExample value: `d61a59e1-a49c-46f2-a929-db2b4bfa88b2` (Default system workflow)","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Actions returned successfully from workflow scheme","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySystemActionWorkflowActionMappings"}}}},"404":{"description":"Workflow scheme not found"}}}},"/api/v1/workflow/actions/firemultipart":{"put":{"tags":["Workflow"],"summary":"Fire action by name (multipart form)","description":"Fires a [workflow action](https://www.dotcms.com/docs/latest/managing-workflows#Actions), specified by name, on a target contentlet. Uses a multipart form to transmit its data.\n\nReturns a map of the resultant contentlet, with an additional `AUTO_ASSIGN_WORKFLOW` property, which can be referenced by delegate services that handle automatically assigning workflow schemes to content with none.\n\n**When chaining workflow actions or reading state back immediately after firing, pass `indexPolicy=WAIT_FOR` on each call.** The default `DEFER` is asynchronous and can return stale index reads for several seconds, which can mimic server-side state bugs. For isolated one-off fires where nothing reads the result, leave the default.\n\n**Block Editor (Story Block) fields:** send the value as a **Markdown or HTML** string — you do not need to hand-author the underlying ProseMirror/JSON document. dotCMS converts it to the Block Editor (ProseMirror JSON) structure automatically on save, so the field reads back as structured content with no editor round-trip required. A value that is already a valid Tiptap/ProseMirror JSON document is detected and stored unchanged. Example: `\"body\": \"## Intro\\n\\nHello **world**.\"`.\n\n**Rich blocks in Markdown:** blocks that plain Markdown cannot express are written as fenced code blocks whose info string is a `dotcms-*` label and whose body is a small JSON object. Example — embed a contentlet:\n\n```dotcms-content\\n{\"identifier\": \"\", \"languageId\": 1}\\n```\n\nSupported labels and payload fields (**bold** = required):\n- `dotcms-content` → embedded contentlet: **`identifier`**, `languageId` (default 1). The server rebuilds the full embed data from the identifier on every read.\n- `dotcms-image` → dotCMS-bound or decorated image: **`identifier` or `src`**; optional `alt`, `title`, `href`, `target`, `textWrap`, `textAlign`, `languageId`. Plain external images need no fence — standard `![alt](url \"title\")` works.\n- `dotcms-video` → video: **`identifier` or `src`**; optional `mimeType`, `width`, `height`, `languageId`.\n- `dotcms-youtube` → YouTube embed: **`src`**; optional `start` (seconds), `width`, `height`.\n- `dotcms-grid` → layout grid: the verbatim `gridBlock` node JSON (`{\"type\":\"gridBlock\",\"attrs\":{\"columns\":[n,n]},\"content\":[…two gridColumn nodes…]}`).\n- `dotcms-node` → any other node type verbatim (`{\"type\": \"\", …}`) — the fallback for custom blocks.\n\n**Rich blocks in HTML:** the same labels are namespaced custom elements. Scalar payloads ride as attributes with **hyphenated names** (HTML lowercases attribute names, so `languageId` is spelled `language-id`, `mimeType` is `mime-type`): `\" language-id=\"1\">`. `dotcms-ai`, `dotcms-grid` and `dotcms-node` take the same JSON object as the element's text body instead (HTML-escape `<` and `&` inside JSON string values). Always write an explicit closing tag — HTML parsing ignores the `/` in `` and would swallow the content after it. Both carriers produce identical stored documents.\n\nBlock styling (e.g. text alignment) is set by an HTML comment on its own line immediately before the block it decorates, in Markdown and HTML alike: ``.\n\nA Markdown/HTML write **fully replaces** the stored document; when stored rich blocks are not carried over in the submitted value, the save still succeeds and an advisory warning listing the replaced blocks is returned in the response `messages` field — carry the blocks over as fences or elements to preserve them. An invalid payload degrades to an ordinary code block (or is dropped when it carries no text to keep), never an error.","operationId":"putFireActionByNameMultipart","parameters":[{"name":"inode","in":"query","description":"Inode of the target content.","schema":{"type":"string"}},{"name":"identifier","in":"query","description":"Identifier of target content.","schema":{"type":"string"}},{"name":"indexPolicy","in":"query","description":"Determines how target content is indexed.\n\n| Value | Description |\n|-------|-------------|\n| `DEFER` | Content will be indexed asynchronously, outside of the current process. Valid content will finish the method in process and be returned before the content becomes visible in the index. This is the default index policy; it is resource-friendly and well-suited to batch processing. |\n| `WAIT_FOR` | The API call will not return from the content check process until the content has been indexed. Ensures content is promptly available for searching. |\n| `FORCE` | Forces Elasticsearch to index the content **immediately**.
**Caution:** Using this value may cause system performance issues; it is not recommended for general use, though may be useful for testing purposes. |\n\n","schema":{"type":"string","enum":["DEFER","WAIT_FOR","FORCE"]}},{"name":"language","in":"query","description":"Language version of target content.","schema":{"type":"string","default":"-1"}}],"requestBody":{"description":"Multipart form containing a JSON 'contentlet' body and optional binary field parts.","content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/WorkflowActionMultipartSchema"}}},"required":true},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Fired action successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapView"}}}},"400":{"description":"Bad request"},"404":{"description":"Content not found"},"415":{"description":"Unsupported Media Type"}}}},"/api/v1/workflow/actions/fire":{"put":{"tags":["Workflow"],"summary":"Fire workflow action by name","description":"Fires a [workflow action](https://www.dotcms.com/docs/latest/managing-workflows#Actions), specified by name, on a target contentlet.\n\nReturns a map of the resultant contentlet, with an additional `AUTO_ASSIGN_WORKFLOW` property, which can be referenced by delegate services that handle automatically assigning workflow schemes to content with none.\n\n**When chaining workflow actions or reading state back immediately after firing, pass `indexPolicy=WAIT_FOR` on each call.** The default `DEFER` is asynchronous and can return stale index reads for several seconds, which can mimic server-side state bugs. For isolated one-off fires where nothing reads the result, leave the default.\n\n**Block Editor (Story Block) fields:** send the value as a **Markdown or HTML** string — you do not need to hand-author the underlying ProseMirror/JSON document. dotCMS converts it to the Block Editor (ProseMirror JSON) structure automatically on save, so the field reads back as structured content with no editor round-trip required. A value that is already a valid Tiptap/ProseMirror JSON document is detected and stored unchanged. Example: `\"body\": \"## Intro\\n\\nHello **world**.\"`.\n\n**Rich blocks in Markdown:** blocks that plain Markdown cannot express are written as fenced code blocks whose info string is a `dotcms-*` label and whose body is a small JSON object. Example — embed a contentlet:\n\n```dotcms-content\\n{\"identifier\": \"\", \"languageId\": 1}\\n```\n\nSupported labels and payload fields (**bold** = required):\n- `dotcms-content` → embedded contentlet: **`identifier`**, `languageId` (default 1). The server rebuilds the full embed data from the identifier on every read.\n- `dotcms-image` → dotCMS-bound or decorated image: **`identifier` or `src`**; optional `alt`, `title`, `href`, `target`, `textWrap`, `textAlign`, `languageId`. Plain external images need no fence — standard `![alt](url \"title\")` works.\n- `dotcms-video` → video: **`identifier` or `src`**; optional `mimeType`, `width`, `height`, `languageId`.\n- `dotcms-youtube` → YouTube embed: **`src`**; optional `start` (seconds), `width`, `height`.\n- `dotcms-grid` → layout grid: the verbatim `gridBlock` node JSON (`{\"type\":\"gridBlock\",\"attrs\":{\"columns\":[n,n]},\"content\":[…two gridColumn nodes…]}`).\n- `dotcms-node` → any other node type verbatim (`{\"type\": \"\", …}`) — the fallback for custom blocks.\n\n**Rich blocks in HTML:** the same labels are namespaced custom elements. Scalar payloads ride as attributes with **hyphenated names** (HTML lowercases attribute names, so `languageId` is spelled `language-id`, `mimeType` is `mime-type`): `\" language-id=\"1\">`. `dotcms-ai`, `dotcms-grid` and `dotcms-node` take the same JSON object as the element's text body instead (HTML-escape `<` and `&` inside JSON string values). Always write an explicit closing tag — HTML parsing ignores the `/` in `` and would swallow the content after it. Both carriers produce identical stored documents.\n\nBlock styling (e.g. text alignment) is set by an HTML comment on its own line immediately before the block it decorates, in Markdown and HTML alike: ``.\n\nA Markdown/HTML write **fully replaces** the stored document; when stored rich blocks are not carried over in the submitted value, the save still succeeds and an advisory warning listing the replaced blocks is returned in the response `messages` field — carry the blocks over as fences or elements to preserve them. An invalid payload degrades to an ordinary code block (or is dropped when it carries no text to keep), never an error.","operationId":"putFireActionByName","parameters":[{"name":"inode","in":"query","description":"Inode of the target content.","schema":{"type":"string"}},{"name":"identifier","in":"query","description":"Identifier of target content.","schema":{"type":"string"}},{"name":"indexPolicy","in":"query","description":"Determines how target content is indexed.\n\n| Value | Description |\n|-------|-------------|\n| `DEFER` | Content will be indexed asynchronously, outside of the current process. Valid content will finish the method in process and be returned before the content becomes visible in the index. This is the default index policy; it is resource-friendly and well-suited to batch processing. |\n| `WAIT_FOR` | The API call will not return from the content check process until the content has been indexed. Ensures content is promptly available for searching. |\n| `FORCE` | Forces Elasticsearch to index the content **immediately**.
**Caution:** Using this value may cause system performance issues; it is not recommended for general use, though may be useful for testing purposes. |\n\n","schema":{"type":"string","enum":["DEFER","WAIT_FOR","FORCE"]}},{"name":"language","in":"query","description":"Language version of target content.","schema":{"type":"string","default":"-1"}}],"requestBody":{"description":"Body consists of a JSON object containing at minimum the `actionName` property, specifying a workflow action to fire.\n\nThe full list of properties that may be used with this form is as follows:\n\n| Property | Type | Description |\n|-|-|-|\n| `actionName` | String | The name of the workflow action to perform. |\n| `contentlet` | Object | An alternate way of specifying the target contentlet. If no identifier or inode is included via parameter, either one could instead be included in the body as a property of this object. |\n| `comments` | String | Comments that will appear in the [workflow tasks](https://www.dotcms.com/docs/latest/workflow-tasks) tool with the execution of this workflow action. |\n| `individualPermissions` | Object | Allows setting granular permissions associated with the target. The object properties are the [system names of permissions](https://www.dotcms.com/docs/latest/user-permissions#Permissions), such as READ, PUBLISH, EDIT, etc. Their respective values are a list of user or role identifiers that should be granted the permission in question. Example: `\"READ\": [\"9ad24203-ae6a-4e5e-aa10-a8c38fd11f17\",\"MyRole\"]` |\n| `assign` | String | The identifier of a user or role to next receive the workflow task assignment. |\n| `pathToMove` | String | If the workflow action includes the Move actionlet, this property will specify the target path. This path must include a host, such as `//default/testfolder`, `//demo.dotcms.com/application`, etc. |\n| `query` | String | Not used in this method. |\n| `whereToSend` | String | For the [push publishing](push-publishing) actionlet; sets the push-publishing environment to receive the target content. Must be specified as an environment identifier. [Learn how to find environment IDs here.](https://www.dotcms.com/docs/latest/push-publishing-endpoints#EnvironmentIds) |\n| `iWantTo` | String | For the push publishing actionlet; this can be set to one of three values:
  • `publish` for push publish;
  • `expire` for remove;
  • `publishexpire` for push remove.
These are further configurable with the properties below that specify publishing and expiration dates, times, etc. |\n| `publishDate` | String | For the push publishing actionlet; specifies a date to push the content. Format: `yyyy-MM-dd`. |\n| `publishTime` | String | For the push publishing actionlet; specifies a time to push the content. Format: `hh-mm`. |\n| `expireDate` | String | For the push publishing actionlet; specifies a date to remove the content. Format: `yyyy-MM-dd`. |\n| `expireTime` | String | For the push publishing actionlet; specifies a time to remove the content. Format: `hh-mm`. |\n| `neverExpire` | Boolean | For the push publishing actionlet; a value of `true` invalidates the expiration time/date. |\n| `filterKey` | String | For the push publishing actionlet; specifies a [push publishing filter](https://www.dotcms.com/docs/latest/push-publishing-filters) key, should the workflow action call for such. To retrieve a full list of push publishing filters and their keys, use `GET /v1/pushpublish/filters`. |\n| `timezoneId` | String | For the push publishing actionlet; specifies the time zone to which the indicated times belong. Uses the [tz database](https://www.iana.org/time-zones). For a list of values, see [the database directly](https://data.iana.org/time-zones/tz-link.html) or refer to [the Wikipedia entry listing tz database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). |\n\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FireActionByNameForm"}}},"required":true},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Fired action successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapView"}}}},"400":{"description":"Bad request"},"404":{"description":"Content not found"},"415":{"description":"Unsupported Media Type"}}}},"/api/v1/workflow/actions/default/firemultipart/{systemAction}":{"put":{"tags":["Workflow"],"summary":"Fire default action (multipart form)","description":"Fires a default [system action](https://www.dotcms.com/docs/latest/managing-workflows#DefaultActions) on target contentlet. Uses a multipart form to transmit its data.\n\nReturns a map of the resultant contentlet, with an additional `AUTO_ASSIGN_WORKFLOW` property, which can be referenced by delegate services that handle automatically assigning workflow schemes to content with none.\n\n**When chaining workflow actions or reading state back immediately after firing, pass `indexPolicy=WAIT_FOR` on each call.** The default `DEFER` is asynchronous and can return stale index reads for several seconds, which can mimic server-side state bugs. For isolated one-off fires where nothing reads the result, leave the default.\n\n**Block Editor (Story Block) fields:** send the value as a **Markdown or HTML** string — you do not need to hand-author the underlying ProseMirror/JSON document. dotCMS converts it to the Block Editor (ProseMirror JSON) structure automatically on save, so the field reads back as structured content with no editor round-trip required. A value that is already a valid Tiptap/ProseMirror JSON document is detected and stored unchanged. Example: `\"body\": \"## Intro\\n\\nHello **world**.\"`.\n\n**Rich blocks in Markdown:** blocks that plain Markdown cannot express are written as fenced code blocks whose info string is a `dotcms-*` label and whose body is a small JSON object. Example — embed a contentlet:\n\n```dotcms-content\\n{\"identifier\": \"\", \"languageId\": 1}\\n```\n\nSupported labels and payload fields (**bold** = required):\n- `dotcms-content` → embedded contentlet: **`identifier`**, `languageId` (default 1). The server rebuilds the full embed data from the identifier on every read.\n- `dotcms-image` → dotCMS-bound or decorated image: **`identifier` or `src`**; optional `alt`, `title`, `href`, `target`, `textWrap`, `textAlign`, `languageId`. Plain external images need no fence — standard `![alt](url \"title\")` works.\n- `dotcms-video` → video: **`identifier` or `src`**; optional `mimeType`, `width`, `height`, `languageId`.\n- `dotcms-youtube` → YouTube embed: **`src`**; optional `start` (seconds), `width`, `height`.\n- `dotcms-grid` → layout grid: the verbatim `gridBlock` node JSON (`{\"type\":\"gridBlock\",\"attrs\":{\"columns\":[n,n]},\"content\":[…two gridColumn nodes…]}`).\n- `dotcms-node` → any other node type verbatim (`{\"type\": \"\", …}`) — the fallback for custom blocks.\n\n**Rich blocks in HTML:** the same labels are namespaced custom elements. Scalar payloads ride as attributes with **hyphenated names** (HTML lowercases attribute names, so `languageId` is spelled `language-id`, `mimeType` is `mime-type`): `\" language-id=\"1\">`. `dotcms-ai`, `dotcms-grid` and `dotcms-node` take the same JSON object as the element's text body instead (HTML-escape `<` and `&` inside JSON string values). Always write an explicit closing tag — HTML parsing ignores the `/` in `` and would swallow the content after it. Both carriers produce identical stored documents.\n\nBlock styling (e.g. text alignment) is set by an HTML comment on its own line immediately before the block it decorates, in Markdown and HTML alike: ``.\n\nA Markdown/HTML write **fully replaces** the stored document; when stored rich blocks are not carried over in the submitted value, the save still succeeds and an advisory warning listing the replaced blocks is returned in the response `messages` field — carry the blocks over as fences or elements to preserve them. An invalid payload degrades to an ordinary code block (or is dropped when it carries no text to keep), never an error.","operationId":"putFireDefaultActionMultipart","parameters":[{"name":"inode","in":"query","description":"Inode of the target content.","schema":{"type":"string"}},{"name":"identifier","in":"query","description":"Identifier of target content.","schema":{"type":"string"}},{"name":"indexPolicy","in":"query","description":"Determines how target content is indexed.\n\n| Value | Description |\n|-------|-------------|\n| `DEFER` | Content will be indexed asynchronously, outside of the current process. Valid content will finish the method in process and be returned before the content becomes visible in the index. This is the default index policy; it is resource-friendly and well-suited to batch processing. |\n| `WAIT_FOR` | The API call will not return from the content check process until the content has been indexed. Ensures content is promptly available for searching. |\n| `FORCE` | Forces Elasticsearch to index the content **immediately**.
**Caution:** Using this value may cause system performance issues; it is not recommended for general use, though may be useful for testing purposes. |\n\n","schema":{"type":"string","enum":["DEFER","WAIT_FOR","FORCE"]}},{"name":"language","in":"query","description":"Language version of target content.","schema":{"type":"string","default":"-1"}},{"name":"systemAction","in":"path","description":"Default system action.","required":true,"schema":{"type":"string","enum":["NEW","EDIT","PUBLISH","UNPUBLISH","ARCHIVE","UNARCHIVE","DELETE","DESTROY","LOCK","UNLOCK"]}}],"requestBody":{"description":"Multipart form containing a JSON 'contentlet' body and optional binary field parts.","content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/WorkflowActionMultipartSchema"}}},"required":true},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Fired action successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapView"}}}},"400":{"description":"Bad request"},"404":{"description":"Content not found"},"415":{"description":"Unsupported Media Type"}}}},"/api/v1/workflow/actions/default/fire/{systemAction}":{"put":{"tags":["Workflow"],"summary":"Fire system action by name","description":"Fire a [default system action](https://www.dotcms.com/docs/latest/managing-workflows#DefaultActions) by name on a target contentlet.\n\nReturns a map of the resultant contentlet, with an additional `AUTO_ASSIGN_WORKFLOW` property, which can be referenced by delegate services that handle automatically assigning workflow schemes to content with none.\n\n**Use `PUT` for a single contentlet.** This path also accepts `POST`, but that is a **different** operation that fires over *multiple* contentlets and returns a different envelope (`entity.results[]`, a list). Sending a single-contentlet body via `POST` will not return the created contentlet's `identifier` where you expect it, even though the record may still be (half-)created by the content type's default workflow — a common silent trap. For one item, always use `PUT`.\n\n**Request body** — wrap field values in a `contentlet` key:\n\n```json\n{\n \"contentlet\": {\n \"contentType\": \"\",\n \"title\": \"My New Item\",\n \"...\": \"other field values\"\n }\n}\n```\nField keys inside `contentlet` are the content type's field `variable` names (e.g., `title`, `body`, `image`). Unknown field names are silently dropped (a typo like `titel` will be ignored and may surface as a misleading 'title is required' error). Radio/Select/Checkbox values are not validated against the field's `values` list — out-of-range values are accepted as-is. Always verify spelling against `fields[].variable` from `GET /api/v1/contenttype/id/{idOrVar}`.\n\n**Validation error response shape:**\n\n```json\n{\n \"entity\": \"\",\n \"errors\": [{ \"errorCode\": \"required\", \"fieldName\": \"image\", \"message\": \"The field Image is required.\" }],\n \"i18nMessagesMap\": {}, \"messages\": [], \"pagination\": null, \"permissions\": []\n}\n```\n`errorCode` values: `required`, `unknown`. `fieldName` is the field `variable` for field-specific errors, or `null` for content-level errors. Note: when the content type is not found, `message` returns the raw translation key `Workflow-does-not-exists-content-type` instead of translated text.\n\n**Binary and image fields** — These fields cannot receive raw file data or asset paths in the JSON body. Use one of the patterns below.\n\n**Pattern A — single-use file (works for all binary/image fields):**\n\n1. `POST /api/v1/temp` (multipart `file` part) OR `POST /api/v1/temp/byUrl` (JSON `{\"remoteUrl\":\"https://...\"}`) → use `tempFiles[0].id` (e.g. `\"temp_5311313004\"`) as the field value.\n2. Pass that ID in the contentlet body: `{\"contentlet\": {\"contentType\": \"ResortActivities\", \"image\": \"temp_5311313004\", ...}}`.\n\n**Pattern B — reusable shared asset (`ImmutableImageField` only):**\n\n1. Upload via `/temp`, create a dotAsset contentlet: `PUT .../fire/PUBLISH` with `{\"contentlet\": {\"contentType\": \"dotAsset\", \"asset\": \"temp_\"}}`.\n2. Use the returned dotAsset `identifier` as the field value on any `ImmutableImageField`.\n\n| Field `clazz` | `temp_` | dotAsset `identifier` |\n|---|---|---|\n| `ImmutableBinaryField` | ✅ | ❌ (returns 400 \\\"field is required\\\") |\n| `ImmutableImageField` | ✅ | ✅ |\n\nFind a field's `clazz` by calling `GET /api/v1/contenttype/id/{idOrVar}` and reading `fields[].clazz`.\n\n⚠️ **Known issue:** Firing `PUBLISH` on an archived contentlet (`archived: true`) does not validate the archived state and can produce an inconsistent `live: true, archived: true` tri-state. Always fire `UNARCHIVE` before `PUBLISH` on archived content.\n\n⚠️ **Multi-scheme content types:** When a content type has multiple workflow schemes attached, firing a system action only initializes the contentlet into the scheme whose `systemActionMappings` entry resolved the fire. Other attached schemes will not have a task for that contentlet, and firing their actions later will fail with 'Workflow Action is not available in the Workflow Step the content is currently in.' To exercise actions in those other schemes, fire by action ID via `PUT /api/v1/workflow/actions/{actionId}/fire` using an action mapped to the desired scheme.\n\n**When chaining workflow actions or reading state back immediately after firing, pass `indexPolicy=WAIT_FOR` on each call.** The default `DEFER` is asynchronous and can return stale index reads for several seconds, which can mimic server-side state bugs. For isolated one-off fires where nothing reads the result, leave the default.\n\n**Block Editor (Story Block) fields:** send the value as a **Markdown or HTML** string — you do not need to hand-author the underlying ProseMirror/JSON document. dotCMS converts it to the Block Editor (ProseMirror JSON) structure automatically on save, so the field reads back as structured content with no editor round-trip required. A value that is already a valid Tiptap/ProseMirror JSON document is detected and stored unchanged. Example: `\"body\": \"## Intro\\n\\nHello **world**.\"`.\n\n**Rich blocks in Markdown:** blocks that plain Markdown cannot express are written as fenced code blocks whose info string is a `dotcms-*` label and whose body is a small JSON object. Example — embed a contentlet:\n\n```dotcms-content\\n{\"identifier\": \"\", \"languageId\": 1}\\n```\n\nSupported labels and payload fields (**bold** = required):\n- `dotcms-content` → embedded contentlet: **`identifier`**, `languageId` (default 1). The server rebuilds the full embed data from the identifier on every read.\n- `dotcms-image` → dotCMS-bound or decorated image: **`identifier` or `src`**; optional `alt`, `title`, `href`, `target`, `textWrap`, `textAlign`, `languageId`. Plain external images need no fence — standard `![alt](url \"title\")` works.\n- `dotcms-video` → video: **`identifier` or `src`**; optional `mimeType`, `width`, `height`, `languageId`.\n- `dotcms-youtube` → YouTube embed: **`src`**; optional `start` (seconds), `width`, `height`.\n- `dotcms-grid` → layout grid: the verbatim `gridBlock` node JSON (`{\"type\":\"gridBlock\",\"attrs\":{\"columns\":[n,n]},\"content\":[…two gridColumn nodes…]}`).\n- `dotcms-node` → any other node type verbatim (`{\"type\": \"\", …}`) — the fallback for custom blocks.\n\n**Rich blocks in HTML:** the same labels are namespaced custom elements. Scalar payloads ride as attributes with **hyphenated names** (HTML lowercases attribute names, so `languageId` is spelled `language-id`, `mimeType` is `mime-type`): `\" language-id=\"1\">`. `dotcms-ai`, `dotcms-grid` and `dotcms-node` take the same JSON object as the element's text body instead (HTML-escape `<` and `&` inside JSON string values). Always write an explicit closing tag — HTML parsing ignores the `/` in `` and would swallow the content after it. Both carriers produce identical stored documents.\n\nBlock styling (e.g. text alignment) is set by an HTML comment on its own line immediately before the block it decorates, in Markdown and HTML alike: ``.\n\nA Markdown/HTML write **fully replaces** the stored document; when stored rich blocks are not carried over in the submitted value, the save still succeeds and an advisory warning listing the replaced blocks is returned in the response `messages` field — carry the blocks over as fences or elements to preserve them. An invalid payload degrades to an ordinary code block (or is dropped when it carries no text to keep), never an error.","operationId":"putFireDefaultSystemAction","parameters":[{"name":"inode","in":"query","description":"Inode of the target content.","schema":{"type":"string"}},{"name":"identifier","in":"query","description":"Identifier of target content.","schema":{"type":"string"}},{"name":"indexPolicy","in":"query","description":"Determines how target content is indexed.\n\n| Value | Description |\n|-------|-------------|\n| `DEFER` | Content will be indexed asynchronously, outside of the current process. Valid content will finish the method in process and be returned before the content becomes visible in the index. This is the default index policy; it is resource-friendly and well-suited to batch processing. |\n| `WAIT_FOR` | The API call will not return from the content check process until the content has been indexed. Ensures content is promptly available for searching. |\n| `FORCE` | Forces Elasticsearch to index the content **immediately**.
**Caution:** Using this value may cause system performance issues; it is not recommended for general use, though may be useful for testing purposes. |\n\n","schema":{"type":"string","enum":["DEFER","WAIT_FOR","FORCE"]}},{"name":"language","in":"query","description":"Language version of target content.","schema":{"type":"string","default":"-1"}},{"name":"variantName","in":"query","description":"Variant name","schema":{"type":"string","default":"DEFAULT"}},{"name":"systemAction","in":"path","description":"Default system action.","required":true,"schema":{"type":"string","enum":["NEW","EDIT","PUBLISH","UNPUBLISH","ARCHIVE","UNARCHIVE","DELETE","DESTROY","LOCK","UNLOCK"]}}],"requestBody":{"description":"Optional body consists of a JSON object containing a FireActionByNameForm object — a form that appears in similar functions, as well, but implemented with minor differences across methods. As such, some properties are unused.\n\nThe full list of properties that may be used with this form is as follows:\n\n| Property | Type | Description |\n|-|-|-|\n| `actionName` | String | Not used in this method. |\n| `contentlet` | Object | An alternate way of specifying the target contentlet. If no identifier or inode is included via parameter, either one could instead be included in the body as a property of this object. |\n| `comments` | String | Comments that will appear in the [workflow tasks](https://www.dotcms.com/docs/latest/workflow-tasks) tool with the execution of this workflow action. |\n| `individualPermissions` | Object | Allows setting granular permissions associated with the target. The object properties are the [system names of permissions](https://www.dotcms.com/docs/latest/user-permissions#Permissions), such as READ, PUBLISH, EDIT, etc. Their respective values are a list of user or role identifiers that should be granted the permission in question. Example: `\"READ\": [\"9ad24203-ae6a-4e5e-aa10-a8c38fd11f17\",\"MyRole\"]` |\n| `assign` | String | The identifier of a user or role to next receive the workflow task assignment. |\n| `pathToMove` | String | If the workflow action includes the Move actionlet, this property will specify the target path. This path must include a host, such as `//default/testfolder`, `//demo.dotcms.com/application`, etc. |\n| `query` | String | Not used in this method. |\n| `whereToSend` | String | For the [push publishing](push-publishing) actionlet; sets the push-publishing environment to receive the target content. Must be specified as an environment identifier. [Learn how to find environment IDs here.](https://www.dotcms.com/docs/latest/push-publishing-endpoints#EnvironmentIds) |\n| `iWantTo` | String | For the push publishing actionlet; this can be set to one of three values:
  • `publish` for push publish;
  • `expire` for remove;
  • `publishexpire` for push remove.
These are further configurable with the properties below that specify publishing and expiration dates, times, etc. |\n| `publishDate` | String | For the push publishing actionlet; specifies a date to push the content. Format: `yyyy-MM-dd`. |\n| `publishTime` | String | For the push publishing actionlet; specifies a time to push the content. Format: `hh-mm`. |\n| `expireDate` | String | For the push publishing actionlet; specifies a date to remove the content. Format: `yyyy-MM-dd`. |\n| `expireTime` | String | For the push publishing actionlet; specifies a time to remove the content. Format: `hh-mm`. |\n| `neverExpire` | Boolean | For the push publishing actionlet; a value of `true` invalidates the expiration time/date. |\n| `filterKey` | String | For the push publishing actionlet; specifies a [push publishing filter](https://www.dotcms.com/docs/latest/push-publishing-filters) key, should the workflow action call for such. To retrieve a full list of push publishing filters and their keys, use `GET /v1/pushpublish/filters`. |\n| `timezoneId` | String | For the push publishing actionlet; specifies the time zone to which the indicated times belong. Uses the [tz database](https://www.iana.org/time-zones). For a list of values, see [the database directly](https://data.iana.org/time-zones/tz-link.html) or refer to [the Wikipedia entry listing tz database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). |\n\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FireActionByNameForm"}}}},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Fired action successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapView"}}}},"400":{"description":"Validation error. `errors[].errorCode` values: `required` (a required field is missing), `unknown` (unknown content type — `message` returns the raw translation key `Workflow-does-not-exists-content-type`). `fieldName` is the field `variable` for field-specific errors, or `null` otherwise.","content":{"application/json":{"examples":{"Required field missing":{"description":"Required field missing","value":{"entity":"","errors":[{"errorCode":"required","fieldName":"image","message":"The field Image is required."}],"i18nMessagesMap":{},"messages":[],"pagination":null,"permissions":[]}}}}}},"404":{"description":"Content not found"},"415":{"description":"Unsupported Media Type"}}},"post":{"tags":["Workflow"],"summary":"Fire system action by name over multiple contentlets","description":"Fire a [default system action](https://www.dotcms.com/docs/latest/managing-workflows#DefaultActions) by name on multiple target contentlets.\n\nReturns a list of resultant contentlet maps, each with an additional `AUTO_ASSIGN_WORKFLOW` property, which can be referenced by delegate services that handle automatically assigning workflow schemes to content with none.\n\nThis is the **multi-contentlet** variant and returns a list envelope (`entity.results[]`). To fire on a **single** contentlet, use `PUT` on this same path instead — it returns the single resultant contentlet map (with its `identifier`) directly.","operationId":"postFireSystemActionByNameMulti","parameters":[{"name":"systemAction","in":"path","description":"Default system action.","required":true,"schema":{"type":"string","enum":["NEW","EDIT","PUBLISH","UNPUBLISH","ARCHIVE","UNARCHIVE","DELETE","DESTROY","LOCK","UNLOCK"]}}],"requestBody":{"description":"Optional body consists of a JSON object containing various properties, some of which are specific to certain actionlets.\n\nThe full list of properties that may be used with this form is as follows:\n\n| Property | Type | Description |\n|-|-|-|\n| `contentlet` | List of Objects | Multiple contentlet objects to serve as the target of the selected default system action; requires, at minimum, an identifier in each. |\n| `comments` | String | Comments that will appear in the [workflow tasks](https://www.dotcms.com/docs/latest/workflow-tasks) tool with the execution of this workflow action. |\n| `assign` | String | The identifier of a user or role to next receive the workflow task assignment. |\n| `whereToSend` | String | For the [push publishing](push-publishing) actionlet; sets the push-publishing environment to receive the target content. Must be specified as an environment identifier. [Learn how to find environment IDs here.](https://www.dotcms.com/docs/latest/push-publishing-endpoints#EnvironmentIds) |\n| `iWantTo` | String | For the push publishing actionlet; this can be set to one of three values:
  • `publish` for push publish;
  • `expire` for remove;
  • `publishexpire` for push remove.
These are further configurable with the properties below that specify publishing and expiration dates, times, etc. |\n| `publishDate` | String | For the push publishing actionlet; specifies a date to push the content. Format: `yyyy-MM-dd`. |\n| `publishTime` | String | For the push publishing actionlet; specifies a time to push the content. Format: `hh-mm`. |\n| `expireDate` | String | For the push publishing actionlet; specifies a date to remove the content. Format: `yyyy-MM-dd`. |\n| `expireTime` | String | For the push publishing actionlet; specifies a time to remove the content. Format: `hh-mm`. |\n| `neverExpire` | Boolean | For the push publishing actionlet; a value of `true` invalidates the expiration time/date. |\n| `filterKey` | String | For the push publishing actionlet; specifies a [push publishing filter](https://www.dotcms.com/docs/latest/push-publishing-filters) key, should the workflow action call for such. To retrieve a full list of push publishing filters and their keys, use `GET /v1/pushpublish/filters`. |\n| `timezoneId` | String | For the push publishing actionlet; specifies the time zone to which the indicated times belong. Uses the [tz database](https://www.iana.org/time-zones). For a list of values, see [the database directly](https://data.iana.org/time-zones/tz-link.html) or refer to [the Wikipedia entry listing tz database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). |\n\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FireMultipleActionForm"},"example":{"contentlet":[{"identifier":"d684c0a9abeeeceea8b9a7e32fc272ae"},{"identifier":"c2701eced2b59f0bbd55b3d9667878ce"}],"comments":"test comment"}}}},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Fired action successfully","content":{"application/octet-stream":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapView"},"example":{"entity":{"results":[{"c2701eced2b59f0bbd55b3d9667878ce":{"AUTO_ASSIGN_WORKFLOW":false,"archived":false,"baseType":"string","body":"string","body_raw":"string","contentType":"string","creationDate":1725051866540,"folder":"string","hasLiveVersion":false,"hasTitleImage":false,"host":"string","hostName":"string","identifier":"c2701eced2b59f0bbd55b3d9667878ce","inode":"string","languageId":1,"live":false,"locked":false,"modDate":1727438483022,"modUser":"string","modUserName":"string","owner":"string","ownerName":"string","publishDate":1727438483051,"publishUser":"string","publishUserName":"string","sortOrder":0,"stInode":"string","title":"string","titleImage":"string","url":"string","working":false}}],"summary":{"affected":1,"failCount":0,"successCount":1,"time":45}},"errors":[],"i18nMessagesMap":{},"messages":[],"permissions":[]}}}},"400":{"description":"Bad request"},"404":{"description":"Content not found"},"415":{"description":"Unsupported Media Type"}}},"patch":{"tags":["Workflow"],"summary":"Modify specific fields on multiple contentlets","description":"Assigns values to the specified fields across multiple [contentlets](https://www.dotcms.com/docs/latest/content#Contentlets) simultaneously.\n\nCan use a [Lucene query](https://www.dotcms.com/docs/latest/content-search-syntax#Lucene) in its body to select all resulting content items.\n\nReturns a list of resultant contentlet maps, each with an additional `AUTO_ASSIGN_WORKFLOW` property, which can be referenced by delegate services that handle automatically assigning workflow schemes to content with none.\n\n**`LOCK` and `UNLOCK` are not supported by this endpoint** and are rejected with a `400`. Locking is per-user state on the contentlet's version info rather than a content change, so there is nothing for a merge to apply — accepting the call would lock the contentlet and silently discard the submitted field values. Use `POST` or `PUT /v1/workflow/actions/default/fire/{systemAction}` for those two.","operationId":"patchFireMergeSystemAction","parameters":[{"name":"inode","in":"query","description":"Inode of the target content.","schema":{"type":"string"}},{"name":"identifier","in":"query","description":"Identifier of target content.","schema":{"type":"string"}},{"name":"language","in":"query","description":"Language version of target content.","schema":{"type":"string","default":"-1"}},{"name":"offset","in":"query","description":"Numeric offset for query results; useful for paginating.","schema":{"type":"integer","format":"int64"}},{"name":"systemAction","in":"path","description":"Default system action.","required":true,"schema":{"type":"string","enum":["NEW","EDIT","PUBLISH","UNPUBLISH","ARCHIVE","UNARCHIVE","DELETE","DESTROY"]}}],"requestBody":{"description":"Optional body consists of a JSON object containing various properties, some of which are specific to certain actionlets.\n\nThe full list of properties that may be used with this form is as follows:\n\n| Property | Type | Description |\n|-|-|-|\n| `query` | String | A Lucene query that can target multiple contentlets for editing. Example: `+contentType:htmlpageasset` for all dotCMS pages. |\n| `contentlet` | Object | An alternate way of specifying the target contentlet. If no identifier or inode is included via parameter, either one could instead be included in the body as a property of this object. |\n| `comments` | String | Comments that will appear in the [workflow tasks](https://www.dotcms.com/docs/latest/workflow-tasks) tool with the execution of this workflow action. |\n| `individualPermissions` | Object | Allows setting granular permissions associated with the target. The object properties are the [system names of permissions](https://www.dotcms.com/docs/latest/user-permissions#Permissions), such as READ, PUBLISH, EDIT, etc. Their respective values are a list of user or role identifiers that should be granted the permission in question. Example: `\"READ\": [\"9ad24203-ae6a-4e5e-aa10-a8c38fd11f17\",\"MyRole\"]` |\n| `assign` | String | The identifier of a user or role to next receive the workflow task assignment. |\n| `pathToMove` | String | If the workflow action includes the Move actionlet, this property will specify the target path. This path must include a host, such as `//default/testfolder`, `//demo.dotcms.com/application`, etc. |\n| `whereToSend` | String | For the [push publishing](push-publishing) actionlet; sets the push-publishing environment to receive the target content. Must be specified as an environment identifier. [Learn how to find environment IDs here.](https://www.dotcms.com/docs/latest/push-publishing-endpoints#EnvironmentIds) |\n| `iWantTo` | String | For the push publishing actionlet; this can be set to one of three values:
  • `publish` for push publish;
  • `expire` for remove;
  • `publishexpire` for push remove.
These are further configurable with the properties below that specify publishing and expiration dates, times, etc. |\n| `publishDate` | String | For the push publishing actionlet; specifies a date to push the content. Format: `yyyy-MM-dd`. |\n| `publishTime` | String | For the push publishing actionlet; specifies a time to push the content. Format: `hh-mm`. |\n| `expireDate` | String | For the push publishing actionlet; specifies a date to remove the content. Format: `yyyy-MM-dd`. |\n| `expireTime` | String | For the push publishing actionlet; specifies a time to remove the content. Format: `hh-mm`. |\n| `neverExpire` | Boolean | For the push publishing actionlet; a value of `true` invalidates the expiration time/date. |\n| `filterKey` | String | For the push publishing actionlet; specifies a [push publishing filter](https://www.dotcms.com/docs/latest/push-publishing-filters) key, should the workflow action call for such. To retrieve a full list of push publishing filters and their keys, use `GET /v1/pushpublish/filters`. |\n| `timezoneId` | String | For the push publishing actionlet; specifies the time zone to which the indicated times belong. Uses the [tz database](https://www.iana.org/time-zones). For a list of values, see [the database directly](https://data.iana.org/time-zones/tz-link.html) or refer to [the Wikipedia entry listing tz database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). |\n\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FireActionForm"},"example":{"comments":"Publish an existing Generic content","query":"+contentType:webPageContent AND title:testcontent","contentlet":{"title":"TestContentNowWithCaps"}}}}},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Contentlet(s) modified successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapView"},"example":{"entity":{"results":[{"c2701eced2b59f0bbd55b3d9667878ce":{"AUTO_ASSIGN_WORKFLOW":false,"archived":false,"baseType":"string","body":"string","body_raw":"string","contentType":"string","creationDate":1725051866540,"folder":"string","hasLiveVersion":false,"hasTitleImage":false,"host":"string","hostName":"string","identifier":"c2701eced2b59f0bbd55b3d9667878ce","inode":"string","languageId":1,"live":false,"locked":false,"modDate":1727438483022,"modUser":"string","modUserName":"string","owner":"string","ownerName":"string","publishDate":1727438483051,"publishUser":"string","publishUserName":"string","sortOrder":0,"stInode":"string","title":"string","titleImage":"string","url":"string","working":false}}],"summary":{"affected":1,"failCount":0,"successCount":1,"time":45}},"errors":[],"i18nMessagesMap":{},"messages":[],"permissions":[]}}}},"404":{"description":"Content Type not found"},"415":{"description":"Unsupported Media Type"}}}},"/api/v1/workflow/actions/{actionId}/firemultipart":{"put":{"tags":["Workflow"],"summary":"Fire action by ID (multipart form)","description":"Fires a [workflow action](https://www.dotcms.com/docs/latest/managing-workflows#Actions), specified by identifier, on a target contentlet. Uses a multipart form to transmit its data.\n\nReturns a map of the resultant contentlet, with an additional `AUTO_ASSIGN_WORKFLOW` property, which can be referenced by delegate services that handle automatically assigning workflow schemes to content with none.\n\n**When chaining workflow actions or reading state back immediately after firing, pass `indexPolicy=WAIT_FOR` on each call.** The default `DEFER` is asynchronous and can return stale index reads for several seconds, which can mimic server-side state bugs. For isolated one-off fires where nothing reads the result, leave the default.\n\n**Block Editor (Story Block) fields:** send the value as a **Markdown or HTML** string — you do not need to hand-author the underlying ProseMirror/JSON document. dotCMS converts it to the Block Editor (ProseMirror JSON) structure automatically on save, so the field reads back as structured content with no editor round-trip required. A value that is already a valid Tiptap/ProseMirror JSON document is detected and stored unchanged. Example: `\"body\": \"## Intro\\n\\nHello **world**.\"`.\n\n**Rich blocks in Markdown:** blocks that plain Markdown cannot express are written as fenced code blocks whose info string is a `dotcms-*` label and whose body is a small JSON object. Example — embed a contentlet:\n\n```dotcms-content\\n{\"identifier\": \"\", \"languageId\": 1}\\n```\n\nSupported labels and payload fields (**bold** = required):\n- `dotcms-content` → embedded contentlet: **`identifier`**, `languageId` (default 1). The server rebuilds the full embed data from the identifier on every read.\n- `dotcms-image` → dotCMS-bound or decorated image: **`identifier` or `src`**; optional `alt`, `title`, `href`, `target`, `textWrap`, `textAlign`, `languageId`. Plain external images need no fence — standard `![alt](url \"title\")` works.\n- `dotcms-video` → video: **`identifier` or `src`**; optional `mimeType`, `width`, `height`, `languageId`.\n- `dotcms-youtube` → YouTube embed: **`src`**; optional `start` (seconds), `width`, `height`.\n- `dotcms-grid` → layout grid: the verbatim `gridBlock` node JSON (`{\"type\":\"gridBlock\",\"attrs\":{\"columns\":[n,n]},\"content\":[…two gridColumn nodes…]}`).\n- `dotcms-node` → any other node type verbatim (`{\"type\": \"\", …}`) — the fallback for custom blocks.\n\n**Rich blocks in HTML:** the same labels are namespaced custom elements. Scalar payloads ride as attributes with **hyphenated names** (HTML lowercases attribute names, so `languageId` is spelled `language-id`, `mimeType` is `mime-type`): `\" language-id=\"1\">`. `dotcms-ai`, `dotcms-grid` and `dotcms-node` take the same JSON object as the element's text body instead (HTML-escape `<` and `&` inside JSON string values). Always write an explicit closing tag — HTML parsing ignores the `/` in `` and would swallow the content after it. Both carriers produce identical stored documents.\n\nBlock styling (e.g. text alignment) is set by an HTML comment on its own line immediately before the block it decorates, in Markdown and HTML alike: ``.\n\nA Markdown/HTML write **fully replaces** the stored document; when stored rich blocks are not carried over in the submitted value, the save still succeeds and an advisory warning listing the replaced blocks is returned in the response `messages` field — carry the blocks over as fences or elements to preserve them. An invalid payload degrades to an ordinary code block (or is dropped when it carries no text to keep), never an error.","operationId":"putFireActionByIdMultipart","parameters":[{"name":"actionId","in":"path","description":"Identifier of a workflow action.\n\nExample value: `b9d89c80-3d88-4311-8365-187323c96436` (Default system workflow \"Publish\" action)","required":true,"schema":{"type":"string"}},{"name":"inode","in":"query","description":"Inode of the target content.","schema":{"type":"string"}},{"name":"identifier","in":"query","description":"Identifier of target content.","schema":{"type":"string"}},{"name":"indexPolicy","in":"query","description":"Determines how target content is indexed.\n\n| Value | Description |\n|-------|-------------|\n| `DEFER` | Content will be indexed asynchronously, outside of the current process. Valid content will finish the method in process and be returned before the content becomes visible in the index. This is the default index policy; it is resource-friendly and well-suited to batch processing. |\n| `WAIT_FOR` | The API call will not return from the content check process until the content has been indexed. Ensures content is promptly available for searching. |\n| `FORCE` | Forces Elasticsearch to index the content **immediately**.
**Caution:** Using this value may cause system performance issues; it is not recommended for general use, though may be useful for testing purposes. |\n\n","schema":{"type":"string","enum":["DEFER","WAIT_FOR","FORCE"]}},{"name":"language","in":"query","description":"Language version of target content.","schema":{"type":"string","default":"-1"}}],"requestBody":{"description":"Multipart form containing a JSON 'contentlet' body and optional binary field parts.","content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/WorkflowActionMultipartSchema"}}},"required":true},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Fired action successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapView"}}}},"400":{"description":"Bad request"},"404":{"description":"Content not found"},"415":{"description":"Unsupported Media Type"}}}},"/api/v1/workflow/actions/{actionId}/fire":{"put":{"tags":["Workflow"],"summary":"Fire action by ID","description":"Fires a [workflow action](https://www.dotcms.com/docs/latest/managing-workflows#Actions), specified by identifier, on a target contentlet.\n\nReturns a map of the resultant contentlet, with an additional `AUTO_ASSIGN_WORKFLOW` property, which can be referenced by delegate services that handle automatically assigning workflow schemes to content with none.\n\n**Use this endpoint to fire actions that are not represented as `SystemAction` tokens** (`NEW`, `EDIT`, `PUBLISH`, etc.). The two most common are `Move` and `Copy` on the System Workflow scheme.\n\n**Move action** — relocates a contentlet to a new folder/host. Request body shape (note: `pathToMove` is a sibling of `contentlet`, **not** nested inside it):\n\n```json\n{\n \"contentlet\": { \"identifier\": \"\" },\n \"pathToMove\": \"///\"\n}\n```\nAlternative shapes (`contentlet.host`+`contentlet.folder`, `contentlet.hostFolder`, `path` instead of `pathToMove`) all return `400 \"The host path is not valid: null\"`.\n\n**Copy action** — clones a contentlet. Fire with `?identifier=` and an empty body (or `{\"contentlet\": {\"identifier\": \"\"}}`). The Copy action id on the default System Workflow scheme is `963f6a04-5320-42e7-ab74-6d876d199946`; retrieve it for other environments via `GET /api/v1/workflow/schemes/{schemeId}/actions`. ⚠️ The response `entity` returns the **source** contentlet, not the newly-created copy — locate the copy via a follow-up `POST /api/content/_search` ordered by `modDate DESC`. The copy lands in `SYSTEM_HOST` / `SYSTEM_FOLDER`; destination hints (`pathToMove`, `host`, `folder`, `hostFolder`) are silently ignored. Fire the Move action afterwards to relocate.\n\n**When chaining workflow actions or reading state back immediately after firing, pass `indexPolicy=WAIT_FOR` on each call.** The default `DEFER` is asynchronous and can return stale index reads for several seconds, which can mimic server-side state bugs. For isolated one-off fires where nothing reads the result, leave the default.\n\n**Block Editor (Story Block) fields:** send the value as a **Markdown or HTML** string — you do not need to hand-author the underlying ProseMirror/JSON document. dotCMS converts it to the Block Editor (ProseMirror JSON) structure automatically on save, so the field reads back as structured content with no editor round-trip required. A value that is already a valid Tiptap/ProseMirror JSON document is detected and stored unchanged. Example: `\"body\": \"## Intro\\n\\nHello **world**.\"`.\n\n**Rich blocks in Markdown:** blocks that plain Markdown cannot express are written as fenced code blocks whose info string is a `dotcms-*` label and whose body is a small JSON object. Example — embed a contentlet:\n\n```dotcms-content\\n{\"identifier\": \"\", \"languageId\": 1}\\n```\n\nSupported labels and payload fields (**bold** = required):\n- `dotcms-content` → embedded contentlet: **`identifier`**, `languageId` (default 1). The server rebuilds the full embed data from the identifier on every read.\n- `dotcms-image` → dotCMS-bound or decorated image: **`identifier` or `src`**; optional `alt`, `title`, `href`, `target`, `textWrap`, `textAlign`, `languageId`. Plain external images need no fence — standard `![alt](url \"title\")` works.\n- `dotcms-video` → video: **`identifier` or `src`**; optional `mimeType`, `width`, `height`, `languageId`.\n- `dotcms-youtube` → YouTube embed: **`src`**; optional `start` (seconds), `width`, `height`.\n- `dotcms-grid` → layout grid: the verbatim `gridBlock` node JSON (`{\"type\":\"gridBlock\",\"attrs\":{\"columns\":[n,n]},\"content\":[…two gridColumn nodes…]}`).\n- `dotcms-node` → any other node type verbatim (`{\"type\": \"\", …}`) — the fallback for custom blocks.\n\n**Rich blocks in HTML:** the same labels are namespaced custom elements. Scalar payloads ride as attributes with **hyphenated names** (HTML lowercases attribute names, so `languageId` is spelled `language-id`, `mimeType` is `mime-type`): `\" language-id=\"1\">`. `dotcms-ai`, `dotcms-grid` and `dotcms-node` take the same JSON object as the element's text body instead (HTML-escape `<` and `&` inside JSON string values). Always write an explicit closing tag — HTML parsing ignores the `/` in `` and would swallow the content after it. Both carriers produce identical stored documents.\n\nBlock styling (e.g. text alignment) is set by an HTML comment on its own line immediately before the block it decorates, in Markdown and HTML alike: ``.\n\nA Markdown/HTML write **fully replaces** the stored document; when stored rich blocks are not carried over in the submitted value, the save still succeeds and an advisory warning listing the replaced blocks is returned in the response `messages` field — carry the blocks over as fences or elements to preserve them. An invalid payload degrades to an ordinary code block (or is dropped when it carries no text to keep), never an error.","operationId":"putFireActionById","parameters":[{"name":"actionId","in":"path","description":"Identifier of a workflow action.\n\nExample value: `b9d89c80-3d88-4311-8365-187323c96436` (Default system workflow \"Publish\" action)","required":true,"schema":{"type":"string"}},{"name":"inode","in":"query","description":"Inode of the target content.","schema":{"type":"string"}},{"name":"identifier","in":"query","description":"Identifier of target content.","schema":{"type":"string"}},{"name":"indexPolicy","in":"query","description":"Determines how target content is indexed.\n\n| Value | Description |\n|-------|-------------|\n| `DEFER` | Content will be indexed asynchronously, outside of the current process. Valid content will finish the method in process and be returned before the content becomes visible in the index. This is the default index policy; it is resource-friendly and well-suited to batch processing. |\n| `WAIT_FOR` | The API call will not return from the content check process until the content has been indexed. Ensures content is promptly available for searching. |\n| `FORCE` | Forces Elasticsearch to index the content **immediately**.
**Caution:** Using this value may cause system performance issues; it is not recommended for general use, though may be useful for testing purposes. |\n\n","schema":{"type":"string","enum":["DEFER","WAIT_FOR","FORCE"]}},{"name":"language","in":"query","description":"Language version of target content.","schema":{"type":"string","default":"-1"}}],"requestBody":{"description":"Optional body consists of a JSON object containing various properties, some of which are specific to certain actionlets.\n\nThe full list of properties that may be used with this form is as follows:\n\n| Property | Type | Description |\n|-|-|-|\n| `contentlet` | Object | An alternate way of specifying the target contentlet. If no identifier or inode is included via parameter, either one could instead be included in the body as a property of this object. |\n| `comments` | String | Comments that will appear in the [workflow tasks](https://www.dotcms.com/docs/latest/workflow-tasks) tool with the execution of this workflow action. |\n| `individualPermissions` | Object | Allows setting granular permissions associated with the target. The object properties are the [system names of permissions](https://www.dotcms.com/docs/latest/user-permissions#Permissions), such as READ, PUBLISH, EDIT, etc. Their respective values are a list of user or role identifiers that should be granted the permission in question. Example: `\"READ\": [\"9ad24203-ae6a-4e5e-aa10-a8c38fd11f17\",\"MyRole\"]` |\n| `assign` | String | The identifier of a user or role to next receive the workflow task assignment. |\n| `pathToMove` | String | If the workflow action includes the Move actionlet, this property will specify the target path. This path must include a host, such as `//default/testfolder`, `//demo.dotcms.com/application`, etc. |\n| `query` | String | Not used in this method. |\n| `whereToSend` | String | For the [push publishing](push-publishing) actionlet; sets the push-publishing environment to receive the target content. Must be specified as an environment identifier. [Learn how to find environment IDs here.](https://www.dotcms.com/docs/latest/push-publishing-endpoints#EnvironmentIds) |\n| `iWantTo` | String | For the push publishing actionlet; this can be set to one of three values:
  • `publish` for push publish;
  • `expire` for remove;
  • `publishexpire` for push remove.
These are further configurable with the properties below that specify publishing and expiration dates, times, etc. |\n| `publishDate` | String | For the push publishing actionlet; specifies a date to push the content. Format: `yyyy-MM-dd`. |\n| `publishTime` | String | For the push publishing actionlet; specifies a time to push the content. Format: `hh-mm`. |\n| `expireDate` | String | For the push publishing actionlet; specifies a date to remove the content. Format: `yyyy-MM-dd`. |\n| `expireTime` | String | For the push publishing actionlet; specifies a time to remove the content. Format: `hh-mm`. |\n| `neverExpire` | Boolean | For the push publishing actionlet; a value of `true` invalidates the expiration time/date. |\n| `filterKey` | String | For the push publishing actionlet; specifies a [push publishing filter](https://www.dotcms.com/docs/latest/push-publishing-filters) key, should the workflow action call for such. To retrieve a full list of push publishing filters and their keys, use `GET /v1/pushpublish/filters`. |\n| `timezoneId` | String | For the push publishing actionlet; specifies the time zone to which the indicated times belong. Uses the [tz database](https://www.iana.org/time-zones). For a list of values, see [the database directly](https://data.iana.org/time-zones/tz-link.html) or refer to [the Wikipedia entry listing tz database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). |\n\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FireActionForm"}}}},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Fired action successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMapView"}}}},"400":{"description":"Bad request"},"404":{"description":"Content not found"},"415":{"description":"Unsupported Media Type"}}}},"/api/v1/workflow/contentlet/actions/_bulkfire":{"post":{"tags":["Workflow"],"summary":"Perform workflow actions on bulk content","description":"This operation allows you to specify a multiple content items (either by query or a list of identifiers), a [workflow action](https://www.dotcms.com/docs/latest/managing-workflows#Actions) to perform on them, and additional parameters as needed by the selected action. Responses are streamed as Server-Sent Events.\n\n⚠️ **Important contract notes:**\n\n- `contentletIds` despite its name expects **inodes**, not identifiers. Passing identifiers results in a silent no-op with no error.\n- `additionalParams` must be present, even when empty (`{}`). Omitting it returns a `500` NPE.\n- The endpoint is **not step-aware**: if the action is not valid in a contentlet's current step, the input is dropped silently (no `fails[]` entry). Verify post-fire state via `POST /api/content/_search`.\n- This endpoint behaves identically to `PUT /api/v1/workflow/contentlet/actions/bulk/fire`; only the response transport differs (SSE here vs JSON there).","operationId":"postBulkActionsFire","requestBody":{"description":"Body consists of a JSON object with the following possible properties:\n\n| Property | Type | Description |\n|-|-|-|\n| `contentletIds` | List of Strings | A list of contentlet **inodes** (not identifiers, despite the property name). |\n| `query` | String | [Lucene query](https://www.dotcms.com/docs/latest/content-search-syntax#Lucene); uses all matching contentlets. |\n| `workflowActionId` | String | The identifier of the workflow action to be performed on the selected content. |\n| `additionalParams` | Object | Further parameters and properties are conveyed here, depending on the particulars of the selected action.

For a complete list of possible parameters, refer to the various keys listed in `GET /workflow/actionlets`. |\n\nIf both `contentletIds` and `query` properties are present, the operation will perform the selected action on all contentlets indicated in both. Note that this will lead to the workflow action being performed on the same contentlet twice, if it appears in both.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FireBulkActionsForm"}}},"required":true},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventOutput"}}}},"400":{"description":"Bad request"},"415":{"description":"Unsupported Media Type"}}}},"/api/v1/workflow/contentlet/actions/bulk/fire":{"put":{"tags":["Workflow"],"summary":"Perform workflow actions on bulk content","description":"Fires a [workflow action](https://www.dotcms.com/docs/latest/managing-workflows#Actions) on multiple contentlets identified either by a Lucene 'query' or an explicit 'contentletIds' list. If both are supplied, 'query' wins and 'contentletIds' is ignored.\n\n**Scheme association is enforced.** Contentlets whose workflow scheme does not own the supplied 'workflowActionId' are skipped — they are not processed and are counted in 'skippedCount' on the response, with a 'skipReason' explaining the mismatch. When *every* input contentlet is skipped, the endpoint returns 422. To bypass scheme association checks (e.g. for System Workflow actions like Move on content from a custom scheme), use PUT /api/v1/workflow/actions/{actionId}/fire instead.\n\n⚠️ **Important contract notes:**\n\n- `contentletIds` despite its name expects **inodes**, not identifiers. Passing identifiers results in a silent no-op with no error.\n- `additionalParams` must be present, even when empty (`{}`). Omitting it returns a `500` NPE.\n- The endpoint is **not step-aware**: if the action is not valid in a contentlet's current step, the input is dropped silently (no `fails[]` entry). Verify post-fire state via `POST /api/content/_search`.\n- `PUT /api/v1/workflow/contentlet/actions/bulk/fire` and `POST /api/v1/workflow/contentlet/actions/_bulkfire` behave identically; `_bulkfire` streams via SSE.\n- For batches larger than a few contentlets, the synchronous response can exceed common client timeouts (e.g. ~15 s for the MCP sandbox). The server-side work typically completes; verify with `_search`.","operationId":"putBulkActionsFire","requestBody":{"description":"See FireBulkActionsForm for full field-level docs. Either 'query' OR 'contentletIds' is required (not both); 'contentletIds' is a list of contentlet **inodes** (not identifiers, despite the property name). 'workflowActionId' must be a workflow action UUID — discover via GET /api/v1/workflow/schemes/{schemeId}/actions or GET /api/v1/workflow/contentlet/{inode}/actions. To pass a target path to a Move actionlet, set 'additionalParams.additionalParamsMap._path_to_move'.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FireBulkActionsForm"}}},"required":true},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Success — at least one contentlet processed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBulkActionsResultView"}}}},"400":{"description":"Bad request"},"415":{"description":"Unsupported Media Type"},"422":{"description":"Whole batch skipped — none of the input contentlets are on a workflow scheme that owns the supplied 'workflowActionId'."}}}},"/api/v1/workflow/contentlet/actions/bulk":{"post":{"tags":["Workflow"],"summary":"Finds available bulk workflow actions for content","description":"Returns a list of bulk actions available for [contentlets](https://www.dotcms.com/docs/latest/content#Contentlets) either by identifiers or by query, as specified in the body.","operationId":"postBulkActions","requestBody":{"description":"Body consists of a JSON object with either of the following properties:\n\n| Property | Type | Description |\n|-|-|-|\n| `contentletIds` | List of Strings | A list of contentlet **inodes** (not identifiers, despite the property name). |\n| `query` | String | [Lucene query](https://www.dotcms.com/docs/latest/content-search-syntax#Lucene); uses all matching contentlets. |\n\nIf both properties are present, the operation will use the list of identifiers and disregard the query.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkActionForm"},"example":{"contentletIds":["651a4dc8-2124-45d8-8bd2-d8e68ad358a8","f8d60f79-e006-42e0-894f-5d3488b796f6"],"query":"+contentType:*"}}},"required":true},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Zero or more bulk actions returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBulkActionView"}}}},"400":{"description":"Bad request"},"415":{"description":"Unsupported Media Type"}}}},"/api/v1/workflow/status/{contentletInode}":{"get":{"tags":["Workflow"],"summary":"Find workflow status of content","description":"Checks the current workflow status of a contentlet by its [inode](https://www.dotcms.com/docs/latest/content-versions#IdentifiersInodes).\n\nReturns an object containing the associated [workflow scheme](https://www.dotcms.com/docs/latest/managing-workflows#Schemes), [workflow step](https://www.dotcms.com/docs/latest/managing-workflows#Steps), and [workflow task](https://www.dotcms.com/docs/latest/workflow-tasks) associated with the contentlet.","operationId":"getContentWorkflowStatusByInode","parameters":[{"name":"contentletInode","in":"path","description":"Inode of content version to inspect for workflow status.\n\n","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Action(s) returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseContentletWorkflowStatusView"}}}},"400":{"description":"Bad Request"}}}},"/api/v1/workflow/system/actions/{workflowActionId}":{"get":{"tags":["Workflow"],"summary":"Find default system actions by workflow action id","description":"Returns a list of [default system actions](https://www.dotcms.com/docs/latest/managing-workflows#DefaultActions) associated with a specified [workflow action](https://www.dotcms.com/docs/latest/managing-workflows#Actions).","operationId":"getSystemActionsByActionId","parameters":[{"name":"workflowActionId","in":"path","description":"Identifier of the workflow action to return.\n\nExample value: `b9d89c80-3d88-4311-8365-187323c96436` (Default system workflow \"Publish\" action)","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Action(s) returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntitySystemActionWorkflowActionMappings"}}}},"404":{"description":"Workflow action not found"}}}},"/api/v1/workflow/tasks":{"post":{"tags":["Workflow"],"summary":"Find workflow tasks based on filter parameters","description":"Retrieve the [workflow tasks](https://dev.dotcms.com/docs/workflow-tasks) that match the parameters included in the request body.","operationId":"getWorkflowTasks","requestBody":{"description":"Body consists of a JSON object containing workflow task search parameters:\n\n| Property | Type | Description |\n|-|-|-|\n| `keywords` | string | Search keywords to filter tasks by content |\n| `assignedTo` | string | User ID to filter tasks assigned to specific user |\n| `daysOld` | integer | Filter tasks by age in days (-1 for no limit, default: -1) |\n| `schemeId` | string | Workflow scheme identifier to filter tasks |\n| `stepId` | string | Workflow step identifier to filter tasks |\n| `open` | boolean | Include open tasks in results (default: false) |\n| `closed` | boolean | Include closed tasks in results (default: false) |\n| `createdBy` | string | User ID who created the content to filter tasks |\n| `show4all` | boolean | Show tasks for all users (admin privilege required, default: false) |\n| `orderBy` | string | Field to order results by (e.g., 'created_date', 'title') |\n| `count` | integer | Number of results per page (default: 20) |\n| `page` | integer | Page number for pagination (default: 0) |","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowSearcherForm"}}},"required":true},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Action(s) returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityWorkflowTasksView"}}}},"400":{"description":"Bad Request"}}}},"/api/v1/workflow/tasks/history/comments/{contentletIdentifier}":{"get":{"tags":["Workflow"],"summary":"Find workflow tasks history and comments of content","description":"Retrieve the workflow tasks comments of a contentlet by its [id](https://www.dotcms.com/docs/latest/content-versions#IdentifiersInodes).\n\nReturns an object containing the associated [workflow history or comments]https://www2.dotcms.com/docs/latest/workflow-tasks, [workflow task]","operationId":"getWorkflowTasksHistoryComments","parameters":[{"name":"contentletIdentifier","in":"path","description":"Id of content to inspect for workflow tasks.\n\n","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","description":"Language version of target content.","schema":{"type":"string","default":"-1"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Action(s) returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityWorkflowHistoryCommentsView"}}}},"400":{"description":"Bad Request"}}}},"/api/v1/workflow/schemes/import":{"post":{"tags":["Workflow"],"summary":"Import a workflow scheme","description":"Import a [workflow scheme](https://www.dotcms.com/docs/latest/managing-workflows#Schemes).\n\nReturns \"OK\" on success.","operationId":"postImportScheme","requestBody":{"description":"Body consists of a JSON object containing two properties: \n\n| Property | Type | Description |\n|-|-|-|\n| `workflowObject` | Object | An entire scheme along with steps and actions, such as received from the corresponding export method. |\n| `permissions` | List of Objects | A list of permission objects, such as received from the corresponding export method. |\n\nThe simplest way to perform an import is to pass the full value of the `entity` property returned by the corresponding Workflow Scheme Export endpoint as the data payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowSchemeImportObjectForm"}}},"required":true},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Imported workflow scheme successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}},"400":{"description":"Bad request"},"415":{"description":"Unsupported Media Type"}}}},"/api/v1/workflow/reorder/steps/{stepId}/actions/{actionId}":{"put":{"tags":["Workflow"],"summary":"Change the order of actions within a workflow step","description":"Updates a [workflow action](https://www.dotcms.com/docs/latest/managing-workflows#Actions)'s order within a [step](https://www.dotcms.com/docs/latest/managing-workflows#Steps) by assigning it a numeric order.\n\nReturns \"Ok\" on success.\n\n","operationId":"putReorderWorkflowActionsInStep","parameters":[{"name":"stepId","in":"path","description":"Identifier of the step containing the action.","required":true,"schema":{"type":"string"}},{"name":"actionId","in":"path","description":"Identifier of the action to reorder.","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Body consists of a JSON object containing the single property `order`, which is assigned an integer value.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowReorderWorkflowActionStepForm"}}},"required":true},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Updated workflow action successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}},"400":{"description":"Bad request"},"404":{"description":"Workflow step or action not found"},"415":{"description":"Unsupported Media Type"}}}},"/api/v1/workflow/reorder/step/{stepId}/order/{order}":{"put":{"tags":["Workflow"],"summary":"Change the order of steps within a scheme","description":"Updates a [workflow step](https://www.dotcms.com/docs/latest/managing-workflows#Steps)'s order within a [scheme](https://www.dotcms.com/docs/latest/managing-workflows#Schemes) by assigning it a numeric order.\n\nReturns \"Ok\" on success.\n\n","operationId":"putReorderWorkflowStepsInScheme","parameters":[{"name":"stepId","in":"path","description":"Identifier of the step to reorder.\n\nExample: `ee24a4cb-2d15-4c98-b1bd-6327126451f3` (Default system workflow Draft step)","required":true,"schema":{"type":"string"}},{"name":"order","in":"path","description":"Integer indicating the step's position in the order, with `0` as the first. All other steps numbers are adjusted accordingly, leaving no gaps.","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Workflow step reordered successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityStringView"}}}},"400":{"description":"Bad request"},"415":{"description":"Unsupported Media Type"}}}},"/api/v1/workflow/actions":{"post":{"tags":["Workflow"],"summary":"Creates/saves a workflow action","description":"Creates or updates a [workflow action](https://www.dotcms.com/docs/latest/managing-workflows#Actions) from the properties specified in the payload. Returns the created workflow action.\n\n**Tip:** Passing a `stepId` in the body also **attaches the new action to that step** as a side-effect. The separate `POST /api/v1/workflow/steps/{stepId}/actions` endpoint is only needed when attaching an action that already exists; for new actions created via this endpoint, `stepId` performs both the create and the attach in a single call.\n\n**Anyone / public role:** there is no magic `\"anyone\"` constant for `whoCanUse` or `actionNextAssign`. Use the CMS Anonymous role id (`654b0931-1027-41f7-ad4d-173115ed8ec1`) on most installs, or look up the actual id by inspecting an existing System Workflow action.","operationId":"postActionsByWorkflowActionForm","requestBody":{"description":"Body consists of a JSON object containing a [workflow action](https://www.dotcms.com/docs/latest/managing-workflows#Actions) form. This includes the following properties:\n\n| Property | Type | Description |\n|-|-|-|\n| `actionId` | String | The identifier of the workflow action to be updated. If left blank, a new workflow action will be created. |\n| `schemeId` | String | The [workflow scheme](https://www.dotcms.com/docs/latest/managing-workflows#Schemes) under which the action will be created. |\n| `stepId` | String | The [workflow step](https://www.dotcms.com/docs/latest/managing-workflows#Steps) with which to associate the action. |\n| `actionName` | String | The name of the workflow action. Multiple actions of the same name can coexist with different identifiers. |\n| `whoCanUse` | List of Strings | A list of identifiers representing [users](https://www.dotcms.com/docs/latest/user-management), [role keys](https://www.dotcms.com/docs/latest/adding-roles), or [other user categories](https://www.dotcms.com/docs/latest/managing-workflows#ActionWho) allowed to use this action. This list can be empty. |\n| `actionIcon` | String | The icon to associate with the action. Example: `workflowIcon`. |\n| `actionCommentable` | Boolean | Whether this action supports comments. |\n| `showOn` | List of Strings | List defining under which of the eight valid [workflow states](https://www.dotcms.com/docs/latest/managing-workflows#ActionShow) the action is visible. States must be specified uppercase, such as `NEW` or `LOCKED`. There is no single state for ALL; each state must be listed. |\n| `actionNextStep` | String | The identifier of the step to enter after performing the action; `currentstep` is also a valid value. |\n| `actionNextAssign` | String | A user identifier or role key (such as `CMS Anonymous`) to serve as the default entry in the assignment dropdown. |\n| `actionCondition` | String | [Custom Velocity code](https://www.dotcms.com/docs/latest/managing-workflows#ActionAssign) to be executed along with the action. |\n| `actionAssignable` | Boolean | Whether this action can be assigned. |\n| `actionRoleHierarchyForAssign` | Boolean | If true, non-administrators cannot assign tasks to administrators. |\n| `metadata` | Object | Additional metadata to include in the action definition. |\n\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowActionForm"}}},"required":true},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Workflow action created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityWorkflowActionView"}}}},"400":{"description":"Bad request"},"415":{"description":"Unsupported Media Type"}}}},"/api/v1/workflow/{contentletId}/comments":{"post":{"tags":["Workflow"],"summary":"Create a workflow comment","description":"Create a [workflow comment].\n\n Returns created workflow comment on success.","operationId":"postSaveComment","parameters":[{"name":"contentletId","in":"path","description":"Identifier of contentlet to add comment.","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","description":"Language version of target content.","schema":{"type":"string","default":"-1"}}],"requestBody":{"description":"The request body consists of the following three properties:\n\n| Property | Type | Description |\n|-|-|-|\n| `comment` | String | The workflow comment. |\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowCommentForm"}}}},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Copied workflow comment successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityWorkflowCommentView"}}}},"400":{"description":"Bad request"},"415":{"description":"Unsupported Media Type"}}}},"/api/v1/workflow/system/actions":{"put":{"tags":["Workflow"],"summary":"Save a default system action mapping","description":"This operation allows you to save a [default system action](https://www.dotcms.com/docs/latest/managing-workflows#DefaultActions) mapping. This requires:\n\n1. Selecting a default system action to be mapped;\n2. Specifying a [workflow action](https://www.dotcms.com/docs/latest/managing-workflows#Actions) to be performed when that system action is called;\n3. Associating this mapping with either a [workflow scheme](https://www.dotcms.com/docs/latest/managing-workflows#Schemes) or a [content type](https://www.dotcms.com/docs/latest/content-types).\n\nSee the request body below for further details.","operationId":"putSaveSystemActions","requestBody":{"description":"Body consists of a JSON object with the following properties:\n\n| Property | Type | Description |\n|-|-|-|\n| `systemAction` | String | A default system action, such as `NEW` or `PUBLISH`. |\n| `actionId` | String | The identifier of an action that will be performed by the specified system action. |\n| `schemeId` | String | The identifier of a workflow scheme to be associated with the system action. |\n| `contentTypeVariable` | String | The variable of a content type to be associated with the system action. Note that the content type must already have the schema assigned as one of its valid workflows in order to bind a system action from said schema. |\n\nIf both the `schemeId` and `contentTypeVariable` are specified, the scheme identifier takes precedence, and the content type variable is disregarded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowSystemActionForm"}}},"required":true},"responses":{"401":{"description":"Invalid User"},"403":{"description":"Forbidden"},"406":{"description":"Not Acceptable"},"500":{"description":"Internal Server Error"},"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBulkActionsResultView"}}}},"400":{"description":"Bad request"},"415":{"description":"Unsupported Media Type"}}}},"/api/v2/assets/{identifier}":{"get":{"tags":["File Assets"],"summary":"Get raw file-asset content by identifier","description":"Streams the raw bytes of a file asset addressed by its dotCMS identifier (UUID). Returns the working version in the site default language by default. READ permission is enforced — 403 is returned when the user lacks permission.","operationId":"getFileAssetById","parameters":[{"name":"identifier","in":"path","description":"Asset identifier (UUID)","required":true,"schema":{"type":"string"},"example":"48190c8c-42c4-46af-8d1a-0cd5db894797"},{"name":"language","in":"query","description":"Language tag (e.g. en-US). Defaults to site default language.","schema":{"type":"string"},"example":"en-US"},{"name":"version","in":"query","description":"Asset version to retrieve. Accepted values: working (default), live.","schema":{"type":"string","enum":["working","live"],"default":"working"},"example":"working"}],"responses":{"200":{"description":"Raw file bytes streamed with resolved MIME type and Content-Disposition header","content":{"application/octet-stream":{}}},"400":{"description":"Bad Request — unknown language tag or version value","content":{"application/json":{}}},"401":{"description":"Unauthorized — authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden — user does not have READ permission on this asset","content":{"application/json":{}}},"404":{"description":"Not Found — identifier not found, not a file asset, or language version unavailable","content":{"application/json":{}}}}}},"/api/v2/assets":{"get":{"tags":["File Assets"],"summary":"Get raw file-asset content by path","description":"Streams the raw bytes of a file asset addressed by a host-qualified path (//hostname/path/file.ext). Returns the working version by default; use version=live for the published version. Responds with 404 when the asset or language version does not exist, 400 when the path points at a folder.","operationId":"getFileAssetByPath","parameters":[{"name":"path","in":"query","description":"Host-qualified asset path, e.g. //demo.dotcms.com/application/foo.vtl","required":true,"schema":{"type":"string"},"example":"//demo.dotcms.com/application/containers/default/banner.vtl"},{"name":"language","in":"query","description":"Language tag (e.g. en-US). Defaults to site default language.","schema":{"type":"string"},"example":"en-US"},{"name":"version","in":"query","description":"Asset version to retrieve. Accepted values: working (default), live.","schema":{"type":"string","enum":["working","live"],"default":"working"},"example":"working"}],"responses":{"200":{"description":"Raw file bytes streamed with resolved MIME type and Content-Disposition header","content":{"application/octet-stream":{}}},"400":{"description":"Bad Request — path is missing, ambiguous, points at a folder, or unknown language/version value","content":{"application/json":{}}},"401":{"description":"Unauthorized — authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden — insufficient read permissions","content":{"application/json":{}}},"404":{"description":"Not Found — host, path, or language version does not exist","content":{"application/json":{}}}}}},"/api/v2/assets/publish":{"put":{"tags":["File Assets"],"summary":"Publish file asset (working + live)","description":"Creates or updates a file asset at the given host-qualified path and immediately publishes it (promotes to live). Submit via multipart/form-data with fields: file (binary), path (//host/folder/file.ext), language (optional).","operationId":"publishFileAsset","requestBody":{"description":"Multipart form with fields: file (binary content, required), path (host-qualified asset path including filename, required), language (language tag, optional — defaults to site default)","content":{"multipart/form-data":{"schema":{"type":"object","description":"Flat multipart form: file, path, language"}}},"required":true},"responses":{"200":{"description":"Asset saved and published successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityFileAssetView"}}}},"400":{"description":"Bad Request — missing file part, zero-byte file, unknown language, or invalid path","content":{"application/json":{}}},"401":{"description":"Unauthorized — authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden — insufficient permissions on target folder","content":{"application/json":{}}},"404":{"description":"Not Found — unknown host in path","content":{"application/json":{}}}}}},"/api/v2/assets/save":{"put":{"tags":["File Assets"],"summary":"Save file asset (working version)","description":"Creates or updates a file asset at the given host-qualified path. Only the working version is affected — the live version is NOT changed. Submit via multipart/form-data with fields: file (binary), path (//host/folder/file.ext), language (optional).","operationId":"saveFileAsset","requestBody":{"description":"Multipart form with fields: file (binary content, required), path (host-qualified asset path including filename, required), language (language tag, optional — defaults to site default)","content":{"multipart/form-data":{"schema":{"type":"object","description":"Flat multipart form: file, path, language"}}},"required":true},"responses":{"200":{"description":"Asset saved successfully as working version","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityFileAssetView"}}}},"400":{"description":"Bad Request — missing file part, zero-byte file, unknown language, or invalid path","content":{"application/json":{}}},"401":{"description":"Unauthorized — authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden — insufficient permissions on target folder","content":{"application/json":{}}},"404":{"description":"Not Found — unknown host in path","content":{"application/json":{}}}}}},"/api/v2/contenttype/{typeIdOrVarName}/fields":{"get":{"tags":["Content Type Field"],"operationId":"getContentTypeFields","parameters":[{"name":"typeIdOrVarName","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}},"deprecated":true},"put":{"tags":["Content Type Field"],"operationId":"updateFields","parameters":[{"name":"typeIdOrVarName","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"string"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}},"deprecated":true},"post":{"tags":["Content Type Field"],"operationId":"createContentTypeField","parameters":[{"name":"typeIdOrVarName","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"string"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}},"delete":{"tags":["Content Type Field"],"operationId":"deleteFields","parameters":[{"name":"typeIdOrVarName","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"*/*":{"schema":{"type":"array","items":{"type":"string"}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}},"deprecated":true}},"/api/v2/contenttype/{typeIdOrVarName}/fields/id/{fieldId}":{"get":{"tags":["Content Type Field"],"operationId":"getContentTypeFieldById","parameters":[{"name":"fieldId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}},"put":{"tags":["Content Type Field"],"operationId":"updateContentTypeFieldById","parameters":[{"name":"fieldId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"string"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}},"delete":{"tags":["Content Type Field"],"operationId":"deleteContentTypeFieldById","parameters":[{"name":"fieldId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v2/contenttype/{typeIdOrVarName}/fields/var/{fieldVar}":{"get":{"tags":["Content Type Field"],"operationId":"getContentTypeFieldByVar","parameters":[{"name":"typeIdOrVarName","in":"path","required":true,"schema":{"type":"string"}},{"name":"fieldVar","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}},"put":{"tags":["Content Type Field"],"operationId":"updateContentTypeFieldByVar","parameters":[{"name":"typeIdOrVarName","in":"path","required":true,"schema":{"type":"string"}},{"name":"fieldVar","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"string"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}},"delete":{"tags":["Content Type Field"],"operationId":"deleteContentTypeFieldByVar","parameters":[{"name":"typeIdOrVarName","in":"path","required":true,"schema":{"type":"string"}},{"name":"fieldVar","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v2/languages/{languageId}":{"put":{"tags":["Internationalization"],"operationId":"updateLanguage","parameters":[{"name":"languageId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/LanguageForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}},"delete":{"tags":["Internationalization"],"operationId":"deleteLanguage","parameters":[{"name":"languageId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v2/languages/id/{languageid}":{"get":{"tags":["Internationalization"],"operationId":"get_8","parameters":[{"name":"languageid","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v2/languages/{language}/keys":{"get":{"tags":["Internationalization"],"operationId":"getAllMessages","parameters":[{"name":"language","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v2/languages/_getdefault":{"get":{"tags":["Internationalization"],"operationId":"getDefaultLanguage","responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityViewLanguage"}},"application/javascript":{"schema":{"$ref":"#/components/schemas/ResponseEntityViewLanguage"}}}}}}},"/api/v2/languages/{languageTag}":{"get":{"tags":["Internationalization"],"operationId":"getFromLanguageTag","parameters":[{"name":"languageTag","in":"path","required":true,"schema":{"type":"string"}},{"name":"strict","in":"query","schema":{"type":"boolean","default":false}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}},"post":{"tags":["Internationalization"],"operationId":"saveFromLanguageTag","parameters":[{"name":"languageTag","in":"path","required":true,"schema":{"type":"string"}},{"name":"strict","in":"query","schema":{"type":"boolean","default":false}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v2/languages/iso":{"get":{"tags":["Internationalization"],"operationId":"getIsoLanguagesAndCountries","responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v2/languages/i18n":{"post":{"tags":["Internationalization"],"operationId":"getMessages","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/I18NForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v2/languages/variables":{"get":{"tags":["Internationalization"],"operationId":"getVariables","parameters":[{"name":"renderNulls","in":"query","schema":{"type":"boolean","default":true}}],"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v2/languages":{"get":{"tags":["Internationalization"],"operationId":"list_10","parameters":[{"name":"contentInode","in":"query","schema":{"type":"string"}},{"name":"countLangVars","in":"query","schema":{"type":"boolean"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"post":{"tags":["Internationalization"],"operationId":"saveLanguage","requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/LanguageForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v2/languages/{language}/_makedefault":{"put":{"tags":["Internationalization"],"operationId":"makeDefault","parameters":[{"name":"language","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/MakeDefaultLangForm"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{},"application/javascript":{}}}}}},"/api/v2/tags":{"get":{"tags":["Tags"],"summary":"List/Search Tags","description":"Searches and lists tags with filtering, pagination, and sorting. The filter parameter performs a case-insensitive search with wildcards on both sides (e.g., \"market\" matches \"Marketing\", \"marketplace\", \"supermarket\"). When using the filter, results are ordered by match length (shortest first) to prioritize exact matches. The site parameter accepts either a site ID or site name for filtering by specific sites.","operationId":"listTags","parameters":[{"name":"filter","in":"query","description":"Tag name filter (LIKE search)","schema":{"type":"string"},"example":"market"},{"name":"global","in":"query","description":"Include system/global tags","schema":{"type":"boolean","default":false},"example":true},{"name":"site","in":"query","description":"Filter by site (ID, name, or SYSTEM_HOST)","schema":{"type":"string"},"example":"48190c8c-42c4-46af-8d1a-0cd5db894797"},{"name":"page","in":"query","description":"Page number","schema":{"type":"integer","format":"int32","default":1},"example":1},{"name":"per_page","in":"query","description":"Items per page","schema":{"type":"integer","format":"int32"},"example":25},{"name":"orderBy","in":"query","description":"Sort field","schema":{"type":"string","default":"tagname"},"example":"tagname"},{"name":"direction","in":"query","description":"Sort direction","schema":{"type":"string","default":"ASC"},"example":"ASC"}],"responses":{"200":{"description":"Tags retrieved successfully with pagination metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityPaginatedDataView"}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{}}},"401":{"description":"Unauthorized - Authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}}},"post":{"tags":["Tags"],"summary":"Create tags","description":"Creates one or more tags. Single tag = list with one element, multiple tags = list with multiple elements. This operation is idempotent - existing tags are returned without error.","operationId":"createTags","requestBody":{"description":"List of tag data to create. Single tag = list with one element, multiple tags = list with multiple elements.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TagForm"}}}},"required":true},"responses":{"200":{"description":"All submitted tags already existed. Response contains an empty 'created' list and all tags in 'duplicates'.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityTagCreateView"}}}},"201":{"description":"At least one new tag was created. New tags appear in 'created', pre-existing ones in 'duplicates'.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityTagCreateView"}}}},"400":{"description":"Bad Request - Invalid tag data with field-level error details","content":{"application/json":{}}},"401":{"description":"Unauthorized - Authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - User does not have access to Tags portlet","content":{"application/json":{}}},"500":{"description":"Internal Server Error - Database or system error","content":{"application/json":{}}}}},"delete":{"tags":["Tags"],"summary":"Bulk delete tags","description":"Deletes one or more tags by ID. Missing IDs are silently skipped — the operation is idempotent.","operationId":"bulkDeleteTags","requestBody":{"description":"List of tag IDs to delete","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}},"required":true},"responses":{"200":{"description":"Bulk delete completed. Check successCount, skippedCount, and fails for details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBulkResultView"}}}},"400":{"description":"Bad Request - invalid input","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions to delete tags","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}}},"/api/v2/tags/{tagId}":{"delete":{"tags":["Tags"],"summary":"Delete tag","description":"Deletes a tag based on its ID. The tag must exist and the user must have appropriate permissions.","operationId":"deleteTag","parameters":[{"name":"tagId","in":"path","description":"ID of the tag to delete","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tag deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBooleanView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions to delete tags","content":{"application/json":{}}},"404":{"description":"Tag not found","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}}},"/api/v2/tags/inode/{inode}":{"get":{"tags":["Tags"],"summary":"Get tags by inode","description":"Retrieves all tags associated with a given inode. Returns tag-inode relationships for the specified content.","operationId":"getTagsByInode","parameters":[{"name":"inode","in":"path","description":"Inode to retrieve tags for","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tags retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityTagInodesMapView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions to access tags","content":{"application/json":{}}},"404":{"description":"No tags found for the specified inode","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}},"delete":{"tags":["Tags"],"summary":"Delete tag-inode associations","description":"Breaks the link between an inode and all its associated tags. Removes all tag associations for the specified content but does not delete the tags themselves.","operationId":"deleteTagInodeAssociations","parameters":[{"name":"inode","in":"path","description":"Inode to remove tag associations from","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tag-inode associations deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityBooleanView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions to modify tag associations","content":{"application/json":{}}},"404":{"description":"No tag associations found for the specified inode","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}}},"/api/v2/tags/export/template":{"get":{"tags":["Tags"],"summary":"Download tag import template","description":"Download a CSV template file with headers and example data for tag imports. No parameters required.","operationId":"downloadTagImportTemplate","responses":{"200":{"description":"CSV template file download","content":{"text/csv":{}}},"401":{"description":"Unauthorized - Authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{}}},"500":{"description":"Template generation error","content":{"application/json":{}}}}}},"/api/v2/tags/export":{"get":{"tags":["Tags"],"summary":"Export tags","description":"Export tags to CSV or JSON format. Supports the same filtering as list/search endpoint with configurable export format.","operationId":"exportTags","parameters":[{"name":"format","in":"query","description":"Export format","schema":{"type":"string","enum":["csv","json"],"default":"csv"},"example":"csv"},{"name":"global","in":"query","description":"Include global tags","schema":{"type":"boolean","default":false},"example":false},{"name":"siteId","in":"query","description":"Filter by specific host/site","schema":{"type":"string"},"example":"48190c8c-42c4-46af-8d1a-0cd5db894797"},{"name":"filter","in":"query","description":"Tag name filter (LIKE search)","schema":{"type":"string"},"example":"market"}],"responses":{"200":{"description":"File download initiated with appropriate content type","content":{"text/csv":{},"application/json":{}}},"400":{"description":"Invalid parameters","content":{"application/json":{}}},"401":{"description":"Unauthorized - Authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}}},"/api/v2/tags/{nameOrId}":{"get":{"tags":["Tags"],"summary":"Get tag by name or ID","description":"Retrieves a single tag by its name or UUID. For name-based searches, uses site context for disambiguation.","operationId":"getTagByNameOrId","parameters":[{"name":"nameOrId","in":"path","description":"Tag name or UUID","required":true,"schema":{"type":"string"}},{"name":"siteId","in":"query","description":"Site ID for name-based searches. If not provided, uses current site context with SYSTEM_HOST fallback","schema":{"type":"string"}}],"responses":{"200":{"description":"Tag found successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityRestTagView"}}}},"401":{"description":"Unauthorized - Authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - User does not have access to Tags portlet","content":{"application/json":{}}},"404":{"description":"Tag not found","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}}}},"/api/v2/tags/user/{userId}":{"get":{"tags":["Tags"],"summary":"Get tags by user ID","description":"Retrieves all tags owned by a specific user. Returns tags that were explicitly linked to the user during creation.","operationId":"getTagsByUserId","parameters":[{"name":"userId","in":"path","description":"User ID to retrieve tags for","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"User tags retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityTagMapView"}}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions to access tags","content":{"application/json":{}}},"404":{"description":"No tags found for the specified user","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}}},"/api/v2/tags/import":{"post":{"tags":["Tags"],"summary":"Import tags from CSV file","description":"Imports tags from a CSV file with row-level error reporting. Returns detailed statistics and error information for each failed row.","operationId":"importTags","requestBody":{"description":"CSV file with tag data in format: tag_name,host_id","content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FormDataMultiPart"}}},"required":true},"responses":{"200":{"description":"Import completed with detailed results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityTagOperationView"}}}},"400":{"description":"Bad Request - Invalid file format or content","content":{"application/json":{}}},"401":{"description":"Unauthorized - Authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - User does not have access to Tags portlet","content":{"application/json":{}}},"500":{"description":"Internal Server Error - Database or system error","content":{"application/json":{}}}}}},"/api/v2/tags/tag/{nameOrId}/inode/{inode}":{"put":{"tags":["Tags"],"summary":"Link tags to inode","description":"Binds tags with a given inode. Lookup can be done via tag name or ID. If tag name matches multiple tags, all matching tags will be bound. Use tag ID for specific binding.","operationId":"linkTagsToInode","parameters":[{"name":"nameOrId","in":"path","description":"Name or UUID of the tag to link","required":true,"schema":{"type":"string"}},{"name":"inode","in":"path","description":"Inode to link the tag(s) to","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tags linked to inode successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityTagInodesMapView"}}}},"400":{"description":"Bad request - invalid tag name/ID or inode","content":{"application/json":{}}},"401":{"description":"Unauthorized - authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - insufficient permissions to link tags","content":{"application/json":{}}},"404":{"description":"Tag not found by the specified name or ID","content":{"application/json":{}}},"500":{"description":"Internal server error","content":{"application/json":{}}}}}},"/api/v2/tags/{idOrName}":{"put":{"tags":["Tags"],"summary":"Update tag","description":"Updates a tag's name and site assignment. You can identify the tag by its UUID or by its name. When using a tag name, you must specify which site's tag you want to update via the siteId query parameter.","operationId":"updateTag","parameters":[{"name":"idOrName","in":"path","description":"Tag UUID or tag name","required":true,"schema":{"type":"string"}},{"name":"siteId","in":"query","description":"Site ID for name-based lookups. Required when idOrName is a tag name","schema":{"type":"string"}}],"requestBody":{"description":"Updated tag data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTagForm"}}},"required":true},"responses":{"200":{"description":"Tag updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityRestTagView"}}}},"400":{"description":"Bad Request - Invalid input data","content":{"application/json":{}}},"401":{"description":"Unauthorized - Authentication required","content":{"application/json":{}}},"403":{"description":"Forbidden - User does not have access to Tags portlet","content":{"application/json":{}}},"404":{"description":"Tag not found","content":{"application/json":{}}},"409":{"description":"Conflict - Tag name already exists on target site","content":{"application/json":{}}},"500":{"description":"Internal Server Error - Database or system error","content":{"application/json":{}}}}}},"/api/v3/contenttype/{typeIdOrVarName}/fields/allfields":{"get":{"tags":["Content Type Field"],"summary":"Returns filtered Content Type fields","description":"Returns the list of fields in a Content Type that meet the specified criteria.","operationId":"allfields","parameters":[{"name":"typeIdOrVarName","in":"path","required":true,"schema":{"type":"string"}},{"name":"filter","in":"query","schema":{"uniqueItems":true,"type":"array","items":{"type":"string","enum":["REQUIRED","USER_SEARCHABLE","SYSTEM_INDEXED","SHOW_IN_LIST","UNIQUE"]}}}],"requestBody":{"content":{"application/json":{"examples":{"filter":{"summary":"Filter fields by one or more of the specified criteria","description":"filter","value":"REQUIRED,SYSTEM_INDEXED,UNIQUE,SHOW_IN_LIST,USER_SEARCHABLE"}}}}},"responses":{"200":{"description":"Content type retrieved successfully","content":{"application/json":{"example":{"entity":[{"clazz":"com.dotcms.contenttype.model.field.ImmutableTextField","contentTypeId":"3b70f386cf65117a675f284eea928415","dataType":"TEXT","dbColumn":"text2","defaultValue":null,"fixed":false,"forceIncludeInApi":false,"hint":null,"iDate":1732992811000,"id":"e39533a92ee05d8c083f7e6a1a5ee5e5","indexed":true,"listed":false,"modDate":1732992838000,"name":"Description","owner":null,"readOnly":false,"regexCheck":null,"relationType":null,"required":true,"searchable":false,"sortOrder":3,"unique":true,"values":null,"variable":"description"}],"errors":[],"i18nMessagesMap":{},"messages":[],"pagination":null,"permissions":[]}}}},"400":{"description":"Bad Request, when using invalid filter names"},"401":{"description":"Invalid User"},"404":{"description":"Content Type was not found"},"500":{"description":"Internal Server Error"}}}},"/api/v3/contenttype/{typeIdOrVarName}/fields":{"get":{"tags":["Content Type Field"],"summary":"Gets a Content Type's field layout","description":"Returns the Content Type's current field layout (rows, columns and the fields within them). If the layout is invalid it is repaired before being returned; this endpoint does not modify data in the database.","operationId":"getContentTypeFieldLayout","parameters":[{"name":"typeIdOrVarName","in":"path","description":"The ID or Velocity Variable Name of the Content Type.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The Content Type's field layout"},"401":{"description":"Unauthorized access"},"404":{"description":"Content Type not found"},"500":{"description":"Internal Server Error"}}},"delete":{"tags":["Content Type Field"],"summary":"Deletes fields from a Content Type","description":"Deletes one or more fields from a Content Type and returns the updated field layout together with the IDs that were actually deleted. A field being used as the Content Type's Publish or Expire date field cannot be deleted until it is unlinked.","operationId":"deleteContentTypeFields","parameters":[{"name":"typeIdOrVarName","in":"path","description":"The ID or Velocity Variable Name of the Content Type.","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The IDs of the fields to delete.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteFieldsForm"}}},"required":true},"responses":{"200":{"description":"Fields deleted; returns the new layout and deleted IDs"},"401":{"description":"Unauthorized access"},"404":{"description":"Content Type not found"},"500":{"description":"Internal Server Error"}}}},"/api/v3/contenttype/{typeIdOrVarName}/fields/move":{"put":{"tags":["Content Type Field"],"summary":"Moves or adds a field to a Content Type","description":"Moves or adds a field to a Content Type. This endpoint is called when dragging-and-dropping a new field to a Content Type, or when moving such a field around in the Content Type's layout.","operationId":"moveOrAddContentTypeField","parameters":[{"name":"typeIdOrVarName","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoveFieldsForm"}}}},"responses":{"200":{"description":"Field was added or moved successfully","content":{"application/json":{"example":{"entity":[{"divider":{"clazz":"com.dotcms.contenttype.model.field.ImmutableRowField","contentTypeId":"3b70f386cf65117a675f284eea928415","dataType":"SYSTEM","fieldContentTypeProperties":[],"fieldType":"Row","fieldTypeLabel":"Row","fieldVariables":[],"fixed":false,"forceIncludeInApi":false,"iDate":1763758144000,"id":"1b950209ec7b1a5e6901f7fe277e0a6a","indexed":false,"listed":false,"modDate":1763758164000,"name":"fields-0","readOnly":false,"required":false,"searchable":false,"sortOrder":0,"unique":false,"variable":"fields0"},"columns":[{"columnDivider":{"clazz":"com.dotcms.contenttype.model.field.ImmutableColumnField","contentTypeId":"3b70f386cf65117a675f284eea928415","dataType":"SYSTEM","fieldContentTypeProperties":[],"fieldType":"Column","fieldTypeLabel":"Column","fieldVariables":[],"fixed":false,"forceIncludeInApi":false,"iDate":1763758144000,"id":"6515a7a25deb3b99711398c14bfe3062","indexed":false,"listed":false,"modDate":1763758164000,"name":"fields-1","readOnly":false,"required":false,"searchable":false,"sortOrder":1,"unique":false,"variable":"fields1"},"fields":[{"clazz":"com.dotcms.contenttype.model.field.ImmutableTextField","contentTypeId":"3b70f386cf65117a675f284eea928415","dataType":"TEXT","fieldType":"Text","fieldTypeLabel":"Text","fieldVariables":[],"fixed":false,"forceIncludeInApi":false,"iDate":1763758164000,"id":"ba34f109c9e86793384387e2619267ea","indexed":false,"listed":false,"modDate":1763761740000,"name":"title","readOnly":false,"required":false,"searchable":false,"sortOrder":2,"unique":false,"variable":"title"},{"clazz":"com.dotcms.contenttype.model.field.ImmutableTextField","contentTypeId":"3b70f386cf65117a675f284eea928415","dataType":"TEXT","fieldType":"Text","fieldTypeLabel":"Text","fieldVariables":[{"clazz":"com.dotcms.contenttype.model.field.ImmutableFieldVariable","fieldId":"e39533a92ee05d8c083f7e6a1a5ee5e5","id":"7844f04c-0481-4b0d-aa22-95e1a097bb30","key":"My Field Var","value":"My value"}],"fixed":false,"forceIncludeInApi":false,"iDate":1764008792000,"id":"e39533a92ee05d8c083f7e6a1a5ee5e5","indexed":true,"listed":true,"modDate":1764018597000,"name":"Description","readOnly":false,"required":false,"searchable":false,"sortOrder":7,"unique":false,"variable":"description"}]}]}],"errors":[],"i18nMessagesMap":{},"messages":[],"pagination":null,"permissions":[]}}}},"400":{"description":"Invalid JSON body"},"401":{"description":"User not specified"},"404":{"description":"Content Type ID not found"},"415":{"description":"Body must be a JSON object"},"500":{"description":"Internal Server Error"}}}},"/api/v3/contenttype/{typeIdOrVarName}/fields/{id}":{"put":{"tags":["Content Type Field"],"summary":"Updates a field in a Content Type","description":"Updates a field in a Content Type. The request body is wrapped in a required top-level `field` property. To update a constant field such as a WIDGET's `widgetCode`, fetch the existing field, preserve its attributes, change `values`, and send `{\"field\":{...}}`.","operationId":"updateContentTypeField","parameters":[{"name":"typeIdOrVarName","in":"path","description":"The ID or Velocity Variable Name of the Content Type that the updated field belongs to.","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"The ID of the Field that is being updated.","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Field update wrapper. The top-level `field` property is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFieldRequestView"},"example":{"field":{"id":"","contentTypeId":"","clazz":"com.dotcms.contenttype.model.field.ImmutableConstantField","name":"Widget Code","variable":"widgetCode","dataType":"LONG_TEXT","values":"#dotParse('/application/vtl/widget.vtl')"}}}},"required":true},"responses":{"200":{"description":"The updated Content Type's layout.","content":{"application/json":{"example":"{\n \"entity\": [\n {\n \"divider\": {\n \"clazz\": \"com.dotcms.contenttype.model.field.ImmutableRowField\",\n \"contentTypeId\": \"3b70f386cf65117a675f284eea928415\",\n \"dataType\": \"SYSTEM\",\n \"fieldContentTypeProperties\": [],\n \"fieldType\": \"Row\",\n \"fieldTypeLabel\": \"Row\",\n \"fieldVariables\": [],\n \"fixed\": false,\n \"forceIncludeInApi\": false,\n \"iDate\": 1764268372000,\n \"id\": \"1b950209ec7b1a5e6901f7fe277e0a6a\",\n \"indexed\": false,\n \"listed\": false,\n \"modDate\": 1764268380000,\n \"name\": \"fields-0\",\n \"readOnly\": false,\n \"required\": false,\n \"searchable\": false,\n \"sortOrder\": 0,\n \"unique\": false,\n \"variable\": \"fields0\"\n },\n \"columns\": [\n {\n \"columnDivider\": {\n \"clazz\": \"com.dotcms.contenttype.model.field.ImmutableColumnField\",\n \"contentTypeId\": \"3b70f386cf65117a675f284eea928415\",\n \"dataType\": \"SYSTEM\",\n \"fieldContentTypeProperties\": [],\n \"fieldType\": \"Column\",\n \"fieldTypeLabel\": \"Column\",\n \"fieldVariables\": [],\n \"fixed\": false,\n \"forceIncludeInApi\": false,\n \"iDate\": 1764268372000,\n \"id\": \"6515a7a25deb3b99711398c14bfe3062\",\n \"indexed\": false,\n \"listed\": false,\n \"modDate\": 1764268380000,\n \"name\": \"fields-1\",\n \"readOnly\": false,\n \"required\": false,\n \"searchable\": false,\n \"sortOrder\": 1,\n \"unique\": false,\n \"variable\": \"fields1\"\n },\n \"fields\": [\n {\n \"clazz\": \"com.dotcms.contenttype.model.field.ImmutableTextField\",\n \"contentTypeId\": \"3b70f386cf65117a675f284eea928415\",\n \"dataType\": \"TEXT\",\n \"fieldType\": \"Text\",\n \"fieldTypeLabel\": \"Text\",\n \"fieldVariables\": [],\n \"fixed\": false,\n \"forceIncludeInApi\": false,\n \"iDate\": 1764268380000,\n \"id\": \"ba34f109c9e86793384387e2619267ea\",\n \"indexed\": true,\n \"listed\": true,\n \"modDate\": 1764277924000,\n \"name\": \"Title\",\n \"readOnly\": false,\n \"required\": false,\n \"searchable\": false,\n \"sortOrder\": 2,\n \"unique\": false,\n \"variable\": \"title\"\n },\n {\n \"clazz\": \"com.dotcms.contenttype.model.field.ImmutableCustomField\",\n \"contentTypeId\": \"3b70f386cf65117a675f284eea928415\",\n \"dataType\": \"LONG_TEXT\",\n \"fieldType\": \"Custom-Field\",\n \"fieldTypeLabel\": \"Custom Field\",\n \"fieldVariables\": [\n {\n \"clazz\": \"com.dotcms.contenttype.model.field.ImmutableFieldVariable\",\n \"fieldId\": \"803d40e80721ae61196dc566a15c7ea5\",\n \"id\": \"6f96be03-6c35-4ced-b825-dd52715b9b06\",\n \"key\": \"newRenderMode\",\n \"value\": \"component\"\n }\n ],\n \"fixed\": false,\n \"forceIncludeInApi\": false,\n \"iDate\": 1764433985000,\n \"id\": \"803d40e80721ae61196dc566a15c7ea5\",\n \"indexed\": false,\n \"listed\": false,\n \"modDate\": 1764687322000,\n \"name\": \"My Custom Field\",\n \"readOnly\": false,\n \"required\": false,\n \"searchable\": false,\n \"sortOrder\": 3,\n \"unique\": false,\n \"values\": \"## This is a VTL comment block \"variable\": \"myCustomField\"\n }\n ]\n }\n ]\n }\n ],\n \"errors\": [],\n \"i18nMessagesMap\": {},\n \"messages\": [],\n \"pagination\": null,\n \"permissions\": []\n}"}}},"401":{"description":"Unauthorized access"},"404":{"description":"The ID of the specified Field was not found"},"500":{"description":"Internal Server Error"}}}},"/api/es/layout/{params}":{"get":{"tags":["Elasticsearch Content Search"],"operationId":"getLayout_4","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"text/html":{}}}}}},"/api/es/search":{"post":{"tags":["Elasticsearch Content Search"],"summary":"Search content using a search query (POST)","description":"Executes a JSON search query against dotCMS content in a portlet context. The request body accepts an Elasticsearch/OpenSearch JSON query. The query is routed through the phase-aware search API, so it targets whichever engine the active OpenSearch migration phase selects (Elasticsearch in phases 0-1, OpenSearch in phases 2-3). Results include the matching contentlets plus the search response metadata under 'esresponse', which retains the legacy Elasticsearch-wire shape (took, hits.total, hits.hits[]._id/._index/._score/._source, aggregations) for backward compatibility, regardless of the engine that served the query.","operationId":"searchContentByESPost","parameters":[{"name":"depth","in":"query","description":"Depth of related content to include: 0=identifiers only, 1=related contentlets, 2=related contentlets with their related identifiers, 3=related contentlets with their related contentlets. Omit to exclude relationships.","schema":{"type":"string"}},{"name":"live","in":"query","description":"If true, search only live content; if false, search working content","schema":{"type":"boolean"}},{"name":"userid","in":"query","description":"Admin-only: run the query under the permission context of this user ID or email address","schema":{"type":"string"}},{"name":"allCategoriesInfo","in":"query","description":"If true, return full category details (key, name, description); if false, return only category names","schema":{"type":"boolean"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"string"}}}},"responses":{"200":{"description":"Search results returned successfully","content":{"application/json":{"schema":{"type":"object","description":"Search results containing the matching contentlets and the Elasticsearch-wire response metadata under 'esresponse'"}}}},"400":{"description":"Invalid Elasticsearch query syntax","content":{"application/json":{}}},"401":{"description":"Authentication required","content":{"application/json":{}}}}}},"/api/es/raw":{"post":{"tags":["Elasticsearch Content Search"],"summary":"Execute raw search query (POST)","description":"Executes a raw JSON search query and returns the unprocessed search response in a portlet context. The request body accepts an Elasticsearch/OpenSearch JSON query. Unlike the /search endpoint, results are returned directly from the search engine without additional contentlet processing. The query is routed through the phase-aware search API, so it targets whichever engine the active OpenSearch migration phase selects (Elasticsearch in phases 0-1, OpenSearch in phases 2-3). The response preserves the legacy Elasticsearch-wire shape (took, hits.total, hits.hits[]._id/._index/._score/._source, aggregations, suggest) for backward compatibility, regardless of the engine that served the query.","operationId":"rawSearchContentByESPost","responses":{"200":{"description":"Search response returned successfully","content":{"application/json":{"schema":{"type":"object","description":"Search response in the legacy Elasticsearch-wire shape (took, hits, aggregations, suggest)"}}}},"400":{"description":"Invalid Elasticsearch query","content":{"application/json":{}}},"401":{"description":"Authentication required","content":{"application/json":{}}}}}},"/api/personas/layout/{params}":{"get":{"tags":["Personalization"],"operationId":"getLayout_5","parameters":[{"name":"params","in":"path","required":true,"schema":{"pattern":".*","type":"string"}}],"responses":{"default":{"description":"default response","content":{"text/html":{}}}}}},"/api/personas/sites/{id}":{"get":{"tags":["Personalization"],"operationId":"list_11","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/Persona"}}},"application/javascript":{"schema":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/Persona"}}}}}}}},"/api/v1/telemetry/stats":{"get":{"tags":["Administration"],"summary":"Retrieves dotCMS usage data","description":"Collects telemetry metrics based on the specified profile. Defaults to FULL profile to return all available metrics. Use MINIMAL profile for dashboard (faster, ~10 metrics) or FULL for complete data (~100+ metrics). Set bypassCache=true to force fresh metric computation bypassing cache.","operationId":"getData","parameters":[{"name":"metricNames","in":"query","description":"Comma-separated list of specific metric names to retrieve. If not specified, all metrics matching the profile will be returned.","schema":{"type":"string"}},{"name":"profile","in":"query","description":"Profile type to use for metric collection. Options: MINIMAL (10-15 core metrics, <5s), STANDARD (~50 metrics, <15s), FULL (all 100+ metrics). Defaults to FULL for API access.","schema":{"type":"string"}},{"name":"bypassCache","in":"query","description":"Bypass cache to force fresh metric computation. Use for diagnostics to see actual database query times. Defaults to false (use cache if available).","schema":{"type":"boolean","default":false}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEntityMetricsSnapshotView"}}}}}}}},"components":{"schemas":{"ErrorEntity":{"type":"object","properties":{"errorCode":{"type":"string"},"message":{"type":"string"},"fieldName":{"type":"string"}}},"MessageEntity":{"type":"object","properties":{"message":{"type":"string"}}},"Pagination":{"type":"object","properties":{"currentPage":{"type":"integer","format":"int32"},"perPage":{"type":"integer","format":"int32"},"totalEntries":{"type":"integer","format":"int64"}}},"ProviderField":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["STRING","NUMBER","SECRET"]},"required":{"type":"boolean"},"hint":{"type":"string"},"requiredUnless":{"type":"string"}}},"ProviderMetadata":{"type":"object","properties":{"provider":{"type":"string"},"supportedCapabilities":{"uniqueItems":true,"type":"array","items":{"type":"string","enum":["CHAT","EMBEDDINGS","IMAGE"]}},"fields":{"type":"object","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/ProviderField"}}}}},"ResponseEntityAiProviderListView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/ProviderMetadata"}},"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"}}},"ResponseEntityAiTestConnectionView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/TestConnectionResult"},"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"}}},"TestConnectionResult":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"}}},"CompletionsForm":{"type":"object","properties":{"prompt":{"type":"string"},"searchLimit":{"maximum":1000,"minimum":1,"type":"integer","format":"int32"},"searchOffset":{"minimum":0,"type":"integer","format":"int32"},"responseLengthTokens":{"minimum":128,"type":"integer","format":"int32"},"language":{"type":"integer","format":"int64"},"stream":{"type":"boolean"},"fieldVar":{"type":"string"},"indexName":{"type":"string"},"contentType":{"type":"array","items":{"type":"string"}},"threshold":{"type":"number","format":"float"},"temperature":{"maximum":2,"minimum":0,"type":"number","format":"float"},"model":{"type":"string"},"operator":{"type":"string"},"site":{"type":"string"},"user":{"$ref":"#/components/schemas/User"},"responseFormat":{"type":"object","additionalProperties":{"type":"object"}}}},"Role":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"roleKey":{"type":"string"},"parent":{"type":"string"},"editPermissions":{"type":"boolean"},"editUsers":{"type":"boolean"},"editLayouts":{"type":"boolean"},"locked":{"type":"boolean"},"system":{"type":"boolean"},"roleChildren":{"type":"array","items":{"type":"string"}},"fqn":{"type":"string"},"dbfqn":{"type":"string"},"user":{"type":"boolean"}}},"User":{"type":"object","properties":{"modificationDate":{"type":"string","format":"date-time"},"companyId":{"type":"string"},"resolution":{"type":"string"},"refreshRate":{"type":"string"},"defaultUser":{"type":"boolean"},"recipientName":{"type":"string"},"actualCompanyId":{"type":"string"},"female":{"type":"boolean"},"passwordExpired":{"type":"boolean"},"recipientId":{"type":"string"},"userRole":{"$ref":"#/components/schemas/Role"},"anonymousUser":{"type":"boolean"},"timeZoneId":{"type":"string"},"languageId":{"type":"string"},"recipientInternetAddress":{"type":"string"},"multipleRecipients":{"type":"boolean"},"fullName":{"type":"string"},"timeZone":{"type":"object","properties":{"dstsavings":{"type":"integer","format":"int32"},"rawOffset":{"type":"integer","format":"int32"},"id":{"type":"string"},"displayName":{"type":"string"}}},"locale":{"type":"object","properties":{"script":{"type":"string"},"variant":{"type":"string"},"unicodeLocaleAttributes":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"unicodeLocaleKeys":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"displayLanguage":{"type":"string"},"displayScript":{"type":"string"},"displayCountry":{"type":"string"},"displayVariant":{"type":"string"},"displayName":{"type":"string"},"country":{"type":"string"},"extensionKeys":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"iso3Language":{"type":"string"},"iso3Country":{"type":"string"},"language":{"type":"string"}}},"recipientAddress":{"type":"string"},"passwordEncrypted":{"type":"boolean"},"passwordExpirationDate":{"type":"string","format":"date-time"},"favoriteActivity":{"type":"string"},"favoriteBibleVerse":{"type":"string"},"agreedToTermsOfUse":{"type":"boolean"},"deleteInProgress":{"type":"boolean"},"male":{"type":"boolean"},"skinId":{"type":"string"},"loginDate":{"type":"string","format":"date-time"},"loginIP":{"type":"string"},"lastLoginDate":{"type":"string","format":"date-time"},"lastLoginIP":{"type":"string"},"createDate":{"type":"string","format":"date-time"},"deleteDate":{"type":"string","format":"date-time"},"passwordReset":{"type":"boolean"},"smsId":{"type":"string"},"aimId":{"type":"string"},"icqId":{"type":"string"},"msnId":{"type":"string"},"ymId":{"type":"string"},"favoriteFood":{"type":"string"},"favoriteMovie":{"type":"string"},"favoriteMusic":{"type":"string"},"dottedSkins":{"type":"boolean"},"roundedSkins":{"type":"boolean"},"greeting":{"type":"string"},"layoutIds":{"type":"string"},"comments":{"type":"string"},"emailAddress":{"type":"string"},"active":{"type":"boolean"},"firstName":{"type":"string"},"lastName":{"type":"string"},"middleName":{"type":"string"},"nickName":{"type":"string"},"birthday":{"type":"string","format":"date-time"},"additionalInfo":{"type":"object","additionalProperties":{"type":"object"}},"failedLoginAttempts":{"type":"integer","format":"int32"},"userId":{"type":"string"},"password":{"type":"string"},"modified":{"type":"boolean"},"new":{"type":"boolean"}}},"JSONObject":{"type":"object","properties":{"asMap":{"type":"object","additionalProperties":{"type":"object"}},"empty":{"type":"boolean"}},"additionalProperties":{"type":"object"}},"EmbeddingsForm":{"type":"object","properties":{"query":{"type":"string"},"limit":{"maximum":1000,"minimum":1,"type":"integer","format":"int32"},"offset":{"minimum":0,"type":"integer","format":"int32"},"indexName":{"type":"string"},"model":{"type":"string"},"velocityTemplate":{"type":"string"},"fields":{"type":"array","items":{"type":"string"}},"userId":{"type":"string"},"requestHostId":{"type":"string"}}},"AIImageRequestDTO":{"type":"object","properties":{"prompt":{"type":"string"},"numberOfImages":{"type":"integer","format":"int32"},"size":{"type":"string"},"model":{"type":"string"}}},"OAuthExchangeView":{"type":"object","properties":{"sessionRef":{"type":"string"},"expiresAt":{"type":"string"},"expirationDays":{"type":"integer","format":"int32"},"user":{"$ref":"#/components/schemas/UserSummary"}}},"ResponseEntityOAuthExchangeView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/OAuthExchangeView"},"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"}}},"UserSummary":{"type":"object","properties":{"userId":{"type":"string"},"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"fullName":{"type":"string"},"roles":{"type":"array","items":{"type":"string"}}}},"OAuthExchangeForm":{"required":["idToken","nonce"],"type":"object","properties":{"idToken":{"type":"string"},"nonce":{"type":"string"},"expirationDays":{"type":"integer","format":"int32"}}},"DotAuthConfigView":{"type":"object","properties":{"hostId":{"type":"string"},"protocol":{"type":"string","enum":["OAUTH","SAML"]},"configured":{"type":"boolean"},"inherited":{"type":"boolean"},"values":{"type":"object","additionalProperties":{"type":"object"}},"headlessValues":{"type":"object","additionalProperties":{"type":"object"}}}},"ResponseEntityDotAuthConfigView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/DotAuthConfigView"},"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"}}},"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"}}}}},"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"}}},"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"}}}}},"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"}}},"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"}}}}},"MessageBodyWorkers":{"type":"object"},"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"}}}}},"ParameterizedHeader":{"type":"object","properties":{"value":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}}}},"DotAuthSitesView":{"type":"object","properties":{"system":{"$ref":"#/components/schemas/SystemView"},"sites":{"type":"array","items":{"$ref":"#/components/schemas/SiteRowView"}}}},"ResponseEntityDotAuthSitesView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/DotAuthSitesView"},"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"}}},"SiteRowView":{"type":"object","properties":{"hostId":{"type":"string"},"hostName":{"type":"string"},"status":{"type":"string","enum":["SITE_OVERRIDE","INHERITED","NOT_CONFIGURED"]},"protocol":{"type":"string","enum":["OAUTH","SAML"]}}},"SystemView":{"type":"object","properties":{"configured":{"type":"boolean"},"protocol":{"type":"string","enum":["OAUTH","SAML"]},"headlessConfigured":{"type":"boolean"}}},"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"}}},"DotAuthConfigForm":{"required":["values"],"type":"object","properties":{"protocol":{"type":"string","enum":["OAUTH","SAML"]},"values":{"type":"object","additionalProperties":{"type":"object"}}}},"ResponseEntityFieldTypeListView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"type":"object","additionalProperties":{"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"}}},"DeleteBundlesByIdentifierForm":{"type":"object","properties":{"identifiers":{"type":"array","items":{"type":"string"}}}},"GenerateBundleForm":{"type":"object","properties":{"bundleId":{"type":"string"},"operation":{"type":"string","enum":["PUBLISH","UNPUBLISH"]},"filterKey":{"type":"string"}}},"PublishingEndPoint":{"type":"object","properties":{"id":{"type":"string"},"groupId":{"type":"string"},"serverName":{"type":"object","properties":{"empty":{"type":"boolean"},"length":{"type":"integer","format":"int32","writeOnly":true}}},"address":{"type":"string"},"port":{"type":"string"},"protocol":{"type":"string"},"enabled":{"type":"boolean"},"authKey":{"type":"object","properties":{"empty":{"type":"boolean"},"length":{"type":"integer","format":"int32","writeOnly":true}}},"sending":{"type":"boolean"},"tokenExpired":{"type":"boolean"},"tokenInvalid":{"type":"boolean"}}},"ResponseEntityEndpointView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/PublishingEndPoint"},"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"}}},"ForbiddenException":{"type":"object","properties":{"cause":{"type":"object","properties":{"stackTrace":{"type":"array","items":{"type":"object","properties":{"classLoaderName":{"type":"string"},"moduleName":{"type":"string"},"moduleVersion":{"type":"string"},"methodName":{"type":"string"},"fileName":{"type":"string"},"lineNumber":{"type":"integer","format":"int32"},"className":{"type":"string"},"nativeMethod":{"type":"boolean"}}}},"message":{"type":"string"},"localizedMessage":{"type":"string"}}},"stackTrace":{"type":"array","items":{"type":"object","properties":{"classLoaderName":{"type":"string"},"moduleName":{"type":"string"},"moduleVersion":{"type":"string"},"methodName":{"type":"string"},"fileName":{"type":"string"},"lineNumber":{"type":"integer","format":"int32"},"className":{"type":"string"},"nativeMethod":{"type":"boolean"}}}},"response":{"type":"object","properties":{"allowedMethods":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"entityTag":{"type":"object","properties":{"value":{"type":"string"},"weak":{"type":"boolean"}}},"stringHeaders":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"metadata":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object"}}},"mediaType":{"type":"object","properties":{"type":{"type":"string"},"subtype":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"wildcardType":{"type":"boolean"},"wildcardSubtype":{"type":"boolean"}}},"statusInfo":{"type":"object","properties":{"statusCode":{"type":"integer","format":"int32"},"reasonPhrase":{"type":"string"},"family":{"type":"string","enum":["INFORMATIONAL","SUCCESSFUL","REDIRECTION","CLIENT_ERROR","SERVER_ERROR","OTHER"]}}},"cookies":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"},"version":{"type":"integer","format":"int32"},"path":{"type":"string"},"domain":{"type":"string"},"comment":{"type":"string"},"maxAge":{"type":"integer","format":"int32"},"expiry":{"type":"string","format":"date-time"},"secure":{"type":"boolean"},"httpOnly":{"type":"boolean"}}}},"headers":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object"}}},"date":{"type":"string","format":"date-time"},"lastModified":{"type":"string","format":"date-time"},"status":{"type":"integer","format":"int32"},"entity":{"type":"object"},"length":{"type":"integer","format":"int32"},"location":{"type":"string","format":"uri"},"language":{"type":"object","properties":{"script":{"type":"string"},"variant":{"type":"string"},"unicodeLocaleAttributes":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"unicodeLocaleKeys":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"displayLanguage":{"type":"string"},"displayScript":{"type":"string"},"displayCountry":{"type":"string"},"displayVariant":{"type":"string"},"displayName":{"type":"string"},"country":{"type":"string"},"extensionKeys":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"iso3Language":{"type":"string"},"iso3Country":{"type":"string"},"language":{"type":"string"}}},"links":{"uniqueItems":true,"type":"array","items":{"type":"object","properties":{"uri":{"type":"string","format":"uri"},"uriBuilder":{"type":"object"},"rel":{"type":"string"},"rels":{"type":"array","items":{"type":"string"}},"params":{"type":"object","additionalProperties":{"type":"string"}},"title":{"type":"string"},"type":{"type":"string"}}}}}},"message":{"type":"string"},"suppressed":{"type":"array","items":{"type":"object","properties":{"stackTrace":{"type":"array","items":{"type":"object","properties":{"classLoaderName":{"type":"string"},"moduleName":{"type":"string"},"moduleVersion":{"type":"string"},"methodName":{"type":"string"},"fileName":{"type":"string"},"lineNumber":{"type":"integer","format":"int32"},"className":{"type":"string"},"nativeMethod":{"type":"boolean"}}}},"message":{"type":"string"},"localizedMessage":{"type":"string"}}}},"localizedMessage":{"type":"string"}}},"EndpointForm":{"required":["address","environmentId","name","port","protocol"],"type":"object","properties":{"name":{"type":"string"},"protocol":{"type":"string"},"address":{"type":"string"},"port":{"type":"string"},"authorizationToken":{"type":"string"},"enabled":{"type":"boolean"},"sending":{"type":"boolean"},"environmentId":{"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"}}},"DoesNotExistException":{"type":"object","properties":{"cause":{"type":"object","properties":{"stackTrace":{"type":"array","items":{"type":"object","properties":{"classLoaderName":{"type":"string"},"moduleName":{"type":"string"},"moduleVersion":{"type":"string"},"methodName":{"type":"string"},"fileName":{"type":"string"},"lineNumber":{"type":"integer","format":"int32"},"className":{"type":"string"},"nativeMethod":{"type":"boolean"}}}},"message":{"type":"string"},"localizedMessage":{"type":"string"}}},"stackTrace":{"type":"array","items":{"type":"object","properties":{"classLoaderName":{"type":"string"},"moduleName":{"type":"string"},"moduleVersion":{"type":"string"},"methodName":{"type":"string"},"fileName":{"type":"string"},"lineNumber":{"type":"integer","format":"int32"},"className":{"type":"string"},"nativeMethod":{"type":"boolean"}}}},"message":{"type":"string"},"suppressed":{"type":"array","items":{"type":"object","properties":{"stackTrace":{"type":"array","items":{"type":"object","properties":{"classLoaderName":{"type":"string"},"moduleName":{"type":"string"},"moduleVersion":{"type":"string"},"methodName":{"type":"string"},"fileName":{"type":"string"},"lineNumber":{"type":"integer","format":"int32"},"className":{"type":"string"},"nativeMethod":{"type":"boolean"}}}},"message":{"type":"string"},"localizedMessage":{"type":"string"}}}},"localizedMessage":{"type":"string"}}},"ResponseEntityEndpointsView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/PublishingEndPoint"}},"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"}}},"Environment":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"pushToAll":{"type":"boolean"},"permissionId":{"type":"string"},"owner":{"type":"string"}}},"ResponseEntityEnvironmentView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/Environment"},"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"}}},"EnvironmentForm":{"required":["name","pushMode"],"type":"object","properties":{"name":{"type":"string"},"pushMode":{"type":"string","enum":["PUSH_TO_ONE","PUSH_TO_ALL"]},"whoCanSend":{"type":"array","items":{"type":"string"}}}},"ResponseEntityEnvironmentsView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/Environment"}},"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"}}},"DeletePPQueueElementsByIdentifierForm":{"type":"object","properties":{"identifiers":{"type":"array","items":{"type":"string"}}}},"ResponseEntityTagOperationView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"object","additionalProperties":{"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"}}},"RestTag":{"type":"object","properties":{"label":{"type":"string"},"siteId":{"type":"string"},"siteName":{"type":"string"},"persona":{"type":"boolean"},"id":{"type":"string"}}},"TagForm":{"required":["name"],"type":"object","properties":{"name":{"type":"string"},"siteId":{"type":"string"},"ownerId":{"type":"string"},"persona":{"type":"boolean"}}},"ResponseEntityTagInodesView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/TagInode"}},"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"}}},"TagInode":{"type":"object","properties":{"inode":{"type":"string"},"tagId":{"type":"string"},"fieldVarName":{"type":"string"},"modDate":{"type":"string","format":"date-time"}}},"ResponseEntityTagsView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/RestTag"}},"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"}}},"ResponseEntityTagInodeOperationView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/TagInode"}},"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"}}},"UpdateTagForm":{"required":["siteId","tagName"],"type":"object","properties":{"siteId":{"type":"string"},"tagName":{"type":"string"},"tagId":{"type":"string"},"name":{"type":"string"}}},"ResponseEntityView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"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"}}},"A11yAgentFixForm":{"required":["identifier"],"type":"object","properties":{"identifier":{"type":"string","description":"dotCMS content identifier of the page to fix","example":"a9f30020-54ef-494e-92ed-645e757171c2"},"languageId":{"type":"integer","description":"Language id of the page version to fix","format":"int32","example":1,"default":1},"skipCss":{"type":"boolean","description":"When true the agent fixes only VTL and reports CSS contrast issues instead of editing stylesheets","example":false,"default":false}}},"EventOutput":{"type":"object","properties":{"type":{"type":"object","properties":{"typeName":{"type":"string"}}},"closed":{"type":"boolean"}}},"A11yAgentStopForm":{"required":["runId"],"type":"object","properties":{"runId":{"type":"string","description":"Run id returned by /fix (report) or /fix/stream (the `run` event)","example":"r_1f0c2b7d9a4e4c1fb0d5e6a7c8b9d0e1"}}},"AccessibilityForm":{"type":"object","properties":{"empty":{"type":"boolean"}},"additionalProperties":{"type":"string"}},"Announcement":{"type":"object","properties":{"identifier":{"type":"string"},"inode":{"type":"string"},"languageId":{"type":"string"},"type":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"url":{"type":"string"},"announcementDate":{"type":"string","format":"date-time"},"announcementDateAsISO8601":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"modDateAsISO8601":{"type":"string"}}},"ResponseEntityViewListAnnouncement":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/Announcement"}},"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"}}},"SecretForm":{"type":"object"},"DeleteSecretForm":{"required":["key","params","siteId"],"type":"object","properties":{"key":{"type":"string"},"siteId":{"type":"string"},"params":{"uniqueItems":true,"type":"array","items":{"type":"string"}}}},"ExportSecretForm":{"required":["appKeysBySite","exportAll","password"],"type":"object","properties":{"password":{"type":"string"},"exportAll":{"type":"boolean"},"appKeys":{"type":"object","additionalProperties":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"writeOnly":true},"appKeysBySite":{"type":"object","additionalProperties":{"uniqueItems":true,"type":"array","items":{"type":"string"}}}}},"AssetArchiveRequestForm":{"required":["assetPath"],"type":"object","properties":{"assetPath":{"type":"string","description":"Full path to the asset (file) to be archived","example":"//demo.dotcms.com/temp/temp-presentation.pptx"}}},"FolderDetail":{"required":["title"],"type":"object","properties":{"title":{"type":"string","description":"Display title for the folder","example":"My Documents Folder"},"sortOrder":{"type":"integer","description":"Sort order for the folder within its parent directory","format":"int32","example":100},"showOnMenu":{"type":"boolean","description":"Whether the folder should be visible in navigation menus","example":true},"fileMasks":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"type":"string"},"last":{"type":"string"}},"description":"List of file patterns that are allowed in this folder (e.g., *.jpg, *.pdf)","example":["*.jpg","*.png","*.pdf"],"items":{"type":"string","description":"List of file patterns that are allowed in this folder (e.g., *.jpg, *.pdf)","example":"[\"*.jpg\",\"*.png\",\"*.pdf\"]"}},"defaultAssetType":{"type":"string","description":"Default asset type for files uploaded to this folder","example":"FileAsset"},"defaultBaseType":{"type":"string","description":"Content Drive upload-mode preference for this folder, recorded as a base content type name (DOTASSET or FILEASSET; case-insensitive, also accepts the alternate names DotAsset/File and stored canonically in uppercase). Omit or set to null for no preference (\"ask each time\"); on update, omitting/null clears any previously set preference. This is orthogonal to defaultAssetType and does not change FileAsset behavior.","example":"DOTASSET"}},"description":"Folder configuration details"},"ImmutableListString":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"type":"string"},"last":{"type":"string"}},"description":"Ordered list of stat column names reported by this provider","example":["Region","Configured Size","Memory Used","Is Default","Hit Count","Miss Count"],"items":{"type":"string","description":"Ordered list of stat column names reported by this provider","example":"[\"Region\",\"Configured Size\",\"Memory Used\",\"Is Default\",\"Hit Count\",\"Miss Count\"]"}},"NewFolderForm":{"required":["assetPath","data"],"type":"object","properties":{"assetPath":{"type":"string","description":"Full path where the folder should be created or updated including site and folder structure. Must end with '/'","example":"//demo.dotcms.com/my-new-folder/"},"data":{"$ref":"#/components/schemas/FolderDetail"}}},"AssetDeletionRequestForm":{"required":["assetPath"],"type":"object","properties":{"assetPath":{"type":"string","description":"Full path to the asset (file) to be deleted permanently","example":"//demo.dotcms.com/uploads/old-document.pdf"}}},"FolderDeletionRequestForm":{"required":["assetPath"],"type":"object","properties":{"assetPath":{"type":"string","description":"Full path to the folder to be deleted permanently (must end with /)","example":"//demo.dotcms.com/old-projects/"}}},"AssetsRequestForm":{"required":["assetPath"],"type":"object","properties":{"assetPath":{"type":"string","description":"Full path to the asset (file or folder) including site and folder structure. Folders must end-up with `/`","example":"//demo.dotcms.com/application/containers/default/banner.vtl"},"language":{"type":"string","description":"Language identifier for the asset. Uses system default language if not specified","example":"en-US","default":"System default language"},"live":{"type":"boolean","description":"Whether to retrieve the live version (true) or working version (false) of the asset","example":false,"default":false}}},"WebAssetEntityView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/WebAssetView"},"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"}}},"WebAssetView":{"type":"object"},"AssetLookupRequestForm":{"required":["assetPath"],"type":"object","properties":{"assetPath":{"type":"string","description":"Full path to the asset (file or folder) to retrieve information for","example":"//demo.dotcms.com/documents/annual-report.pdf"}}},"FileUploadDetail":{"type":"object","properties":{"assetPath":{"type":"string"},"language":{"type":"string"},"status":{"type":"boolean","writeOnly":true},"live":{"type":"boolean"}}},"UpdateFolderDetail":{"required":["name","title"],"type":"object","properties":{"title":{"type":"string","description":"Display title for the folder","example":"My Documents Folder"},"sortOrder":{"type":"integer","description":"Sort order for the folder within its parent directory","format":"int32","example":100},"showOnMenu":{"type":"boolean","description":"Whether the folder should be visible in navigation menus","example":true},"fileMasks":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"type":"string"},"last":{"type":"string"}},"description":"List of file patterns that are allowed in this folder (e.g., *.jpg, *.pdf)","example":["*.jpg","*.png","*.pdf"],"items":{"type":"string","description":"List of file patterns that are allowed in this folder (e.g., *.jpg, *.pdf)","example":"[\"*.jpg\",\"*.png\",\"*.pdf\"]"}},"defaultAssetType":{"type":"string","description":"Default asset type for files uploaded to this folder","example":"FileAsset"},"defaultBaseType":{"type":"string","description":"Content Drive upload-mode preference for this folder, recorded as a base content type name (DOTASSET or FILEASSET; case-insensitive, also accepts the alternate names DotAsset/File and stored canonically in uppercase). Omit or set to null for no preference (\"ask each time\"); on update, omitting/null clears any previously set preference. This is orthogonal to defaultAssetType and does not change FileAsset behavior.","example":"DOTASSET"},"name":{"type":"string","description":"New name for the folder. If provided, the folder will be renamed. The name is derived from the path if not specified","example":"my-renamed-folder"}},"description":"Folder configuration details"},"UpdateFolderForm":{"required":["assetPath","data"],"type":"object","properties":{"assetPath":{"type":"string","description":"Full path where the folder should be created or updated including site and folder structure. Must end with '/'","example":"//demo.dotcms.com/my-new-folder/"},"data":{"$ref":"#/components/schemas/UpdateFolderDetail"}}},"ResponseEntityMapView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"object","additionalProperties":{"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"}}},"ResponseEntityJwtView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"object","additionalProperties":{"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"}}},"ResponseEntityApiTokenWithJwtView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"object","additionalProperties":{"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"}}},"RemoteAPITokenForm":{"type":"object","properties":{"tokenInfo":{"type":"object","additionalProperties":{"type":"object"}}}},"ApiTokenForm":{"type":"object","properties":{"userId":{"type":"string"},"expirationSeconds":{"type":"integer","format":"int32"},"network":{"type":"string"},"claims":{"type":"object","additionalProperties":{"type":"object"}},"shouldBeAdmin":{"type":"boolean"}}},"AuthenticationForm":{"required":["password","userId"],"type":"object","properties":{"userId":{"type":"string"},"password":{"type":"string"},"rememberMe":{"type":"boolean"},"backEndLogin":{"type":"boolean"},"language":{"type":"string"},"country":{"type":"string"}}},"ResponseEntityMapMapView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"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"}}},"ResponseEntityForgotPasswordView":{"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"}}},"ForgotPasswordForm":{"required":["userId"],"type":"object","properties":{"userId":{"type":"string"}}},"LanguageView":{"type":"object","properties":{"language":{"type":"string"},"country":{"type":"string"},"displayName":{"type":"string"}}},"LoginFormResultView":{"type":"object","properties":{"serverId":{"type":"string"},"levelName":{"type":"string"},"version":{"type":"string"},"buildDateString":{"type":"string"},"languages":{"type":"array","items":{"$ref":"#/components/schemas/LanguageView"}},"backgroundColor":{"type":"string"},"backgroundPicture":{"type":"string"},"logo":{"type":"string"},"authorizationType":{"type":"string"},"currentLanguage":{"$ref":"#/components/schemas/LanguageView"},"companyEmail":{"type":"string"}}},"ResponseEntityLoginFormView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/LoginFormResultView"},"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"}}},"I18NForm":{"type":"object","properties":{"language":{"type":"string"},"country":{"type":"string"},"messagesKey":{"type":"array","items":{"type":"string"}}}},"ResponseEntityPasswordResetView":{"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"}}},"ResetPasswordForm":{"required":["password","token"],"type":"object","properties":{"token":{"type":"string"},"password":{"type":"string"}}},"BrowserQueryForm":{"type":"object","properties":{"hostFolderId":{"type":"string"},"filter":{"type":"string"},"sortBy":{"type":"string"},"offset":{"type":"integer","format":"int32"},"maxResults":{"type":"integer","format":"int32"},"showWorking":{"type":"boolean"},"showArchived":{"type":"boolean"},"showFolders":{"type":"boolean"},"showFiles":{"type":"boolean"},"showPages":{"type":"boolean"},"sortByDesc":{"type":"boolean"},"showLinks":{"type":"boolean"},"showDotAssets":{"type":"boolean"},"languageId":{"type":"integer","format":"int64"},"extensions":{"type":"array","items":{"type":"string"}},"mimeTypes":{"type":"array","items":{"type":"string"}}}},"OpenFolderForm":{"type":"object","properties":{"path":{"type":"string"}}},"CategoryBulkDeleteResultView":{"type":"object","properties":{"successCount":{"type":"integer","format":"int64"},"skippedCount":{"type":"integer","format":"int64"},"fails":{"type":"array","items":{"$ref":"#/components/schemas/FailedResultView"}},"deletedCount":{"type":"integer","format":"int64"}}},"FailedResultView":{"type":"object","properties":{"element":{"type":"string"},"errorMessage":{"type":"string"}}},"ResponseEntityCategoryBulkDeleteResultView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/CategoryBulkDeleteResultView"},"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"}}},"CategoryView":{"type":"object","properties":{"inode":{"type":"string"},"parent":{"type":"string"},"description":{"type":"string"},"keywords":{"type":"string"},"key":{"type":"string"},"categoryName":{"type":"string"},"active":{"type":"boolean"},"sortOrder":{"type":"integer","format":"int32"},"categoryVelocityVarName":{"type":"string"},"modDate":{"type":"string","format":"date-time"}}},"ResponseEntityCategoryView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/CategoryView"},"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"}}},"CategoryWithChildCountView":{"type":"object","properties":{"inode":{"type":"string"},"parent":{"type":"string"},"description":{"type":"string"},"keywords":{"type":"string"},"key":{"type":"string"},"categoryName":{"type":"string"},"active":{"type":"boolean"},"sortOrder":{"type":"integer","format":"int32"},"categoryVelocityVarName":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"childrenCount":{"type":"integer","format":"int32"}}},"ResponseEntityCategoryWithChildCountView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/CategoryWithChildCountView"},"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"}}},"HierarchyShortCategoriesResponseView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/HierarchyShortCategory"}},"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"}}},"HierarchyShortCategory":{"type":"object","properties":{"inode":{"type":"string"},"name":{"type":"string"},"key":{"type":"string"},"parentList":{"type":"array","items":{"$ref":"#/components/schemas/ShortCategory"}}}},"ShortCategory":{"type":"object","properties":{"name":{"type":"string"},"inode":{"type":"string"},"key":{"type":"string"}}},"CategoryKeysForm":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"string"}}}},"CategoryImportFormSchema":{"type":"object","properties":{"filter":{"type":"string","description":"Filter pattern for categories"},"exportType":{"type":"string","description":"Import behavior","enum":["replace","merge"]},"contextInode":{"type":"string","description":"Context category inode to import into"},"file":{"type":"string","description":"CSV file containing categories to import","format":"binary"}},"description":"Category import form data with CSV file and processing parameters"},"BulkResultView":{"type":"object","properties":{"successCount":{"type":"integer","format":"int64"},"skippedCount":{"type":"integer","format":"int64"},"fails":{"type":"array","items":{"$ref":"#/components/schemas/FailedResultView"}}}},"ResponseEntityBulkResultView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/BulkResultView"},"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"}}},"file":{"type":"object","description":"CSV file containing categories to import","format":"binary"},"CategoryEditForm":{"type":"object","properties":{"filter":{"type":"string"},"page":{"type":"integer","format":"int32"},"perPage":{"type":"integer","format":"int32"},"direction":{"type":"string"},"orderBy":{"type":"string"},"siteId":{"type":"string"},"parentInode":{"type":"string"},"categoryData":{"type":"object","additionalProperties":{"type":"integer","format":"int32"}}}},"CategoryForm":{"required":["categoryName"],"type":"object","properties":{"siteId":{"type":"string"},"inode":{"type":"string"},"parent":{"type":"string"},"description":{"type":"string"},"keywords":{"type":"string"},"key":{"type":"string"},"categoryName":{"type":"string"},"active":{"type":"boolean"},"sortOrder":{"type":"integer","format":"int32"},"categoryVelocityVarName":{"type":"string"}}},"CompanyConfigView":{"required":["authType","companyId","companyName","emailAddress","mx","portalURL"],"type":"object","properties":{"companyId":{"type":"string","description":"Company identifier","example":"dotcms.org"},"companyName":{"type":"string","description":"Company display name","example":"dotcms.org"},"portalURL":{"type":"string","description":"Portal URL for the dotCMS instance","example":"http://localhost:8080"},"emailAddress":{"type":"string","description":"Company email address used as the system sender. May be a plain email or display name format (e.g. 'dotCMS Website ')","example":"admin@dotcms.com"},"mx":{"type":"string","description":"Mail exchange domain for outgoing email","example":"dotcms.com"},"primaryColor":{"type":"string","description":"Primary branding color (hex)","example":"#C336E5"},"secondaryColor":{"type":"string","description":"Secondary branding color (hex)","example":"#54428E"},"backgroundColor":{"type":"string","description":"Background branding color (hex)","example":"#3C1361"},"backgroundImage":{"type":"string","description":"Background image path (dotAsset path starting with /dA)","example":"/dA/abc123/background.png"},"loginScreenLogo":{"type":"string","description":"Login screen logo path (dotAsset path starting with /dA)","example":"/dA/abc123/logo.png"},"navBarLogo":{"type":"string","description":"Navigation bar logo path (dotAsset path starting with /dA, Enterprise only)","example":"/dA/abc123/nav-logo.png"},"authType":{"type":"string","description":"Authentication type: 'emailAddress' or 'userId'","example":"emailAddress","enum":["emailAddress","userId"]},"keyDigest":{"type":"string","description":"SHA-256 digest of the company security key (read-only, admin only)"},"languageId":{"type":"string","description":"System default language as a Java locale string","example":"en_US"},"timeZoneId":{"type":"string","description":"System default timezone ID","example":"America/New_York"}}},"ResponseEntityCompanyConfigView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/CompanyConfigView"},"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"}}},"CompanyAuthTypeForm":{"required":["authType"],"type":"object","properties":{"authType":{"type":"string","description":"Authentication type: 'emailAddress' or 'userId'","example":"emailAddress","enum":["emailAddress","userId","emailAddress","userId"]}},"description":"Company authentication type setting"},"CompanyBasicInfoForm":{"required":["emailAddress","portalURL","primaryColor","secondaryColor"],"type":"object","properties":{"portalURL":{"type":"string","description":"Portal URL for the dotCMS instance","example":"http://localhost:8080"},"emailAddress":{"type":"string","description":"Company email address used as the system sender. Accepts plain email (e.g. 'admin@dotcms.com') or display name format (e.g. 'dotCMS Website '). The mx domain is derived from this value when mx is not provided.","example":"admin@dotcms.com"},"mx":{"type":"string","description":"Mail exchange domain (derived from emailAddress if not provided)","example":"dotcms.com"},"primaryColor":{"type":"string","description":"Primary branding color (hex)","example":"#C336E5"},"secondaryColor":{"type":"string","description":"Secondary branding color (hex)","example":"#54428E"},"backgroundColor":{"type":"string","description":"Background branding color (hex). Cleared if omitted.","example":"#3C1361"},"backgroundImage":{"type":"string","description":"Background image path (dotAsset path starting with /dA). Cleared if omitted.","example":"/dA/abc123/background.png"},"loginScreenLogo":{"type":"string","description":"Login screen logo path (dotAsset path starting with /dA). Cleared if omitted.","example":"/dA/abc123/logo.png"},"navBarLogo":{"type":"string","description":"Navigation bar logo path (dotAsset path starting with /dA, Enterprise only). Cleared if omitted.","example":"/dA/abc123/nav-logo.png"}},"description":"Company basic information and branding settings"},"CompanyLocaleForm":{"required":["languageId","timeZoneId"],"type":"object","properties":{"languageId":{"type":"string","description":"Java locale string","example":"en_US"},"timeZoneId":{"type":"string","description":"Java TimeZone ID","example":"America/New_York"}},"description":"Company locale settings (language and timezone)"},"Container":{"type":"object","properties":{"getiDate":{"type":"string","format":"date-time"},"type":{"type":"string"},"owner":{"type":"string"},"inode":{"type":"string"},"identifier":{"type":"string"},"source":{"type":"string","enum":["UNKNOWN","DB","FILE"]},"title":{"type":"string"},"friendlyName":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"modUser":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"showOnMenu":{"type":"boolean"},"code":{"type":"string"},"maxContentlets":{"type":"integer","format":"int32"},"useDiv":{"type":"boolean"},"preLoop":{"type":"string"},"postLoop":{"type":"string"},"notes":{"type":"string"},"hostName":{"type":"string"},"hostId":{"type":"string"},"variant":{"type":"string"},"archived":{"type":"boolean"},"versionType":{"type":"string"},"permissionId":{"type":"string"},"deleted":{"type":"boolean"},"working":{"type":"boolean"},"versionId":{"type":"string"},"live":{"type":"boolean"},"name":{"type":"string"},"locked":{"type":"boolean"},"permissionType":{"type":"string"},"idate":{"type":"string","format":"date-time"},"categoryId":{"type":"string"},"parents":{"type":"array","writeOnly":true,"items":{"type":"object"}},"new":{"type":"boolean"}}},"ContainerView":{"type":"object","properties":{"container":{"$ref":"#/components/schemas/Container"},"path":{"type":"string"}}},"ResponseEntitySingleContainerView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/ContainerView"},"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"}}},"ResponseEntityContainerObjectMapView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"object","additionalProperties":{"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"}}},"ResponseEntityContainerView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/Container"}},"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"}}},"PaginatedArrayListMapStringObject":{"type":"array","properties":{"totalResults":{"type":"integer","format":"int64"},"query":{"type":"string"},"empty":{"type":"boolean"},"first":{"type":"object","additionalProperties":{"type":"object"}},"last":{"type":"object","additionalProperties":{"type":"object"}}},"items":{"type":"object","additionalProperties":{"type":"object"}}},"ResponseEntityPaginatedArrayListMapView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","properties":{"totalResults":{"type":"integer","format":"int64"},"query":{"type":"string"},"empty":{"type":"boolean"},"first":{"type":"object","additionalProperties":{"type":"object"}},"last":{"type":"object","additionalProperties":{"type":"object"}}},"items":{"type":"object","additionalProperties":{"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"}}},"ContainerForm":{"required":["title"],"type":"object","properties":{"identifier":{"type":"string","description":"Identifier of the container. Required for updates, ignored on creation."},"title":{"type":"string","description":"Title of the container"},"friendlyName":{"type":"string","description":"Description of the container (displayed as 'Description' in the UI). Also accepts 'description' as an alias field name in JSON."},"maxContentlets":{"type":"integer","description":"Maximum number of contentlets this container can hold. Set to 0 for no limit.","format":"int32"},"code":{"type":"string","description":"Velocity/code used to render the container's content. Used when maxContentlets is 0."},"notes":{"type":"string","description":"Internal notes about this container (not displayed to end users)"},"preLoop":{"type":"string","description":"Velocity code executed before the content loop"},"postLoop":{"type":"string","description":"Velocity code executed after the content loop"},"showOnMenu":{"type":"boolean","description":"Whether this container should appear in navigation menus"},"sortOrder":{"type":"integer","description":"Sort order for display purposes","format":"int32"},"sortContentletsBy":{"type":"string","description":"Field name used to sort contentlets within this container"},"structureInode":{"type":"string","description":"Inode of the content type (structure) associated with this container. This is a legacy field; prefer using containerStructures for multiple content type associations."},"containerStructures":{"type":"array","description":"List of content type associations for this container. Each entry maps a content type to rendering code. The 'id' field is ignored on input and auto-generated server-side. Only 'structureId' and 'code' are required.","items":{"$ref":"#/components/schemas/ContainerStructure"}},"owner":{"type":"string","description":"Owner user ID of the container"},"hostId":{"type":"string","description":"Identifier of the site (host) where this container should be created or moved to. If not provided, the container is assigned to the site resolved from the current HTTP request context."},"staticify":{"type":"boolean","description":"Whether the container output should be staticified (cached as static HTML)"},"useDiv":{"type":"boolean","description":"Whether to wrap content in a div element"},"dynamic":{"type":"boolean","description":"Whether this container uses dynamic content type resolution"}},"description":"Form used to create or update a Container in dotCMS"},"ContainerStructure":{"type":"object","properties":{"id":{"type":"string"},"structureId":{"type":"string"},"containerInode":{"type":"string"},"containerId":{"type":"string"},"code":{"type":"string"},"contentTypeVar":{"type":"string"}}},"ContentReportView":{"type":"object","properties":{"contentTypeName":{"type":"string"},"entries":{"type":"integer","format":"int64"}}},"ResponseSiteVariablesEntityView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/SiteVariableView"}},"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"}}},"SiteVariableView":{"type":"object","properties":{"id":{"type":"string"},"hostId":{"type":"string"},"name":{"type":"string"},"key":{"type":"string"},"value":{"type":"string"},"lastModifierId":{"type":"string"},"lastModDate":{"type":"string","format":"date-time"},"lastModifierFullName":{"type":"string"}}},"ResponseEntityViewMapStringObject":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"object","additionalProperties":{"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"}}},"ExistingLanguagesForContentletView":{"type":"object","properties":{"empty":{"type":"boolean"}},"additionalProperties":{"type":"object"}},"ResponseEntityViewListExistingLanguagesForContentletView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/ExistingLanguagesForContentletView"}},"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"}}},"CountView":{"type":"object","properties":{"count":{"type":"integer","format":"int32"}}},"ResponseEntityCountView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/CountView"},"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"}}},"ContentReferenceView":{"type":"object","properties":{"page":{"$ref":"#/components/schemas/IHTMLPage"},"container":{"$ref":"#/components/schemas/ContainerView"},"personaName":{"type":"string"}}},"IHTMLPage":{"type":"object","properties":{"pageUrl":{"type":"string"},"httpsRequired":{"type":"boolean"},"redirect":{"type":"string"},"cacheTTL":{"type":"integer","format":"int64"},"seoKeywords":{"type":"string"},"seoDescription":{"type":"string"},"templateId":{"type":"string"},"menuOrder":{"type":"integer","format":"int32"},"metadata":{"type":"string"},"languageId":{"type":"integer","format":"int64"},"inode":{"type":"string"},"identifier":{"type":"string"},"friendlyName":{"type":"string"},"showOnMenu":{"type":"boolean"},"title":{"type":"string"},"content":{"type":"boolean"},"host":{"type":"string"},"uri":{"type":"string"},"map":{"type":"object","additionalProperties":{"type":"object"}},"archived":{"type":"boolean"},"versionType":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"working":{"type":"boolean"},"versionId":{"type":"string"},"modUser":{"type":"string"},"live":{"type":"boolean"},"locked":{"type":"boolean"},"parentPermissionable":{"$ref":"#/components/schemas/Permissionable"},"permissionId":{"type":"string"},"permissionType":{"type":"string"},"owner":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"}}},"Permissionable":{"type":"object","properties":{"parentPermissionable":{"$ref":"#/components/schemas/Permissionable"},"permissionId":{"type":"string"},"permissionType":{"type":"string"},"owner":{"type":"string"}}},"ResponseEntityContentReferenceListView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/ContentReferenceView"}},"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"}}},"ResponseEntityPaginatedDataView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"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"}}},"ResponseEntityListMapView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"type":"object","additionalProperties":{"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"}}},"PullRelatedForm":{"required":["fieldVariable","identifier","limit","offset","orderBy"],"type":"object","properties":{"fieldVariable":{"type":"string"},"identifier":{"type":"string"},"condition":{"type":"string"},"limit":{"type":"integer","format":"int32"},"offset":{"type":"integer","format":"int32"},"orderBy":{"type":"string"}}},"ResponseEntityContentletView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"object","additionalProperties":{"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"}}},"ContentForm":{"type":"object","properties":{"contentlet":{"type":"object","additionalProperties":{"type":"object"}}}},"JsonObjectView":{"type":"object","properties":{"jsonObject":{"type":"object","properties":{"asMap":{"type":"object","additionalProperties":{"type":"object"}},"empty":{"type":"boolean"}},"additionalProperties":{"type":"object"}}}},"SearchView":{"type":"object","properties":{"resultsSize":{"type":"integer","format":"int64"},"queryTook":{"type":"integer","format":"int64"},"contentTook":{"type":"integer","format":"int64"},"jsonObjectView":{"$ref":"#/components/schemas/JsonObjectView"}}},"ResponseEntityViewSearchView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/SearchView"},"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"}}},"ContentSearchForm":{"type":"object","properties":{"globalSearch":{"type":"string"},"systemSearchableFields":{"type":"object","additionalProperties":{"type":"object"}},"archivedContent":{"type":"string"},"unpublishedContent":{"type":"string"},"lockedContent":{"type":"string"},"orderBy":{"type":"string"},"page":{"type":"integer","format":"int32"},"perPage":{"type":"integer","format":"int32"},"searchableFieldsByContentType":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"object"}}}},"description":"Form for searching content with support for global search, content type specific fields, and system filters"},"ResponseEntitySearchView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/SearchView"},"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"}}},"SearchForm":{"type":"object","properties":{"query":{"type":"string","description":"Lucene query. IMPORTANT: custom (user-defined) fields MUST be qualified with the content type's variable name — `ContentTypeVar.fieldVar`. A BARE field name matches nothing and returns zero results with NO error (a common silent failure). For example, to find featured Books use `+AwazonBook.featured:true`, not `+featured:true`; to match a slug use `+AwazonBook.slug:my-slug`. Restrict the type with `+contentType:AwazonBook` (contentType is a system field, unqualified). \n\nResults are also HOST-scoped: unless you add a host clause, the search resolves against the current request's site and will NOT return content that lives on a different host (e.g. content saved to `SYSTEM_HOST`/default while you query as another site). Constrain the host explicitly with `+conHost:` (or `+conHost:SYSTEM_HOST`), and add `+live:true` / `+working:true` and `+deleted:false` as needed. See the Lucene content-search syntax docs.","example":"+contentType:AwazonBook +AwazonBook.featured:true +live:true +deleted:false"},"sort":{"type":"string","description":"Sort clause, e.g. `AwazonBook.title asc` or `modDate desc`. Custom fields are qualified the same way as in `query`.","example":"modDate desc"},"limit":{"type":"integer","description":"Maximum number of contentlets to return (page size).","format":"int32","example":20,"default":20},"offset":{"type":"integer","description":"Zero-based result offset for paging.","format":"int32","example":0,"default":0},"userId":{"type":"string","description":"Optional user id to run the search as (permissions are applied for this user). Defaults to the authenticated caller when omitted."},"render":{"type":"string","description":"When set to `true`, each matching contentlet's `htmlpageasset`/widget content is rendered and included in the response. Omit for raw field data only."},"depth":{"type":"integer","description":"Relationship-loading depth (0-3): how many levels of related content to inline. `-1` (default) loads none.","format":"int32","example":1,"default":-1},"languageId":{"type":"integer","description":"Language id to search in. Defaults to the system default language when omitted.","format":"int64","example":1},"allCategoriesInfo":{"type":"boolean","description":"When `true`, include full category metadata for category fields in the results."}},"description":"Content search request. `query` is a Lucene expression; the remaining fields control paging, sorting, language, and how results are rendered."},"ResponseEntityMapStringObjectView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"object","additionalProperties":{"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"}}},"BulkRefreshSubmitResponse":{"type":"object","properties":{"jobId":{"type":"string"},"submitted":{"type":"integer","format":"int32"}}},"ResponseEntityBulkRefreshSubmitView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/BulkRefreshSubmitResponse"},"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"}}},"BulkRefreshForm":{"required":["contentletIds"],"type":"object","properties":{"contentletIds":{"maxItems":2147483647,"minItems":1,"type":"array","items":{"type":"string"}},"includeDependencies":{"type":"boolean"},"includeItemResults":{"type":"boolean"}}},"ErrorDetail":{"type":"object","properties":{"message":{"type":"string"},"exceptionClass":{"type":"string"},"stackTrace":{"type":"string"},"timestamp":{"type":"string","format":"date-time"},"processingStage":{"type":"string"}}},"ImmutableListJob":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/Job"},"last":{"$ref":"#/components/schemas/Job"}},"items":{"$ref":"#/components/schemas/Job"}},"ImmutableMapStringObject":{"type":"object","properties":{"empty":{"type":"boolean"}},"additionalProperties":{"type":"object","description":"Styles defined for the Contentlet","example":{"color":"#FF0000","margin":"10px"}},"description":"Styles defined for the Contentlet","example":{"color":"#FF0000","margin":"10px"}},"Job":{"type":"object","properties":{"id":{"type":"string"},"queueName":{"type":"string"},"state":{"type":"string","enum":["PENDING","RUNNING","SUCCESS","FAILED","FAILED_PERMANENTLY","ABANDONED","ABANDONED_PERMANENTLY","CANCEL_REQUESTED","CANCELLING","CANCELED"]},"executionNode":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"startedAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time"},"result":{"$ref":"#/components/schemas/JobResult"},"parameters":{"type":"object","properties":{"empty":{"type":"boolean"}},"additionalProperties":{"type":"object"}},"retryCount":{"type":"integer","format":"int32"},"progress":{"type":"number","format":"float"}}},"JobPaginatedResult":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"page":{"type":"integer","format":"int32"},"pageSize":{"type":"integer","format":"int32"},"jobs":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/Job"},"last":{"$ref":"#/components/schemas/Job"}},"items":{"$ref":"#/components/schemas/Job"}}}},"JobResult":{"type":"object","properties":{"errorDetail":{"$ref":"#/components/schemas/ErrorDetail"},"metadata":{"type":"object","additionalProperties":{"type":"object"}}}},"ResponseEntityJobPaginatedResultView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/JobPaginatedResult"},"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"}}},"ImmutableListJobView":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/JobView"},"last":{"$ref":"#/components/schemas/JobView"}},"items":{"$ref":"#/components/schemas/JobView"}},"JobView":{"type":"object","properties":{"id":{"type":"string"},"queueName":{"type":"string"},"state":{"type":"string","enum":["PENDING","RUNNING","SUCCESS","FAILED","FAILED_PERMANENTLY","ABANDONED","ABANDONED_PERMANENTLY","CANCEL_REQUESTED","CANCELLING","CANCELED"]},"executionNode":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"startedAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time"},"parameters":{"type":"object","properties":{"empty":{"type":"boolean"}},"additionalProperties":{"type":"object"}},"retryCount":{"type":"integer","format":"int32"},"progress":{"type":"number","format":"float"},"result":{"$ref":"#/components/schemas/JobResult"}}},"JobViewPaginatedResult":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"page":{"type":"integer","format":"int32"},"pageSize":{"type":"integer","format":"int32"},"jobs":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/JobView"},"last":{"$ref":"#/components/schemas/JobView"}},"items":{"$ref":"#/components/schemas/JobView"}}}},"ResponseEntityViewJobViewPaginatedResult":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/JobViewPaginatedResult"},"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"}}},"ResponseEntityViewString":{"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"}}},"ResponseEntityJobView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/Job"},"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"}}},"ResponseEntityViewJobView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/JobView"},"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"}}},"JobStatusResponse":{"type":"object","properties":{"jobId":{"type":"string"},"statusUrl":{"type":"string"}}},"ResponseEntityJobStatusView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/JobStatusResponse"},"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"}}},"ContentImportParamsSchema":{"required":["file","form"],"type":"object","properties":{"file":{"type":"string","description":"The CSV file to import.","format":"binary"},"form":{"type":"string","description":"JSON string representing import settings.","example":"{\n \"contentType\": \"activity\",\n \"language\": \"en-US\",\n \"workflowActionId\": \"b9d89c80-3d88-4311-8365-187323c96436\",\n \"fields\": [\"title\"]\n \"stopOnError\":false \n \"commitGranularity\": 100\n}"}},"description":"Schema for content import parameters."},"ContentImportForm":{"required":["contentType","workflowActionId"],"type":"object","properties":{"contentType":{"type":"string"},"language":{"type":"string"},"workflowActionId":{"type":"string"},"fields":{"type":"array","items":{"type":"string"}},"stopOnError":{"type":"boolean"},"commitGranularity":{"type":"integer","format":"int32"}}},"ImmutableMapObjectObject":{"type":"object","properties":{"empty":{"type":"boolean"}},"additionalProperties":{"type":"object"}},"ResponseEntityContentTypeOperationView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"object","properties":{"empty":{"type":"boolean"}},"additionalProperties":{"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"}}},"CopyContentTypeForm":{"required":["name"],"type":"object","properties":{"name":{"type":"string"},"variable":{"type":"string"},"folder":{"type":"string"},"host":{"type":"string"},"icon":{"type":"string"}}},"ContentType":{"required":["clazz"],"type":"object","properties":{"owner":{"type":"string"},"clazz":{"type":"string"}},"discriminator":{"propertyName":"clazz"}},"ContentTypeForm":{"type":"object","properties":{"requestJson":{"type":"object"},"iterable":{"type":"object"},"systemActions":{"type":"array","items":{"$ref":"#/components/schemas/Tuple2SystemActionString"}},"workflows":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowFormEntry"}},"contentType":{"$ref":"#/components/schemas/ContentType"}}},"DotAssetContentType":{"type":"object","allOf":[{"$ref":"#/components/schemas/ContentType"},{"type":"object","properties":{"name":{"type":"string"},"id":{"type":"string"},"description":{"type":"string"},"defaultType":{"type":"boolean"},"detailPage":{"type":"string"},"fixed":{"type":"boolean"},"iDate":{"type":"string","format":"date-time"},"system":{"type":"boolean"},"versionable":{"type":"boolean"},"multilingualable":{"type":"boolean"},"variable":{"type":"string"},"urlMapPattern":{"type":"string"},"publishDateVar":{"type":"string"},"expireDateVar":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"host":{"type":"string"},"siteName":{"type":"string"},"icon":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"metadata":{"type":"object","additionalProperties":{"type":"object"}},"folder":{"type":"string"},"folderPath":{"type":"string"}}}]},"FileAssetContentType":{"type":"object","allOf":[{"$ref":"#/components/schemas/ContentType"},{"type":"object","properties":{"name":{"type":"string"},"id":{"type":"string"},"description":{"type":"string"},"defaultType":{"type":"boolean"},"detailPage":{"type":"string"},"fixed":{"type":"boolean"},"iDate":{"type":"string","format":"date-time"},"system":{"type":"boolean"},"versionable":{"type":"boolean"},"multilingualable":{"type":"boolean"},"variable":{"type":"string"},"urlMapPattern":{"type":"string"},"publishDateVar":{"type":"string"},"expireDateVar":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"host":{"type":"string"},"siteName":{"type":"string"},"icon":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"metadata":{"type":"object","additionalProperties":{"type":"object"}},"folder":{"type":"string"},"folderPath":{"type":"string"}}}]},"FormContentType":{"type":"object","allOf":[{"$ref":"#/components/schemas/ContentType"},{"type":"object","properties":{"name":{"type":"string"},"id":{"type":"string"},"description":{"type":"string"},"defaultType":{"type":"boolean"},"detailPage":{"type":"string"},"fixed":{"type":"boolean"},"iDate":{"type":"string","format":"date-time"},"system":{"type":"boolean"},"versionable":{"type":"boolean"},"variable":{"type":"string"},"urlMapPattern":{"type":"string"},"publishDateVar":{"type":"string"},"expireDateVar":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"host":{"type":"string"},"siteName":{"type":"string"},"icon":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"metadata":{"type":"object","additionalProperties":{"type":"object"}},"folder":{"type":"string"},"folderPath":{"type":"string"},"multilingualable":{"type":"boolean"}}}]},"KeyValueContentType":{"type":"object","allOf":[{"$ref":"#/components/schemas/ContentType"},{"type":"object","properties":{"name":{"type":"string"},"id":{"type":"string"},"description":{"type":"string"},"defaultType":{"type":"boolean"},"detailPage":{"type":"string"},"fixed":{"type":"boolean"},"iDate":{"type":"string","format":"date-time"},"system":{"type":"boolean"},"versionable":{"type":"boolean"},"variable":{"type":"string"},"urlMapPattern":{"type":"string"},"publishDateVar":{"type":"string"},"expireDateVar":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"host":{"type":"string"},"siteName":{"type":"string"},"icon":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"metadata":{"type":"object","additionalProperties":{"type":"object"}},"folder":{"type":"string"},"folderPath":{"type":"string"},"multilingualable":{"type":"boolean"}}}]},"PageContentType":{"type":"object","allOf":[{"$ref":"#/components/schemas/ContentType"},{"type":"object","properties":{"name":{"type":"string"},"id":{"type":"string"},"description":{"type":"string"},"defaultType":{"type":"boolean"},"detailPage":{"type":"string"},"fixed":{"type":"boolean"},"iDate":{"type":"string","format":"date-time"},"system":{"type":"boolean"},"versionable":{"type":"boolean"},"multilingualable":{"type":"boolean"},"variable":{"type":"string"},"urlMapPattern":{"type":"string"},"publishDateVar":{"type":"string"},"expireDateVar":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"host":{"type":"string"},"siteName":{"type":"string"},"icon":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"metadata":{"type":"object","additionalProperties":{"type":"object"}},"folder":{"type":"string"},"folderPath":{"type":"string"}}}]},"PersonaContentType":{"type":"object","allOf":[{"$ref":"#/components/schemas/ContentType"},{"type":"object","properties":{"name":{"type":"string"},"id":{"type":"string"},"description":{"type":"string"},"defaultType":{"type":"boolean"},"detailPage":{"type":"string"},"fixed":{"type":"boolean"},"iDate":{"type":"string","format":"date-time"},"system":{"type":"boolean"},"versionable":{"type":"boolean"},"multilingualable":{"type":"boolean"},"variable":{"type":"string"},"urlMapPattern":{"type":"string"},"publishDateVar":{"type":"string"},"expireDateVar":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"host":{"type":"string"},"siteName":{"type":"string"},"icon":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"metadata":{"type":"object","additionalProperties":{"type":"object"}},"folder":{"type":"string"},"folderPath":{"type":"string"}}}]},"SimpleContentType":{"type":"object","allOf":[{"$ref":"#/components/schemas/ContentType"},{"type":"object","properties":{"name":{"type":"string"},"id":{"type":"string"},"description":{"type":"string"},"defaultType":{"type":"boolean"},"detailPage":{"type":"string"},"fixed":{"type":"boolean"},"iDate":{"type":"string","format":"date-time"},"system":{"type":"boolean"},"versionable":{"type":"boolean"},"multilingualable":{"type":"boolean"},"variable":{"type":"string"},"urlMapPattern":{"type":"string"},"publishDateVar":{"type":"string"},"expireDateVar":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"host":{"type":"string"},"siteName":{"type":"string"},"icon":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"metadata":{"type":"object","additionalProperties":{"type":"object"}},"folder":{"type":"string"},"folderPath":{"type":"string"}}}]},"Tuple2SystemActionString":{"type":"object","properties":{"_1":{"type":"string","enum":["NEW","EDIT","PUBLISH","UNPUBLISH","ARCHIVE","UNARCHIVE","DELETE","DESTROY","LOCK","UNLOCK"]},"_2":{"type":"string"}}},"VanityUrlContentType":{"type":"object","allOf":[{"$ref":"#/components/schemas/ContentType"},{"type":"object","properties":{"name":{"type":"string"},"id":{"type":"string"},"description":{"type":"string"},"defaultType":{"type":"boolean"},"detailPage":{"type":"string"},"fixed":{"type":"boolean"},"iDate":{"type":"string","format":"date-time"},"system":{"type":"boolean"},"versionable":{"type":"boolean"},"multilingualable":{"type":"boolean"},"variable":{"type":"string"},"urlMapPattern":{"type":"string"},"publishDateVar":{"type":"string"},"expireDateVar":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"host":{"type":"string"},"siteName":{"type":"string"},"icon":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"metadata":{"type":"object","additionalProperties":{"type":"object"}},"folder":{"type":"string"},"folderPath":{"type":"string"}}}]},"WidgetContentType":{"type":"object","allOf":[{"$ref":"#/components/schemas/ContentType"},{"type":"object","properties":{"name":{"type":"string"},"id":{"type":"string"},"description":{"type":"string"},"defaultType":{"type":"boolean"},"detailPage":{"type":"string"},"fixed":{"type":"boolean"},"iDate":{"type":"string","format":"date-time"},"system":{"type":"boolean"},"versionable":{"type":"boolean"},"variable":{"type":"string"},"urlMapPattern":{"type":"string"},"publishDateVar":{"type":"string"},"expireDateVar":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"host":{"type":"string"},"siteName":{"type":"string"},"icon":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"metadata":{"type":"object","additionalProperties":{"type":"object"}},"folder":{"type":"string"},"folderPath":{"type":"string"},"multilingualable":{"type":"boolean"}}}]},"WorkflowFormEntry":{"type":"object","properties":{"id":{"type":"string"},"variableName":{"type":"string"}}},"ContentTypeFieldView":{"required":["clazz","name"],"type":"object","properties":{"id":{"type":"string","description":"Field identifier. Preserve this when updating an existing field."},"contentTypeId":{"type":"string","description":"Identifier of the content type that owns this field."},"clazz":{"type":"string","description":"Field type, as a case-insensitive short field-type name (the discriminator that selects the concrete field). The fully-qualified 'Immutable*' class name and the bare simple class name (e.g. 'TextField') are also still accepted, but the short names below are the preferred form. Example: \"TEXT\".","example":"TEXT","enum":["TEXT","TEXT_AREA","STORY_BLOCK_FIELD","WYSIWYG","CONSTANT","HIDDEN","CUSTOM_FIELD","JSON_FIELD","BINARY","IMAGE","FILE","TAG","CATEGORY","CHECKBOX","RADIO","SELECT","MULTI_SELECT","DATE","TIME","DATE_TIME","KEY_VALUE","HOST_OR_FOLDER","RELATIONSHIP","RELATIONSHIPS_TAB","PERMISSIONS_TAB","LINE_DIVIDER","TAB_DIVIDER","ROW_FIELD","COLUMN_FIELD"]},"name":{"type":"string","description":"Display name of the field."},"variable":{"type":"string","description":"Velocity variable name of the field (unique within the content type; auto-generated from 'name' if omitted)."},"dataType":{"type":"string","description":"Storage/column data type backing the field. This is the **storage** type, which often differs from the field's UI class. In particular, fields that store their payload elsewhere — such as 'ImmutableImageField', 'ImmutableFileField', and 'ImmutableBinaryField' — use dataType 'TEXT' (they keep an asset reference in a text column), **not** 'SYSTEM'. Reserve 'SYSTEM' for true layout/tab/relationship system fields. Use 'LONG_TEXT' for text-area/story-block/WYSIWYG content.","enum":["TEXT","LONG_TEXT","SYSTEM","BOOL","INTEGER","FLOAT","DATE"]},"required":{"type":"boolean","description":"Whether a value is required to save content."},"indexed":{"type":"boolean","description":"Whether the field is added to the search index."},"listed":{"type":"boolean","description":"Whether the field appears in content list/table views."},"unique":{"type":"boolean","description":"Whether the field is unique across content of this type."},"sortOrder":{"type":"integer","description":"Position of the field within the 'fields[]' array (also drives row/column layout order).","format":"int32"},"values":{"type":"string","description":"Options for Radio/Select/Checkbox/Multi-Select fields: newline-separated 'Display|value' pairs. For a boolean choice use ImmutableRadioField + dataType 'BOOL' + values 'True|true\\r\\nFalse|false' (there is no dedicated boolean field class)."},"defaultValue":{"type":"string","description":"Default value applied when content is created."},"hint":{"type":"string","description":"Help text shown beneath the field in the editor."},"regexCheck":{"type":"string","description":"Regular expression used to validate the field value."}},"description":"A single field within a content type's 'fields[]' array. The 'clazz' property is the discriminator that selects the concrete field type; the remaining properties apply across field types."},"ContentTypeRequestView":{"required":["clazz","name"],"type":"object","properties":{"clazz":{"type":"string","description":"Base type of the content type, as a case-insensitive base-type name: `CONTENT`, `WIDGET`, `FORM`, `FILEASSET`, `HTMLPAGE`, `PERSONA`, `VANITY_URL`, `KEY_VALUE`, or `DOTASSET`. Example: `\"WIDGET\"`.","example":"WIDGET","enum":["CONTENT","WIDGET","FORM","FILEASSET","HTMLPAGE","PERSONA","VANITY_URL","KEY_VALUE","DOTASSET"]},"name":{"type":"string","description":"Display name of the content type."},"variable":{"type":"string","description":"Velocity variable name (unique, alphanumeric, starts with a letter; auto-generated from 'name' if omitted)."},"host":{"type":"string","description":"Site identifier UUID this content type lives on, or the literal 'SYSTEM_HOST' (defaults to the default site)."},"folder":{"type":"string","description":"Folder identifier UUID, or the literal 'SYSTEM_FOLDER' (the default)."},"description":{"type":"string","description":"Description of the content type."},"defaultType":{"type":"boolean","description":"Whether this is the default content type."},"fixed":{"type":"boolean","description":"Whether the content type is fixed (system-managed)."},"system":{"type":"boolean","description":"Whether the content type is a system type."},"workflow":{"type":"array","description":"Workflow scheme identifiers to associate with the content type, e.g. [\"d61a59e1-a49c-46f2-a929-db2b4bfa88b2\"] for the System Workflow. NOTE: this key is 'workflow' (singular) in the REQUEST; GET responses return 'workflows' (plural, array of objects) — rename the key when round-tripping.","items":{"type":"string"}},"fields":{"type":"array","description":"Fields that make up the content type, in order. Rows and columns are regular entries: 'ImmutableRowField' begins a row, 'ImmutableColumnField' begins a column, and subsequent content fields belong to the most-recent column.","items":{"$ref":"#/components/schemas/ContentTypeFieldView"}},"metadata":{"type":"object","additionalProperties":{"type":"object","description":"Content-type metadata. Known keys: 'CONTENT_EDITOR2_ENABLED' (boolean), 'DOT_STYLE_EDITOR_SCHEMA' (JSON string)."},"description":"Content-type metadata. Known keys: 'CONTENT_EDITOR2_ENABLED' (boolean), 'DOT_STYLE_EDITOR_SCHEMA' (JSON string)."},"systemActionMappings":{"type":"object","additionalProperties":{"type":"string","description":"Maps system actions (NEW, EDIT, PUBLISH, UNPUBLISH, ARCHIVE, UNARCHIVE, DELETE, DESTROY) to workflow action identifiers."},"description":"Maps system actions (NEW, EDIT, PUBLISH, UNPUBLISH, ARCHIVE, UNARCHIVE, DELETE, DESTROY) to workflow action identifiers."}},"description":"A content-type object, posted directly (NOT wrapped in a 'contentType' envelope). The endpoint also accepts an array of these objects to create several types in one call. Creating clazz `WIDGET` automatically adds `widgetTitle`, `widgetUsage`, `widgetCode`, and `widgetPreexecute`. `widgetCode` is an ImmutableConstantField: its shared code belongs in the field's `values` property, not in individual widget contentlets."},"ResponseEntityContentTypeJsonView":{"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"}}},"ResponseEntityListContentTypeView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/ContentType"}},"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"}}},"FilteredContentTypesForm":{"type":"object","properties":{"filter":{"type":"object","additionalProperties":{"type":"object"}},"page":{"type":"integer","format":"int32"},"perPage":{"type":"integer","format":"int32"},"orderBy":{"type":"string"},"direction":{"type":"string"}}},"BaseContentTypesView":{"type":"object","properties":{"name":{"type":"string"},"label":{"type":"string"},"types":{"type":"array","items":{"$ref":"#/components/schemas/ContentTypeView"}},"index":{"type":"integer","format":"int32"}}},"ContentTypeView":{"type":"object","properties":{"type":{"type":"string"},"name":{"type":"string"},"inode":{"type":"string"},"action":{"type":"string"},"variable":{"type":"string"}}},"ResponseEntityBaseContentTypesView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/BaseContentTypesView"}},"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"}}},"ResponseEntityContentTypeDetailView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"object","additionalProperties":{"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"}}},"Condition":{"type":"object","properties":{"parameter":{"type":"string"},"operator":{"type":"string","enum":["EQUALS","CONTAINS","EXISTS"]},"value":{"type":"object"}}},"Experiment":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"id":{"type":"string"},"status":{"type":"string","enum":["RUNNING","SCHEDULED","ENDED","DRAFT","ARCHIVED"]},"trafficProportion":{"$ref":"#/components/schemas/TrafficProportion"},"scheduling":{"$ref":"#/components/schemas/Scheduling"},"trafficAllocation":{"type":"number","format":"float"},"creationDate":{"type":"string","format":"date-time"},"modDate":{"type":"string","format":"date-time"},"pageId":{"type":"string"},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string"},"goals":{"$ref":"#/components/schemas/Goals"},"targetingConditions":{"type":"array","items":{"$ref":"#/components/schemas/TargetingCondition"}},"lookBackWindowExpireTime":{"type":"integer","format":"int64"},"runningIds":{"$ref":"#/components/schemas/RunningIds"}}},"ExperimentVariant":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"weight":{"type":"number","format":"float"},"url":{"type":"string"},"promoted":{"type":"boolean"}}},"Goal":{"type":"object","properties":{"metric":{"$ref":"#/components/schemas/Metric"},"type":{"type":"string","writeOnly":true,"enum":["MINIMIZE","MAXIMIZE"]}}},"Goals":{"type":"object","properties":{"primary":{"$ref":"#/components/schemas/Goal"}}},"ImmutableListCondition":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/Condition"},"last":{"$ref":"#/components/schemas/Condition"}},"items":{"$ref":"#/components/schemas/Condition"}},"ImmutableMapStringString":{"type":"object","properties":{"empty":{"type":"boolean"}},"additionalProperties":{"type":"string"}},"Metric":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"category":{"type":"string","enum":["DIFFERENTIATING_FEATURES","PAID_FEATURES","PLATFORM_SPECIFIC_CUSTOMIZATION","SOPHISTICATED_CONTENT_ARCHITECTURE","POSITIVE_USER_EXPERIENCE","PLATFORM_SPECIFIC_DEVELOPMENT","RECENT_ACTIVITY","HISTORY_LEGACY_DEPRECATED_FEATURES"]},"feature":{"type":"string","enum":["CONTENTLETS","LANGUAGES","CONTENT_TYPES","SITES","URL_MAPS","WORKFLOW","USERS","SITE_SEARCH","IMAGE_API","LAYOUT","CONTENT_TYPE_FIELDS","AI","EXPERIMENTS"]}}},"ResponseEntitySingleExperimentView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/Experiment"},"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"}}},"RunningId":{"type":"object","properties":{"id":{"type":"string"},"startDate":{"type":"string","format":"date-time"},"endDate":{"type":"string","format":"date-time"}}},"RunningIds":{"type":"object","properties":{"ids":{"type":"array","items":{"$ref":"#/components/schemas/RunningId"}}}},"Scheduling":{"type":"object","properties":{"startDate":{"type":"string","format":"date-time"},"endDate":{"type":"string","format":"date-time"}}},"TargetingCondition":{"type":"object","properties":{"id":{"type":"string"},"conditionKey":{"type":"string"},"values":{"type":"object","properties":{"empty":{"type":"boolean"}},"additionalProperties":{"type":"string"}},"operator":{"type":"string","enum":["AND","OR"]}}},"TrafficProportion":{"type":"object","properties":{"type":{"type":"string","enum":["SPLIT_EVENLY","CUSTOM_PERCENTAGES"]},"variants":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/ExperimentVariant"}}}},"AddVariantForm":{"type":"object","properties":{"description":{"type":"string"}}},"ResponseEntityExperimentView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/Experiment"}},"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"}}},"ExperimentForm":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"pageId":{"type":"string"},"trafficAllocation":{"type":"number","format":"float"},"trafficProportion":{"$ref":"#/components/schemas/TrafficProportion"},"scheduling":{"$ref":"#/components/schemas/Scheduling"},"goals":{"$ref":"#/components/schemas/Goals"},"targetingConditions":{"type":"array","items":{"$ref":"#/components/schemas/TargetingCondition"}},"lookbackWindow":{"type":"integer","format":"int32"}}},"BayesianResult":{"type":"object","properties":{"value":{"type":"number","format":"double"},"results":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/VariantResult"},"last":{"$ref":"#/components/schemas/VariantResult"}},"items":{"$ref":"#/components/schemas/VariantResult"}},"distributionPdfs":{"$ref":"#/components/schemas/SampleGroup"},"differenceData":{"$ref":"#/components/schemas/DifferenceData"},"quantiles":{"type":"object","properties":{"empty":{"type":"boolean"}},"additionalProperties":{"$ref":"#/components/schemas/QuantilePair"}},"suggestedWinner":{"type":"string"}}},"CredibilityInterval":{"type":"object","properties":{"lower":{"type":"number","format":"double"},"upper":{"type":"number","format":"double"}}},"DifferenceData":{"type":"object","properties":{"controlData":{"type":"array","items":{"type":"number","format":"double"}},"testData":{"type":"array","items":{"type":"number","format":"double"}},"differences":{"type":"array","items":{"type":"number","format":"double"}},"relativeDifference":{"type":"number","format":"double"}}},"ExperimentResults":{"type":"object","properties":{"sessions":{"$ref":"#/components/schemas/TotalSession"},"goals":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/GoalResults"}},"bayesianResult":{"$ref":"#/components/schemas/BayesianResult"}}},"GoalResults":{"type":"object","properties":{"goal":{"$ref":"#/components/schemas/Goal"},"variants":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/VariantResults"}}}},"ImmutableListVariantResult":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/VariantResult"},"last":{"$ref":"#/components/schemas/VariantResult"}},"items":{"$ref":"#/components/schemas/VariantResult"}},"ImmutableMapDoubleQuantilePair":{"type":"object","properties":{"empty":{"type":"boolean"}},"additionalProperties":{"$ref":"#/components/schemas/QuantilePair"}},"ImmutableMapStringListSampleData":{"type":"object","properties":{"empty":{"type":"boolean"}},"additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/SampleData"}}},"QuantilePair":{"type":"object","properties":{"quantile":{"type":"number","format":"double"},"formatted":{"type":"number","format":"double"}}},"ResponseEntityExperimentResults":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/ExperimentResults"},"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"}}},"ResultResumeItem":{"type":"object","properties":{"uniqueBySession":{"type":"integer","format":"int64"},"totalSessions":{"type":"integer","format":"int64"},"conversionRate":{"type":"number","format":"float"}}},"SampleData":{"type":"object","properties":{"x":{"type":"number","format":"double"},"y":{"type":"number","format":"double"}}},"SampleGroup":{"type":"object","properties":{"samples":{"type":"object","properties":{"empty":{"type":"boolean"}},"additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/SampleData"}}}}},"TotalSession":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"variants":{"type":"object","additionalProperties":{"type":"integer","format":"int64"}}}},"UniqueBySessionResume":{"type":"object","properties":{"count":{"type":"integer","format":"int64"},"conversionRate":{"type":"number","format":"float"}}},"VariantResult":{"type":"object","properties":{"variant":{"type":"string"},"conversionRate":{"type":"number","format":"double"},"probability":{"type":"number","format":"double"},"expectedLoss":{"type":"number","format":"double"},"risk":{"type":"number","format":"double"},"medianGrowth":{"type":"number","format":"double"},"credibilityInterval":{"$ref":"#/components/schemas/CredibilityInterval"},"isControl":{"type":"boolean"}}},"VariantResults":{"type":"object","properties":{"weight":{"type":"number","format":"float"},"variantName":{"type":"string"},"variantDescription":{"type":"string"},"uniqueBySession":{"$ref":"#/components/schemas/UniqueBySessionResume"},"details":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ResultResumeItem"}}}},"LookBackWindow":{"type":"object","properties":{"value":{"type":"string"},"expireMillis":{"type":"integer","format":"int64"}}},"ResponseEntityExperimentSelectedView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/SelectedExperiments"},"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"}}},"SelectedExperiment":{"type":"object","properties":{"name":{"type":"string"},"id":{"type":"string"},"runningId":{"type":"string"},"pageUrl":{"type":"string"},"variant":{"$ref":"#/components/schemas/SelectedVariant"},"lookBackWindow":{"$ref":"#/components/schemas/LookBackWindow"},"regexs":{"type":"object","additionalProperties":{"type":"string"}}}},"SelectedExperiments":{"type":"object","properties":{"experiments":{"type":"array","items":{"$ref":"#/components/schemas/SelectedExperiment"}},"includedExperimentIds":{"type":"array","items":{"type":"string"}},"excludedExperimentIds":{"type":"array","items":{"type":"string"}},"excludedExperimentIdsEnded":{"type":"array","items":{"type":"string"}}}},"SelectedVariant":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"}}},"ExcludedExperimentListForm":{"type":"object","properties":{"exclude":{"type":"array","items":{"type":"string"}}}},"ExperimentVariantForm":{"type":"object","properties":{"description":{"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"}}},"BinaryField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"CategoryField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"indexed":{"type":"boolean"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"CheckboxField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"ColumnField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"ConstantField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"CustomField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"DateField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"DateTimeField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"EmptyField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"Field":{"required":["clazz"],"type":"object","properties":{"fieldContentTypeProperties":{"type":"array","items":{"type":"string","enum":["NAME","VALUES","CATEGORIES","RELATIONSHIPS","REGEX_CHECK","HINT","REQUIRED","SEARCHABLE","INDEXED","LISTED","UNIQUE","DEFAULT_VALUE","DATA_TYPE"]}},"clazz":{"type":"string"}},"discriminator":{"propertyName":"clazz"}},"FileField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"Folder":{"type":"object","properties":{"identifier":{"type":"string"},"name":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"showOnMenu":{"type":"boolean"},"hostId":{"type":"string"},"type":{"type":"string"},"title":{"type":"string"},"filesMasks":{"type":"string"},"defaultFileType":{"type":"string"},"defaultBaseType":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"owner":{"type":"string"},"inode":{"type":"string"},"path":{"type":"string"},"idate":{"type":"string","format":"date-time"},"systemFolder":{"type":"boolean"},"permissionType":{"type":"string"},"parent":{"type":"boolean"},"host":{"$ref":"#/components/schemas/Host"},"map":{"type":"object","additionalProperties":{"type":"object"}}}},"HiddenField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"Host":{"type":"object","properties":{"lowIndexPriority":{"type":"boolean"},"variantId":{"type":"string"},"inode":{"type":"string"},"hostname":{"type":"string"},"systemHost":{"type":"boolean"},"hostThumbnail":{"type":"string","format":"binary"},"structureInode":{"type":"string"},"tagStorage":{"type":"string"},"parent":{"type":"boolean"},"aliases":{"type":"string"},"default":{"type":"boolean"},"name":{"type":"string"},"permissionId":{"type":"string"},"permissionType":{"type":"string"},"owner":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"identifier":{"type":"string"},"type":{"type":"string"},"languageId":{"type":"integer","format":"int64"},"sortOrder":{"type":"integer","format":"int64"},"archived":{"type":"boolean"},"folder":{"type":"string"},"htmlpage":{"type":"boolean"},"vanityUrl":{"type":"boolean"},"userAPI":{"$ref":"#/components/schemas/UserAPI"},"contentTypeId":{"type":"string"},"host":{"type":"string"},"modUser":{"type":"string"},"working":{"type":"boolean"},"keyValue":{"type":"boolean"},"categoryId":{"type":"string"},"versionId":{"type":"string"},"titleImage":{"$ref":"#/components/schemas/Field"},"dotAsset":{"type":"boolean"},"persona":{"type":"boolean"},"form":{"type":"boolean"},"languageVariable":{"type":"boolean"},"indexPolicyDependencies":{"type":"string","enum":["DEFER","WAIT_FOR","FORCE"]},"fileAsset":{"type":"boolean"},"title":{"type":"string"},"live":{"type":"boolean"},"new":{"type":"boolean"},"locked":{"type":"boolean"}}},"HostFolderField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"indexed":{"type":"boolean"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"ImageField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"KeyValueField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"indexed":{"type":"boolean"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"LineDividerField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"MultiSelectField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"PermissionTabField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"RadioField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"RelationshipField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"indexed":{"type":"boolean"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]},"skipRelationshipCreation":{"type":"boolean"}}}]},"RelationshipsTabField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"ResponseEntityFolderView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/Folder"},"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"}}},"RowField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"SelectField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"StoryBlockField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"TabDividerField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"TagField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"indexed":{"type":"boolean"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"TextAreaField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"TextField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"TimeField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"UserAPI":{"type":"object","properties":{"anonymousUser":{"$ref":"#/components/schemas/User"},"systemUser":{"$ref":"#/components/schemas/User"},"defaultUser":{"$ref":"#/components/schemas/User"},"unDeletedUsers":{"type":"array","items":{"$ref":"#/components/schemas/User"}},"anonymousUserNoThrow":{"$ref":"#/components/schemas/User"}}},"WysiwygField":{"type":"object","allOf":[{"$ref":"#/components/schemas/Field"},{"type":"object","properties":{"searchable":{"type":"boolean"},"unique":{"type":"boolean"},"indexed":{"type":"boolean"},"listed":{"type":"boolean"},"readOnly":{"type":"boolean"},"forceIncludeInApi":{"type":"boolean"},"owner":{"type":"string"},"id":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"relationType":{"type":"string"},"required":{"type":"boolean"},"variable":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"values":{"type":"string"},"regexCheck":{"type":"string"},"hint":{"type":"string"},"defaultValue":{"type":"string"},"fixed":{"type":"boolean"},"contentTypeId":{"type":"string"},"dbColumn":{"type":"string"},"iDate":{"type":"string","format":"date-time"},"dataType":{"type":"string","enum":["none","bool","date","float","integer","text","text_area","system_field"]}}}]},"FolderSearchResultView":{"type":"object","properties":{"id":{"type":"string"},"inode":{"type":"string"},"path":{"type":"string"},"hostName":{"type":"string"},"addChildrenAllowed":{"type":"boolean"}}},"ResponseEntityFolderSearchResultView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/FolderSearchResultView"}},"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"}}},"SearchByPathForm":{"type":"object","properties":{"path":{"type":"string"}}},"FolderView":{"type":"object","properties":{"path":{"type":"string"},"defaultFileType":{"type":"string"},"filesMasks":{"type":"string"},"getiDate":{"type":"string","format":"date-time"},"hostId":{"type":"string"},"identifier":{"type":"string"},"inode":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"showOnMenu":{"type":"boolean"},"sortOrder":{"type":"integer","format":"int32"},"title":{"type":"string"},"type":{"type":"string"},"subFolders":{"type":"array","items":{"$ref":"#/components/schemas/FolderView"}}}},"ResponseEntityFolderWithSubfoldersView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/FolderView"},"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"}}},"FolderSearchView":{"type":"object","properties":{"id":{"type":"string","description":"Folder identifier"},"inode":{"type":"string","description":"Folder inode"},"name":{"type":"string","description":"Folder name (last path segment)"},"path":{"type":"string","description":"Parent path of the folder, e.g. '/application/' for '/application/blog/'"},"addChildrenAllowed":{"type":"boolean","description":"True when the requesting user has CAN_ADD_CHILDREN on this folder"},"hasChildren":{"type":"boolean","description":"True when the folder has at least one child folder readable by the requesting user"},"defaultBaseType":{"type":"string","description":"Content Drive upload-mode preference as a BaseContentType name (e.g. DOTASSET, FILEASSET); null when the folder has no preference"},"title":{"type":"string","description":"Folder title"},"sortOrder":{"type":"integer","description":"Folder sort order used when ordering menu items","format":"int32"},"filesMasks":{"type":"string","description":"Comma-separated file-name masks allowed in this folder, e.g. '*.jpg,*.png'"},"defaultFileType":{"type":"string","description":"Velocity variable name of the Content Type used by default for new files in this folder"},"showOnMenu":{"type":"boolean","description":"True when the folder is shown on navigation menus"},"permissions":{"type":"array","description":"Permission types the requesting user holds on this folder. Only populated when 'includePermissions=true'; null means the permissions were not requested, while an empty array means they were requested and the user holds none.","items":{"type":"string","enum":["READ","EDIT","PUBLISH","EDIT_PERMISSIONS","CAN_ADD_CHILDREN"]}}}},"PaginatedArrayListFolderSearchView":{"type":"array","properties":{"totalResults":{"type":"integer","format":"int64"},"query":{"type":"string"},"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/FolderSearchView"},"last":{"$ref":"#/components/schemas/FolderSearchView"}},"items":{"$ref":"#/components/schemas/FolderSearchView"}},"ResponseEntityFolderSearchView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","properties":{"totalResults":{"type":"integer","format":"int64"},"query":{"type":"string"},"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/FolderSearchView"},"last":{"$ref":"#/components/schemas/FolderSearchView"}},"items":{"$ref":"#/components/schemas/FolderSearchView"}},"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"}}},"ResponseEntityViewJobPaginatedResult":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/JobPaginatedResult"},"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"}}},"JobParamsSchema":{"type":"object","properties":{"file":{"type":"string","description":"The file to be processed by the job.","format":"binary"},"params":{"type":"string","description":"JSON string with job-specific parameters.","example":"{\"contentType\":\"CustomContentType\",\"workflowActionId\":\"Workflow-UUID\",\"language\":\"en-us\",\"stopOnError\":true}"}},"description":"Schema for multipart job queue parameters."},"ResponseEntityViewJob":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/Job"},"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"}}},"ResponseEntityViewSetString":{"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"}}},"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"}}},"RestLanguage":{"type":"object","properties":{"name":{"type":"string"}}},"DeleteContentletsResultView":{"required":["deleted","errors"],"type":"object","properties":{"deleted":{"type":"integer","description":"Number of contentlets successfully destroyed","format":"int32","example":6},"errors":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"type":"string"},"last":{"type":"string"}},"description":"Identifiers of contentlets that failed to be destroyed","items":{"type":"string","description":"Identifiers of contentlets that failed to be destroyed"}}}},"ResponseEntityDeleteContentletsResultView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/DeleteContentletsResultView"},"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"}}},"DeleteContentletsForm":{"required":["identifiers"],"type":"object","properties":{"identifiers":{"type":"array","description":"List of contentlet identifiers. All language siblings of each identifier will be permanently destroyed.","example":["abc123","def456","ghi789"],"items":{"type":"string","description":"List of contentlet identifiers. All language siblings of each identifier will be permanently destroyed.","example":"[\"abc123\",\"def456\",\"ghi789\"]"}}},"description":"List of contentlet identifiers to permanently destroy"},"ResponseEntitySystemJobDeleteView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"object","additionalProperties":{"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"}}},"DropOldVersionsResultView":{"required":["deletedCount","success"],"type":"object","properties":{"deletedCount":{"type":"integer","description":"Number of asset versions deleted","format":"int32","example":1523},"success":{"type":"boolean","description":"Whether the operation completed successfully","example":true}}},"ResponseEntityDropOldVersionsResultView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/DropOldVersionsResultView"},"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"}}},"ImmutableListThreadDescriptorView":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/ThreadDescriptorView"},"last":{"$ref":"#/components/schemas/ThreadDescriptorView"}},"description":"Per-thread descriptors","items":{"$ref":"#/components/schemas/ThreadDescriptorView"}},"ResponseEntityThreadDumpView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/ThreadDumpView"},"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"}}},"ThreadDescriptorView":{"required":["daemon","deadlocked","id","lockedMonitors","lockedSynchronizers","name","priority","stackTrace","state"],"type":"object","properties":{"name":{"type":"string","description":"Thread name","example":"http-nio-8080-exec-1"},"id":{"type":"integer","description":"JVM-assigned thread id","format":"int64","example":142},"daemon":{"type":"boolean","description":"Whether this is a daemon thread","example":true},"priority":{"type":"integer","description":"Thread priority (1-10)","format":"int32","example":5},"state":{"type":"string","description":"Thread state name (e.g. RUNNABLE, WAITING, TIMED_WAITING, BLOCKED)","example":"RUNNABLE"},"deadlocked":{"type":"boolean","description":"Whether this thread is part of a detected deadlock cycle","example":false},"stackTrace":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"type":"string"},"last":{"type":"string"}},"description":"Stack trace as a list of formatted frames","items":{"type":"string","description":"Stack trace as a list of formatted frames"}},"lockedMonitors":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"type":"string"},"last":{"type":"string"}},"description":"Locked monitors held by this thread, formatted as 'ClassName at depth N'","items":{"type":"string","description":"Locked monitors held by this thread, formatted as 'ClassName at depth N'"}},"lockedSynchronizers":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"type":"string"},"last":{"type":"string"}},"description":"Locked ownable synchronizers held by this thread (LockInfo.toString())","items":{"type":"string","description":"Locked ownable synchronizers held by this thread (LockInfo.toString())"}},"lockInfo":{"type":"string","description":"String form of the lock the thread is currently waiting on; null if none","example":"java.util.concurrent.locks.ReentrantLock$NonfairSync@1a2b3c"},"lockOwnerName":{"type":"string","description":"Name of the thread that owns the lock this thread is waiting on; null if none","example":"http-nio-8080-exec-7"},"lockOwnerId":{"type":"integer","description":"Id of the thread that owns the lock this thread is waiting on; null if none","format":"int64","example":187}}},"ThreadDumpView":{"required":["deadlockedCount","serverId","threadCount","threads","timestamp","vmInfo"],"type":"object","properties":{"serverId":{"type":"string","description":"Identifier of the cluster node that produced this dump","example":"01HXX2J3K4M5N6P7Q8R9S0T1U2"},"serverName":{"type":"string","description":"Human-readable name of the cluster node, when configured","example":"node-1"},"timestamp":{"type":"string","description":"Wall-clock timestamp when the dump was captured","example":"Thu Apr 03 10:30:00 UTC 2026"},"vmInfo":{"type":"string","description":"JVM identification: vm name and runtime version","example":"OpenJDK 64-Bit Server VM 21.0.2+13-58"},"threadCount":{"type":"integer","description":"Number of threads included in the response (after filtering)","format":"int32","example":42},"deadlockedCount":{"type":"integer","description":"Total number of deadlocked threads detected JVM-wide","format":"int32","example":0},"threads":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/ThreadDescriptorView"},"last":{"$ref":"#/components/schemas/ThreadDescriptorView"}},"description":"Per-thread descriptors","items":{"$ref":"#/components/schemas/ThreadDescriptorView"}}}},"ResponseEntityThreadSystemInfoView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/ThreadSystemInfoView"},"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"}}},"ThreadSystemInfoView":{"required":["currentThreadCount","peakThreadCount","serverId","startTimeMillis","systemStartupTime","uptimeMillis"],"type":"object","properties":{"serverId":{"type":"string","description":"Identifier of the cluster node serving this request","example":"01HXX2J3K4M5N6P7Q8R9S0T1U2"},"serverName":{"type":"string","description":"Human-readable name of the cluster node, when configured","example":"node-1"},"systemStartupTime":{"type":"string","description":"JVM startup time formatted as 'dd MMM yyyy HH:mm:ss' (server local time)","example":"03 Apr 2026 08:15:30"},"startTimeMillis":{"type":"integer","description":"JVM startup time as epoch milliseconds","format":"int64","example":1775376930000},"uptimeMillis":{"type":"integer","description":"JVM uptime in milliseconds","format":"int64","example":7830000},"currentThreadCount":{"type":"integer","description":"Current live thread count (daemon and non-daemon)","format":"int32","example":187},"peakThreadCount":{"type":"integer","description":"Peak live thread count since the JVM started","format":"int32","example":245}}},"KillSessionsResultView":{"required":["killedCount"],"type":"object","properties":{"killedCount":{"type":"integer","description":"Number of sessions invalidated (the caller's own session is always skipped).","format":"int32","example":5}}},"ResponseEntityKillSessionsResultView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/KillSessionsResultView"},"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"}}},"ResponseEntitySessionListView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/SessionView"}},"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"}}},"SessionView":{"required":["isCurrent","token","userId"],"type":"object","properties":{"token":{"type":"string","description":"HMAC-obfuscated session token. Pass this value back to DELETE /v1/maintenance/_sessions/{token} to invalidate the session.","example":"a1b2c3d4e5f6g7h8"},"userId":{"type":"string","description":"User id associated with the session (anonymous user id if no login).","example":"dotcms.org.1"},"userEmail":{"type":"string","description":"Email of the user associated with the session. Null for sessions without an associated user account.","example":"admin@dotcms.com"},"userFullName":{"type":"string","description":"Full name of the user associated with the session. Null for sessions without an associated user account.","example":"Admin User"},"address":{"type":"string","description":"Remote IP address recorded when the session was created. Null if the address was never captured (e.g. the session was created outside the servlet request pipeline that records it).","example":"192.168.1.100"},"sessionTime":{"type":"string","description":"Human-readable elapsed time since the session was created.","example":"2 hours ago"},"isCurrent":{"type":"boolean","description":"True if this entry represents the caller's own session.","example":true}}},"ResponseEntitySystemJobListView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"type":"object","additionalProperties":{"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"}}},"ResponseEntitySearchAndReplaceResultView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/SearchAndReplaceResultView"},"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"}}},"SearchAndReplaceResultView":{"required":["hasErrors","success"],"type":"object","properties":{"success":{"type":"boolean","description":"Whether the operation completed without errors","example":true},"hasErrors":{"type":"boolean","description":"Whether any table updates encountered errors. When true, some tables may not have been updated.","example":false}}},"SearchAndReplaceForm":{"required":["replaceString","searchString"],"type":"object","properties":{"searchString":{"type":"string","description":"Text to search for across all content tables. Must not be empty.","example":"http://old-domain.com"},"replaceString":{"type":"string","description":"Replacement text. Can be empty to delete all occurrences of searchString.","example":"https://new-domain.com"}},"description":"Database-wide search and replace parameters"},"DeleteForm":{"required":["items"],"type":"object","properties":{"items":{"type":"array","items":{"type":"string"}}}},"ResponseEntityListViewString":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"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"}}},"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"}}},"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"}}},"ExtraPackagesForm":{"required":["packages"],"type":"object","properties":{"packages":{"type":"string"}}},"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"}}},"ContainerEntry":{"type":"object","properties":{"personaTag":{"type":"string"},"contentIds":{"type":"array","items":{"type":"string"}},"stylePropertiesMap":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"object"}}},"containerId":{"type":"string"},"containerUUID":{"type":"string"}}},"PageContainerForm":{"type":"object","properties":{"requestJson":{"type":"string"},"containerEntries":{"type":"array","items":{"$ref":"#/components/schemas/ContainerEntry"}}}},"PageContainerEntryView":{"required":["contentletsId","identifier","uuid"],"type":"object","properties":{"identifier":{"type":"string","description":"Container's path-based key, e.g. '//demo.dotcms.com/application/containers/default/'. Matches the keys in 'page.containers' returned by GET /api/v1/page/json/{uri} (or /render/{uri}). Not the database UUID.","example":"//demo.dotcms.com/application/containers/default/"},"uuid":{"type":"string","description":"Slot instance identifier. Matches the 'uuid' in page.layout.body.rows[].columns[].containers[]. The same container can appear multiple times on a page with different UUIDs.","example":"10"},"contentletsId":{"type":"array","description":"Ordered contentlet identifiers placed in this slot. An empty array clears the slot. This is a full replacement: omitted slots are removed from the page.","items":{"type":"string","description":"Ordered contentlet identifiers placed in this slot. An empty array clears the slot. This is a full replacement: omitted slots are removed from the page."}},"personaTag":{"type":"string","description":"Optional persona tag for personalized content variants.","nullable":true}},"description":"Single container slot assignment for a page."},"ExistingLanguagesForPageView":{"type":"object","properties":{"empty":{"type":"boolean"}},"additionalProperties":{"type":"object"}},"ResponseEntityLanguagesForPageView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/ExistingLanguagesForPageView"}},"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"}}},"PageCheckPermissionForm":{"type":"object","properties":{"type":{"type":"string","enum":["NONE","READ","USE","EDIT","WRITE","PUBLISH","EDIT_PERMISSIONS","CAN_ADD_CHILDREN"]},"hostId":{"type":"string"},"languageId":{"type":"integer","format":"int64"},"path":{"type":"string"}}},"CopyContentletForm":{"type":"object","properties":{"contentId":{"type":"string"},"pageId":{"type":"string"},"containerId":{"type":"string"},"relationType":{"type":"string"},"personalization":{"type":"string"},"variantId":{"type":"string"},"treeOrder":{"type":"integer","format":"int32"},"styleProperties":{"type":"object","additionalProperties":{"type":"object"}}}},"ActionInputView":{"type":"object","properties":{"id":{"type":"string"},"body":{"type":"object","additionalProperties":{"type":"object"}}}},"PageWorkflowActionsView":{"type":"object","properties":{"page":{"type":"object","additionalProperties":{"type":"object"}},"actions":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowActionView"}}}},"ResponseEntityPageWorkflowActionsView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/PageWorkflowActionsView"},"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"}}},"WorkflowActionView":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"schemeId":{"type":"string"},"condition":{"type":"string"},"nextStep":{"type":"string"},"nextAssign":{"type":"string"},"icon":{"type":"string"},"roleHierarchyForAssign":{"type":"boolean"},"assignable":{"type":"boolean"},"commentable":{"type":"boolean"},"order":{"type":"integer","format":"int32"},"saveActionlet":{"type":"boolean","writeOnly":true},"publishActionlet":{"type":"boolean","writeOnly":true},"unpublishActionlet":{"type":"boolean","writeOnly":true},"archiveActionlet":{"type":"boolean","writeOnly":true},"pushPublishActionlet":{"type":"boolean","writeOnly":true},"onlyBatchActionlet":{"type":"boolean","writeOnly":true},"unarchiveActionlet":{"type":"boolean","writeOnly":true},"deleteActionlet":{"type":"boolean","writeOnly":true},"destroyActionlet":{"type":"boolean","writeOnly":true},"moveActionlet":{"type":"boolean","writeOnly":true},"commentActionlet":{"type":"boolean","writeOnly":true},"metadata":{"type":"object","additionalProperties":{"type":"object"}},"resetable":{"type":"boolean","writeOnly":true},"actionInputs":{"type":"array","items":{"$ref":"#/components/schemas/ActionInputView"}},"nextStepCurrentStep":{"type":"boolean"},"moveActionletHashPath":{"type":"boolean","writeOnly":true},"owner":{"type":"string"},"showOn":{"uniqueItems":true,"type":"array","items":{"type":"string","enum":["NEW","LOCKED","UNLOCKED","PUBLISHED","UNPUBLISHED","ARCHIVED","LISTING","EDITING"]}},"hasOnlyBatchActionlet":{"type":"boolean"},"hasSaveActionlet":{"type":"boolean"},"hasDeleteActionlet":{"type":"boolean"},"hasResetActionlet":{"type":"boolean"},"hasPublishActionlet":{"type":"boolean"},"hasUnpublishActionlet":{"type":"boolean"},"hasArchiveActionlet":{"type":"boolean"},"hasPushPublishActionlet":{"type":"boolean"},"hasUnarchiveActionlet":{"type":"boolean"},"hasDestroyActionlet":{"type":"boolean"},"hasCommentActionlet":{"type":"boolean"},"hasMoveActionletHasPathActionlet":{"type":"boolean"},"hasMoveActionletActionlet":{"type":"boolean"}}},"FindAvailableActionsForm":{"type":"object","properties":{"renderMode":{"type":"string","enum":["EDITING","LISTING"]},"hostId":{"type":"string"},"languageId":{"type":"integer","format":"int64"},"path":{"type":"string"}}},"MulitreeView":{"type":"object","properties":{"pageId":{"type":"string"},"containerId":{"type":"string"},"contentId":{"type":"string"},"relationType":{"type":"string"},"treeOrder":{"type":"integer","format":"int32"},"personalization":{"type":"string"},"variantId":{"type":"string"}}},"ResponseEntityMulitreeView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/MulitreeView"}},"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"}}},"ResponseEntityViewListMulitreeView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/MulitreeView"}},"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"}}},"PageLivePreviewVersionBean":{"type":"object","properties":{"renderLive":{"type":"string"},"renderWorking":{"type":"string"},"diff":{"type":"boolean"}}},"ResponseEntityPageLivePreviewVersionView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/PageLivePreviewVersionBean"},"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"}}},"PersonalizationPersonaPageView":{"type":"object","properties":{"pageId":{"type":"string"},"persona":{"type":"object","additionalProperties":{"type":"object"}}}},"ResponseEntityListPersonalizationPersonaPageView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/PersonalizationPersonaPageView"}},"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"}}},"ContainerSourceView":{"type":"object","properties":{"source":{"type":"string","description":"Container source type: DB or FILE","enum":["DB","FILE"]},"contentTypes":{"type":"array","description":"Content types placed on the page for this container. DB entries contain only contentTypeVar; FILE entries also include path and identifier.","items":{"$ref":"#/components/schemas/ContentTypeEntryView"}}},"description":"Containers referenced by the page template, keyed by container identifier (UUID for DB containers, host-qualified path for FILE containers). Only content types placed on the page appear inside each entry."},"ContentTypeEntryView":{"type":"object","properties":{"contentTypeVar":{"type":"string","description":"Velocity variable name of the Content Type"},"path":{"type":"string","description":"Host-qualified path to the VTL file (FILE containers only)"},"identifier":{"type":"string","description":"File asset identifier of the VTL file (FILE containers only)"}},"description":"Content types placed on the page for this container. DB entries contain only contentTypeVar; FILE entries also include path and identifier."},"FileRefView":{"type":"object","properties":{"path":{"type":"string","description":"Host-qualified path to the file, e.g. //demo.dotcms.com/application/themes/travel/header.vtl"},"identifier":{"type":"string","description":"File asset identifier"},"extension":{"type":"string","description":"Lowercased file extension without the leading dot, e.g. vtl, css, scss, js"}},"description":"Every file found anywhere under the theme folder (searched recursively), regardless of type. Each entry carries its extension so consumers can filter."},"PageRenderSourcesView":{"type":"object","properties":{"page":{"$ref":"#/components/schemas/PageSourceRefView"},"theme":{"$ref":"#/components/schemas/ThemeSourceView"},"containers":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ContainerSourceView"},"description":"Containers referenced by the page template, keyed by container identifier (UUID for DB containers, host-qualified path for FILE containers). Only content types placed on the page appear inside each entry."},"widgets":{"type":"array","description":"Widget contentlets placed on the page","items":{"$ref":"#/components/schemas/WidgetSourceView"}},"urlContentMap":{"$ref":"#/components/schemas/UrlContentMapView"}}},"PageSourceRefView":{"type":"object","properties":{"identifier":{"type":"string","description":"Page identifier"},"uri":{"type":"string","description":"Host-qualified page URI (e.g. //demo.dotcms.com/index)"},"languageId":{"type":"integer","description":"Language ID under which the page was resolved","format":"int64"}},"description":"Lightweight page reference. When the request URI was a URL-mapped path, identifier is the detail page identifier and uri is the originally requested URI (host-qualified)."},"ResponseEntityPageRenderSourcesView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/PageRenderSourcesView"},"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"}}},"ThemeSourceView":{"type":"object","properties":{"id":{"type":"string","description":"Theme folder identifier"},"name":{"type":"string","description":"Theme folder name"},"folderPath":{"type":"string","description":"Host-qualified path to the theme folder, e.g. //demo.dotcms.com/application/themes/travel/"},"files":{"type":"array","description":"Every file found anywhere under the theme folder (searched recursively), regardless of type. Each entry carries its extension so consumers can filter.","items":{"$ref":"#/components/schemas/FileRefView"}}},"description":"Theme folder and every file that composes it"},"UrlContentMapView":{"type":"object","properties":{"contentTypeVar":{"type":"string","description":"Velocity variable name of the URL-mapped Content Type (e.g. 'Blog')"},"title":{"type":"string","description":"Title of the URL-mapped contentlet"},"contentletId":{"type":"string","description":"Stable identifier of the URL-mapped contentlet (same across all language/variant versions). Use GET /api/v1/content/id/{contentletId} to retrieve it."},"contentletInode":{"type":"string","description":"Inode of the exact version of the URL-mapped contentlet resolved for this request (language- and variant-specific). Use GET /api/v1/content/inode/{contentletInode} to retrieve the precise version."}},"description":"Present only when the requested URI resolved via a URL-map pattern. Identifies the specific mapped contentlet that owns the URL. Absent for regular (literal) HTML page requests."},"WidgetSourceView":{"type":"object","properties":{"contentTypeVar":{"type":"string","description":"Velocity variable name of the Widget Content Type"},"title":{"type":"string","description":"Title of the placed Widget contentlet"},"contentletId":{"type":"string","description":"Stable identifier of the placed Widget contentlet (same across all language and variant versions). Use GET /api/v1/content/id/{contentletId} to retrieve the contentlet."},"contentletInode":{"type":"string","description":"Inode of the exact version of the placed Widget contentlet resolved for this request (language- and variant-specific). Use GET /api/v1/content/inode/{contentletInode} to retrieve the precise placed version."},"source":{"type":"string","description":"Source of the widget Velocity code. FILE: VTL lives in a file asset (see path/identifier). CODE: Velocity is inline in the content type's widgetCode field and/or contentlet fields — retrieve via GET /api/v1/contenttype/id/{contentTypeVar} and GET /api/v1/content/id/{contentletId}.","enum":["FILE","CODE"]},"path":{"type":"string","description":"Host-qualified path to the widget VTL file (FILE source only)"},"identifier":{"type":"string","description":"File asset identifier of the widget VTL file (FILE source only)"}},"description":"Widget contentlets placed on the page"},"AccruedTag":{"type":"object","properties":{"tag":{"type":"string"},"count":{"type":"integer","format":"int32"}}},"Body":{"type":"object","properties":{"rows":{"type":"array","items":{"$ref":"#/components/schemas/TemplateLayoutRow"}}}},"CachedVanityUrl":{"type":"object","properties":{"pattern":{"type":"object"},"vanityUrlId":{"type":"string"},"url":{"type":"string"},"siteId":{"type":"string"},"languageId":{"type":"integer","format":"int64"},"forwardTo":{"type":"string"},"response":{"type":"integer","format":"int32"},"order":{"type":"integer","format":"int32"},"forward":{"type":"boolean"},"temporaryRedirect":{"type":"boolean"},"permanentRedirect":{"type":"boolean"}}},"ContainerRaw":{"type":"object","properties":{"containerStructures":{"type":"array","items":{"$ref":"#/components/schemas/ContainerStructure"}},"contentlets":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","additionalProperties":{"type":"object"}}}},"container":{"$ref":"#/components/schemas/ContainerView"}}},"ContainerUUID":{"type":"object","properties":{"identifier":{"type":"string","description":"Reference to the Container placed in this layout slot. Accepts any ONE of three forms:\n- a Container **identifier** for a database-backed Container — a full UUID ('2cef9f97-5faf-4d18-8c9b-df22b6c17111') or a dotCMS 'shorty' (short) id; or\n- a **file path** for a file-based (Container-as-File) Container — host-qualified ('//demo.dotcms.com/application/containers/default/') or host-relative ('/application/containers/default/', resolved against the current site); or\n- the literal string 'SYSTEM_CONTAINER' for the built-in system Container.\nThe server chooses the resolution strategy by inspecting the value: a string containing '/application/containers' is resolved as a file-path Container, 'SYSTEM_CONTAINER' resolves to the system Container, and anything else is looked up as a database identifier. A value that does not resolve to an existing Container produces no container at render time (the slot renders empty) rather than falling back to another Container — pass the exact identifier or the full host-qualified path.","example":"//demo.dotcms.com/application/containers/default/"},"uuid":{"type":"string"},"historyUUIDs":{"type":"array","items":{"type":"string"}}}},"Contentlet":{"type":"object","properties":{"lowIndexPriority":{"type":"boolean"},"variantId":{"type":"string"},"languageId":{"type":"integer","format":"int64"},"inode":{"type":"string"},"identifier":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"sortOrder":{"type":"integer","format":"int64"},"archived":{"type":"boolean"},"folder":{"type":"string"},"htmlpage":{"type":"boolean"},"vanityUrl":{"type":"boolean"},"userAPI":{"$ref":"#/components/schemas/UserAPI"},"versionType":{"type":"string"},"structureInode":{"type":"string"},"permissionId":{"type":"string"},"permissionType":{"type":"string"},"contentTypeId":{"type":"string"},"host":{"type":"string"},"systemHost":{"type":"boolean"},"modUser":{"type":"string"},"working":{"type":"boolean"},"keyValue":{"type":"boolean"},"categoryId":{"type":"string"},"versionId":{"type":"string"},"titleImage":{"$ref":"#/components/schemas/Field"},"dotAsset":{"type":"boolean"},"persona":{"type":"boolean"},"form":{"type":"boolean"},"languageVariable":{"type":"boolean"},"indexPolicyDependencies":{"type":"string","enum":["DEFER","WAIT_FOR","FORCE"]},"fileAsset":{"type":"boolean"},"title":{"type":"string"},"live":{"type":"boolean"},"name":{"type":"string"},"type":{"type":"string"},"new":{"type":"boolean"},"locked":{"type":"boolean"},"owner":{"type":"string"}}},"EmptyPageView":{"type":"object","properties":{"site":{"$ref":"#/components/schemas/Host"},"template":{"$ref":"#/components/schemas/Template"},"containers":{"type":"array","items":{"$ref":"#/components/schemas/ContainerRaw"}},"layout":{"$ref":"#/components/schemas/TemplateLayout"},"viewAs":{"$ref":"#/components/schemas/ViewAsPageStatus"},"urlContent":{"$ref":"#/components/schemas/Contentlet"},"numberContents":{"type":"integer","format":"int32"},"pageUrlMapper":{"type":"string"},"live":{"type":"boolean"},"vanityUrl":{"$ref":"#/components/schemas/CachedVanityUrl"},"runningExperiment":{"$ref":"#/components/schemas/Experiment"},"styleEditorSchemas":{"type":"array","items":{"$ref":"#/components/schemas/JsonNode"}},"containersMap":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ContainerRaw"}},"page":{"$ref":"#/components/schemas/HTMLPageAsset"}}},"Geolocation":{"type":"object","properties":{"latitude":{"type":"number","format":"double"},"longitude":{"type":"number","format":"double"},"country":{"type":"string"},"countryCode":{"type":"string"},"city":{"type":"string"},"continent":{"type":"string"},"continentCode":{"type":"string"},"company":{"type":"string"},"timezone":{"type":"string"},"subdivision":{"type":"string"},"subdivisionCode":{"type":"string"},"postal":{"type":"string"},"ipAddress":{"type":"string"}}},"HTMLPageAsset":{"type":"object","properties":{"lowIndexPriority":{"type":"boolean"},"variantId":{"type":"string"},"pageUrl":{"type":"string"},"httpsRequired":{"type":"boolean"},"redirect":{"type":"string"},"cacheTTL":{"type":"integer","format":"int64"},"seoKeywords":{"type":"string"},"seoDescription":{"type":"string"},"templateId":{"type":"string"},"menuOrder":{"type":"integer","format":"int32"},"metadata":{"type":"string"},"friendlyName":{"type":"string"},"showOnMenu":{"type":"boolean"},"title":{"type":"string"},"content":{"type":"boolean"},"uri":{"type":"string"},"languageId":{"type":"integer","format":"int64"},"inode":{"type":"string"},"identifier":{"type":"string"},"host":{"type":"string"},"archived":{"type":"boolean"},"versionType":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"working":{"type":"boolean"},"versionId":{"type":"string"},"modUser":{"type":"string"},"live":{"type":"boolean"},"locked":{"type":"boolean"},"permissionId":{"type":"string"},"permissionType":{"type":"string"},"owner":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"sortOrder":{"type":"integer","format":"int64"},"folder":{"type":"string"},"htmlpage":{"type":"boolean"},"vanityUrl":{"type":"boolean"},"userAPI":{"$ref":"#/components/schemas/UserAPI"},"structureInode":{"type":"string"},"contentTypeId":{"type":"string"},"systemHost":{"type":"boolean"},"keyValue":{"type":"boolean"},"categoryId":{"type":"string"},"titleImage":{"$ref":"#/components/schemas/Field"},"dotAsset":{"type":"boolean"},"persona":{"type":"boolean"},"form":{"type":"boolean"},"languageVariable":{"type":"boolean"},"indexPolicyDependencies":{"type":"string","enum":["DEFER","WAIT_FOR","FORCE"]},"fileAsset":{"type":"boolean"},"new":{"type":"boolean"}}},"IPersona":{"type":"object","properties":{"keyTag":{"type":"string"},"inode":{"type":"string"},"identifier":{"type":"string"},"tags":{"type":"string"},"description":{"type":"string"},"name":{"type":"string"},"archived":{"type":"boolean"},"versionType":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"working":{"type":"boolean"},"versionId":{"type":"string"},"modUser":{"type":"string"},"title":{"type":"string"},"live":{"type":"boolean"},"locked":{"type":"boolean"},"parentPermissionable":{"$ref":"#/components/schemas/Permissionable"},"permissionId":{"type":"string"},"permissionType":{"type":"string"},"owner":{"type":"string"}}},"JsonNode":{"type":"object"},"Language":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"languageCode":{"type":"string"},"countryCode":{"type":"string"},"language":{"type":"string"},"country":{"type":"string"},"isoCode":{"type":"string"}}},"Persona":{"type":"object","properties":{"lowIndexPriority":{"type":"boolean"},"variantId":{"type":"string"},"keyTag":{"type":"string"},"tags":{"type":"string"},"description":{"type":"string"},"name":{"type":"string"},"inode":{"type":"string"},"identifier":{"type":"string"},"archived":{"type":"boolean"},"versionType":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"working":{"type":"boolean"},"versionId":{"type":"string"},"modUser":{"type":"string"},"title":{"type":"string"},"live":{"type":"boolean"},"locked":{"type":"boolean"},"permissionId":{"type":"string"},"permissionType":{"type":"string"},"owner":{"type":"string"},"languageId":{"type":"integer","format":"int64"},"sortOrder":{"type":"integer","format":"int64"},"folder":{"type":"string"},"htmlpage":{"type":"boolean"},"vanityUrl":{"type":"boolean"},"userAPI":{"$ref":"#/components/schemas/UserAPI"},"structureInode":{"type":"string"},"contentTypeId":{"type":"string"},"host":{"type":"string"},"systemHost":{"type":"boolean"},"keyValue":{"type":"boolean"},"categoryId":{"type":"string"},"titleImage":{"$ref":"#/components/schemas/Field"},"dotAsset":{"type":"boolean"},"persona":{"type":"boolean"},"form":{"type":"boolean"},"languageVariable":{"type":"boolean"},"indexPolicyDependencies":{"type":"string","enum":["DEFER","WAIT_FOR","FORCE"]},"fileAsset":{"type":"boolean"},"type":{"type":"string"},"new":{"type":"boolean"}}},"ResponseEntityEmptyPageView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/EmptyPageView"},"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"}}},"Sidebar":{"type":"object","properties":{"containers":{"type":"array","items":{"$ref":"#/components/schemas/ContainerUUID"}},"location":{"type":"string"},"width":{"type":"string"},"widthPercent":{"type":"integer","format":"int32"},"preview":{"type":"boolean"}}},"Template":{"type":"object","properties":{"getiDate":{"type":"string","format":"date-time"},"type":{"type":"string"},"owner":{"type":"string"},"inode":{"type":"string"},"identifier":{"type":"string"},"source":{"type":"string","enum":["UNKNOWN","DB","FILE"]},"title":{"type":"string"},"friendlyName":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"modUser":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"showOnMenu":{"type":"boolean"},"body":{"type":"string"},"selectedimage":{"type":"string"},"image":{"type":"string"},"drawed":{"type":"boolean"},"drawedBody":{"type":"string"},"countAddContainer":{"type":"integer","format":"int32"},"countContainers":{"type":"integer","format":"int32"},"headCode":{"type":"string"},"theme":{"type":"string"},"themeName":{"type":"string"},"header":{"type":"string"},"footer":{"type":"string"},"template":{"type":"boolean"},"isTemplate":{"type":"boolean","writeOnly":true},"anonymous":{"type":"boolean"},"archived":{"type":"boolean"},"versionType":{"type":"string"},"permissionId":{"type":"string"},"deleted":{"type":"boolean"},"working":{"type":"boolean"},"versionId":{"type":"string"},"live":{"type":"boolean"},"name":{"type":"string"},"locked":{"type":"boolean"},"permissionType":{"type":"string"},"idate":{"type":"string","format":"date-time"},"categoryId":{"type":"string"},"parents":{"type":"array","writeOnly":true,"items":{"type":"object"}},"new":{"type":"boolean"}}},"TemplateLayout":{"type":"object","properties":{"width":{"type":"string"},"title":{"type":"string"},"header":{"type":"boolean"},"footer":{"type":"boolean"},"body":{"$ref":"#/components/schemas/Body"},"sidebar":{"$ref":"#/components/schemas/Sidebar"},"version":{"type":"integer","format":"int32"},"bodyRows":{"type":"array","writeOnly":true,"items":{"$ref":"#/components/schemas/TemplateLayoutRow"}}},"description":"Required. The row/column/container structure of the layout: a 'body' of rows, each row holding columns, each column holding containers referenced by identifier + uuid, plus optional 'header', 'footer', and 'sidebar'."},"TemplateLayoutColumn":{"type":"object","properties":{"containers":{"type":"array","items":{"$ref":"#/components/schemas/ContainerUUID"}},"widthPercent":{"type":"integer","format":"int32"},"leftOffset":{"type":"integer","format":"int32"},"styleClass":{"type":"string"},"metadata":{"type":"object","additionalProperties":{"type":"object"}},"preview":{"type":"boolean"},"width":{"type":"integer","format":"int32"},"left":{"type":"integer","format":"int32"}}},"TemplateLayoutRow":{"type":"object","properties":{"columns":{"type":"array","items":{"$ref":"#/components/schemas/TemplateLayoutColumn"}},"styleClass":{"type":"string"},"metadata":{"type":"object","additionalProperties":{"type":"object"}}}},"UserAgent":{"type":"object","properties":{"operatingSystem":{"type":"string","enum":["WINDOWS","WINDOWS_10","WINDOWS_81","WINDOWS_8","WINDOWS_7","WINDOWS_VISTA","WINDOWS_2000","WINDOWS_XP","WINDOWS_10_MOBILE","WINDOWS_PHONE8_1","WINDOWS_PHONE8","WINDOWS_MOBILE7","WINDOWS_MOBILE","WINDOWS_98","XBOX_OS","ANDROID","ANDROID6","ANDROID6_TABLET","ANDROID5","ANDROID5_TABLET","ANDROID4","ANDROID4_TABLET","ANDROID4_WEARABLE","ANDROID3_TABLET","ANDROID2","ANDROID2_TABLET","ANDROID1","ANDROID_MOBILE","ANDROID_TABLET","CHROME_OS","WEBOS","PALM","MEEGO","IOS","iOS9_IPHONE","iOS8_4_IPHONE","iOS8_3_IPHONE","iOS8_2_IPHONE","iOS8_1_IPHONE","iOS8_IPHONE","iOS7_IPHONE","iOS6_IPHONE","iOS5_IPHONE","iOS4_IPHONE","MAC_OS_X_IPAD","iOS9_IPAD","iOS8_4_IPAD","iOS8_3_IPAD","iOS8_2_IPAD","iOS8_1_IPAD","iOS8_IPAD","iOS7_IPAD","iOS6_IPAD","MAC_OS_X_IPHONE","MAC_OS_X_IPOD","MAC_OS_X","MAC_OS","MAEMO","BADA","GOOGLE_TV","KINDLE","KINDLE3","KINDLE2","LINUX","UBUNTU","UBUNTU_TOUCH_MOBILE","SYMBIAN","SYMBIAN9","SYMBIAN8","SYMBIAN7","SYMBIAN6","SERIES40","SONY_ERICSSON","SUN_OS","PSP","WII","BLACKBERRY","BLACKBERRY7","BLACKBERRY6","BLACKBERRY_TABLET","ROKU","PROXY","UNKNOWN_MOBILE","UNKNOWN_TABLET","UNKNOWN"]},"browser":{"type":"string","enum":["OUTLOOK","OUTLOOK2007","OUTLOOK2013","OUTLOOK2010","IE","OUTLOOK_EXPRESS7","IEMOBILE11","IEMOBILE10","IEMOBILE9","IEMOBILE7","IEMOBILE6","IE_XBOX","IE11","IE10","IE9","IE8","IE7","IE6","IE5_5","IE5","EDGE","EDGE_MOBILE","EDGE_MOBILE12","EDGE13","EDGE12","CHROME","CHROME_MOBILE","CHROME49","CHROME48","CHROME47","CHROME46","CHROME45","CHROME44","CHROME43","CHROME42","CHROME41","CHROME40","CHROME39","CHROME38","CHROME37","CHROME36","CHROME35","CHROME34","CHROME33","CHROME32","CHROME31","CHROME30","CHROME29","CHROME28","CHROME27","CHROME26","CHROME25","CHROME24","CHROME23","CHROME22","CHROME21","CHROME20","CHROME19","CHROME18","CHROME17","CHROME16","CHROME15","CHROME14","CHROME13","CHROME12","CHROME11","CHROME10","CHROME9","CHROME8","OMNIWEB","FIREFOX","FIREFOX3MOBILE","FIREFOX_MOBILE","FIREFOX_MOBILE23","FIREFOX_MOBILE_IOS","FIREFOX45","FIREFOX44","FIREFOX43","FIREFOX42","FIREFOX41","FIREFOX40","FIREFOX39","FIREFOX38","FIREFOX37","FIREFOX36","FIREFOX35","FIREFOX34","FIREFOX33","FIREFOX32","FIREFOX31","FIREFOX30","FIREFOX29","FIREFOX28","FIREFOX27","FIREFOX26","FIREFOX25","FIREFOX24","FIREFOX23","FIREFOX22","FIREFOX21","FIREFOX20","FIREFOX19","FIREFOX18","FIREFOX17","FIREFOX16","FIREFOX15","FIREFOX14","FIREFOX13","FIREFOX12","FIREFOX11","FIREFOX10","FIREFOX9","FIREFOX8","FIREFOX7","FIREFOX6","FIREFOX5","FIREFOX4","FIREFOX3","FIREFOX2","FIREFOX1_5","SAFARI","BLACKBERRY10","MOBILE_SAFARI","SILK","SAFARI9","SAFARI8","SAFARI7","SAFARI6","SAFARI5","SAFARI4","COAST","COAST1","OPERA","OPERA_MOBILE","OPERA_MINI","OPERA34","OPERA33","OPERA32","OPERA31","OPERA30","OPERA29","OPERA28","OPERA27","OPERA26","OPERA25","OPERA24","OPERA23","OPERA20","OPERA19","OPERA18","OPERA17","OPERA16","OPERA15","OPERA12","OPERA11","OPERA10","OPERA9","KONQUEROR","DOLFIN2","APPLE_WEB_KIT","APPLE_ITUNES","APPLE_APPSTORE","ADOBE_AIR","LOTUS_NOTES","CAMINO","CAMINO2","FLOCK","THUNDERBIRD","THUNDERBIRD12","THUNDERBIRD11","THUNDERBIRD10","THUNDERBIRD8","THUNDERBIRD7","THUNDERBIRD6","THUNDERBIRD3","THUNDERBIRD2","VIVALDI","SEAMONKEY","BOT","BOT_MOBILE","MOZILLA","CFNETWORK","EUDORA","POCOMAIL","THEBAT","NETFRONT","EVOLUTION","LYNX","DOWNLOAD","UNKNOWN","APPLE_MAIL"]},"id":{"type":"integer","format":"int32"},"browserVersion":{"$ref":"#/components/schemas/Version"}}},"Version":{"type":"object","properties":{"version":{"type":"string"},"majorVersion":{"type":"string"},"minorVersion":{"type":"string"}}},"ViewAsPageStatus":{"type":"object","properties":{"persona":{"$ref":"#/components/schemas/IPersona"},"language":{"$ref":"#/components/schemas/Language"},"device":{"$ref":"#/components/schemas/Contentlet"},"pageMode":{"type":"string","enum":["LIVE","ADMIN_MODE","PREVIEW_MODE","WORKING","EDIT_MODE","NAVIGATE_EDIT_MODE"]},"personalized":{"type":"boolean"},"visitor":{"$ref":"#/components/schemas/Visitor"},"variantId":{"type":"string"}}},"Visitor":{"type":"object","properties":{"ipAddress":{"type":"object","properties":{"multicastAddress":{"type":"boolean"},"anyLocalAddress":{"type":"boolean"},"siteLocalAddress":{"type":"boolean"},"mcglobal":{"type":"boolean"},"mcnodeLocal":{"type":"boolean"},"mclinkLocal":{"type":"boolean"},"mcsiteLocal":{"type":"boolean"},"mcorgLocal":{"type":"boolean"},"canonicalHostName":{"type":"string"},"loopbackAddress":{"type":"boolean"},"hostName":{"type":"string"},"linkLocalAddress":{"type":"boolean"},"address":{"type":"string","format":"byte"},"hostAddress":{"type":"string"}}},"selectedLanguage":{"$ref":"#/components/schemas/Language"},"locale":{"type":"object","properties":{"script":{"type":"string"},"variant":{"type":"string"},"unicodeLocaleAttributes":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"unicodeLocaleKeys":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"displayLanguage":{"type":"string"},"displayScript":{"type":"string"},"displayCountry":{"type":"string"},"displayVariant":{"type":"string"},"displayName":{"type":"string"},"country":{"type":"string"},"extensionKeys":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"iso3Language":{"type":"string"},"iso3Country":{"type":"string"},"language":{"type":"string"}}},"userAgent":{"$ref":"#/components/schemas/UserAgent"},"dmid":{"type":"string","format":"uuid"},"newVisitor":{"type":"boolean"},"referrer":{"type":"string","format":"uri"},"lastRequestDate":{"type":"string","format":"date-time"},"persona":{"$ref":"#/components/schemas/Persona"},"geo":{"$ref":"#/components/schemas/Geolocation"},"personaCounts":{"type":"object","additionalProperties":{"type":"integer","format":"int64"}},"accruedTags":{"type":"array","items":{"$ref":"#/components/schemas/AccruedTag"}},"device":{"type":"string"},"weightedPersonas":{"type":"object","additionalProperties":{"type":"number","format":"float"}},"numberPagesViewed":{"type":"integer","format":"int32"},"personas":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"$ref":"#/components/schemas/AccruedTag"}}}},"PageView":{"type":"object","properties":{"site":{"$ref":"#/components/schemas/Host"},"template":{"$ref":"#/components/schemas/Template"},"containers":{"type":"array","items":{"$ref":"#/components/schemas/ContainerRaw"}},"layout":{"$ref":"#/components/schemas/TemplateLayout"},"viewAs":{"$ref":"#/components/schemas/ViewAsPageStatus"},"urlContent":{"$ref":"#/components/schemas/Contentlet"},"numberContents":{"type":"integer","format":"int32"},"pageUrlMapper":{"type":"string"},"live":{"type":"boolean"},"vanityUrl":{"$ref":"#/components/schemas/VanityURLView"},"runningExperiment":{"$ref":"#/components/schemas/Experiment"},"styleEditorSchemas":{"type":"array","items":{"$ref":"#/components/schemas/JsonNode"}},"containersMap":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ContainerRaw"}},"page":{"$ref":"#/components/schemas/HTMLPageAsset"}}},"ResponseEntityPageView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/PageView"},"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"}}},"VanityURLView":{"type":"object","properties":{"id":{"type":"string"},"siteId":{"type":"string"},"url":{"type":"string"},"forwardTo":{"type":"string"},"response":{"type":"integer","format":"int32"}}},"ResponseEntityTemplateView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/TemplateView"},"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"}}},"PageForm":{"required":["layout"],"type":"object","properties":{"themeId":{"type":"string","description":"Theme folder identifier (not a path) supplying the template's CSS/JS and VTL fragments. Resolve from a path via GET /api/v1/folder/sitename/{site}/uri/{uri}."},"title":{"type":"string","description":"Title for the resulting template. Omit to create an anonymous, page-scoped template (a generated name is assigned automatically)."},"siteId":{"type":"string","description":"Identifier of the site (host) the template belongs to. Sent as the JSON property 'hostId'. Defaults to the site resolved from the current HTTP request context when omitted."},"layout":{"$ref":"#/components/schemas/TemplateLayout"},"anonymousLayout":{"type":"boolean"}},"description":"Layout payload used to create or update the anonymous Template backing a page. Wrap this object under a top-level 'PageForm' property in the request body. 'layout' is required; omitting 'title' creates an anonymous (page-scoped) template."},"ResponseEntityContentletMapsView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"uniqueItems":true,"type":"array","items":{"type":"object","additionalProperties":{"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"}}},"ContentView":{"required":["containerId","contentletId","uuid"],"type":"object","properties":{"containerId":{"type":"string","description":"Container identifier","example":"//demo.dotcms.com/application/containers/default/"},"uuid":{"type":"string","description":"Container unique identifier (UUID)"},"contentletId":{"type":"string","description":"Contentlet identifier"},"dotStyleProperties":{"type":"object","properties":{"empty":{"type":"boolean"}},"additionalProperties":{"type":"object","description":"Styles defined for the Contentlet","example":{"color":"#FF0000","margin":"10px"}},"description":"Styles defined for the Contentlet","example":{"color":"#FF0000","margin":"10px"}}}},"ResponseEntityContentView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/ContentView"}},"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"}}},"ContentWithStylesForm":{"required":["identifier","uuid"],"type":"object","properties":{"identifier":{"type":"string","description":"Container identifier","example":"//demo.dotcms.com/application/containers/default/"},"uuid":{"type":"string","description":"Container unique identifier (UUID)","example":"1"},"personaTag":{"type":"string","description":"Raw Persona key tag (e.g. the value of viewAs.persona.keyTag) to personalize this style update for. Do not include the 'dot:persona:' prefix -- the backend adds it automatically. Omit for the default persona.","example":"returning_visitor"}},"description":"Container with contentlet style properties"},"PageScanCheckForm":{"type":"object","properties":{"url":{"type":"string"}}},"ResponseEntityPersonalizationView":{"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"}}},"PersonalizationPersonaPageForm":{"required":["pageId","personaTag"],"type":"object","properties":{"pageId":{"type":"string"},"personaTag":{"type":"string"}}},"MapStringRestPersonaView":{"type":"object","properties":{"empty":{"type":"boolean"}},"additionalProperties":{"$ref":"#/components/schemas/RestPersona"}},"RestPersona":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}}},"CustomPortletForm":{"type":"object","properties":{"portletId":{"type":"string"},"portletName":{"type":"string"},"baseTypes":{"type":"string"},"contentTypes":{"type":"string"},"dataViewMode":{"type":"string"}}},"AddAssetsToBundleView":{"required":["bundleId","created","errors","total"],"type":"object","properties":{"bundleId":{"type":"string","description":"Bundle identifier (new or existing)","example":"550e8400-e29b-41d4-a716-446655440000"},"bundleName":{"type":"string","description":"Name of the bundle","example":"My Content Bundle"},"created":{"type":"boolean","description":"Whether a new bundle was created by this call","example":false},"total":{"type":"integer","description":"Total non-duplicate assets processed (subtract errors count for successful adds). Assets already in the bundle are skipped and excluded from this count.","format":"int32","example":5},"errors":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"type":"string"},"last":{"type":"string"}},"description":"Per-asset error messages as human-readable strings. Empty list = all assets added successfully","items":{"type":"string","description":"Per-asset error messages as human-readable strings. Empty list = all assets added successfully"}}}},"ResponseEntityAddAssetsToBundleView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/AddAssetsToBundleView"},"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"}}},"AddAssetsToBundleForm":{"required":["assetIds"],"type":"object","properties":{"bundleId":{"type":"string","description":"Optional bundle ID. If provided and found, assets are added to this bundle. If not found, falls through to bundleName lookup, then auto-creation — does NOT return 404","example":"550e8400-e29b-41d4-a716-446655440000"},"bundleName":{"type":"string","description":"Optional bundle name. Used as fallback when bundleId is not provided or not found. Searches unsent bundles by name (case-insensitive). If no match, a new bundle is created with this name","example":"My Content Bundle"},"assetIds":{"type":"array","description":"List of asset identifiers to add to the bundle","example":["asset-123","asset-456"],"items":{"type":"string","description":"List of asset identifiers to add to the bundle","example":"[\"asset-123\",\"asset-456\"]"}}},"description":"Form for adding assets to a bundle"},"RemoveAssetResultView":{"required":["assetId","message","success"],"type":"object","properties":{"assetId":{"type":"string","description":"The asset identifier that was processed","example":"550e8400-e29b-41d4-a716-446655440000"},"success":{"type":"boolean","description":"Whether the asset was successfully removed from the bundle","example":true},"message":{"type":"string","description":"Human-readable result message","example":"Asset removed from bundle"}}},"ResponseEntityRemoveAssetsFromBundleView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/RemoveAssetResultView"}},"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"}}},"RemoveAssetsFromBundleForm":{"required":["assetIds"],"type":"object","properties":{"assetIds":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"type":"string"},"last":{"type":"string"}},"description":"List of asset identifiers to remove from the bundle","example":["asset-123","asset-456"],"items":{"type":"string","description":"List of asset identifiers to remove from the bundle","example":"[\"asset-123\",\"asset-456\"]"}}}},"EndpointDetailView":{"required":["address","id","port","protocol","serverName"],"type":"object","properties":{"id":{"type":"string","description":"Unique endpoint identifier","example":"endpoint-1"},"serverName":{"type":"string","description":"Human-readable server name","example":"Staging Server 1"},"address":{"type":"string","description":"Server address (hostname or IP)","example":"staging1.example.com"},"port":{"pattern":"^(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[1-9])$","type":"string","description":"Server port number as a string (valid range: 1–65535). May be empty if not configured.","example":"443"},"protocol":{"type":"string","description":"Communication protocol","example":"https"},"status":{"type":"string","description":"Publishing status for this endpoint (e.g., SUCCESS, FAILED_TO_SENT)","example":"SUCCESS","enum":["BUNDLE_REQUESTED","BUNDLING","SENDING_TO_ENDPOINTS","FAILED_TO_SEND_TO_ALL_GROUPS","FAILED_TO_SEND_TO_SOME_GROUPS","FAILED_TO_BUNDLE","FAILED_TO_SENT","FAILED_TO_PUBLISH","SUCCESS","BUNDLE_SENT_SUCCESSFULLY","RECEIVED_BUNDLE","PUBLISHING_BUNDLE","WAITING_FOR_PUBLISHING","BUNDLE_SAVED_SUCCESSFULLY","INVALID_TOKEN","LICENSE_REQUIRED","SUCCESS_WITH_WARNINGS","FAILED_INTEGRITY_CHECK","SCHEDULED"]},"statusMessage":{"type":"string","description":"Status message with additional details","example":"Everything ok"},"stackTrace":{"type":"string","description":"Stack trace for failed endpoints (only included for failures)"}}},"EnvironmentDetailView":{"required":["endpoints","id","name"],"type":"object","properties":{"id":{"type":"string","description":"Unique environment identifier","example":"env-staging-123"},"name":{"type":"string","description":"Human-readable environment name","example":"Staging Environment"},"endpoints":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/EndpointDetailView"},"last":{"$ref":"#/components/schemas/EndpointDetailView"}},"description":"Endpoints within this environment with their status","items":{"$ref":"#/components/schemas/EndpointDetailView"}}}},"ImmutableListEndpointDetailView":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/EndpointDetailView"},"last":{"$ref":"#/components/schemas/EndpointDetailView"}},"description":"Endpoints within this environment with their status","items":{"$ref":"#/components/schemas/EndpointDetailView"}},"ImmutableListEnvironmentDetailView":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/EnvironmentDetailView"},"last":{"$ref":"#/components/schemas/EnvironmentDetailView"}},"description":"Environments with their endpoints and status details","items":{"$ref":"#/components/schemas/EnvironmentDetailView"}},"PublishingJobDetailView":{"required":["assetCount","bundleId","environments","numTries","status","timestamps"],"type":"object","properties":{"bundleId":{"type":"string","description":"Unique bundle identifier","example":"01KJWNJM2C67DM56GHBJ4S7B89"},"bundleName":{"type":"string","description":"Human-readable bundle name","example":"bundle-testName"},"status":{"type":"string","description":"Current publishing status","example":"SUCCESS","enum":["BUNDLE_REQUESTED","BUNDLING","SENDING_TO_ENDPOINTS","FAILED_TO_SEND_TO_ALL_GROUPS","FAILED_TO_SEND_TO_SOME_GROUPS","FAILED_TO_BUNDLE","FAILED_TO_SENT","FAILED_TO_PUBLISH","SUCCESS","BUNDLE_SENT_SUCCESSFULLY","RECEIVED_BUNDLE","PUBLISHING_BUNDLE","WAITING_FOR_PUBLISHING","BUNDLE_SAVED_SUCCESSFULLY","INVALID_TOKEN","LICENSE_REQUIRED","SUCCESS_WITH_WARNINGS","FAILED_INTEGRITY_CHECK","SCHEDULED"]},"filterName":{"type":"string","description":"Publishing filter name used","example":"Live to Staging"},"filterKey":{"type":"string","description":"Publishing filter key (pass to POST /push/{bundleId} filterKey to reproduce this push)","example":"ForcePush.yml"},"assetCount":{"type":"integer","description":"Total number of assets in the bundle","format":"int32","example":47},"environments":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/EnvironmentDetailView"},"last":{"$ref":"#/components/schemas/EnvironmentDetailView"}},"description":"Environments with their endpoints and status details","items":{"$ref":"#/components/schemas/EnvironmentDetailView"}},"timestamps":{"$ref":"#/components/schemas/TimestampsView"},"numTries":{"type":"integer","description":"Number of publish attempts","format":"int32","example":1},"scheduledPublishDate":{"type":"string","description":"Scheduled execution time (future publishDate) for SCHEDULED bundles; null for all other statuses","format":"date-time","example":"2026-03-15T14:30:00Z"}}},"ResponseEntityPublishingJobDetailView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/PublishingJobDetailView"},"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"}}},"TimestampsView":{"required":["createDate"],"type":"object","properties":{"bundleStart":{"type":"string","description":"When bundle creation started (ISO 8601 format)","format":"date-time","example":"2026-01-15T10:30:00Z"},"bundleEnd":{"type":"string","description":"When bundle creation completed (ISO 8601 format)","format":"date-time","example":"2026-01-15T10:31:22Z"},"publishStart":{"type":"string","description":"When publishing to endpoints started (ISO 8601 format)","format":"date-time","example":"2026-01-15T10:30:05Z"},"publishEnd":{"type":"string","description":"When publishing to endpoints completed (ISO 8601 format)","format":"date-time","example":"2026-01-15T10:31:18Z"},"createDate":{"type":"string","description":"When the audit record was created (ISO 8601 format)","format":"date-time","example":"2026-01-15T10:29:55Z"},"statusUpdated":{"type":"string","description":"When the status was last updated (ISO 8601 format)","format":"date-time","example":"2026-01-15T10:31:22Z"}},"description":"Publishing job timestamps"},"AssetPreviewView":{"required":["id","title","type"],"type":"object","properties":{"id":{"type":"string","description":"Asset identifier","example":"abc123-content-id"},"title":{"type":"string","description":"Human-readable asset title","example":"Homepage Content Update"},"type":{"type":"string","description":"Asset type (e.g., contentlet, template, container, folder, host)","example":"contentlet"}}},"ImmutableListAssetPreviewView":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/AssetPreviewView"},"last":{"$ref":"#/components/schemas/AssetPreviewView"}},"description":"Preview of first 3 assets in the bundle","items":{"$ref":"#/components/schemas/AssetPreviewView"}},"PublishingJobView":{"required":["assetCount","assetPreview","bundleId","createDate","environmentCount","numTries","status"],"type":"object","properties":{"bundleId":{"type":"string","description":"Unique bundle identifier","example":"01KJWNJM2C67DM56GHBJ4S7B89"},"bundleName":{"type":"string","description":"Human-readable bundle name","example":"bundle-testName"},"status":{"type":"string","description":"Current publishing status","example":"SUCCESS","enum":["BUNDLE_REQUESTED","BUNDLING","SENDING_TO_ENDPOINTS","FAILED_TO_SEND_TO_ALL_GROUPS","FAILED_TO_SEND_TO_SOME_GROUPS","FAILED_TO_BUNDLE","FAILED_TO_SENT","FAILED_TO_PUBLISH","SUCCESS","BUNDLE_SENT_SUCCESSFULLY","RECEIVED_BUNDLE","PUBLISHING_BUNDLE","WAITING_FOR_PUBLISHING","BUNDLE_SAVED_SUCCESSFULLY","INVALID_TOKEN","LICENSE_REQUIRED","SUCCESS_WITH_WARNINGS","FAILED_INTEGRITY_CHECK","SCHEDULED"]},"filterName":{"type":"string","description":"Publishing filter name used","example":"Live to Staging"},"filterKey":{"type":"string","description":"Publishing filter key identifier (use this for API calls)","example":"ForcePush.yml"},"assetCount":{"type":"integer","description":"Total number of assets in the bundle","format":"int32","example":47},"assetPreview":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/AssetPreviewView"},"last":{"$ref":"#/components/schemas/AssetPreviewView"}},"description":"Preview of first 3 assets in the bundle","items":{"$ref":"#/components/schemas/AssetPreviewView"}},"environmentCount":{"type":"integer","description":"Number of target environments","format":"int32","example":3},"createDate":{"type":"string","description":"Bundle creation timestamp in ISO 8601 format","format":"date-time","example":"2026-01-15T10:29:55Z"},"statusUpdated":{"type":"string","description":"Last status update timestamp in ISO 8601 format","format":"date-time","example":"2026-01-15T10:31:22Z"},"numTries":{"type":"integer","description":"Number of publish attempts","format":"int32","example":1},"scheduledPublishDate":{"type":"string","description":"Scheduled execution time (future publishDate) for SCHEDULED bundles; null for all other statuses","format":"date-time","example":"2026-03-15T14:30:00Z"}}},"ResponseEntityPublishingJobsView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/PublishingJobView"}},"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"}}},"PurgeResultView":{"required":["message","statusesRequested"],"type":"object","properties":{"message":{"type":"string","description":"Confirmation message indicating the purge operation has started","example":"Purge operation started. Results will be notified when complete."},"statusesRequested":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"type":"string"},"last":{"type":"string"}},"description":"List of status names being purged","example":["SUCCESS","FAILED_TO_PUBLISH"],"items":{"type":"string","description":"List of status names being purged","example":"[\"SUCCESS\",\"FAILED_TO_PUBLISH\"]"}}}},"ResponseEntityPurgeView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/PurgeResultView"},"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"}}},"PushBundleResultView":{"required":["bundleId","environments","filterKey","operation"],"type":"object","properties":{"bundleId":{"type":"string","description":"Bundle identifier","example":"01KJWNJM2C67DM56GHBJ4S7B89"},"operation":{"type":"string","description":"Operation type performed","example":"publish"},"publishDate":{"type":"string","description":"Scheduled publish date in ISO 8601 format","example":"2025-03-15T14:30:00-05:00"},"expireDate":{"type":"string","description":"Scheduled expire date in ISO 8601 format","example":"2025-04-15T14:30:00-05:00"},"environments":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"type":"string"},"last":{"type":"string"}},"description":"List of environment IDs the bundle was pushed to","items":{"type":"string","description":"List of environment IDs the bundle was pushed to"}},"filterKey":{"type":"string","description":"Filter key used for publishing","example":"ForcePush.yml"}}},"ResponseEntityPushBundleResultView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/PushBundleResultView"},"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"}}},"PushBundleForm":{"required":["environments","filterKey","operation"],"type":"object","properties":{"operation":{"type":"string","description":"Operation type: publish, expire, or publishexpire. Case-insensitive (PUBLISH, Publish, publish all accepted).","example":"publish","enum":["publish","expire","publishexpire"]},"publishDate":{"type":"string","description":"Scheduled publish date in ISO 8601 format with timezone offset (required for publish/publishexpire). Dates without timezone offset are rejected.","format":"date-time","example":"2025-03-15T14:30:00-05:00"},"expireDate":{"type":"string","description":"Scheduled expire date in ISO 8601 format with timezone offset (required for expire/publishexpire). Dates without timezone offset are rejected.","format":"date-time","example":"2025-04-15T14:30:00-05:00"},"environments":{"type":"array","description":"List of environment IDs to push the bundle to","example":["env-123","env-456"],"items":{"type":"string","description":"List of environment IDs to push the bundle to","example":"[\"env-123\",\"env-456\"]"}},"filterKey":{"type":"string","description":"Push publishing filter key","example":"ForcePush.yml"}},"description":"Form for pushing a bundle to environments"},"ResponseEntityRetryBundlesView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/RetryBundleResultView"}},"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"}}},"RetryBundleResultView":{"required":["bundleId","deliveryStrategy","message","success"],"type":"object","properties":{"bundleId":{"type":"string","description":"Bundle identifier that was processed","example":"01HQXYZ123456789ABCDEFGHIJ"},"success":{"type":"boolean","description":"Whether the retry operation was successful","example":true},"message":{"type":"string","description":"Human-readable message describing the result","example":"Bundle successfully re-queued for publishing"},"forcePush":{"type":"boolean","description":"Whether force push was applied to this bundle","example":true},"operation":{"type":"string","description":"Publishing operation type","example":"PUBLISH","enum":["PUBLISH","UNPUBLISH"]},"deliveryStrategy":{"type":"string","description":"Delivery strategy used: ALL_ENDPOINTS or FAILED_ENDPOINTS","example":"FAILED_ENDPOINTS","enum":["ALL_ENDPOINTS","FAILED_ENDPOINTS"]},"assetCount":{"type":"integer","description":"Number of assets in the bundle","format":"int32","example":47}}},"RetryBundlesForm":{"required":["bundleIds"],"type":"object","properties":{"bundleIds":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"type":"string"},"last":{"type":"string"}},"description":"List of bundle identifiers to retry","example":["01KJWNJM2C67DM56GHBJ4S7B89","01KJWNJM2C67DM56GHBJ4S7B90"],"items":{"type":"string","description":"List of bundle identifiers to retry","example":"[\"01KJWNJM2C67DM56GHBJ4S7B89\",\"01KJWNJM2C67DM56GHBJ4S7B90\"]"}},"forcePush":{"type":"boolean","description":"Force push to override existing content at endpoints. Automatically true for SUCCESS/SUCCESS_WITH_WARNINGS bundles.","example":false},"deliveryStrategy":{"type":"string","description":"Which endpoints to retry: ALL_ENDPOINTS sends to all, FAILED_ENDPOINTS sends only to previously failed endpoints. Case-sensitive: must be uppercase.","example":"FAILED_ENDPOINTS","enum":["ALL_ENDPOINTS","FAILED_ENDPOINTS"],"default":"ALL_ENDPOINTS"}}},"FilterDescriptorForm":{"type":"object","properties":{"key":{"type":"string"},"title":{"type":"string"},"sort":{"type":"string"},"defaultFilter":{"type":"boolean"},"roles":{"type":"string"},"filters":{"type":"object","additionalProperties":{"type":"object"}}}},"ResponseEntitySiteView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"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"}}},"CopySiteForm":{"type":"object","properties":{"copyFromSiteId":{"type":"string"},"copyAll":{"type":"boolean"},"copyTemplatesContainers":{"type":"boolean"},"copyContentOnPages":{"type":"boolean"},"copyFolders":{"type":"boolean"},"copyContentOnSite":{"type":"boolean"},"copyLinks":{"type":"boolean"},"copySiteVariables":{"type":"boolean"},"copyContentTypes":{"type":"boolean"},"site":{"$ref":"#/components/schemas/SiteForm"}}},"SimpleSiteVariableForm":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"key":{"type":"string"},"value":{"type":"string"}},"description":"Optional list of site variables (key/value pairs) to create alongside the site."},"SiteForm":{"required":["siteName"],"type":"object","properties":{"aliases":{"type":"string","description":"Comma- or newline-separated list of host aliases (alternate hostnames) for this site."},"siteName":{"type":"string","description":"The hostname of the site, e.g. 'www.example.com'. This is the site's primary name."},"tagStorage":{"type":"string","description":"Identifier of the site whose tag storage this site shares. Defaults to this site itself when omitted."},"siteThumbnail":{"type":"string","description":"Identifier of the image asset used as the site thumbnail."},"runDashboard":{"type":"boolean","description":"Whether the analytics dashboard runs for this site."},"keywords":{"type":"string","description":"Default meta keywords applied to pages on this site."},"description":{"type":"string","description":"Default meta description applied to pages on this site."},"googleMap":{"type":"string","description":"Google Maps API key for this site."},"googleAnalytics":{"type":"string","description":"Google Analytics tracking ID for this site."},"addThis":{"type":"string","description":"AddThis sharing-widget account ID for this site."},"proxyUrlForEditMode":{"type":"string","description":"Proxy URL used to render the site in edit mode."},"embeddedDashboard":{"type":"string","description":"Embedded dashboard markup for this site."},"languageId":{"type":"integer","description":"Default language ID for this site. Defaults to the system default language when 0/omitted.","format":"int64"},"identifier":{"type":"string","description":"Identifier of the site. Ignored on creation; server-generated."},"inode":{"type":"string","description":"Inode (version identifier) of the site. Ignored on creation; server-generated."},"default":{"type":"boolean"},"forceExecution":{"type":"boolean","description":"Whether to force creation even when validation would otherwise warn (e.g. a duplicate alias)."},"variables":{"type":"array","description":"Optional list of site variables (key/value pairs) to create alongside the site.","items":{"$ref":"#/components/schemas/SimpleSiteVariableForm"}}},"description":"Form used to create a Site (Host) in dotCMS. 'siteName' (the hostname) is the only required field; the new site is created unpublished and must be published separately."},"ResponseEntityHostView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/Host"},"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"}}},"SearchSiteByNameForm":{"type":"object","properties":{"siteName":{"type":"string"}}},"ResponseEntitySiteSetupProgressView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"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"}}},"HostVariable":{"type":"object","properties":{"id":{"type":"string"},"hostId":{"type":"string"},"name":{"type":"string"},"key":{"type":"string"},"value":{"type":"string"},"lastModifierId":{"type":"string"},"lastModDate":{"type":"string","format":"date-time"}}},"ResponseHostVariableEntityView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/HostVariable"},"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"}}},"SiteVariableForm":{"type":"object","properties":{"id":{"type":"string"},"siteId":{"type":"string"},"name":{"type":"string"},"key":{"type":"string"},"value":{"type":"string"}}},"ResponseEntitySiteSwitchView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"object","additionalProperties":{"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"}}},"RestConditionGroup":{"required":["operator"],"type":"object","properties":{"operator":{"type":"string"},"priority":{"type":"integer","format":"int32"},"conditions":{"type":"object","additionalProperties":{"type":"boolean"}}}},"RestRule":{"type":"object","properties":{"name":{"type":"string"},"fireOn":{"type":"string"},"shortCircuit":{"type":"boolean"},"priority":{"type":"integer","format":"int32"},"enabled":{"type":"boolean"},"conditionGroups":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/RestConditionGroup"}},"ruleActions":{"type":"object","additionalProperties":{"type":"boolean"}}}},"ParameterModel":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"key":{"type":"string"},"value":{"type":"string"},"priority":{"type":"integer","format":"int32"}}},"RestRuleAction":{"required":["owningRule"],"type":"object","properties":{"owningRule":{"type":"string"},"priority":{"type":"integer","format":"int32"},"actionlet":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ParameterModel"}}}},"RestCondition":{"required":["conditionlet","operator","owningGroup"],"type":"object","properties":{"owningGroup":{"type":"string"},"conditionlet":{"type":"string"},"values":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/RestConditionValue"}},"operator":{"type":"string"},"priority":{"type":"integer","format":"int32"}}},"RestConditionValue":{"required":["key"],"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"},"priority":{"type":"integer","format":"int32"}}},"CompanyEmailForm":{"type":"object","properties":{"senderAndEmail":{"type":"string"}}},"ResponseEntityViewMapStringString":{"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"}}},"KeyValueForm":{"required":["key","value"],"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}},"UpgradeTaskForm":{"required":["upgradeTaskClass"],"type":"object","properties":{"upgradeTaskClass":{"type":"string"}}},"CacheProviderStatsView":{"required":["columns","providerName","stats"],"type":"object","properties":{"providerName":{"type":"string","description":"Cache provider display name","example":"Guava Memory Cache"},"columns":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"type":"string"},"last":{"type":"string"}},"description":"Ordered list of stat column names reported by this provider","example":["Region","Configured Size","Memory Used","Is Default","Hit Count","Miss Count"],"items":{"type":"string","description":"Ordered list of stat column names reported by this provider","example":"[\"Region\",\"Configured Size\",\"Memory Used\",\"Is Default\",\"Hit Count\",\"Miss Count\"]"}},"stats":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"type":"object","additionalProperties":{"type":"string"}},"last":{"type":"object","additionalProperties":{"type":"string"}}},"description":"Per-region statistics, each row keyed by column name","items":{"type":"object","additionalProperties":{"type":"string","description":"Per-region statistics, each row keyed by column name"},"description":"Per-region statistics, each row keyed by column name"}}}},"CacheStatsView":{"required":["clusterId","memory","providers","serverId","serverName"],"type":"object","properties":{"clusterId":{"type":"string","description":"Cluster identifier (shared across all nodes in the cluster)","example":"b1c2d3e4-f5a6-7890-abcd-ef1234567890"},"serverId":{"type":"string","description":"Server identifier (unique per node — identifies which node reported these stats)","example":"a9f3c1d2-e456-7890-bcde-f12345678901"},"serverName":{"type":"string","description":"Server hostname","example":"dotcms-node-1.example.com"},"memory":{"$ref":"#/components/schemas/JvmMemoryView"},"providers":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/CacheProviderStatsView"},"last":{"$ref":"#/components/schemas/CacheProviderStatsView"}},"description":"Per-provider cache statistics","items":{"$ref":"#/components/schemas/CacheProviderStatsView"}}}},"ImmutableListCacheProviderStatsView":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/CacheProviderStatsView"},"last":{"$ref":"#/components/schemas/CacheProviderStatsView"}},"description":"Per-provider cache statistics","items":{"$ref":"#/components/schemas/CacheProviderStatsView"}},"ImmutableListMapStringString":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"type":"object","additionalProperties":{"type":"string"}},"last":{"type":"object","additionalProperties":{"type":"string"}}},"description":"Per-region statistics, each row keyed by column name","items":{"type":"object","additionalProperties":{"type":"string","description":"Per-region statistics, each row keyed by column name"},"description":"Per-region statistics, each row keyed by column name"}},"JvmMemoryView":{"required":["allocatedMemory","freeMemory","maxMemory","usedMemory"],"type":"object","properties":{"maxMemory":{"type":"integer","description":"Maximum memory the JVM will attempt to use (Xmx)","format":"int64","example":8589934592},"allocatedMemory":{"type":"integer","description":"Total memory currently allocated by the JVM","format":"int64","example":4294967296},"usedMemory":{"type":"integer","description":"Memory currently in use (allocated minus free)","format":"int64","example":2147483648},"freeMemory":{"type":"integer","description":"Available memory (max minus used)","format":"int64","example":6442450944}},"description":"JVM memory statistics"},"ResponseEntityCacheStatsView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/CacheStatsView"},"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"}}},"ResponseEntityListStringView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"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"}}},"ChangeLoggerForm":{"type":"object","properties":{"name":{"type":"string"},"level":{"type":"string"}}},"PermissionView":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"inode":{"type":"string"},"roleId":{"type":"string"},"permission":{"type":"string","enum":["READ","USE","EDIT","WRITE","PUBLISH","EDIT_PERMISSIONS","CAN_ADD_CHILDREN"]},"type":{"type":"string"},"bitPermission":{"type":"boolean"}}},"ResponseEntityPermissionView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/PermissionView"}},"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"}}},"ImmutableSetScope":{"uniqueItems":true,"type":"array","properties":{"empty":{"type":"boolean"}},"description":"Available permission scopes (asset types) that support permissions","example":["INDIVIDUAL","HOST","FOLDER","CONTENT","TEMPLATE","PAGE","CONTAINER","CONTENT_TYPE","CATEGORY"],"items":{"type":"string","description":"Available permission scopes (asset types) that support permissions","example":"[\"INDIVIDUAL\",\"HOST\",\"FOLDER\",\"CONTENT\",\"TEMPLATE\",\"PAGE\",\"CONTAINER\",\"CONTENT_TYPE\",\"CATEGORY\"]","enum":["INDIVIDUAL","HOST","FOLDER","CONTAINER","TEMPLATE","TEMPLATE_LAYOUT","LINK","CONTENT","PAGE","CONTENT_TYPE","STRUCTURE","CATEGORY","RULE"]}},"ImmutableSetType":{"uniqueItems":true,"type":"array","properties":{"empty":{"type":"boolean"}},"description":"Individual permission levels assigned directly to this role on the asset","example":["READ","WRITE","PUBLISH"],"items":{"type":"string","description":"Individual permission levels assigned directly to this role on the asset","example":"[\"READ\",\"WRITE\",\"PUBLISH\"]","enum":["READ","USE","EDIT","WRITE","PUBLISH","EDIT_PERMISSIONS","CAN_ADD_CHILDREN"]}},"PermissionMetadataView":{"required":["levels","scopes"],"type":"object","properties":{"levels":{"uniqueItems":true,"type":"array","properties":{"empty":{"type":"boolean"}},"description":"Available permission levels that can be assigned to users and roles","example":["READ","WRITE","PUBLISH","EDIT_PERMISSIONS","CAN_ADD_CHILDREN"],"items":{"type":"string","description":"Available permission levels that can be assigned to users and roles","example":"[\"READ\",\"WRITE\",\"PUBLISH\",\"EDIT_PERMISSIONS\",\"CAN_ADD_CHILDREN\"]","enum":["READ","USE","EDIT","WRITE","PUBLISH","EDIT_PERMISSIONS","CAN_ADD_CHILDREN"]}},"scopes":{"uniqueItems":true,"type":"array","properties":{"empty":{"type":"boolean"}},"description":"Available permission scopes (asset types) that support permissions","example":["INDIVIDUAL","HOST","FOLDER","CONTENT","TEMPLATE","PAGE","CONTAINER","CONTENT_TYPE","CATEGORY"],"items":{"type":"string","description":"Available permission scopes (asset types) that support permissions","example":"[\"INDIVIDUAL\",\"HOST\",\"FOLDER\",\"CONTENT\",\"TEMPLATE\",\"PAGE\",\"CONTAINER\",\"CONTENT_TYPE\",\"CATEGORY\"]","enum":["INDIVIDUAL","HOST","FOLDER","CONTAINER","TEMPLATE","TEMPLATE_LAYOUT","LINK","CONTENT","PAGE","CONTENT_TYPE","STRUCTURE","CATEGORY","RULE"]}}}},"ResponseEntityPermissionMetadataView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/PermissionMetadataView"},"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"}}},"ResponseEntityPermissionsByTypeView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"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"}}},"ImmutableListUserPermissionAssetView":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/UserPermissionAssetView"},"last":{"$ref":"#/components/schemas/UserPermissionAssetView"}},"description":"List of permission assets (hosts and folders) with their permission assignments","items":{"$ref":"#/components/schemas/UserPermissionAssetView"}},"ImmutableMapStringSetString":{"type":"object","properties":{"empty":{"type":"boolean"}},"additionalProperties":{"uniqueItems":true,"type":"array","description":"Map of permission types (INDIVIDUAL, HOST, FOLDER, etc.) to sets of permission level names (READ, WRITE, PUBLISH, EDIT_PERMISSIONS, CAN_ADD_CHILDREN)","example":{"INDIVIDUAL":["READ","WRITE","PUBLISH"],"HOST":["READ"]},"items":{"type":"string","description":"Map of permission types (INDIVIDUAL, HOST, FOLDER, etc.) to sets of permission level names (READ, WRITE, PUBLISH, EDIT_PERMISSIONS, CAN_ADD_CHILDREN)","example":"{\"INDIVIDUAL\":[\"READ\",\"WRITE\",\"PUBLISH\"],\"HOST\":[\"READ\"]}"}},"description":"Map of permission types (INDIVIDUAL, HOST, FOLDER, etc.) to sets of permission level names (READ, WRITE, PUBLISH, EDIT_PERMISSIONS, CAN_ADD_CHILDREN)","example":{"INDIVIDUAL":["READ","WRITE","PUBLISH"],"HOST":["READ"]}},"ResponseEntityRolePermissionsView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/RolePermissionsView"},"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"}}},"RolePermissionsView":{"required":["assets","roleId","roleName"],"type":"object","properties":{"roleId":{"type":"string","description":"Role identifier","example":"abc-123-def-456"},"roleName":{"type":"string","description":"Role display name","example":"CMS Administrator"},"assets":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/UserPermissionAssetView"},"last":{"$ref":"#/components/schemas/UserPermissionAssetView"}},"description":"List of permission assets (hosts and folders) with their permission assignments","items":{"$ref":"#/components/schemas/UserPermissionAssetView"}}}},"UserPermissionAssetView":{"required":["canEditPermissions","hostId","id","inheritsPermissions","name","path","permissions","type"],"type":"object","properties":{"id":{"type":"string","description":"Asset identifier (host identifier for HOST type, folder inode for FOLDER type)","example":"abc-123-def-456"},"type":{"type":"string","description":"Asset type","example":"HOST","enum":["HOST","FOLDER"]},"name":{"type":"string","description":"Asset name (hostname for HOST, folder name for FOLDER)","example":"demo.dotcms.com"},"path":{"type":"string","description":"Full path to the asset","example":"/demo.dotcms.com/application"},"hostId":{"type":"string","description":"Host identifier (same as id for HOST type, parent host for FOLDER type)","example":"abc-123-def-456"},"canEditPermissions":{"type":"boolean","description":"Whether the requesting user can edit permissions on this asset","example":true},"inheritsPermissions":{"type":"boolean","description":"Whether this asset inherits permissions from its parent","example":false},"permissions":{"type":"object","properties":{"empty":{"type":"boolean"}},"additionalProperties":{"uniqueItems":true,"type":"array","description":"Map of permission types (INDIVIDUAL, HOST, FOLDER, etc.) to sets of permission level names (READ, WRITE, PUBLISH, EDIT_PERMISSIONS, CAN_ADD_CHILDREN)","example":{"INDIVIDUAL":["READ","WRITE","PUBLISH"],"HOST":["READ"]},"items":{"type":"string","description":"Map of permission types (INDIVIDUAL, HOST, FOLDER, etc.) to sets of permission level names (READ, WRITE, PUBLISH, EDIT_PERMISSIONS, CAN_ADD_CHILDREN)","example":"{\"INDIVIDUAL\":[\"READ\",\"WRITE\",\"PUBLISH\"],\"HOST\":[\"READ\"]}"}},"description":"Map of permission types (INDIVIDUAL, HOST, FOLDER, etc.) to sets of permission level names (READ, WRITE, PUBLISH, EDIT_PERMISSIONS, CAN_ADD_CHILDREN)","example":{"INDIVIDUAL":["READ","WRITE","PUBLISH"],"HOST":["READ"]}}},"description":"The updated asset with new permission assignments"},"ResetAssetPermissionsView":{"required":["assetId","message","previousPermissionCount"],"type":"object","properties":{"message":{"type":"string","description":"Success message describing the operation result","example":"Individual permissions removed. Asset now inherits from parent."},"assetId":{"type":"string","description":"The identifier of the asset whose permissions were reset","example":"abc123-def456"},"previousPermissionCount":{"type":"integer","description":"Number of individual permissions that were removed during the reset operation","format":"int32","example":5}}},"ResponseEntityResetPermissionsView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/ResetAssetPermissionsView"},"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"}}},"AssetPermissionsView":{"required":["assetId","assetType","canAddChildren","canEdit","canEditPermissions","inheritanceMode","isParentPermissionable","permissions"],"type":"object","properties":{"assetId":{"type":"string","description":"Asset identifier","example":"48190c8c-42c4-46af-8d1a-0cd5db894797"},"assetType":{"type":"string","description":"Asset type","example":"FOLDER","enum":["INDIVIDUAL","HOST","FOLDER","CONTAINER","TEMPLATE","TEMPLATE_LAYOUT","LINK","CONTENT","PAGE","CONTENT_TYPE","STRUCTURE","CATEGORY","RULE"]},"inheritanceMode":{"type":"string","description":"Permission inheritance mode","example":"INDIVIDUAL","enum":["INHERITED","INDIVIDUAL"]},"canEditPermissions":{"type":"boolean","description":"Whether the requesting user can edit permissions on this asset","example":true},"canEdit":{"type":"boolean","description":"Whether the requesting user can edit this asset","example":true},"canAddChildren":{"type":"boolean","description":"Whether the requesting user can add children to this asset","example":true},"parentAssetId":{"type":"string","description":"Parent asset identifier (null if no parent or at root level)","example":"abc-123-def-456"},"permissions":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/RolePermissionView"},"last":{"$ref":"#/components/schemas/RolePermissionView"}},"description":"Paginated list of role permissions assigned to this asset","items":{"$ref":"#/components/schemas/RolePermissionView"}},"isParentPermissionable":{"type":"boolean","description":"Whether this asset can have child permissionables (e.g., hosts and folders)","example":true}},"description":"The updated asset with its new permission assignments"},"ImmutableListRolePermissionView":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/RolePermissionView"},"last":{"$ref":"#/components/schemas/RolePermissionView"}},"description":"Paginated list of role permissions assigned to this asset","items":{"$ref":"#/components/schemas/RolePermissionView"}},"ImmutableMapScopeSetType":{"type":"object","properties":{"empty":{"type":"boolean"}},"additionalProperties":{"uniqueItems":true,"type":"array","description":"Inheritable permissions by scope (only for parent permissionables). Keys are permission scopes (HOST, FOLDER, CONTENT, etc.), values are permission types","example":{"FOLDER":["READ","WRITE"],"CONTENT":["READ"]},"items":{"type":"string","description":"Inheritable permissions by scope (only for parent permissionables). Keys are permission scopes (HOST, FOLDER, CONTENT, etc.), values are permission types","example":"{\"FOLDER\":[\"READ\",\"WRITE\"],\"CONTENT\":[\"READ\"]}","enum":["READ","USE","EDIT","WRITE","PUBLISH","EDIT_PERMISSIONS","CAN_ADD_CHILDREN"]}},"description":"Inheritable permissions by scope (only for parent permissionables). Keys are permission scopes (HOST, FOLDER, CONTENT, etc.), values are permission types","example":{"FOLDER":["READ","WRITE"],"CONTENT":["READ"]}},"ResponseEntityUpdatePermissionsView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/UpdateAssetPermissionsView"},"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"}}},"RolePermissionView":{"required":["individual","inherited","roleId","roleName"],"type":"object","properties":{"roleId":{"type":"string","description":"Role identifier","example":"abc-123-def-456"},"roleName":{"type":"string","description":"Role display name","example":"CMS Administrator"},"inherited":{"type":"boolean","description":"Whether permissions are inherited from a parent asset","example":false},"individual":{"uniqueItems":true,"type":"array","properties":{"empty":{"type":"boolean"}},"description":"Individual permission levels assigned directly to this role on the asset","example":["READ","WRITE","PUBLISH"],"items":{"type":"string","description":"Individual permission levels assigned directly to this role on the asset","example":"[\"READ\",\"WRITE\",\"PUBLISH\"]","enum":["READ","USE","EDIT","WRITE","PUBLISH","EDIT_PERMISSIONS","CAN_ADD_CHILDREN"]}},"inheritable":{"type":"object","properties":{"empty":{"type":"boolean"}},"additionalProperties":{"uniqueItems":true,"type":"array","description":"Inheritable permissions by scope (only for parent permissionables). Keys are permission scopes (HOST, FOLDER, CONTENT, etc.), values are permission types","example":{"FOLDER":["READ","WRITE"],"CONTENT":["READ"]},"items":{"type":"string","description":"Inheritable permissions by scope (only for parent permissionables). Keys are permission scopes (HOST, FOLDER, CONTENT, etc.), values are permission types","example":"{\"FOLDER\":[\"READ\",\"WRITE\"],\"CONTENT\":[\"READ\"]}","enum":["READ","USE","EDIT","WRITE","PUBLISH","EDIT_PERMISSIONS","CAN_ADD_CHILDREN"]}},"description":"Inheritable permissions by scope (only for parent permissionables). Keys are permission scopes (HOST, FOLDER, CONTENT, etc.), values are permission types","example":{"FOLDER":["READ","WRITE"],"CONTENT":["READ"]}}}},"UpdateAssetPermissionsView":{"required":["asset","inheritanceBroken","message","permissionCount"],"type":"object","properties":{"message":{"type":"string","description":"Success message describing the operation result","example":"Permissions saved successfully"},"permissionCount":{"type":"integer","description":"Number of permission entries saved during this operation","format":"int32","example":5},"inheritanceBroken":{"type":"boolean","description":"Whether permission inheritance was broken during this operation. True if the asset was previously inheriting permissions from its parent.","example":true},"asset":{"$ref":"#/components/schemas/AssetPermissionsView"},"cascadeWarnings":{"type":"array","description":"Warnings from cascade operations that partially failed. Present only when cascade was requested and some role cascades failed.","example":["Failed to trigger cascade for role xyz123: Connection timeout"],"items":{"type":"string","description":"Warnings from cascade operations that partially failed. Present only when cascade was requested and some role cascades failed.","example":"[\"Failed to trigger cascade for role xyz123: Connection timeout\"]"}}}},"RolePermissionForm":{"required":["roleId"],"type":"object","properties":{"roleId":{"type":"string","description":"Role identifier. Can be role ID or role key.","example":"abc-123-def-456"},"individual":{"uniqueItems":true,"type":"array","description":"Individual permission levels for this asset. Valid values: READ, WRITE, PUBLISH, EDIT_PERMISSIONS, CAN_ADD_CHILDREN","example":["READ","WRITE","PUBLISH"],"items":{"type":"string","description":"Individual permission levels for this asset. Valid values: READ, WRITE, PUBLISH, EDIT_PERMISSIONS, CAN_ADD_CHILDREN","example":"[\"READ\",\"WRITE\",\"PUBLISH\"]","enum":["READ","USE","EDIT","WRITE","PUBLISH","EDIT_PERMISSIONS","CAN_ADD_CHILDREN"]}},"inheritable":{"type":"object","additionalProperties":{"uniqueItems":true,"type":"array","description":"Inheritable permissions by scope for child assets. Keys are permission scopes (FOLDER, CONTENT, PAGE, etc.), values are sets of permission levels.","example":{"FOLDER":["READ","CAN_ADD_CHILDREN"],"CONTENT":["READ","WRITE"]},"items":{"type":"string","description":"Inheritable permissions by scope for child assets. Keys are permission scopes (FOLDER, CONTENT, PAGE, etc.), values are sets of permission levels.","example":"{\"FOLDER\":[\"READ\",\"CAN_ADD_CHILDREN\"],\"CONTENT\":[\"READ\",\"WRITE\"]}","enum":["READ","USE","EDIT","WRITE","PUBLISH","EDIT_PERMISSIONS","CAN_ADD_CHILDREN"]}},"description":"Inheritable permissions by scope for child assets. Keys are permission scopes (FOLDER, CONTENT, PAGE, etc.), values are sets of permission levels.","example":{"FOLDER":["READ","CAN_ADD_CHILDREN"],"CONTENT":["READ","WRITE"]}}},"description":"Permission assignment for a single role on an asset"},"UpdateAssetPermissionsForm":{"required":["permissions"],"type":"object","properties":{"permissions":{"type":"array","description":"List of role permission entries. Each entry defines permissions for a specific role on the asset.","items":{"$ref":"#/components/schemas/RolePermissionForm"}}}},"ImmutableMapStringListString":{"type":"object","properties":{"empty":{"type":"boolean"}},"additionalProperties":{"type":"array","description":"Map of permission scopes (INDIVIDUAL, CONTENT, FOLDER, HOST, etc.) to lists of permission level names (READ, WRITE, PUBLISH, EDIT_PERMISSIONS, CAN_ADD_CHILDREN)","example":{"INDIVIDUAL":["READ","WRITE","PUBLISH"],"CONTENT":["READ"]},"items":{"type":"string","description":"Map of permission scopes (INDIVIDUAL, CONTENT, FOLDER, HOST, etc.) to lists of permission level names (READ, WRITE, PUBLISH, EDIT_PERMISSIONS, CAN_ADD_CHILDREN)","example":"{\"INDIVIDUAL\":[\"READ\",\"WRITE\",\"PUBLISH\"],\"CONTENT\":[\"READ\"]}"}},"description":"Map of permission scopes (INDIVIDUAL, CONTENT, FOLDER, HOST, etc.) to lists of permission level names (READ, WRITE, PUBLISH, EDIT_PERMISSIONS, CAN_ADD_CHILDREN)","example":{"INDIVIDUAL":["READ","WRITE","PUBLISH"],"CONTENT":["READ"]}},"ResponseEntityUpdateRolePermissionsView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/UpdateRolePermissionsView"},"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"}}},"RolePermissionAssetView":{"required":["canEditPermissions","hostId","id","inheritsPermissions","name","path","permissions","type"],"type":"object","properties":{"id":{"type":"string","description":"Asset identifier (host identifier for HOST type, folder inode for FOLDER type)","example":"abc-123-def-456"},"type":{"type":"string","description":"Asset type","example":"HOST","enum":["HOST","FOLDER"]},"name":{"type":"string","description":"Asset name (hostname for HOST, folder name for FOLDER)","example":"demo.dotcms.com"},"path":{"type":"string","description":"Full path to the asset","example":"/demo.dotcms.com/application"},"hostId":{"type":"string","description":"Host identifier (same as id for HOST type, parent host for FOLDER type)","example":"abc-123-def-456"},"canEditPermissions":{"type":"boolean","description":"Whether the requesting user can edit permissions on this asset","example":true},"inheritsPermissions":{"type":"boolean","description":"Whether this asset inherits permissions from its parent","example":false},"permissions":{"type":"object","properties":{"empty":{"type":"boolean"}},"additionalProperties":{"type":"array","description":"Map of permission scopes (INDIVIDUAL, CONTENT, FOLDER, HOST, etc.) to lists of permission level names (READ, WRITE, PUBLISH, EDIT_PERMISSIONS, CAN_ADD_CHILDREN)","example":{"INDIVIDUAL":["READ","WRITE","PUBLISH"],"CONTENT":["READ"]},"items":{"type":"string","description":"Map of permission scopes (INDIVIDUAL, CONTENT, FOLDER, HOST, etc.) to lists of permission level names (READ, WRITE, PUBLISH, EDIT_PERMISSIONS, CAN_ADD_CHILDREN)","example":"{\"INDIVIDUAL\":[\"READ\",\"WRITE\",\"PUBLISH\"],\"CONTENT\":[\"READ\"]}"}},"description":"Map of permission scopes (INDIVIDUAL, CONTENT, FOLDER, HOST, etc.) to lists of permission level names (READ, WRITE, PUBLISH, EDIT_PERMISSIONS, CAN_ADD_CHILDREN)","example":{"INDIVIDUAL":["READ","WRITE","PUBLISH"],"CONTENT":["READ"]}}},"description":"The updated asset with new permission assignments for this role"},"UpdateRolePermissionsView":{"required":["asset","roleId","roleName"],"type":"object","properties":{"roleId":{"type":"string","description":"Role identifier","example":"abc-123-def-456"},"roleName":{"type":"string","description":"Role name","example":"Content Editor"},"asset":{"$ref":"#/components/schemas/RolePermissionAssetView"}}},"UpdateRolePermissionsForm":{"required":["permissions"],"type":"object","properties":{"permissions":{"type":"object","additionalProperties":{"type":"array","description":"Permission assignments by scope (INDIVIDUAL, HOST, FOLDER, CONTENT, etc.) with permission levels (READ, WRITE, PUBLISH, EDIT_PERMISSIONS, CAN_ADD_CHILDREN). Omitting a scope preserves existing permissions. Empty array [] removes permissions for that scope.","example":{"INDIVIDUAL":["READ","WRITE"],"CONTENT":["READ","PUBLISH"]},"items":{"type":"string","description":"Permission assignments by scope (INDIVIDUAL, HOST, FOLDER, CONTENT, etc.) with permission levels (READ, WRITE, PUBLISH, EDIT_PERMISSIONS, CAN_ADD_CHILDREN). Omitting a scope preserves existing permissions. Empty array [] removes permissions for that scope.","example":"{\"INDIVIDUAL\":[\"READ\",\"WRITE\"],\"CONTENT\":[\"READ\",\"PUBLISH\"]}"}},"description":"Permission assignments by scope (INDIVIDUAL, HOST, FOLDER, CONTENT, etc.) with permission levels (READ, WRITE, PUBLISH, EDIT_PERMISSIONS, CAN_ADD_CHILDREN). Omitting a scope preserves existing permissions. Empty array [] removes permissions for that scope.","example":{"INDIVIDUAL":["READ","WRITE"],"CONTENT":["READ","PUBLISH"]}}}},"ResponseEntitySaveUserPermissionsView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/SaveUserPermissionsView"},"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"}}},"SaveUserPermissionsView":{"required":["asset","cascadeInitiated","roleId","userId"],"type":"object","properties":{"userId":{"type":"string","description":"User identifier","example":"admin@dotcms.com"},"roleId":{"type":"string","description":"User's individual role identifier","example":"abc-123-def-456"},"asset":{"$ref":"#/components/schemas/UserPermissionAssetView"},"cascadeInitiated":{"type":"boolean","description":"Whether permission cascade to children was initiated"}}},"SaveUserPermissionsForm":{"required":["permissions"],"type":"object","properties":{"permissions":{"type":"object","additionalProperties":{"uniqueItems":true,"type":"array","description":"Permission assignments by scope (INDIVIDUAL, HOST, FOLDER, etc.) with permission levels (READ, WRITE, PUBLISH, EDIT_PERMISSIONS, CAN_ADD_CHILDREN)","example":{"INDIVIDUAL":["READ","WRITE"],"HOST":["READ"]},"items":{"type":"string","description":"Permission assignments by scope (INDIVIDUAL, HOST, FOLDER, etc.) with permission levels (READ, WRITE, PUBLISH, EDIT_PERMISSIONS, CAN_ADD_CHILDREN)","example":"{\"INDIVIDUAL\":[\"READ\",\"WRITE\"],\"HOST\":[\"READ\"]}","enum":["READ","USE","EDIT","WRITE","PUBLISH","EDIT_PERMISSIONS","CAN_ADD_CHILDREN"]}},"description":"Permission assignments by scope (INDIVIDUAL, HOST, FOLDER, etc.) with permission levels (READ, WRITE, PUBLISH, EDIT_PERMISSIONS, CAN_ADD_CHILDREN)","example":{"INDIVIDUAL":["READ","WRITE"],"HOST":["READ"]}},"cascade":{"type":"boolean","description":"Whether to cascade permissions to all children assets","example":false,"default":false}}},"SetForm":{"required":["key","value"],"type":"object","properties":{"key":{"type":"string"},"value":{"type":"object"}}},"SetHashForm":{"required":["fields","key"],"type":"object","properties":{"key":{"type":"string"},"fields":{"type":"object","additionalProperties":{"type":"object"}}}},"RoleResponseEntityView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"object","additionalProperties":{"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"}}},"RoleForm":{"required":["roleName"],"type":"object","properties":{"roleName":{"type":"string"},"roleKey":{"type":"string"},"parentRoleId":{"type":"string"},"canEditUsers":{"type":"boolean"},"canEditPermissions":{"type":"boolean"},"canEditLayouts":{"type":"boolean"},"description":{"type":"string"}}},"ResponseEntityRoleUserGrantView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/RoleUserGrantView"},"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"}}},"RoleMemberUserView":{"required":["email","fullName","userId"],"type":"object","properties":{"userId":{"type":"string","description":"Id of the user","example":"dotcms.org.2807"},"email":{"type":"string","description":"Email address of the user","example":"user@example.com"},"fullName":{"type":"string","description":"Full name of the user","example":"Jane Doe"}},"description":"The user the role was granted to"},"RoleUserGrantView":{"required":["granted","roleId","user"],"type":"object","properties":{"granted":{"type":"boolean","description":"Whether the user holds the role after the call. The grant is idempotent, so this is also true when the user already held the role and nothing changed","example":true},"roleId":{"type":"string","description":"Id of the granted role","example":"48190c8c-42c4-46af-8d1a-0cd5db894797"},"user":{"$ref":"#/components/schemas/RoleMemberUserView"}}},"ResponseEntityRoleOperationView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"object","additionalProperties":{"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"}}},"ResponseEntityRoleDeletionView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/RoleDeletionView"},"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"}}},"RoleDeletionView":{"required":["deleted","roleId","usersAffected"],"type":"object","properties":{"deleted":{"type":"boolean","description":"Whether the role was deleted","example":true},"roleId":{"type":"string","description":"Id of the deleted role","example":"48190c8c-42c4-46af-8d1a-0cd5db894797"},"usersAffected":{"type":"integer","description":"Number of users the role was removed from by the cascading deletion. Counts direct assignments only; users inheriting the role through the role hierarchy are not included","format":"int32","example":3}}},"RoleLayoutForm":{"type":"object","properties":{"roleId":{"type":"string"},"layoutIds":{"uniqueItems":true,"type":"array","items":{"type":"string"}}}},"Layout":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"tabOrder":{"type":"integer","format":"int32"},"portletIds":{"type":"array","items":{"type":"string"}}}},"ResponseEntityLayoutList":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/Layout"}},"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"}}},"LayoutMapResponseEntityView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"type":"object","additionalProperties":{"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"}}},"ResponseEntityRoleDetailView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/RoleView"},"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"}}},"RoleView":{"required":["childCount","userCount"],"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"roleKey":{"type":"string"},"parent":{"type":"string"},"editPermissions":{"type":"boolean"},"editUsers":{"type":"boolean"},"editLayouts":{"type":"boolean"},"locked":{"type":"boolean"},"system":{"type":"boolean"},"roleChildren":{"type":"array","items":{"$ref":"#/components/schemas/RoleView"}},"childCount":{"minimum":0,"type":"integer","description":"Number of direct child roles, independent of children hydration","format":"int32","example":3},"userCount":{"minimum":0,"type":"integer","description":"Number of users directly granted this role, matching the totals of the role users listing: inherited grants and hidden users (system, anonymous, default, flagged for deletion) are not included","format":"int32","example":12},"dbfqn":{"type":"string"},"fqn":{"type":"string"}}},"ResponseEntityRoleViewListView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/RoleView"}},"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"}}},"ResponseEntityRoleListView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/Role"}},"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"}}},"ResponseEntityRoleUsersRemovalView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/RoleUsersRemovalView"},"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"}}},"RoleUsersRemovalView":{"required":["removedUserIds","skipped"],"type":"object","properties":{"removedUserIds":{"type":"array","description":"Ids of the users whose direct membership in the role was removed","items":{"type":"string","description":"Ids of the users whose direct membership in the role was removed"}},"skipped":{"type":"array","description":"Users that could not be removed, each with a reason","items":{"$ref":"#/components/schemas/SkippedUserView"}}}},"SkippedUserView":{"required":["reason","userId"],"type":"object","properties":{"userId":{"type":"string","description":"Id of the skipped user, as submitted in the request","example":"dotcms.org.2807"},"reason":{"type":"string","description":"Why the user was skipped","example":"inherited","enum":["not_found","inherited","error"]}},"description":"Users that could not be removed, each with a reason"},"RoleUsersForm":{"required":["userIds"],"type":"object","properties":{"userIds":{"uniqueItems":true,"type":"array","description":"Ids of the users to remove from the role","example":["dotcms.org.2807"],"items":{"type":"string","description":"Ids of the users to remove from the role","example":"[\"dotcms.org.2807\"]"}}}},"ResponseEntitySmallRoleView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/SmallRoleView"}},"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"}}},"SmallRoleView":{"type":"object","properties":{"name":{"type":"string"},"id":{"type":"string"},"roleKey":{"type":"string"},"user":{"type":"boolean"}}},"DotTempFile":{"type":"object","properties":{"id":{"type":"string"},"mimeType":{"type":"string"},"referenceUrl":{"type":"string"},"thumbnailUrl":{"type":"string"},"fileName":{"type":"string"},"folder":{"type":"string"},"image":{"type":"boolean"},"metadata":{"type":"object","additionalProperties":{"type":"object"}},"length":{"type":"integer","format":"int64"}}},"TempFilesView":{"type":"object","properties":{"tempFiles":{"type":"array","items":{"$ref":"#/components/schemas/DotTempFile"}}},"description":"Response body for /api/v1/temp and /api/v1/temp/byUrl uploads. Contains the tempFiles array; use tempFiles[0].id (e.g. \"temp_5311313004\") as the field value when creating contentlets with binary or image fields."},"RemoteUrlForm":{"type":"object","properties":{"remoteUrl":{"type":"string"},"fileName":{"type":"string"},"accessKey":{"type":"string"},"urlTimeoutSeconds":{"type":"integer","format":"int32"},"maxFileLength":{"type":"integer","format":"int64"}}},"BodyView":{"type":"object","properties":{"rows":{"type":"array","items":{"$ref":"#/components/schemas/TemplateLayoutRowView"}}}},"SidebarView":{"type":"object","properties":{"containers":{"type":"array","items":{"$ref":"#/components/schemas/ContainerUUID"}},"location":{"type":"string"},"width":{"type":"string"}}},"TemplateLayoutColumnView":{"type":"object","properties":{"containers":{"type":"array","items":{"$ref":"#/components/schemas/ContainerUUID"}},"width":{"type":"integer","format":"int32"},"leftOffset":{"type":"integer","format":"int32"},"styleClass":{"type":"string"},"metadata":{"type":"object","additionalProperties":{"type":"object"}}}},"TemplateLayoutRowView":{"type":"object","properties":{"styleClass":{"type":"string"},"columns":{"type":"array","items":{"$ref":"#/components/schemas/TemplateLayoutColumnView"}},"metadata":{"type":"object","additionalProperties":{"type":"object"}}}},"TemplateLayoutView":{"type":"object","properties":{"width":{"type":"string"},"title":{"type":"string"},"header":{"type":"boolean"},"footer":{"type":"boolean"},"body":{"$ref":"#/components/schemas/BodyView"},"sidebar":{"$ref":"#/components/schemas/SidebarView"}},"description":"Layout produced by the visual builder: a 'body' of rows, each row holding columns, and each column holding containers (referenced by identifier + uuid), plus optional 'header', 'footer', 'sidebar', and 'title'. Provide this when 'drawed:true'."},"TemplateView":{"type":"object","properties":{"identifier":{"type":"string"},"inode":{"type":"string"},"categoryId":{"type":"string"},"body":{"type":"string"},"selectedimage":{"type":"string"},"image":{"type":"string"},"drawed":{"type":"boolean"},"deleted":{"type":"boolean"},"live":{"type":"boolean"},"locked":{"type":"boolean"},"lockedBy":{"type":"string"},"working":{"type":"boolean"},"hasLiveVersion":{"type":"boolean"},"showOnMenu":{"type":"boolean"},"drawedBody":{"type":"string"},"countAddContainer":{"type":"integer","format":"int32"},"countContainers":{"type":"integer","format":"int32"},"headCode":{"type":"string"},"theme":{"type":"string"},"themeName":{"type":"string"},"footer":{"type":"string"},"friendlyName":{"type":"string"},"header":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"modUser":{"type":"string"},"owner":{"type":"string"},"name":{"type":"string"},"title":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"canRead":{"type":"boolean"},"canWrite":{"type":"boolean"},"canPublish":{"type":"boolean"},"layout":{"$ref":"#/components/schemas/TemplateLayoutView"},"containers":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ContainerView"}},"themeInfo":{"$ref":"#/components/schemas/ThemeView"},"hostName":{"type":"string"},"hostId":{"type":"string"},"fullTitle":{"type":"string"},"htmlTitle":{"type":"string"},"new":{"type":"boolean"}}},"ThemeView":{"type":"object","properties":{"path":{"type":"string"},"defaultFileType":{"type":"string"},"filesMasks":{"type":"string"},"getiDate":{"type":"string","format":"date-time"},"hostId":{"type":"string"},"identifier":{"type":"string"},"inode":{"type":"string"},"modDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"showOnMenu":{"type":"boolean"},"sortOrder":{"type":"integer","format":"int32"},"title":{"type":"string"},"type":{"type":"string"}}},"TemplateImageForm":{"type":"object","properties":{"templateId":{"type":"string"}}},"ResponseEntityListTemplateView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/Template"}},"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"}}},"TemplateForm":{"required":["title"],"type":"object","properties":{"siteId":{"type":"string","description":"Identifier of the site (host) where this template will be created. This is a site identifier UUID, not 'hostId'. If not provided, the template is assigned to the site resolved from the current HTTP request context."},"identifier":{"type":"string","description":"Identifier of the template. Required for updates, ignored on creation."},"inode":{"type":"string","description":"Inode (version identifier) of the template. Server-managed; typically omitted on input."},"body":{"type":"string","description":"Raw Velocity markup that renders the template. Required even when 'drawed:true' — send an empty string ('') when using the layout builder ('layout') instead of hand-written body."},"selectedimage":{"type":"string","description":"Identifier of the image asset currently selected as the template thumbnail in the UI."},"image":{"type":"string","description":"Identifier of the image asset used as the template thumbnail."},"drawed":{"type":"boolean","description":"Whether this template was built with the visual layout builder. When true, provide 'layout' (the row/column/container structure); when false, provide 'body'."},"showOnMenu":{"type":"boolean","description":"Whether this template should appear in navigation menus."},"drawedBody":{"type":"string","description":"Velocity body generated by the layout builder for a drawn template. Server-managed."},"countAddContainer":{"type":"integer","description":"Count of 'add container' placeholders in the layout. Server-managed; typically omitted.","format":"int32"},"countContainers":{"type":"integer","description":"Count of containers in the layout. Server-managed; typically omitted.","format":"int32"},"headCode":{"type":"string","description":"Velocity/HTML injected into the page for pages using this template."},"theme":{"type":"string","description":"Theme folder identifier (not a path) that supplies the template's CSS/JS and VTL fragments. Resolve the folder identifier from a path via GET /api/v1/folder/sitename/{site}/uri/{uri}."},"themeName":{"type":"string","description":"Display name of the theme. Informational; 'theme' (the folder identifier) is authoritative."},"footer":{"type":"string","description":"Velocity/HTML footer fragment for pages using this template."},"friendlyName":{"type":"string","description":"Friendly (human-readable) name of the template."},"header":{"type":"string","description":"Velocity/HTML header fragment for pages using this template."},"name":{"type":"string","description":"Internal/asset name of the template."},"title":{"type":"string","description":"Title of the template (displayed in the UI)."},"sortOrder":{"type":"integer","description":"Sort order for display purposes.","format":"int32"},"headerCheck":{"type":"boolean","description":"Whether the header fragment is enabled for this template."},"footerCheck":{"type":"boolean","description":"Whether the footer fragment is enabled for this template."},"layout":{"$ref":"#/components/schemas/TemplateLayoutView"}},"description":"Form used to create or update a Template in dotCMS. A Template can be either drawn with the layout builder (set 'drawed:true' and provide 'layout') or authored as raw Velocity markup (provide 'body')."},"ResponseEntityUsageSummaryView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/UsageSummary"},"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"}}},"UsageSummary":{"type":"object","properties":{"metrics":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"object"}}},"lastUpdated":{"type":"string","format":"date-time"}}},"ResponseUserMapEntityView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"object","additionalProperties":{"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"}}},"ResponseEntityUserUpdateView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"object","additionalProperties":{"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"}}},"UserForm":{"required":["email","firstName","lastName"],"type":"object","properties":{"userId":{"type":"string"},"active":{"type":"boolean"},"firstName":{"type":"string"},"middleName":{"type":"string"},"lastName":{"type":"string"},"nickName":{"type":"string"},"email":{"type":"string"},"male":{"type":"boolean"},"birthday":{"type":"string"},"languageId":{"type":"string"},"timeZoneId":{"type":"string"},"password":{"type":"array","items":{"type":"string"}},"additionalInfo":{"type":"object","additionalProperties":{"type":"object"}},"roles":{"type":"array","description":"Role keys or role IDs (roles created without a key can only be referenced by ID). On update: field absent = roles untouched; [] = remove all user-assignable roles; otherwise the complete user-assignable role set. On create: absent or empty = default Front-end User role. Unknown entries are ignored.","example":["DOTCMS_BACK_END_USER","48190c8c-42c4-46af-8d1a-0cd5db894797"],"items":{"type":"string","description":"Role keys or role IDs (roles created without a key can only be referenced by ID). On update: field absent = roles untouched; [] = remove all user-assignable roles; otherwise the complete user-assignable role set. On create: absent or empty = default Front-end User role. Unknown entries are ignored.","example":"[\"DOTCMS_BACK_END_USER\",\"48190c8c-42c4-46af-8d1a-0cd5db894797\"]"}}}},"ResponseUserDeletedEntityView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/UserDeletedView"},"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"}}},"UserDeletedView":{"type":"object","properties":{"status":{"type":"string"},"deletedUser":{"type":"string"},"reassignedTo":{"type":"string"}}},"ResponseEntityListUserView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/User"}},"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"}}},"ResponseEntityLoginAsView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"object","additionalProperties":{"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"}}},"LoginAsForm":{"required":["password","userId"],"type":"object","properties":{"userId":{"type":"string"},"password":{"type":"string"}}},"RestUser":{"type":"object","properties":{"userId":{"type":"string"},"givenName":{"type":"string"},"email":{"type":"string"},"surname":{"type":"string"},"roleId":{"type":"string"},"loginAs":{"type":"boolean"},"admin":{"type":"boolean"}}},"UpdateCurrentUserForm":{"type":"object","properties":{"userId":{"type":"string"},"givenName":{"type":"string"},"email":{"type":"string"},"surname":{"type":"string"},"currentPassword":{"type":"string"},"newPassword":{"type":"string"}}},"ResponseEntityVariantView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/Variant"},"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"}}},"Variant":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"archived":{"type":"boolean"}}},"VariantForm":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}}},"VelocityErrorResponseView":{"type":"object","properties":{"errors":{"type":"array","description":"List of Velocity errors detected while evaluating the submitted code.","items":{"$ref":"#/components/schemas/VelocityErrorView"}},"warnings":{"type":"array","description":"Non-fatal warnings (undefined references, null method results) observed before the error. Omitted when there are none.","items":{"$ref":"#/components/schemas/VelocityWarningView"}}}},"VelocityErrorView":{"type":"object","properties":{"message":{"type":"string","description":"Concise, single-line Velocity error message including the offending token and position when available. See `detail` for the full engine output.","example":"Encountered \"\" at line 6, column 39"},"errorType":{"type":"string","description":"Simple class name of the underlying Velocity error, normalized to the public Velocity type (e.g. ParseErrorException, MethodInvocationException, ResourceNotFoundException) rather than a dotCMS-internal subclass. Lets the caller distinguish a syntax error from a runtime error.","example":"ParseErrorException"},"templateName":{"type":"string","description":"Name Velocity associated with the evaluated template. For dynamic requests this is a synthetic name identifying the submitted script.","example":"dynamic velocity"},"line":{"type":"integer","description":"1-based line number in the submitted velocity where the error occurred, when Velocity reports it. Omitted when unavailable.","format":"int32","example":6},"column":{"type":"integer","description":"1-based column number in the submitted velocity where the error occurred, when Velocity reports it. Omitted when unavailable.","format":"int32","example":39},"detail":{"type":"string","description":"Full, multi-line engine output for the error, including the complete grammar-token list for parse errors. Intended for human display; omitted when it adds nothing beyond `message`.","example":"Encountered \"\" at line 6, column 39\nWas expecting one of:\n \"[\" ...\n \"(\" ..."}},"description":"A single Velocity evaluation error, structured so an automated caller can locate and fix the offending code without parsing a stack trace."},"VelocityWarningView":{"type":"object","properties":{"type":{"type":"string","description":"The kind of warning.","example":"UNDEFINED_REFERENCE","enum":["UNDEFINED_REFERENCE","NULL_METHOD_RESULT","INVALID_METHOD","NULL_SET"]},"message":{"type":"string","description":"Human-readable description of the warning.","example":"Undefined reference '$noSuchVar' — renders as literal text in non-strict mode"},"reference":{"type":"string","description":"The reference or method expression that triggered the warning, when known.","example":"$noSuchVar"},"line":{"type":"integer","description":"1-based line number where the reference appears, when Velocity reports it. Omitted when unavailable.","format":"int32","example":3},"column":{"type":"integer","description":"1-based column number where the reference appears, when Velocity reports it. Omitted when unavailable.","format":"int32","example":1}},"description":"A non-fatal Velocity warning, such as an undefined reference or a method call that returned null. The script still evaluated; warnings flag likely typos in non-strict mode."},"WorkflowAction":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"schemeId":{"type":"string"},"condition":{"type":"string"},"nextStep":{"type":"string"},"nextAssign":{"type":"string"},"icon":{"type":"string"},"roleHierarchyForAssign":{"type":"boolean"},"assignable":{"type":"boolean"},"commentable":{"type":"boolean"},"order":{"type":"integer","format":"int32"},"saveActionlet":{"type":"boolean","writeOnly":true},"publishActionlet":{"type":"boolean","writeOnly":true},"unpublishActionlet":{"type":"boolean","writeOnly":true},"archiveActionlet":{"type":"boolean","writeOnly":true},"pushPublishActionlet":{"type":"boolean","writeOnly":true},"onlyBatchActionlet":{"type":"boolean","writeOnly":true},"unarchiveActionlet":{"type":"boolean","writeOnly":true},"deleteActionlet":{"type":"boolean","writeOnly":true},"destroyActionlet":{"type":"boolean","writeOnly":true},"moveActionlet":{"type":"boolean","writeOnly":true},"commentActionlet":{"type":"boolean","writeOnly":true},"metadata":{"type":"object","additionalProperties":{"type":"object"}},"resetable":{"type":"boolean","writeOnly":true},"nextStepCurrentStep":{"type":"boolean"},"moveActionletHashPath":{"type":"boolean","writeOnly":true},"owner":{"type":"string"},"showOn":{"uniqueItems":true,"type":"array","items":{"type":"string","enum":["NEW","LOCKED","UNLOCKED","PUBLISHED","UNPUBLISHED","ARCHIVED","LISTING","EDITING"]}},"hasOnlyBatchActionlet":{"type":"boolean"},"hasSaveActionlet":{"type":"boolean"},"hasDeleteActionlet":{"type":"boolean"},"hasResetActionlet":{"type":"boolean"},"hasPublishActionlet":{"type":"boolean"},"hasUnpublishActionlet":{"type":"boolean"},"hasArchiveActionlet":{"type":"boolean"},"hasPushPublishActionlet":{"type":"boolean"},"hasUnarchiveActionlet":{"type":"boolean"},"hasDestroyActionlet":{"type":"boolean"},"hasCommentActionlet":{"type":"boolean"},"hasMoveActionletHasPathActionlet":{"type":"boolean"},"hasMoveActionletActionlet":{"type":"boolean"}}},"WorkflowActionSeparatorForm":{"type":"object","properties":{"schemeId":{"type":"string"},"stepId":{"type":"string"}}},"ResponseEntityWorkflowStepView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/WorkflowStep"},"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"}}},"WorkflowStep":{"type":"object","properties":{"id":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"schemeId":{"type":"string"},"myOrder":{"type":"integer","format":"int32"},"resolved":{"type":"boolean"},"enableEscalation":{"type":"boolean"},"escalationAction":{"type":"string"},"escalationTime":{"type":"integer","format":"int32"}}},"WorkflowStepAddForm":{"required":["enableEscalation","escalationAction","escalationTime","schemeId","stepName","stepResolved"],"type":"object","properties":{"schemeId":{"type":"string"},"stepName":{"type":"string"},"enableEscalation":{"type":"boolean"},"escalationAction":{"type":"string"},"escalationTime":{"type":"string"},"stepResolved":{"type":"boolean"}}},"ResponseEntityWorkflowSchemeView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/WorkflowScheme"},"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"}}},"WorkflowScheme":{"type":"object","properties":{"id":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"name":{"type":"string"},"variableName":{"type":"string"},"description":{"type":"string"},"archived":{"type":"boolean"},"mandatory":{"type":"boolean"},"defaultScheme":{"type":"boolean"},"modDate":{"type":"string","format":"date-time"},"entryActionId":{"type":"string"},"system":{"type":"boolean"}}},"WorkflowCopyForm":{"type":"object","properties":{"name":{"type":"string"}}},"ResponseEntitySystemActionWorkflowActionMapping":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/SystemActionWorkflowActionMapping"},"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"}}},"SystemActionWorkflowActionMapping":{"type":"object","properties":{"identifier":{"type":"string"},"systemAction":{"type":"string","enum":["NEW","EDIT","PUBLISH","UNPUBLISH","ARCHIVE","UNARCHIVE","DELETE","DESTROY","LOCK","UNLOCK"]},"workflowAction":{"$ref":"#/components/schemas/WorkflowAction"},"owner":{"type":"object"},"ownerContentType":{"type":"boolean"},"ownerScheme":{"type":"boolean"}}},"ResponseEntityWorkflowActionView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/WorkflowAction"},"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"}}},"ResponseEntityWorkflowActionletsView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/WorkFlowActionlet"}},"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"}}},"WorkFlowActionlet":{"type":"object","properties":{"howTo":{"type":"string"},"localizedHowto":{"type":"string"},"actionClass":{"type":"string"},"localizedName":{"type":"string"},"name":{"type":"string"},"parameters":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowActionletParameter"}}}},"WorkflowActionletParameter":{"type":"object","properties":{"displayName":{"type":"string"},"key":{"type":"string"},"defaultValue":{"type":"string"},"required":{"type":"boolean"}}},"ResponseEntityWorkflowActionClassesView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowActionClass"}},"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"}}},"WorkflowActionClass":{"type":"object","properties":{"id":{"type":"string"},"actionId":{"type":"string"},"name":{"type":"string"},"order":{"type":"integer","format":"int32"},"clazz":{"type":"string"},"actionlet":{"$ref":"#/components/schemas/WorkFlowActionlet"}}},"ResponseEntityWorkflowActionsView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowActionView"}},"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"}}},"WorkflowSchemesForm":{"required":["schemes"],"type":"object","properties":{"schemes":{"uniqueItems":true,"type":"array","items":{"type":"string"}}}},"SchemesAndSchemesContentTypeView":{"type":"object","properties":{"schemes":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowScheme"}},"contentTypeSchemes":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowScheme"}}}},"ContentTypeWorkflowSchemesView":{"required":["contentTypeId","contentTypeVariable","schemes"],"type":"object","properties":{"contentTypeId":{"type":"string","description":"UUID of the content type"},"contentTypeVariable":{"type":"string","description":"Variable name of the content type"},"schemes":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/WorkflowScheme"},"last":{"$ref":"#/components/schemas/WorkflowScheme"}},"description":"Workflow schemes associated with the content type","items":{"$ref":"#/components/schemas/WorkflowScheme"}}}},"ImmutableListWorkflowScheme":{"type":"array","properties":{"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/WorkflowScheme"},"last":{"$ref":"#/components/schemas/WorkflowScheme"}},"description":"Workflow schemes associated with the content type","items":{"$ref":"#/components/schemas/WorkflowScheme"}},"ResponseEntityContentTypeWorkflowSchemesView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/ContentTypeWorkflowSchemesView"}},"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"}}},"ResponseEntityDefaultWorkflowActionsView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowDefaultActionView"}},"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"}}},"WorkflowDefaultActionView":{"type":"object","properties":{"scheme":{"$ref":"#/components/schemas/WorkflowScheme"},"action":{"$ref":"#/components/schemas/WorkflowAction"},"firstStep":{"$ref":"#/components/schemas/WorkflowStep"}}},"ResponseEntityWorkflowSchemesView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowScheme"}},"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"}}},"ResponseEntityWorkflowStepsView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowStep"}},"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"}}},"ResponseEntitySystemActionWorkflowActionMappings":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/SystemActionWorkflowActionMapping"}},"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"}}},"WorkflowActionMultipartSchema":{"type":"object","properties":{"contentlet":{"type":"string","description":"JSON object describing the contentlet values.","example":"{\\n \"contentType\": \"News\",\\n \"title\": \"My News\"\\n}"},"binaryFields":{"type":"array","description":"List of binary field variables. The uploaded files in 'file' should correspond by index to these field variables.","example":["binaryImage","binaryDocument"],"items":{"type":"string","description":"List of binary field variables. The uploaded files in 'file' should correspond by index to these field variables.","example":"[\"binaryImage\",\"binaryDocument\"]"}},"file":{"type":"array","description":"Files to upload. Repeat the 'file' part for multiple files; order should match 'binaryFields'.","items":{"type":"string","format":"binary"}}},"description":"Multipart form for workflow actions. Include a JSON 'contentlet' and one or more 'file' parts that map to binary field variables."},"FireActionByNameForm":{"type":"object","properties":{"comments":{"type":"string","description":"Optional comment recorded on the workflow task history."},"assign":{"type":"string","description":"User or role ID to assign the task to (used by actions that reassign)."},"publishDate":{"type":"string","description":"Publish date for the 'Publish' step, in the content type's configured date format."},"publishTime":{"type":"string","description":"Publish time for the 'Publish' step, in the content type's configured time format."},"expireDate":{"type":"string","description":"Expiration date, in the content type's configured date format."},"expireTime":{"type":"string","description":"Expiration time, in the content type's configured time format."},"neverExpire":{"type":"string","description":"Set to 'true' to mark the content as never expiring."},"whereToSend":{"type":"string","description":"Push-publishing target environment(s) for a 'Push Publish' action."},"filterKey":{"type":"string","description":"Push-publishing filter key for a 'Push Publish' action."},"query":{"type":"string","description":"Lucene query selecting the content to act on, as an alternative to 'contentlet'."},"pathToMove":{"type":"string","description":"Target folder path for a 'Move' action."},"timezoneId":{"type":"string","description":"Timezone ID (e.g. 'America/New_York') used to interpret the publish/expire date-times."},"individualPermissions":{"type":"object","additionalProperties":{"type":"array","description":"Per-content individual permissions to apply, keyed by permission type (READ, WRITE, PUBLISH, etc.) to a list of user/role IDs.","items":{"type":"string","description":"Per-content individual permissions to apply, keyed by permission type (READ, WRITE, PUBLISH, etc.) to a list of user/role IDs."}},"description":"Per-content individual permissions to apply, keyed by permission type (READ, WRITE, PUBLISH, etc.) to a list of user/role IDs."},"actionName":{"type":"string"},"iwantTo":{"type":"string"},"contentlet":{"type":"object","additionalProperties":{"type":"object","description":"The contentlet to create or edit, as a flat map of field-variable names to values. Polymorphic: the allowed fields depend on the content type.\n\n**System fields (all content):**\n- `contentType` *(string)* — the content type's variable name (e.g. 'webPageContent'). Required when creating.\n- `languageId` *(number)* — language ID; defaults to the system default language when omitted.\n- `contentHost` *(string)* — host (site) **identifier** the content belongs to, **or** `hostFolder` *(string)* — a folder **identifier**. Supply one of these.\n- `inode` / `identifier` *(string)* — include the existing identifier (and optionally inode) to edit existing content; omit both to create new.\n\n⚠️ Do **not** set `host` — use `contentHost` (host id) or `hostFolder` (folder id) instead.\n\n**Host defaulting (common wrong-host trap):** if you omit `contentHost`/`hostFolder` when creating, the content does NOT go to the current/default site — it inherits the **content type's own host**, which is `SYSTEM_HOST` unless the type was explicitly created on a site. So content of a `SYSTEM_HOST` content type silently lands on `SYSTEM_HOST`, where it is invisible to another site's URL-maps and to host-scoped searches (`+conHost:`). Always pass `contentHost:` (the site **identifier UUID**, not the hostname) to place content on a specific site.\n\n**Constant fields are content-type configuration, not contentlet data.** Fields whose `clazz` is `ImmutableConstantField` are shared by the content type. Keys for them in this `contentlet` map are silently ignored even when the workflow response is HTTP 200/live. For example, a WIDGET's `widgetCode` must be written to the field's `values` property via the content-type field API, not included in a widget contentlet.\n\n**Pages (`contentType: 'htmlpageasset'`)** additionally use:\n- `title` *(string)* — the page title.\n- `url` *(string)* — the page name (the last URL segment) within `hostFolder`.\n- `template` *(string)* — identifier of the template to render the page.\n- `cachettl` *(number)* — page cache time-to-live in seconds.\n- `sortOrder` *(number)* — sort order within the folder.\n\nNote: there is no dedicated page-create endpoint — pages are created by firing an action with an `htmlpageasset` contentlet.","example":{"contentType":"htmlpageasset","languageId":1,"hostFolder":"48190c8c-42c4-46af-8d1a-0cd5db894797","title":"My Page","url":"my-page","template":"8e63a9c0-...","cachettl":15,"sortOrder":0}},"description":"The contentlet to create or edit, as a flat map of field-variable names to values. Polymorphic: the allowed fields depend on the content type.\n\n**System fields (all content):**\n- `contentType` *(string)* — the content type's variable name (e.g. 'webPageContent'). Required when creating.\n- `languageId` *(number)* — language ID; defaults to the system default language when omitted.\n- `contentHost` *(string)* — host (site) **identifier** the content belongs to, **or** `hostFolder` *(string)* — a folder **identifier**. Supply one of these.\n- `inode` / `identifier` *(string)* — include the existing identifier (and optionally inode) to edit existing content; omit both to create new.\n\n⚠️ Do **not** set `host` — use `contentHost` (host id) or `hostFolder` (folder id) instead.\n\n**Host defaulting (common wrong-host trap):** if you omit `contentHost`/`hostFolder` when creating, the content does NOT go to the current/default site — it inherits the **content type's own host**, which is `SYSTEM_HOST` unless the type was explicitly created on a site. So content of a `SYSTEM_HOST` content type silently lands on `SYSTEM_HOST`, where it is invisible to another site's URL-maps and to host-scoped searches (`+conHost:`). Always pass `contentHost:` (the site **identifier UUID**, not the hostname) to place content on a specific site.\n\n**Constant fields are content-type configuration, not contentlet data.** Fields whose `clazz` is `ImmutableConstantField` are shared by the content type. Keys for them in this `contentlet` map are silently ignored even when the workflow response is HTTP 200/live. For example, a WIDGET's `widgetCode` must be written to the field's `values` property via the content-type field API, not included in a widget contentlet.\n\n**Pages (`contentType: 'htmlpageasset'`)** additionally use:\n- `title` *(string)* — the page title.\n- `url` *(string)* — the page name (the last URL segment) within `hostFolder`.\n- `template` *(string)* — identifier of the template to render the page.\n- `cachettl` *(number)* — page cache time-to-live in seconds.\n- `sortOrder` *(number)* — sort order within the folder.\n\nNote: there is no dedicated page-create endpoint — pages are created by firing an action with an `htmlpageasset` contentlet.","example":{"contentType":"htmlpageasset","languageId":1,"hostFolder":"48190c8c-42c4-46af-8d1a-0cd5db894797","title":"My Page","url":"my-page","template":"8e63a9c0-...","cachettl":15,"sortOrder":0}}}},"FireActionForm":{"type":"object","properties":{"comments":{"type":"string","description":"Optional comment recorded on the workflow task history."},"assign":{"type":"string","description":"User or role ID to assign the task to (used by actions that reassign)."},"publishDate":{"type":"string","description":"Publish date for the 'Publish' step, in the content type's configured date format."},"publishTime":{"type":"string","description":"Publish time for the 'Publish' step, in the content type's configured time format."},"expireDate":{"type":"string","description":"Expiration date, in the content type's configured date format."},"expireTime":{"type":"string","description":"Expiration time, in the content type's configured time format."},"neverExpire":{"type":"string","description":"Set to 'true' to mark the content as never expiring."},"whereToSend":{"type":"string","description":"Push-publishing target environment(s) for a 'Push Publish' action."},"filterKey":{"type":"string","description":"Push-publishing filter key for a 'Push Publish' action."},"query":{"type":"string","description":"Lucene query selecting the content to act on, as an alternative to 'contentlet'."},"pathToMove":{"type":"string","description":"Target folder path for a 'Move' action."},"timezoneId":{"type":"string","description":"Timezone ID (e.g. 'America/New_York') used to interpret the publish/expire date-times."},"individualPermissions":{"type":"object","additionalProperties":{"type":"array","description":"Per-content individual permissions to apply, keyed by permission type (READ, WRITE, PUBLISH, etc.) to a list of user/role IDs.","items":{"type":"string","description":"Per-content individual permissions to apply, keyed by permission type (READ, WRITE, PUBLISH, etc.) to a list of user/role IDs."}},"description":"Per-content individual permissions to apply, keyed by permission type (READ, WRITE, PUBLISH, etc.) to a list of user/role IDs."},"iwantTo":{"type":"string"},"contentlet":{"type":"object","additionalProperties":{"type":"object","description":"The contentlet to create or edit, as a flat map of field-variable names to values. Polymorphic: the allowed fields depend on the content type.\n\n**System fields (all content):**\n- `contentType` *(string)* — the content type's variable name (e.g. 'webPageContent'). Required when creating.\n- `languageId` *(number)* — language ID; defaults to the system default language when omitted.\n- `contentHost` *(string)* — host (site) **identifier** the content belongs to, **or** `hostFolder` *(string)* — a folder **identifier**. Supply one of these.\n- `inode` / `identifier` *(string)* — include the existing identifier (and optionally inode) to edit existing content; omit both to create new.\n\n⚠️ Do **not** set `host` — use `contentHost` (host id) or `hostFolder` (folder id) instead.\n\n**Host defaulting (common wrong-host trap):** if you omit `contentHost`/`hostFolder` when creating, the content does NOT go to the current/default site — it inherits the **content type's own host**, which is `SYSTEM_HOST` unless the type was explicitly created on a site. So content of a `SYSTEM_HOST` content type silently lands on `SYSTEM_HOST`, where it is invisible to another site's URL-maps and to host-scoped searches (`+conHost:`). Always pass `contentHost:` (the site **identifier UUID**, not the hostname) to place content on a specific site.\n\n**Constant fields are content-type configuration, not contentlet data.** Fields whose `clazz` is `ImmutableConstantField` are shared by the content type. Keys for them in this `contentlet` map are silently ignored even when the workflow response is HTTP 200/live. For example, a WIDGET's `widgetCode` must be written to the field's `values` property via the content-type field API, not included in a widget contentlet.\n\n**Pages (`contentType: 'htmlpageasset'`)** additionally use:\n- `title` *(string)* — the page title.\n- `url` *(string)* — the page name (the last URL segment) within `hostFolder`.\n- `template` *(string)* — identifier of the template to render the page.\n- `cachettl` *(number)* — page cache time-to-live in seconds.\n- `sortOrder` *(number)* — sort order within the folder.\n\nNote: there is no dedicated page-create endpoint — pages are created by firing an action with an `htmlpageasset` contentlet.","example":{"contentType":"htmlpageasset","languageId":1,"hostFolder":"48190c8c-42c4-46af-8d1a-0cd5db894797","title":"My Page","url":"my-page","template":"8e63a9c0-...","cachettl":15,"sortOrder":0}},"description":"The contentlet to create or edit, as a flat map of field-variable names to values. Polymorphic: the allowed fields depend on the content type.\n\n**System fields (all content):**\n- `contentType` *(string)* — the content type's variable name (e.g. 'webPageContent'). Required when creating.\n- `languageId` *(number)* — language ID; defaults to the system default language when omitted.\n- `contentHost` *(string)* — host (site) **identifier** the content belongs to, **or** `hostFolder` *(string)* — a folder **identifier**. Supply one of these.\n- `inode` / `identifier` *(string)* — include the existing identifier (and optionally inode) to edit existing content; omit both to create new.\n\n⚠️ Do **not** set `host` — use `contentHost` (host id) or `hostFolder` (folder id) instead.\n\n**Host defaulting (common wrong-host trap):** if you omit `contentHost`/`hostFolder` when creating, the content does NOT go to the current/default site — it inherits the **content type's own host**, which is `SYSTEM_HOST` unless the type was explicitly created on a site. So content of a `SYSTEM_HOST` content type silently lands on `SYSTEM_HOST`, where it is invisible to another site's URL-maps and to host-scoped searches (`+conHost:`). Always pass `contentHost:` (the site **identifier UUID**, not the hostname) to place content on a specific site.\n\n**Constant fields are content-type configuration, not contentlet data.** Fields whose `clazz` is `ImmutableConstantField` are shared by the content type. Keys for them in this `contentlet` map are silently ignored even when the workflow response is HTTP 200/live. For example, a WIDGET's `widgetCode` must be written to the field's `values` property via the content-type field API, not included in a widget contentlet.\n\n**Pages (`contentType: 'htmlpageasset'`)** additionally use:\n- `title` *(string)* — the page title.\n- `url` *(string)* — the page name (the last URL segment) within `hostFolder`.\n- `template` *(string)* — identifier of the template to render the page.\n- `cachettl` *(number)* — page cache time-to-live in seconds.\n- `sortOrder` *(number)* — sort order within the folder.\n\nNote: there is no dedicated page-create endpoint — pages are created by firing an action with an `htmlpageasset` contentlet.","example":{"contentType":"htmlpageasset","languageId":1,"hostFolder":"48190c8c-42c4-46af-8d1a-0cd5db894797","title":"My Page","url":"my-page","template":"8e63a9c0-...","cachettl":15,"sortOrder":0}}},"description":"Form used to fire a workflow action. The content being acted on is supplied in the 'contentlet' map; the remaining fields are workflow/publishing options applied by the action."},"AdditionalParamsBean":{"type":"object","properties":{"pushPublish":{"$ref":"#/components/schemas/PushPublishBean"},"assignComment":{"$ref":"#/components/schemas/AssignCommentBean"},"additionalParamsMap":{"type":"object","additionalProperties":{"type":"object","description":"Free-form map for actionlet-specific keys. Well-known keys: '_path_to_move' (String) — full target path including host, e.g. '//hostname/folder/path/'. Used by the Move actionlet when the resolved bulk action wires it. Silently ignored if no Move actionlet is in the resolved action.","example":{"_path_to_move":"//demo.dotcms.com/destination/folder/"}},"description":"Free-form map for actionlet-specific keys. Well-known keys: '_path_to_move' (String) — full target path including host, e.g. '//hostname/folder/path/'. Used by the Move actionlet when the resolved bulk action wires it. Silently ignored if no Move actionlet is in the resolved action.","example":{"_path_to_move":"//demo.dotcms.com/destination/folder/"}},"pushPublishBean":{"$ref":"#/components/schemas/PushPublishBean"},"assignCommentBean":{"$ref":"#/components/schemas/AssignCommentBean"}},"description":"Action-specific parameters for bulk fire. Wraps push-publish settings, assign-and-comment metadata, and a free-form map for actionlet-specific keys."},"AssignCommentBean":{"type":"object","properties":{"assign":{"type":"string","description":"Identifier of the user or role to next receive the workflow task. Empty string keeps the existing assignee."},"comment":{"type":"string","description":"Free-form comment recorded against the workflow task."}},"description":"Assignee and comment to attach to the workflow task created when an action is fired."},"FireBulkActionsForm":{"required":["workflowActionId"],"type":"object","properties":{"query":{"type":"string","description":"Lucene query that selects the contentlets to act on. Mutually exclusive with 'contentletIds'.","example":"+contentType:webPageContent +languageId:1"},"contentletIds":{"type":"array","description":"Explicit list of contentlet identifiers to act on. Mutually exclusive with 'query'.","items":{"type":"string","description":"Explicit list of contentlet identifiers to act on. Mutually exclusive with 'query'."}},"workflowActionId":{"type":"string","description":"The workflow action identifier (UUID) to fire. Discover via GET /api/v1/workflow/schemes/{schemeId}/actions or GET /api/v1/workflow/contentlet/{inode}/actions. Not the system action enum value (NEW, EDIT, PUBLISH, …).","example":"ceca4ee9-1b7b-4f21-a5f4-5d8e9b8b8a1d"},"additionalParams":{"$ref":"#/components/schemas/AdditionalParamsBean"},"popupParamsBean":{"$ref":"#/components/schemas/AdditionalParamsBean"}},"description":"Request body for PUT /api/v1/workflow/contentlet/actions/bulk/fire. Either 'query' OR 'contentletIds' must be supplied (not both). 'workflowActionId' is required and must belong to the workflow scheme that owns the input contentlets — otherwise the contentlets are skipped and the response returns a non-empty 'skippedCount' with a 'skipReason'. To bypass scheme checks (e.g. for System Workflow actions like Move on content from a non-system scheme), use PUT /api/v1/workflow/actions/{actionId}/fire instead."},"PushPublishBean":{"type":"object","properties":{"whereToSend":{"type":"string","description":"Push-publish environment identifier or name to receive the content."},"publishDate":{"type":"string","description":"Publish date (yyyy-MM-dd)."},"publishTime":{"type":"string","description":"Publish time (HH:mm)."},"expireDate":{"type":"string","description":"Expire date (yyyy-MM-dd). Ignored when 'neverExpire' is true."},"expireTime":{"type":"string","description":"Expire time (HH:mm). Ignored when 'neverExpire' is true."},"neverExpire":{"type":"string","description":"If 'true', the content does not expire. Overrides expireDate/expireTime."},"filterKey":{"type":"string","description":"Push-publish filter key (defines what gets bundled with the content)."},"iWantTo":{"type":"string","writeOnly":true},"timezoneId":{"type":"string","description":"Timezone identifier (e.g. 'America/New_York') for publish/expire dates."},"iwantTo":{"type":"string"}},"description":"Push-publish settings applied when the resolved workflow action wires the Push Publish actionlet."},"ActionFail":{"type":"object","properties":{"identifier":{"type":"string"},"inode":{"type":"string"},"errorMessage":{"type":"string"}}},"BulkActionsResultView":{"type":"object","properties":{"successCount":{"type":"integer","format":"int64"},"skippedCount":{"type":"integer","format":"int64"},"fails":{"type":"array","items":{"$ref":"#/components/schemas/ActionFail"}},"skipReason":{"type":"string"}}},"ResponseEntityBulkActionsResultView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/BulkActionsResultView"},"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"}}},"FireMultipleActionForm":{"type":"object","properties":{"comments":{"type":"string"},"assign":{"type":"string"},"publishDate":{"type":"string"},"publishTime":{"type":"string"},"expireDate":{"type":"string"},"expireTime":{"type":"string"},"neverExpire":{"type":"string"},"whereToSend":{"type":"string"},"filterKey":{"type":"string"},"timezoneId":{"type":"string"},"iwantTo":{"type":"string"},"contentlet":{"type":"array","items":{"type":"object","additionalProperties":{"type":"object"}}}}},"BulkActionView":{"type":"object","properties":{"schemes":{"type":"array","items":{"$ref":"#/components/schemas/BulkWorkflowSchemeView"}}}},"BulkWorkflowSchemeView":{"type":"object","properties":{"scheme":{"$ref":"#/components/schemas/WorkflowScheme"},"steps":{"type":"array","items":{"$ref":"#/components/schemas/BulkWorkflowStepView"}}}},"BulkWorkflowStepView":{"type":"object","properties":{"step":{"$ref":"#/components/schemas/CountWorkflowStep"},"actions":{"type":"array","items":{"$ref":"#/components/schemas/CountWorkflowAction"}}}},"CountWorkflowAction":{"type":"object","properties":{"count":{"type":"integer","format":"int64"},"workflowAction":{"$ref":"#/components/schemas/WorkflowAction"},"pushPublish":{"type":"boolean"},"moveable":{"type":"boolean"},"conditionPresent":{"type":"boolean"}}},"CountWorkflowStep":{"type":"object","properties":{"count":{"type":"integer","format":"int64"},"workflowStep":{"$ref":"#/components/schemas/WorkflowStep"}}},"ResponseEntityBulkActionView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/BulkActionView"},"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"}}},"BulkActionForm":{"type":"object","properties":{"contentletIds":{"type":"array","items":{"type":"string"}},"query":{"type":"string"}}},"ContentletWorkflowStatusView":{"type":"object","properties":{"step":{"$ref":"#/components/schemas/WorkflowStep"},"scheme":{"$ref":"#/components/schemas/WorkflowScheme"},"task":{"$ref":"#/components/schemas/WorkflowTask"}}},"ResponseContentletWorkflowStatusView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/ContentletWorkflowStatusView"},"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"}}},"WorkflowTask":{"type":"object","properties":{"id":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"modDate":{"type":"string","format":"date-time"},"dueDate":{"type":"string","format":"date-time"},"createdBy":{"type":"string"},"assignedTo":{"type":"string"},"belongsTo":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"status":{"type":"string"},"webasset":{"type":"string"},"languageId":{"type":"integer","format":"int64"},"inode":{"type":"string"},"new":{"type":"boolean"}}},"ResponseEntityWorkflowTasksView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/WorkflowSearchResultsView"},"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"}}},"WorkflowSearchResultsView":{"type":"object","properties":{"totalCount":{"type":"integer","format":"int32"},"workflowTasks":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowTaskView"}}}},"WorkflowTaskView":{"type":"object","properties":{"id":{"type":"string"},"assignedTo":{"type":"string"},"assignedUserName":{"type":"string"},"createdBy":{"type":"string"},"description":{"type":"string"},"belongsTo":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"dueDate":{"type":"string","format":"date-time"},"languageId":{"type":"integer","format":"int64"},"modDate":{"type":"string","format":"date-time"},"title":{"type":"string"},"status":{"type":"string"}}},"WorkflowSearcherForm":{"type":"object","properties":{"keywords":{"type":"string"},"assignedTo":{"type":"string"},"daysOld":{"type":"integer","format":"int32"},"schemeId":{"type":"string"},"stepId":{"type":"string"},"open":{"type":"boolean"},"closed":{"type":"boolean"},"createdBy":{"type":"string"},"show4all":{"type":"boolean"},"orderBy":{"type":"string"},"count":{"type":"integer","format":"int32"},"page":{"type":"integer","format":"int32"}}},"ResponseEntityWorkflowHistoryCommentsView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowTimelineItemView"}},"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"}}},"WorkflowTimelineItemView":{"type":"object","properties":{"createdDate":{"type":"string","format":"date-time"},"roleId":{"type":"string"},"postedBy":{"type":"string"},"commentDescription":{"type":"string"},"taskId":{"type":"string"},"type":{"type":"string"},"step":{"type":"object","additionalProperties":{"type":"string"}},"action":{"type":"object","additionalProperties":{"type":"string"}}}},"Permission":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"inode":{"type":"string"},"permission":{"type":"integer","format":"int32"},"type":{"type":"string"},"individualPermission":{"type":"boolean"},"bitPermission":{"type":"boolean"},"roleId":{"type":"string"}}},"WorkflowActionClassParameter":{"type":"object","properties":{"id":{"type":"string"},"actionClassId":{"type":"string"},"key":{"type":"string"},"value":{"type":"string"}}},"WorkflowSchemeImportExportObjectView":{"type":"object","properties":{"version":{"type":"string"},"schemes":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowScheme"}},"steps":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowStep"}},"actions":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowAction"}},"actionSteps":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}}},"actionClasses":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowActionClass"}},"actionClassParams":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowActionClassParameter"}},"schemeSystemActionWorkflowActionMappings":{"type":"array","items":{"$ref":"#/components/schemas/SystemActionWorkflowActionMapping"}}}},"WorkflowSchemeImportObjectForm":{"type":"object","properties":{"workflowObject":{"$ref":"#/components/schemas/WorkflowSchemeImportExportObjectView"},"permissions":{"type":"array","items":{"$ref":"#/components/schemas/Permission"}}}},"WorkflowReorderWorkflowActionStepForm":{"required":["order"],"type":"object","properties":{"order":{"type":"integer","format":"int32"}}},"WorkflowActionForm":{"required":["actionAssignable","actionCommentable","actionName","actionNextStep","actionRoleHierarchyForAssign","schemeId","showOn"],"type":"object","properties":{"actionId":{"type":"string"},"schemeId":{"type":"string"},"stepId":{"type":"string"},"actionName":{"type":"string"},"whoCanUse":{"type":"array","items":{"type":"string"}},"actionIcon":{"type":"string"},"actionAssignable":{"type":"boolean"},"actionCommentable":{"type":"boolean"},"showOn":{"uniqueItems":true,"type":"array","items":{"type":"string","enum":["NEW","LOCKED","UNLOCKED","PUBLISHED","UNPUBLISHED","ARCHIVED","LISTING","EDITING"]}},"actionRoleHierarchyForAssign":{"type":"boolean"},"actionNextStep":{"type":"string"},"actionNextAssign":{"type":"string"},"actionCondition":{"type":"string"},"metadata":{"type":"object","additionalProperties":{"type":"object"}}}},"WorkflowActionStepForm":{"required":["actionId"],"type":"object","properties":{"actionId":{"type":"string"}}},"WorkflowActionletActionForm":{"required":["actionletClass"],"type":"object","properties":{"actionletClass":{"type":"string"},"order":{"type":"integer","format":"int32"},"parameters":{"type":"object","additionalProperties":{"type":"string"}}}},"ResponseEntityWorkflowCommentView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/WorkflowTimelineItemView"},"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"}}},"WorkflowCommentForm":{"type":"object","properties":{"comment":{"type":"string"}}},"WorkflowSchemeForm":{"required":["schemeName"],"type":"object","properties":{"schemeName":{"type":"string"},"schemeDescription":{"type":"string"},"schemeArchived":{"type":"boolean"}}},"WorkflowSystemActionForm":{"required":["actionId","systemAction"],"type":"object","properties":{"actionId":{"type":"string"},"schemeId":{"type":"string"},"contentTypeVariable":{"type":"string"},"systemAction":{"type":"string","enum":["NEW","EDIT","PUBLISH","UNPUBLISH","ARCHIVE","UNARCHIVE","DELETE","DESTROY","LOCK","UNLOCK"]}}},"WorkflowStepUpdateForm":{"required":["enableEscalation","escalationTime","stepName","stepOrder","stepResolved"],"type":"object","properties":{"stepOrder":{"type":"integer","format":"int32"},"stepName":{"type":"string"},"enableEscalation":{"type":"boolean"},"escalationAction":{"type":"string"},"escalationTime":{"type":"string"},"stepResolved":{"type":"boolean"}}},"FileAssetView":{"type":"object","properties":{"identifier":{"type":"string","description":"Asset identifier","example":"48190c8c-42c4-46af-8d1a-0cd5db894797"},"inode":{"type":"string","description":"Asset inode","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"},"name":{"type":"string","description":"File name","example":"banner.vtl"},"path":{"type":"string","description":"Host-qualified path to the asset","example":"//demo.dotcms.com/application/containers/default/banner.vtl"},"lang":{"type":"string","description":"Language tag for the asset version","example":"en-US"},"live":{"type":"boolean","description":"Whether this is the live (published) version","example":false},"working":{"type":"boolean","description":"Whether this is the working version","example":true},"fileSize":{"type":"integer","description":"File size in bytes as stored in the content repository","format":"int64","example":4096}},"description":"File asset view returned after a save or publish operation"},"ResponseEntityFileAssetView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/FileAssetView"},"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"}},"description":"Response entity wrapping a FileAssetView after a save or publish operation"},"ResponseEntityViewLanguage":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/Language"},"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"}}},"MakeDefaultLangForm":{"type":"object","properties":{"fireTransferAssetsJob":{"type":"boolean"}}},"LanguageForm":{"type":"object","properties":{"languageCode":{"type":"string"},"countryCode":{"type":"string"},"language":{"type":"string"},"country":{"type":"string"},"isoCode":{"type":"string"}}},"ResponseEntityTagCreateView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"object","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/RestTag"}}},"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"}}},"ResponseEntityTagInodesMapView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/TagInode"}},"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"}}},"ResponseEntityRestTagView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/RestTag"},"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"}}},"ResponseEntityTagMapView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/RestTag"}},"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"}}},"FieldResponseView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"type":"array","items":{"$ref":"#/components/schemas/Field"}},"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"}}},"DeleteFieldsForm":{"type":"object","properties":{"fieldsID":{"type":"array","items":{"type":"string"}}}},"MoveFieldsForm":{"type":"object"},"UpdateFieldRequestView":{"required":["field"],"type":"object","properties":{"field":{"$ref":"#/components/schemas/ContentTypeFieldView"}},"description":"Request body for updating one content-type field. The field object must be wrapped in the top-level `field` property."},"UpdateFieldForm":{"type":"object","properties":{"field":{"$ref":"#/components/schemas/Field"}}},"MetricCalculationError":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"category":{"type":"string","enum":["DIFFERENTIATING_FEATURES","PAID_FEATURES","PLATFORM_SPECIFIC_CUSTOMIZATION","SOPHISTICATED_CONTENT_ARCHITECTURE","POSITIVE_USER_EXPERIENCE","PLATFORM_SPECIFIC_DEVELOPMENT","RECENT_ACTIVITY","HISTORY_LEGACY_DEPRECATED_FEATURES"]},"feature":{"type":"string","enum":["CONTENTLETS","LANGUAGES","CONTENT_TYPES","SITES","URL_MAPS","WORKFLOW","USERS","SITE_SEARCH","IMAGE_API","LAYOUT","CONTENT_TYPE_FIELDS","AI","EXPERIMENTS"]},"error":{"type":"string"},"type":{"$ref":"#/components/schemas/Metric"}}},"MetricTiming":{"type":"object","properties":{"metricName":{"type":"string"},"durationMs":{"type":"integer","format":"int64"},"cacheHit":{"type":"boolean"},"computationMs":{"type":"integer","format":"int64"},"timedOut":{"type":"boolean"},"slow":{"type":"boolean"}}},"MetricValue":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"category":{"type":"string","enum":["DIFFERENTIATING_FEATURES","PAID_FEATURES","PLATFORM_SPECIFIC_CUSTOMIZATION","SOPHISTICATED_CONTENT_ARCHITECTURE","POSITIVE_USER_EXPERIENCE","PLATFORM_SPECIFIC_DEVELOPMENT","RECENT_ACTIVITY","HISTORY_LEGACY_DEPRECATED_FEATURES"]},"feature":{"type":"string","enum":["CONTENTLETS","LANGUAGES","CONTENT_TYPES","SITES","URL_MAPS","WORKFLOW","USERS","SITE_SEARCH","IMAGE_API","LAYOUT","CONTENT_TYPE_FIELDS","AI","EXPERIMENTS"]},"value":{"type":"object"}}},"MetricsSnapshot":{"type":"object","properties":{"stats":{"type":"array","items":{"$ref":"#/components/schemas/MetricValue"}},"errors":{"type":"array","items":{"$ref":"#/components/schemas/MetricCalculationError"}},"timings":{"type":"array","items":{"$ref":"#/components/schemas/MetricTiming"}},"notNumericMetricValues":{"type":"array","items":{"$ref":"#/components/schemas/MetricValue"}}}},"ResponseEntityMetricsSnapshotView":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorEntity"}},"entity":{"$ref":"#/components/schemas/MetricsSnapshot"},"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"}}}}}}