> For the complete documentation index, see [llms.txt](https://docs.erathos.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.erathos.com/connectors/apis/confluence.md).

# Confluence

Connect your Confluence wiki to your data warehouse. Sync spaces, pages, blogposts, comments, labels, and tasks to BigQuery, Redshift, PostgreSQL, Databricks, and more.

## Using the Erathos platform

When selecting Confluence as a new connector on the Erathos platform, you will need to name your connection and fill in the following form:

* **Site** — your Confluence site subdomain (for example, `mycompany` if you access Confluence at `mycompany.atlassian.net`)
* **Token** — your Atlassian API token, validated together with your Atlassian account email to authenticate all requests to the Confluence API

With this connection created you can seamlessly move your Confluence data to your BigQuery, Redshift or PostgreSQL data warehouse.

### How to find my token?

Confluence authenticates with Atlassian API tokens using Basic authentication. To generate one, go to <https://id.atlassian.com/manage-profile/security/api-tokens> and click **Create API token**. Give the token a label (for example, `Erathos`) and click **Create** — the token value is displayed only once, so copy it right away.

Make sure the Atlassian account you used to generate the token has access to the Confluence site you want to sync. The API token is validated together with your Atlassian account email, and both must belong to the account that can access your `{site}.atlassian.net` Confluence instance.

In the Erathos platform, fill in the **Site** field with your Confluence subdomain (for example, `mycompany`) and paste the API token into the **Token** field. Click **Save and close** to complete the setup.

## Endpoints and fields

### spaces

Sync type availability: Full-refresh

Parent of [space\_detail](#space_detail), [space\_labels](#space_labels), [space\_operations](#space_operations), [space\_permission\_assignments](#space_permission_assignments), [space\_properties](#space_properties), [space\_role\_assignments](#space_role_assignments), [spaces\_blogposts](#spaces_blogposts), [spaces\_content\_labels](#spaces_content_labels), [spaces\_pages](#spaces_pages)

| Field       | Type |
| ----------- | ---- |
| id          | text |
| key         | text |
| name        | text |
| type        | text |
| status      | text |
| authorId    | text |
| homepageId  | text |
| description | json |
| icon        | json |
| \_links     | json |

### space\_detail

Sync type availability: Full-refresh

Child of [spaces](#spaces)

| Field           | Type |
| --------------- | ---- |
| id              | text |
| key             | text |
| name            | text |
| type            | text |
| status          | text |
| authorId        | text |
| homepageId      | text |
| description     | json |
| icon            | json |
| \_links         | json |
| labels          | json |
| properties      | json |
| operations      | json |
| permissions     | json |
| roleAssignments | json |

### space\_labels

Sync type availability: Full-refresh

Child of [spaces](#spaces)

| Field   | Type |
| ------- | ---- |
| id      | text |
| prefix  | text |
| name    | text |
| \_links | json |

### space\_operations

Sync type availability: Full-refresh

Child of [spaces](#spaces)

| Field      | Type |
| ---------- | ---- |
| operation  | text |
| targetType | text |

### space\_permission\_assignments

Sync type availability: Full-refresh

Child of [spaces](#spaces)

| Field     | Type |
| --------- | ---- |
| id        | text |
| principal | json |
| type      | text |

### space\_properties

Sync type availability: Full-refresh

Child of [spaces](#spaces)

| Field   | Type |
| ------- | ---- |
| id      | text |
| key     | text |
| value   | json |
| version | json |
| \_links | json |

### space\_role\_assignments

Sync type availability: Full-refresh

Child of [spaces](#spaces)

| Field     | Type |
| --------- | ---- |
| id        | text |
| principal | json |

### spaces\_blogposts

Sync type availability: Full-refresh

Child of [spaces](#spaces)

| Field       | Type      |
| ----------- | --------- |
| id          | text      |
| status      | text      |
| title       | text      |
| spaceId     | text      |
| authorId    | text      |
| ownerId     | text      |
| lastOwnerId | text      |
| createdAt   | timestamp |
| version     | json      |
| \_links     | json      |

### spaces\_content\_labels

Sync type availability: Full-refresh

Child of [spaces](#spaces)

| Field   | Type |
| ------- | ---- |
| id      | text |
| prefix  | text |
| name    | text |
| \_links | json |

### spaces\_pages

Sync type availability: Full-refresh

Child of [spaces](#spaces)

| Field       | Type      |
| ----------- | --------- |
| id          | text      |
| status      | text      |
| title       | text      |
| spaceId     | text      |
| parentId    | text      |
| parentType  | text      |
| position    | text      |
| authorId    | text      |
| ownerId     | text      |
| lastOwnerId | text      |
| createdAt   | timestamp |
| version     | json      |
| \_links     | json      |

### pages

Sync type availability: Full-refresh

Parent of [pages\_attachments](#pages_attachments), [pages\_footer\_comments](#pages_footer_comments), [pages\_inline\_comments](#pages_inline_comments), [pages\_direct\_children](#pages_direct_children), [pages\_children](#pages_children), [pages\_ancestors](#pages_ancestors), [pages\_descendants](#pages_descendants), [page\_labels](#page_labels), [pages\_versions](#pages_versions), [page\_likes\_count](#page_likes_count), [page\_likes\_users](#page_likes_users), [page\_properties](#page_properties), [page\_operations](#page_operations), [page\_detail](#page_detail)

| Field       | Type      |
| ----------- | --------- |
| id          | text      |
| status      | text      |
| title       | text      |
| spaceId     | text      |
| parentId    | text      |
| parentType  | text      |
| position    | text      |
| authorId    | text      |
| ownerId     | text      |
| lastOwnerId | text      |
| createdAt   | timestamp |
| version     | json      |
| \_links     | json      |

### pages\_attachments

Sync type availability: Full-refresh

Child of [pages](#pages)

| Field                | Type      |
| -------------------- | --------- |
| id                   | text      |
| status               | text      |
| title                | text      |
| pageId               | text      |
| blogPostId           | text      |
| customContentId      | text      |
| authorId             | text      |
| createdAt            | timestamp |
| fileId               | text      |
| mediaType            | text      |
| mediaTypeDescription | text      |
| fileSize             | integer   |
| comment              | text      |
| version              | json      |
| \_links              | json      |

### pages\_footer\_comments

Sync type availability: Full-refresh

Child of [pages](#pages)

| Field      | Type      |
| ---------- | --------- |
| id         | text      |
| status     | text      |
| body       | json      |
| version    | json      |
| pageId     | text      |
| blogPostId | text      |
| authorId   | text      |
| createdAt  | timestamp |
| \_links    | json      |

### pages\_inline\_comments

Sync type availability: Full-refresh

Child of [pages](#pages)

| Field              | Type      |
| ------------------ | --------- |
| id                 | text      |
| status             | text      |
| body               | json      |
| version            | json      |
| pageId             | text      |
| blogPostId         | text      |
| authorId           | text      |
| createdAt          | timestamp |
| resolvedProperties | json      |
| \_links            | json      |

### pages\_direct\_children

Sync type availability: Full-refresh

Child of [pages](#pages)

| Field       | Type      |
| ----------- | --------- |
| id          | text      |
| status      | text      |
| title       | text      |
| spaceId     | text      |
| parentId    | text      |
| parentType  | text      |
| position    | text      |
| authorId    | text      |
| ownerId     | text      |
| lastOwnerId | text      |
| createdAt   | timestamp |
| version     | json      |
| \_links     | json      |

### pages\_children

Sync type availability: Full-refresh

Child of [pages](#pages)

| Field       | Type      |
| ----------- | --------- |
| id          | text      |
| status      | text      |
| title       | text      |
| spaceId     | text      |
| parentId    | text      |
| parentType  | text      |
| position    | text      |
| authorId    | text      |
| ownerId     | text      |
| lastOwnerId | text      |
| createdAt   | timestamp |
| version     | json      |
| \_links     | json      |

### pages\_ancestors

Sync type availability: Full-refresh

Child of [pages](#pages)

| Field       | Type      |
| ----------- | --------- |
| id          | text      |
| status      | text      |
| title       | text      |
| spaceId     | text      |
| parentId    | text      |
| parentType  | text      |
| position    | text      |
| authorId    | text      |
| ownerId     | text      |
| lastOwnerId | text      |
| createdAt   | timestamp |
| version     | json      |
| \_links     | json      |

### pages\_descendants

Sync type availability: Full-refresh

Child of [pages](#pages)

| Field       | Type      |
| ----------- | --------- |
| id          | text      |
| status      | text      |
| title       | text      |
| spaceId     | text      |
| parentId    | text      |
| parentType  | text      |
| position    | text      |
| authorId    | text      |
| ownerId     | text      |
| lastOwnerId | text      |
| createdAt   | timestamp |
| version     | json      |
| \_links     | json      |

### page\_labels

Sync type availability: Full-refresh

Child of [pages](#pages)

| Field   | Type |
| ------- | ---- |
| id      | text |
| prefix  | text |
| name    | text |
| \_links | json |

### pages\_versions

Sync type availability: Full-refresh

Child of [pages](#pages)

| Field     | Type      |
| --------- | --------- |
| number    | integer   |
| createdAt | timestamp |
| message   | text      |
| minorEdit | boolean   |
| authorId  | text      |

### page\_likes\_count

Sync type availability: Full-refresh

Child of [pages](#pages)

| Field   | Type    |
| ------- | ------- |
| likes   | integer |
| likedBy | integer |

### page\_likes\_users

Sync type availability: Full-refresh

Child of [pages](#pages)

| Field          | Type |
| -------------- | ---- |
| accountId      | text |
| userType       | text |
| accountStatus  | text |
| email          | text |
| publicName     | text |
| profilePicture | json |

### page\_properties

Sync type availability: Full-refresh

Child of [pages](#pages)

| Field   | Type |
| ------- | ---- |
| id      | text |
| key     | text |
| value   | json |
| version | json |
| \_links | json |

### page\_operations

Sync type availability: Full-refresh

Child of [pages](#pages)

| Field      | Type |
| ---------- | ---- |
| operation  | text |
| targetType | text |

### page\_detail

Sync type availability: Full-refresh

Child of [pages](#pages)

| Field                    | Type      |
| ------------------------ | --------- |
| id                       | text      |
| status                   | text      |
| title                    | text      |
| spaceId                  | text      |
| parentId                 | text      |
| parentType               | text      |
| position                 | text      |
| authorId                 | text      |
| ownerId                  | text      |
| lastOwnerId              | text      |
| createdAt                | timestamp |
| version                  | json      |
| \_links                  | json      |
| body                     | json      |
| labels                   | json      |
| properties               | json      |
| operations               | json      |
| likes                    | json      |
| versions                 | json      |
| isFavoritedByCurrentUser | boolean   |

### blogposts

Sync type availability: Full-refresh

Parent of [blogposts\_attachments](#blogposts_attachments), [blogposts\_footer\_comments](#blogposts_footer_comments), [blogposts\_inline\_comments](#blogposts_inline_comments), [blogpost\_labels](#blogpost_labels), [blogpost\_versions](#blogpost_versions), [blogpost\_likes\_count](#blogpost_likes_count), [blogpost\_likes\_users](#blogpost_likes_users), [blogpost\_properties](#blogpost_properties), [blogpost\_operations](#blogpost_operations), [blogpost\_detail](#blogpost_detail)

| Field       | Type      |
| ----------- | --------- |
| id          | text      |
| status      | text      |
| title       | text      |
| spaceId     | text      |
| authorId    | text      |
| ownerId     | text      |
| lastOwnerId | text      |
| createdAt   | timestamp |
| version     | json      |
| \_links     | json      |

### blogposts\_attachments

Sync type availability: Full-refresh

Child of [blogposts](#blogposts)

| Field                | Type      |
| -------------------- | --------- |
| id                   | text      |
| status               | text      |
| title                | text      |
| pageId               | text      |
| blogPostId           | text      |
| customContentId      | text      |
| authorId             | text      |
| createdAt            | timestamp |
| fileId               | text      |
| mediaType            | text      |
| mediaTypeDescription | text      |
| fileSize             | integer   |
| comment              | text      |
| version              | json      |
| \_links              | json      |

### blogposts\_footer\_comments

Sync type availability: Full-refresh

Child of [blogposts](#blogposts)

| Field      | Type      |
| ---------- | --------- |
| id         | text      |
| status     | text      |
| body       | json      |
| version    | json      |
| pageId     | text      |
| blogPostId | text      |
| authorId   | text      |
| createdAt  | timestamp |
| \_links    | json      |

### blogposts\_inline\_comments

Sync type availability: Full-refresh

Child of [blogposts](#blogposts)

| Field              | Type      |
| ------------------ | --------- |
| id                 | text      |
| status             | text      |
| body               | json      |
| version            | json      |
| pageId             | text      |
| blogPostId         | text      |
| authorId           | text      |
| createdAt          | timestamp |
| resolvedProperties | json      |
| \_links            | json      |

### blogpost\_labels

Sync type availability: Full-refresh

Child of [blogposts](#blogposts)

| Field   | Type |
| ------- | ---- |
| id      | text |
| prefix  | text |
| name    | text |
| \_links | json |

### blogpost\_versions

Sync type availability: Full-refresh

Child of [blogposts](#blogposts)

| Field     | Type      |
| --------- | --------- |
| number    | integer   |
| createdAt | timestamp |
| message   | text      |
| minorEdit | boolean   |
| authorId  | text      |

### blogpost\_likes\_count

Sync type availability: Full-refresh

Child of [blogposts](#blogposts)

| Field   | Type    |
| ------- | ------- |
| likes   | integer |
| likedBy | integer |

### blogpost\_likes\_users

Sync type availability: Full-refresh

Child of [blogposts](#blogposts)

| Field          | Type |
| -------------- | ---- |
| accountId      | text |
| userType       | text |
| accountStatus  | text |
| email          | text |
| publicName     | text |
| profilePicture | json |

### blogpost\_properties

Sync type availability: Full-refresh

Child of [blogposts](#blogposts)

| Field   | Type |
| ------- | ---- |
| id      | text |
| key     | text |
| value   | json |
| version | json |
| \_links | json |

### blogpost\_operations

Sync type availability: Full-refresh

Child of [blogposts](#blogposts)

| Field      | Type |
| ---------- | ---- |
| operation  | text |
| targetType | text |

### blogpost\_detail

Sync type availability: Full-refresh

Child of [blogposts](#blogposts)

| Field                    | Type      |
| ------------------------ | --------- |
| id                       | text      |
| status                   | text      |
| title                    | text      |
| spaceId                  | text      |
| authorId                 | text      |
| ownerId                  | text      |
| lastOwnerId              | text      |
| createdAt                | timestamp |
| version                  | json      |
| \_links                  | json      |
| body                     | json      |
| labels                   | json      |
| properties               | json      |
| operations               | json      |
| likes                    | json      |
| versions                 | json      |
| isFavoritedByCurrentUser | boolean   |

### attachments

Sync type availability: Full-refresh

Parent of [attachments\_labels](#attachments_labels), [attachment\_versions](#attachment_versions), [attachments\_footer\_comments](#attachments_footer_comments), [attachment\_properties](#attachment_properties), [attachment\_operations](#attachment_operations), [attachment\_detail](#attachment_detail)

| Field                | Type      |
| -------------------- | --------- |
| id                   | text      |
| status               | text      |
| title                | text      |
| pageId               | text      |
| blogPostId           | text      |
| customContentId      | text      |
| authorId             | text      |
| createdAt            | timestamp |
| fileId               | text      |
| mediaType            | text      |
| mediaTypeDescription | text      |
| fileSize             | integer   |
| comment              | text      |
| version              | json      |
| \_links              | json      |

### attachments\_labels

Sync type availability: Full-refresh

Child of [attachments](#attachments)

| Field   | Type |
| ------- | ---- |
| id      | text |
| prefix  | text |
| name    | text |
| \_links | json |

### attachment\_versions

Sync type availability: Full-refresh

Child of [attachments](#attachments)

| Field     | Type      |
| --------- | --------- |
| number    | integer   |
| createdAt | timestamp |
| message   | text      |
| minorEdit | boolean   |
| authorId  | text      |

### attachments\_footer\_comments

Sync type availability: Full-refresh

Child of [attachments](#attachments)

| Field      | Type      |
| ---------- | --------- |
| id         | text      |
| status     | text      |
| body       | json      |
| version    | json      |
| pageId     | text      |
| blogPostId | text      |
| authorId   | text      |
| createdAt  | timestamp |
| \_links    | json      |

### attachment\_properties

Sync type availability: Full-refresh

Child of [attachments](#attachments)

| Field   | Type |
| ------- | ---- |
| id      | text |
| key     | text |
| value   | json |
| version | json |
| \_links | json |

### attachment\_operations

Sync type availability: Full-refresh

Child of [attachments](#attachments)

| Field      | Type |
| ---------- | ---- |
| operation  | text |
| targetType | text |

### attachment\_detail

Sync type availability: Full-refresh

Child of [attachments](#attachments)

| Field                | Type      |
| -------------------- | --------- |
| id                   | text      |
| status               | text      |
| title                | text      |
| pageId               | text      |
| blogPostId           | text      |
| customContentId      | text      |
| authorId             | text      |
| createdAt            | timestamp |
| fileId               | text      |
| mediaType            | text      |
| mediaTypeDescription | text      |
| fileSize             | integer   |
| comment              | text      |
| version              | json      |
| \_links              | json      |
| labels               | json      |
| properties           | json      |
| operations           | json      |
| versions             | json      |
| collaborators        | json      |

### labels

Sync type availability: Full-refresh

Parent of [label\_pages](#label_pages), [label\_blogposts](#label_blogposts), [label\_attachments](#label_attachments)

| Field   | Type |
| ------- | ---- |
| id      | text |
| prefix  | text |
| name    | text |
| \_links | json |

### label\_pages

Sync type availability: Full-refresh

Child of [labels](#labels)

| Field       | Type      |
| ----------- | --------- |
| id          | text      |
| status      | text      |
| title       | text      |
| spaceId     | text      |
| parentId    | text      |
| parentType  | text      |
| position    | text      |
| authorId    | text      |
| ownerId     | text      |
| lastOwnerId | text      |
| createdAt   | timestamp |
| version     | json      |
| \_links     | json      |

### label\_blogposts

Sync type availability: Full-refresh

Child of [labels](#labels)

| Field       | Type      |
| ----------- | --------- |
| id          | text      |
| status      | text      |
| title       | text      |
| spaceId     | text      |
| authorId    | text      |
| ownerId     | text      |
| lastOwnerId | text      |
| createdAt   | timestamp |
| version     | json      |
| \_links     | json      |

### label\_attachments

Sync type availability: Full-refresh

Child of [labels](#labels)

| Field                | Type      |
| -------------------- | --------- |
| id                   | text      |
| status               | text      |
| title                | text      |
| pageId               | text      |
| blogPostId           | text      |
| customContentId      | text      |
| authorId             | text      |
| createdAt            | timestamp |
| fileId               | text      |
| mediaType            | text      |
| mediaTypeDescription | text      |
| fileSize             | integer   |
| comment              | text      |
| version              | json      |
| \_links              | json      |

### footer\_comments

Sync type availability: Full-refresh

Parent of [footer\_comment\_children](#footer_comment_children), [footer\_comment\_likes\_users](#footer_comment_likes_users), [footer\_comment\_likes\_count](#footer_comment_likes_count), [footer\_comment\_versions](#footer_comment_versions), [footer\_comment\_operations](#footer_comment_operations)

| Field      | Type      |
| ---------- | --------- |
| id         | text      |
| status     | text      |
| body       | json      |
| version    | json      |
| pageId     | text      |
| blogPostId | text      |
| authorId   | text      |
| createdAt  | timestamp |
| \_links    | json      |

### footer\_comment\_children

Sync type availability: Full-refresh

Child of [footer\_comments](#footer_comments)

| Field      | Type      |
| ---------- | --------- |
| id         | text      |
| status     | text      |
| body       | json      |
| version    | json      |
| pageId     | text      |
| blogPostId | text      |
| authorId   | text      |
| createdAt  | timestamp |
| \_links    | json      |

### footer\_comment\_likes\_users

Sync type availability: Full-refresh

Child of [footer\_comments](#footer_comments)

| Field          | Type |
| -------------- | ---- |
| accountId      | text |
| userType       | text |
| accountStatus  | text |
| email          | text |
| publicName     | text |
| profilePicture | json |

### footer\_comment\_likes\_count

Sync type availability: Full-refresh

Child of [footer\_comments](#footer_comments)

| Field   | Type    |
| ------- | ------- |
| likes   | integer |
| likedBy | integer |

### footer\_comment\_versions

Sync type availability: Full-refresh

Child of [footer\_comments](#footer_comments)

| Field     | Type      |
| --------- | --------- |
| number    | integer   |
| createdAt | timestamp |
| message   | text      |
| minorEdit | boolean   |
| authorId  | text      |

### footer\_comment\_operations

Sync type availability: Full-refresh

Child of [footer\_comments](#footer_comments)

| Field      | Type |
| ---------- | ---- |
| operation  | text |
| targetType | text |

### inline\_comments

Sync type availability: Full-refresh

Parent of [inline\_comment\_children](#inline_comment_children), [inline\_comment\_likes\_users](#inline_comment_likes_users), [inline\_comment\_likes\_count](#inline_comment_likes_count), [inline\_comment\_versions](#inline_comment_versions), [inline\_comment\_operations](#inline_comment_operations)

| Field              | Type      |
| ------------------ | --------- |
| id                 | text      |
| status             | text      |
| body               | json      |
| version            | json      |
| pageId             | text      |
| blogPostId         | text      |
| authorId           | text      |
| createdAt          | timestamp |
| resolvedProperties | json      |
| \_links            | json      |

### inline\_comment\_children

Sync type availability: Full-refresh

Child of [inline\_comments](#inline_comments)

| Field              | Type      |
| ------------------ | --------- |
| id                 | text      |
| status             | text      |
| body               | json      |
| version            | json      |
| pageId             | text      |
| blogPostId         | text      |
| authorId           | text      |
| createdAt          | timestamp |
| resolvedProperties | json      |
| \_links            | json      |

### inline\_comment\_likes\_users

Sync type availability: Full-refresh

Child of [inline\_comments](#inline_comments)

| Field          | Type |
| -------------- | ---- |
| accountId      | text |
| userType       | text |
| accountStatus  | text |
| email          | text |
| publicName     | text |
| profilePicture | json |

### inline\_comment\_likes\_count

Sync type availability: Full-refresh

Child of [inline\_comments](#inline_comments)

| Field   | Type    |
| ------- | ------- |
| likes   | integer |
| likedBy | integer |

### inline\_comment\_versions

Sync type availability: Full-refresh

Child of [inline\_comments](#inline_comments)

| Field     | Type      |
| --------- | --------- |
| number    | integer   |
| createdAt | timestamp |
| message   | text      |
| minorEdit | boolean   |
| authorId  | text      |

### inline\_comment\_operations

Sync type availability: Full-refresh

Child of [inline\_comments](#inline_comments)

| Field      | Type |
| ---------- | ---- |
| operation  | text |
| targetType | text |

### classification\_levels

Sync type availability: Full-refresh

| Field       | Type |
| ----------- | ---- |
| id          | text |
| name        | text |
| description | text |

### space\_permissions

Sync type availability: Full-refresh

| Field     | Type |
| --------- | ---- |
| id        | text |
| principal | json |
| type      | text |

### space\_roles

Sync type availability: Full-refresh

| Field       | Type |
| ----------- | ---- |
| id          | text |
| key         | text |
| name        | text |
| permissions | json |

### tasks

Sync type availability: Full and incremental refresh

[Cursor](https://docs.erathos.com/platform/connections/sync-types#understanding-cursors): `createdAt`

| Field            | Type      | Cursor |
| ---------------- | --------- | ------ |
| id               | text      |        |
| status           | text      |        |
| body             | json      |        |
| pageId           | text      |        |
| blogPostId       | text      |        |
| inlineCommentId  | text      |        |
| authorId         | text      |        |
| assigneeId       | text      |        |
| createdAt        | timestamp | ✓      |
| dueAt            | timestamp |        |
| completedAt      | timestamp |        |
| associatedWithId | text      |        |
| \_links          | json      |        |

## Entity Relationships

```mermaid
erDiagram
    spaces ||--o{ spaces_pages : "id = _pk_spaces"
    spaces ||--o{ spaces_blogposts : "id = _pk_spaces"
    spaces ||--o{ spaces_content_labels : "id = _pk_spaces"
    spaces ||--o{ space_labels : "id = _pk_spaces"
    spaces ||--o{ space_permission_assignments : "id = _pk_spaces"
    spaces ||--o{ space_properties : "id = _pk_spaces"
    spaces ||--o{ space_role_assignments : "id = _pk_spaces"
    spaces ||--o{ space_operations : "id = _pk_spaces"
    spaces ||--o{ space_detail : "id = _pk_spaces"
    spaces ||--o{ pages : "id = spaceId"
    spaces ||--o{ blogposts : "id = spaceId"
    pages ||--o{ pages_attachments : "id = _pk_pages"
    pages ||--o{ pages_footer_comments : "id = _pk_pages"
    pages ||--o{ pages_inline_comments : "id = _pk_pages"
    pages ||--o{ pages_direct_children : "id = _pk_pages"
    pages ||--o{ pages_children : "id = _pk_pages"
    pages ||--o{ pages_ancestors : "id = _pk_pages"
    pages ||--o{ pages_descendants : "id = _pk_pages"
    pages ||--o{ page_labels : "id = _pk_pages"
    pages ||--o{ pages_versions : "id = _pk_pages"
    pages ||--o{ page_likes_count : "id = _pk_pages"
    pages ||--o{ page_likes_users : "id = _pk_pages"
    pages ||--o{ page_properties : "id = _pk_pages"
    pages ||--o{ page_operations : "id = _pk_pages"
    pages ||--o{ page_detail : "id = _pk_pages"
    pages ||--o{ attachments : "id = pageId"
    pages ||--o{ footer_comments : "id = pageId"
    pages ||--o{ inline_comments : "id = pageId"
    pages ||--o{ tasks : "id = pageId"
    blogposts ||--o{ blogposts_attachments : "id = _pk_blogposts"
    blogposts ||--o{ blogposts_footer_comments : "id = _pk_blogposts"
    blogposts ||--o{ blogposts_inline_comments : "id = _pk_blogposts"
    blogposts ||--o{ blogpost_labels : "id = _pk_blogposts"
    blogposts ||--o{ blogpost_versions : "id = _pk_blogposts"
    blogposts ||--o{ blogpost_likes_count : "id = _pk_blogposts"
    blogposts ||--o{ blogpost_likes_users : "id = _pk_blogposts"
    blogposts ||--o{ blogpost_properties : "id = _pk_blogposts"
    blogposts ||--o{ blogpost_operations : "id = _pk_blogposts"
    blogposts ||--o{ blogpost_detail : "id = _pk_blogposts"
    blogposts ||--o{ attachments : "id = blogPostId"
    blogposts ||--o{ footer_comments : "id = blogPostId"
    blogposts ||--o{ inline_comments : "id = blogPostId"
    blogposts ||--o{ tasks : "id = blogPostId"
    attachments ||--o{ attachments_labels : "id = _pk_attachments"
    attachments ||--o{ attachment_versions : "id = _pk_attachments"
    attachments ||--o{ attachments_footer_comments : "id = _pk_attachments"
    attachments ||--o{ attachment_properties : "id = _pk_attachments"
    attachments ||--o{ attachment_operations : "id = _pk_attachments"
    attachments ||--o{ attachment_detail : "id = _pk_attachments"
    labels ||--o{ label_pages : "id = _pk_labels"
    labels ||--o{ label_blogposts : "id = _pk_labels"
    labels ||--o{ label_attachments : "id = _pk_labels"
    footer_comments ||--o{ footer_comment_children : "id = _pk_footer_comments"
    footer_comments ||--o{ footer_comment_likes_users : "id = _pk_footer_comments"
    footer_comments ||--o{ footer_comment_likes_count : "id = _pk_footer_comments"
    footer_comments ||--o{ footer_comment_versions : "id = _pk_footer_comments"
    footer_comments ||--o{ footer_comment_operations : "id = _pk_footer_comments"
    inline_comments ||--o{ inline_comment_children : "id = _pk_inline_comments"
    inline_comments ||--o{ inline_comment_likes_users : "id = _pk_inline_comments"
    inline_comments ||--o{ inline_comment_likes_count : "id = _pk_inline_comments"
    inline_comments ||--o{ inline_comment_versions : "id = _pk_inline_comments"
    inline_comments ||--o{ inline_comment_operations : "id = _pk_inline_comments"
    inline_comments ||--o{ tasks : "id = inlineCommentId"

    spaces { text id PK }
    space_detail {
        text _pk_spaces PK
        text id PK
    }
    space_labels {
        text _pk_spaces PK
        text id PK
    }
    space_operations {
        text _pk_spaces PK
        text operation PK
    }
    space_permission_assignments {
        text _pk_spaces PK
        text id PK
    }
    space_properties {
        text _pk_spaces PK
        text id PK
    }
    space_role_assignments {
        text _pk_spaces PK
        text id PK
    }
    spaces_blogposts {
        text _pk_spaces PK
        text id PK
    }
    spaces_content_labels {
        text _pk_spaces PK
        text id PK
    }
    spaces_pages {
        text _pk_spaces PK
        text id PK
    }
    pages { text id PK }
    pages_attachments {
        text _pk_pages PK
        text id PK
    }
    pages_footer_comments {
        text _pk_pages PK
        text id PK
    }
    pages_inline_comments {
        text _pk_pages PK
        text id PK
    }
    pages_direct_children {
        text _pk_pages PK
        text id PK
    }
    pages_children {
        text _pk_pages PK
        text id PK
    }
    pages_ancestors {
        text _pk_pages PK
        text id PK
    }
    pages_descendants {
        text _pk_pages PK
        text id PK
    }
    page_labels {
        text _pk_pages PK
        text id PK
    }
    pages_versions {
        text _pk_pages PK
        integer number PK
    }
    page_likes_count { text _pk_pages PK }
    page_likes_users {
        text _pk_pages PK
        text id PK
    }
    page_properties {
        text _pk_pages PK
        text id PK
    }
    page_operations {
        text _pk_pages PK
        text operation PK
    }
    page_detail {
        text _pk_pages PK
        text id PK
    }
    blogposts { text id PK }
    blogposts_attachments {
        text _pk_blogposts PK
        text id PK
    }
    blogposts_footer_comments {
        text _pk_blogposts PK
        text id PK
    }
    blogposts_inline_comments {
        text _pk_blogposts PK
        text id PK
    }
    blogpost_labels {
        text _pk_blogposts PK
        text id PK
    }
    blogpost_versions {
        text _pk_blogposts PK
        integer number PK
    }
    blogpost_likes_count { text _pk_blogposts PK }
    blogpost_likes_users {
        text _pk_blogposts PK
        text id PK
    }
    blogpost_properties {
        text _pk_blogposts PK
        text id PK
    }
    blogpost_operations {
        text _pk_blogposts PK
        text operation PK
    }
    blogpost_detail {
        text _pk_blogposts PK
        text id PK
    }
    attachments { text id PK }
    attachments_labels {
        text _pk_attachments PK
        text id PK
    }
    attachment_versions {
        text _pk_attachments PK
        integer number PK
    }
    attachments_footer_comments {
        text _pk_attachments PK
        text id PK
    }
    attachment_properties {
        text _pk_attachments PK
        text id PK
    }
    attachment_operations {
        text _pk_attachments PK
        text operation PK
    }
    attachment_detail {
        text _pk_attachments PK
        text id PK
    }
    labels { text id PK }
    label_pages {
        text _pk_labels PK
        text id PK
    }
    label_blogposts {
        text _pk_labels PK
        text id PK
    }
    label_attachments {
        text _pk_labels PK
        text id PK
    }
    footer_comments { text id PK }
    footer_comment_children {
        text _pk_footer_comments PK
        text id PK
    }
    footer_comment_likes_users {
        text _pk_footer_comments PK
        text id PK
    }
    footer_comment_likes_count { text _pk_footer_comments PK }
    footer_comment_versions {
        text _pk_footer_comments PK
        integer number PK
    }
    footer_comment_operations {
        text _pk_footer_comments PK
        text operation PK
    }
    inline_comments { text id PK }
    inline_comment_children {
        text _pk_inline_comments PK
        text id PK
    }
    inline_comment_likes_users {
        text _pk_inline_comments PK
        text id PK
    }
    inline_comment_likes_count { text _pk_inline_comments PK }
    inline_comment_versions {
        text _pk_inline_comments PK
        integer number PK
    }
    inline_comment_operations {
        text _pk_inline_comments PK
        text operation PK
    }
    tasks { text id PK }
    classification_levels { text id PK }
    space_permissions { text id PK }
    space_roles { text id PK }
```
