openapi: 3.0.3 info: title: djangocms-rest Breadcrumbs Pages API description: Read-only REST/JSON API for Django CMS that enables decoupled frontend applications to consume CMS-managed content. Built on Django REST Framework with OpenAPI 3 schema generation via drf-spectacular. Supports multi-language, multi-site, draft/preview access, and is compatible with Redis/Memcached caching. version: 1.0.0 contact: name: Django CMS Association email: info@django-cms.org url: https://www.django-cms.org/en/ license: name: BSD 3-Clause url: https://github.com/django-cms/djangocms-rest/blob/main/LICENSE x-logo: url: https://www.django-cms.org/static/img/django-cms-logo.svg servers: - url: https://example.com/api description: Default server (customize per deployment) tags: - name: Pages description: CMS page content and tree structure paths: /{language}/pages-tree/: get: operationId: page_tree_list_retrieve summary: Page tree description: Returns all pages for the given language as a nested tree structure. tags: - Pages parameters: - $ref: '#/components/parameters/language' - $ref: '#/components/parameters/preview' responses: '200': description: Nested page tree content: application/json: schema: type: array items: $ref: '#/components/schemas/PageMeta' '404': description: Language not found or no pages available /{language}/pages-list/: get: operationId: page_list_retrieve summary: Flat page list description: Returns a paginated flat list of all pages for the given language. tags: - Pages parameters: - $ref: '#/components/parameters/language' - $ref: '#/components/parameters/preview' - name: limit in: query description: Number of results to return per page schema: type: integer - name: offset in: query description: The initial index from which to return the results schema: type: integer responses: '200': description: Paginated page list content: application/json: schema: $ref: '#/components/schemas/PaginatedPageList' '404': description: Language not found /{language}/pages/: get: operationId: page_root_retrieve summary: Root page detail description: Retrieve the root (home) page for the given language, including its placeholders. tags: - Pages parameters: - $ref: '#/components/parameters/language' - $ref: '#/components/parameters/preview' - $ref: '#/components/parameters/html' responses: '200': description: Page content with placeholders content: application/json: schema: $ref: '#/components/schemas/PageContent' '404': description: Page not found /{language}/pages/{path}/: get: operationId: page_detail_retrieve summary: Page detail by path description: Retrieve a specific page by its URL path for the given language, including its placeholders. tags: - Pages parameters: - $ref: '#/components/parameters/language' - name: path in: path required: true description: URL path of the page (e.g. "blog/my-post") schema: type: string - $ref: '#/components/parameters/preview' - $ref: '#/components/parameters/html' responses: '200': description: Page content with placeholders content: application/json: schema: $ref: '#/components/schemas/PageContent' '404': description: Page not found /{language}/page_search/: get: operationId: page_search_retrieve summary: Search pages description: Search pages by a query string for the given language. tags: - Pages parameters: - $ref: '#/components/parameters/language' - name: q in: query required: true description: Search query string schema: type: string - $ref: '#/components/parameters/preview' responses: '200': description: List of matching pages content: application/json: schema: type: array items: $ref: '#/components/schemas/PageList' '404': description: Language not found components: schemas: PageContent: allOf: - $ref: '#/components/schemas/PageBase' description: Full page detail including placeholder content properties: placeholders: type: array items: $ref: '#/components/schemas/Placeholder' description: Ordered list of placeholders defined by the page template Placeholder: type: object description: A placeholder containing structured plugin content properties: slot: type: string description: Template slot name for this placeholder label: type: string description: Human-readable label for the placeholder language: type: string description: Language code of the content content: type: array items: type: object description: Nested list of serialized plugin data objects. Each object has a "plugin_type" field identifying its type, plus plugin-specific properties. details: type: string format: uri description: API URL to retrieve this placeholder directly html: type: string default: '' description: Server-rendered HTML output (only present when ?html=1 is requested) required: - slot - label - language - details PageMeta: allOf: - $ref: '#/components/schemas/PageBase' description: Page with nested children for tree representation properties: children: type: array items: $ref: '#/components/schemas/PageMeta' default: [] description: Child pages in the tree PageBase: type: object description: Core fields shared by all page representations properties: title: type: string maxLength: 255 description: Page title page_title: type: string maxLength: 255 description: Page title used in