Document Object

A document publication returned by the Publications endpoints has this top-level shape:

{
  "systemdata": {},
  "metadata": {},
  "content": [],
  "references": []
}

The systemdata field has a fixed schema. The metadata and content fields depend on your project's content type configuration and design. The references array is computed from metadata and content. See References for the full reference object documentation.

Systemdata

The systemdata object contains internal Livingdocs identifiers and publication timestamps.

PropertyTypeDescription
projectId
integer

The project this document belongs to.

channelId
integer

Legacy. The channel this document belongs to. Always identical to the project id.

documentId
integer

Unique identifier for the document.

contentType
string

The content type handle as configured in the project (e.g. regular, article, page). Depends on the content types defined in your project configuration.

documentType
string

Always one of article, page, or data-record.

publicationId
integer

Identifier of this publication version. Increments with each publish.

firstPublicationDate
string (ISO 8601)

Timestamp of the first publication.

significantPublicationDate
string (ISO 8601)

Equals firstPublicationDate unless Publish Control is enabled for the content type. When enabled, editors can mark a republish as significant to update this value. Useful for "Updated at" labels on articles.

visiblePublicationDate
string (ISO 8601)

Equals firstPublicationDate unless Publish Control is enabled for the content type. When enabled, how this value is computed can be configured.

updatedAt
string (ISO 8601)

Timestamp of the last publication update.

layout
string

Legacy. Do not use.

design.name
string

Name of the Livingdocs design. This is a computed value that can differ between environments.

design.version
string

Version of the design (semver). This value changes when there are project config changes in designSettings or components.

Metadata

Metadata fields are project-configurable. The shape of the metadata object depends on the metadata plugins configured for the document's content type.

An example setup might include fields like title, description, slug, and teaserImage (using li-image):

{
  "metadata": {
    "title": "Climate Summit Opens in Geneva",
    "description": "World leaders gather to discuss emission targets.",
    "slug": "climate-summit-opens-in-geneva",
    "teaserImage": {
      "originalUrl": "https://storage.example.com/images/summit.jpg",
      "url": "https://images.example.com/summit.jpg",
      "mediaId": "lk3j4h5g",
      "width": 1600,
      "height": 900,
      "mimeType": "image/jpeg",
      "imageService": "imgix",
      "crops": [
        {
          "name": "desktop",
          "x": 0,
          "y": 50,
          "width": 1200,
          "height": 675
        }
      ]
    }
  }
}

Content

The content array contains the document's component tree. Each entry represents a design component with its content and optional nested containers.

PropertyTypeDescription
id
string

Unique component instance identifier (e.g. doc-1b8i1ksh10).

component
string

The component name as defined in the design (e.g. head, paragraph, image).

identifier
string

Legacy. Fully qualified identifier in the format designName.componentName. Use component instead — it is simpler and consistent across environments.

content
object

Key-value map of directive values. Keys are directive names, values depend on the directive type (text, image reference, etc.).

styles
object

Style properties applied to this component instance.

containers
object

Named container slots that hold nested component arrays. Keys are container names, values are arrays of child components.

The available components, their directives, and container structure depend on the designSettings and components configured in your project config as well as which components can be used for a content type.

Include Directives

When a component has a doc-include directive, the directive value in content contains the include service name, its parameters, and optionally content overrides. Overrides are present when the include service returns editableContent: true and editors have modified the rendered content (see Editable Content).

{
  "id": "doc-2c95a77x14",
  "component": "article-teaser",
  "content": {
    "teaser": {
      "service": "article-teaser-service",
      "params": {
        "article": {
          "$ref": "document",
          "reference": {"id": "42"}
        }
      },
      "overrides": [
        {
          "id": "teaser-42",
          "content": {
            "title": "Custom teaser title for this page"
          },
          "originalSnapshot": {
            "title": "Original article title"
          },
          "contentProperties": ["title"]
        }
      ]
    }
  }
}

The overrides array is only present when editors have made local edits. Each entry targets a specific rendered component (matched by id) and contains:

  • content — the overridden directive values
  • originalSnapshot — the source values at the time of the edit
  • contentProperties — which directive names were edited

When no overrides exist, the directive value contains only service and params (no overrides key).

Example with nested containers

{
  "content": [
    {
      "id": "doc-abc123",
      "component": "head",
      "content": {
        "title": "Climate Summit Opens in Geneva",
        "text": "World leaders gather to discuss emission targets."
      }
    },
    {
      "id": "doc-def456",
      "component": "container",
      "containers": {
        "main": [
          {
            "id": "doc-ghi789",
            "component": "paragraph",
            "content": {
              "text": "The first day focused on renewable energy commitments."
            }
          }
        ]
      }
    }
  ]
}

References

The references array lists all resources referenced by this document. Livingdocs extracts these automatically from metadata and content. They are used by the Incoming Publication References, Incoming Media References.

See References for the full reference object documentation including all types, locations, and fields.

Complete Example

{
  "systemdata": {
    "projectId": 1,
    "channelId": 1,
    "documentId": 1,
    "contentType": "article",
    "documentType": "article",
    "publicationId": 1,
    "firstPublicationDate": "2022-03-16T14:08:11.000Z",
    "significantPublicationDate": "2022-10-26T07:25:00.000Z",
    "visiblePublicationDate": "2022-10-27T06:00:00.000Z",
    "updatedAt": "2023-03-18T16:32:04.170Z",
    "design": {
      "name": "timeline",
      "version": "1.1.0"
    }
  },
  "metadata": {
    "title": "a title",
    "description": "some lead",
    "teaserImage": {
      "originalUrl": "https://storage.example.com/images/teaser.jpg",
      "url": "https://images.example.com/teaser.jpg",
      "mediaId": "lk3j4h5g",
      "width": 1600,
      "height": 900,
      "mimeType": "image/jpeg",
      "imageService": "imgix"
    }
  },
  "content": [
    {
      "id": "doc-1b8i1ksh10",
      "component": "head",
      "content": {
        "title": "a title",
        "text": "some lead"
      }
    },
    {
      "id": "doc-2c95a77x14",
      "component": "teaser",
      "content": {
        "embed-teaser": {
          "service": "embed-teaser",
          "params": {
            "document": {
              "$ref": "document",
              "reference": {"id": "7"}
            }
          }
        }
      }
    }
  ],
  "references": [
    {
      "id": "lk3j4h5g",
      "type": "image",
      "location": "metadata",
      "propertyName": "teaserImage"
    },
    {
      "id": "7",
      "type": "document",
      "location": "include-directive",
      "componentId": "doc-2c95a77x14",
      "componentName": "teaser",
      "directiveName": "embed-teaser",
      "serviceName": "embed-teaser",
      "propertyName": "document"
    }
  ]
}
⌘ K to search