Knowledge Base API: schemas
The request and response bodies of the operations in this API.
BulkUpsertPageItemDto
| Property | Type | Required | Description |
|---|
content | string | yes | Markdown content |
contentType | one of "markdown", "folder" | no | Content type — must be a valid ContentType enum value |
expectedContentHash | string | no | Expected content hash for optimistic concurrency control. Required for updates — the write only succeeds if the page's current contentHash matches. On mismatch, a conflict result is returned instead of overwriting. |
externalId | string | no | External system ID (for external sync matching) |
externalProvider | string | no | External system provider name (e.g., confluence) |
labels | map of string | no | Caller-supplied label map (string→string). On upsert, replaces the existing page's labels when supplied. Omit to leave labels unchanged. |
parentId | string | no | Parent page ID for hierarchy |
pipelinePackageId | string | no | Package identifier from the scaffold manifest (e.g. "DOM-01"). When present, scoped UIs group this page under its package. Persisted on both the Page row (denormalised for fast filter) and on the new PageVersion row (per-write provenance). |
slug | string | yes | URL-friendly slug (used for upsert matching). Lowercase alphanumeric + hyphens only. |
title | string | yes | Page title |
| Property | Type | Required | Description |
|---|
action | one of "created", "updated", "failed", "conflict", "skipped" | yes | |
currentHash | object or null | no | Current content hash of the page (returned on conflict for caller reconciliation) |
error | string | no | |
id | string | no | |
slug | string | yes | |
BulkUpsertPagesDto
BulkUpsertPagesResponseDto
| Property | Type | Required | Description |
|---|
conflicts | number | yes | |
created | number | yes | |
failed | number | yes | |
results | array of BulkUpsertPageResultDto | yes | |
skipped | number | yes | |
updated | number | yes | |
BulkUpsertPagesResponseDtoDataEnvelope
ConnectionFreshnessResponseDto
| Property | Type | Required | Description |
|---|
canPull | boolean | yes | Whether the integration supports pulling data from the external provider |
canPush | boolean | yes | Whether the integration supports pushing data to the external provider |
configured | boolean | yes | Whether an integration is configured for this project |
health | string | yes | Health status of the integration |
lastSyncedAt | string or null | no | ISO-8601 timestamp of the last successful sync, or null if never synced |
provider | string or null | no | Name of the external provider, or null if not configured |
ConnectionFreshnessResponseDtoDataEnvelope
| Property | Type | Required | Description |
|---|
baseVersion | number | yes | Page.version this comment is anchored against. |
body | string | yes | |
replyToId | string | no | Parent comment id for threaded replies. Omit for a top-level comment. |
target | object | yes | W3C WebAnnotationTarget JSON. artifactId = pageId, versionId = the targeted PageVersion id, version = integer page version. selector carries the anchor (TextQuoteSelector, TextPositionSelector, …). |
CreateDocumentDto
| Property | Type | Required | Description |
|---|
kind | one of "MARKDOWN_DOCUMENT", "RICH_DOCUMENT" | yes | Which collaboration model the document uses: MARKDOWN_DOCUMENT (Monaco source + per-hunk patches) or RICH_DOCUMENT (rendered HTML + anchored comments). |
parentId | string | no | Optional parent folder page id (must already exist in the target space and have contentType="folder"). |
title | string | no | Human-readable title. Defaults to "Untitled document" so the user can land in the editor with zero friction and rename later. |
CreateDocumentKind
Type: one of "MARKDOWN_DOCUMENT", "RICH_DOCUMENT"
CreateIngestionJobDto
| Property | Type | Required | Description |
|---|
format | one of "MARKDOWN_ARCHIVE", "PDF", "DOCX", "PLAIN_TEXT", "MARKDOWN_FILE" | yes | Import format |
parentPageId | string | no | Parent folder page id. When set, authored pages are created as children of this folder. |
sourceUrl | string | no | S3/MinIO object key or URL of the archive |
spaceSlug | string | yes | Target space slug for imported pages |
CreatePageDto
| Property | Type | Required | Description |
|---|
content | string | no | Markdown content |
contentType | string | no | Content type (default: markdown, use folder for container-only nodes) |
labels | map of string | no | Caller-supplied label map (string→string). Free-form metadata for downstream filtering/audit; the service does not interpret values. |
parentId | string | no | Parent page ID for hierarchy |
slug | string | yes | URL-friendly slug. Single path segment — lowercase alphanumeric with hyphens. Use parentId for hierarchy; do not embed slashes in the slug. |
title | string | yes | Page title |
CreateSpaceDto
| Property | Type | Required | Description |
|---|
dataClassification | DataClassification | no | DECLARED data classification for every page in this space — the space-level FLOOR. A page may RAISE it and can never lower it: the two combine through the kernel monotone join. OMIT it to declare nothing, which is a normal resting state and not a default: an undeclared space contributes nothing to the join, so its documents carry whatever the page declares, or no claim at all. |
slug | string | yes | URL-friendly slug for the space |
storeMode | KnowledgeStoreMode | no | Content-sourcing mode, fixed at creation time. OWNED (default): Xema stores authored + mirrored page bodies. FEDERATED: the external provider (via the org's DOCUMENTATION connection) stays the source of truth — Xema stores only index metadata and reads bodies live; the slug must match the provider space key so webhooks link up. |
title | string | yes | Human-readable title |
DataClassification
DECLARED data classification for every page in this space — the space-level FLOOR. A page may RAISE it and can never lower it: the two combine through the kernel monotone join. OMIT it to declare nothing, which is a normal resting state and not a default: an undeclared space contributes nothing to the join, so its documents carry whatever the page declares, or no claim at all.
Type: one of "public", "internal", "confidential", "secret", "regulated"
| Property | Type | Required | Description |
|---|
authorId | string | yes | |
authorType | string | yes | |
baseVersion | number | yes | |
body | string | yes | |
createdAt | string (date-time) | yes | |
id | string | yes | |
pageId | string | yes | |
replyToId | object | no | |
resolvedAt | string (date-time) | no | |
resolvedBy | object | no | |
status | one of "OPEN", "RESOLVED", "STALE" | yes | |
target | object | yes | |
updatedAt | string (date-time) | yes | |
DocumentResponseDto
| Property | Type | Required | Description |
|---|
content | string | yes | Body content. Markdown for MARKDOWN_DOCUMENT, HTML for RICH_DOCUMENT. |
createdAt | string (date-time) | yes | |
format | one of "MARKDOWN", "HTML" | yes | |
id | string | yes | |
kind | one of "MARKDOWN_DOCUMENT", "RICH_DOCUMENT" | yes | |
sessionId | object or null | no | Interactive Document Buddy session linked to this page. Null briefly after creation if session provisioning is still in flight; the FE should subscribe to the KB realtime stream and re-fetch when it appears. |
slug | string | yes | |
spaceId | string | yes | |
title | string | yes | |
updatedAt | string (date-time) | yes | |
version | number | yes | Monotonic per-page version. Incremented on every authoring write. |
DocumentResponseDtoDataEnvelope
EnsureDocumentSessionDto
| Property | Type | Required | Description |
|---|
launch | object | yes | agent-session-api's session launch body (CreateSessionDto), relayed verbatim; its validation is agent-session-api's. |
EnsureDocumentSessionResponseDto
| Property | Type | Required | Description |
|---|
rebound | boolean | yes | True when the page pointed at a different (gone or terminal) session and now points at this one. |
sessionId | string | yes | The live authoring session bound to this page. |
EnsureDocumentSessionResponseDtoDataEnvelope
FederationContractionResponseDto
| Property | Type | Required | Description |
|---|
contentHashesSeeded | number | yes | Pages that gained a contentHash computed from the body being dropped. A page that already carried one keeps it — that hash was taken over the PROVIDER body and is the better authority. |
pageVersionsDeleted | number | yes | PageVersion rows deleted. Mirrored history is mirrored state: every version row holds a full body copy. |
pagesContracted | number | yes | Pages whose stored body was dropped. Their content is now read live from the provider. |
slug | string | yes | Slug of the space that was contracted. |
spaceId | string | yes | Identifier of the space that was contracted. |
FederationContractionResponseDtoDataEnvelope
ImportSessionFileDto
| Property | Type | Required | Description |
|---|
filePath | string | yes | The file path within the session workspace. |
sessionId | string | yes | The agent session whose workspace file is imported. |
slug | string | no | Slug of the new page. Required without targetPageId; refused with it. |
targetPageId | string | no | An existing page in this space to write the file into as a new revision. Omit to create a new page. |
title | string | no | Title of the page. Required without targetPageId; with it, omit to keep the page title. |
IngestionUploadConfigDto
| Property | Type | Required | Description |
|---|
acceptedExtensions | array of string | yes | |
acceptedFormats | array of one of "PDF", "DOCX", "PLAIN_TEXT", "MARKDOWN_FILE" | yes | |
acceptedMimeTypes | array of string | yes | |
maxConcurrentJobsPerOrg | number | yes | Maximum allowed active ingestion jobs per organization |
maxFileSizeBytes | number | yes | Maximum allowed size per uploaded file in bytes |
IngestionUploadConfigDtoDataEnvelope
KnowledgeStoreMode
Content-sourcing mode of this space (OWNED: bodies stored in Xema; FEDERATED: bodies read live from the external provider).
Type: one of "OWNED", "FEDERATED"
MovePageDto
| Property | Type | Required | Description |
|---|
pageIds | array of string | yes | IDs of the pages to move. |
parentId | string or null | no | New parent page ID. Pass null or omit to move the pages to the space root. |
targetSpaceSlug | string | no | Target space slug. Omit to move within the source space. When set to a different slug, the pages (and all descendants when moving folders) are reparented into the target space; slug collisions in the target space hard-fail with 409. |
OpenDocumentSessionDto
| Property | Type | Required | Description |
|---|
kind | CreateDocumentKind | yes | |
launch | object | yes | agent-session-api's session launch body (CreateSessionDto), relayed verbatim; its validation is agent-session-api's. |
parentId | string | no | Optional parent folder page id in the target space. |
spaceSlug | string | yes | Target KB space slug the document is created under. |
title | string | no | Document title; "Untitled document" when omitted. |
OpenDocumentSessionResponseDto
| Property | Type | Required | Description |
|---|
page | DocumentResponseDto | yes | The page, with sessionId bound. |
sessionId | string | yes | The authoring session bound to the page. |
OpenDocumentSessionResponseDtoDataEnvelope
| Property | Type | Required | Description |
|---|
authorId | string | yes | |
authorType | one of "human", "agent", "service" | yes | |
content | string | yes | |
contentType | string | yes | |
createdAt | string (date-time) | yes | |
id | string | yes | |
ingestionSourceDocumentId | string | no | Ingestion job id that produced this page, when available. |
kind | one of "MARKDOWN_DOCUMENT", "RICH_DOCUMENT" | yes | Document-kind classification. One of MARKDOWN_DOCUMENT, RICH_DOCUMENT — both A4 Document Buddy pages. |
labels | map of string or null | no | Caller-supplied label map from the latest authoring write. |
orientation | one of "PORTRAIT", "LANDSCAPE" | yes | A4 page orientation. Drives both the document preview pagination AND the Document Buddy agent's authoring decisions (column widths, image sizing, table column counts). Mirrored verbatim into workspace context.json so the agent picks it up without parsing. |
originalFileDownloadUrl | string | no | Relative URL that kb-api streams the original file download from (resolves against the same host as this response). Backed by MinIO object storage. |
originalFileMimeType | string | no | Original uploaded file mime type when this page comes from ingestion. |
originalFileName | string | no | Original uploaded filename when this page comes from ingestion. |
originalFilePreviewUrl | string | no | Relative URL that kb-api streams the original file preview from (resolves against the same host as this response). For DOCX this serves the rendered HTML; for PDFs etc. it serves the raw object from MinIO. |
originalFileSize | string | no | Original uploaded file size in bytes, serialized as string. |
pageFormat | one of "A4", "A5", "LETTER", "LEGAL", "TABLOID", "ENVELOPE_DL", "ENVELOPE_C5" | yes | Paper format the document is laid out for (A4 / A5 / Letter / Legal / Tabloid / DL or C5 envelope). Drives the document preview's sheet size AND the Document Buddy agent's authoring decisions (prose density, image widths). Mirrored verbatim into workspace context.json. |
parentId | object or null | no | |
pipelinePackageId | object or null | no | Package id (e.g. "DOM-01") from the scaffold manifest at latest write. |
pipelineRunId | object or null | no | Pipeline run id when the latest write was pipeline-scoped. |
pipelineStageKey | object or null | no | Pipeline stage key at latest pipeline write. |
reviewBaseline | string or null | no | Review baseline for the Document Buddy inline-highlight UX — the last-accepted content snapshot the frontend diffs content against to render Word-style highlights of the agent's UNREVIEWED changes. null means the page is caught up (no unreviewed changes; baseline == content). content always stays the live working content the user sees. |
scopeId | object or null | no | Opaque scope id — runId for PIPELINE_RUN, sessionId for AGENT_SESSION. |
scopeType | one of "PROJECT", "PIPELINE_RUN", "AGENT_SESSION" | yes | Scope of the latest authoring write. |
sessionId | string or null | no | Interactive agent session that co-authors this document, when it is a Document Buddy page (MARKDOWN_DOCUMENT, RICH_DOCUMENT). |
slug | string | yes | |
sourceType | one of "authored", "ingestion_chunk", "ingestion_summary" | yes | |
spaceId | string | yes | |
status | one of "published", "proposed", "rejected" | yes | |
title | string | yes | |
updatedAt | string (date-time) | yes | |
version | number | yes | |
| Property | Type | Required | Description |
|---|
pageId | string | yes | Page row id. |
pageSlug | string | yes | Page slug — second segment of the document URL. |
spaceSlug | string | yes | Space slug — first segment of the document URL. |
PageSessionResyncResponseDto
| Property | Type | Required | Description |
|---|
sessionResync | SessionResync | yes | Whether the page's live authoring session followed the decision. done: a live session re-materialized its working file. skipped: nothing to do (no session, nothing changed, or no live worker). failed: the session plane did not take it; the decision stays applied, so retry POST /pages/{pageId}/session-resync, not the decision. |
PageSessionResyncResponseDtoDataEnvelope
PageTreeNodeDto
| Property | Type | Required | Description |
|---|
children | array of PageTreeNodeDto | yes | |
contentType | string | yes | |
id | string | yes | |
pipelinePackageId | object or null | no | |
pipelineRunId | object or null | no | |
pipelineStageKey | object or null | no | |
scopeId | object or null | no | |
scopeType | one of "PROJECT", "PIPELINE_RUN", "AGENT_SESSION" | yes | |
slug | string | yes | |
status | string | yes | |
title | string | yes | |
version | number | yes | |
PageTreeNodeDtoDataArrayEnvelope
PageVersionResponseDto
| Property | Type | Required | Description |
|---|
authorId | string | yes | |
authorType | string | yes | |
changeNote | object or null | no | |
createdAt | string (date-time) | yes | |
id | string | yes | |
pipelinePackageId | object or null | no | Package id (e.g. "DOM-01") when scopeType === PIPELINE_RUN. |
pipelineStageKey | object or null | no | Pipeline stage key when scopeType === PIPELINE_RUN. |
scopeId | object or null | no | |
scopeType | one of "PROJECT", "PIPELINE_RUN", "AGENT_SESSION" | yes | Scope in which this version was authored. |
version | number | yes | |
PageVersionResponseDtoDataArrayEnvelope
PageVersionResponseDtoDataEnvelope
| Property | Type | Required | Description |
|---|
hasMore | boolean | no | |
limit | number | no | |
nextCursor | string or null | no | |
page | number | no | |
previousCursor | string or null | no | |
total | number | no | |
totalPages | number | no | |
PatchOrigin
Type: one of "AGENT_SESSION"
PendingPatchDecisionResponseDto
| Property | Type | Required | Description |
|---|
after | string | yes | Replacement text. Empty for a pure deletion, which the editor must still render (struck through) or the change is invisible and unrejectable. |
anchor | object | yes | 1-based inclusive line range in the review baseline. endLine === startLine - 1 encodes a pure insertion positioned before startLine. |
baseVersion | number | yes | Page.version the anchor was derived against. |
before | string | yes | Exact baseline text this change replaces. Empty for a pure insertion — render it as a deletion when after is empty. |
createdAt | string | yes | ISO-8601. |
decidedAt | string or null | yes | ISO-8601. |
decidedBy | string or null | yes | |
id | string | yes | |
label | string or null | yes | |
origin | PatchOrigin | yes | |
pageId | string | yes | |
proposalId | string | yes | Groups every hunk derived from one settle. A later push supersedes the previous proposal. |
rationale | string or null | yes | Why the change was proposed. Always null for AGENT_SESSION: an agent is never asked to explain a change it does not know is under review. |
rejectionComment | string or null | yes | The user's reason for rejecting, so the agent can revise. Reaches the agent as an ordinary user turn, never as a 'rejected suggestion'. |
sequence | number | yes | Application order within a proposal. Rejections recompute in this order. |
sessionId | string or null | yes | |
sessionResync | SessionResync | yes | Whether the page's live authoring session followed the decision. done: a live session re-materialized its working file. skipped: nothing to do (no session, nothing changed, or no live worker). failed: the session plane did not take it; the decision stays applied, so retry POST /pages/{pageId}/session-resync, not the decision. |
status | PendingPatchStatus | yes | |
workflowJobRunId | string or null | yes | |
PendingPatchDecisionResponseDtoDataEnvelope
PendingPatchResponseDto
| Property | Type | Required | Description |
|---|
after | string | yes | Replacement text. Empty for a pure deletion, which the editor must still render (struck through) or the change is invisible and unrejectable. |
anchor | object | yes | 1-based inclusive line range in the review baseline. endLine === startLine - 1 encodes a pure insertion positioned before startLine. |
baseVersion | number | yes | Page.version the anchor was derived against. |
before | string | yes | Exact baseline text this change replaces. Empty for a pure insertion — render it as a deletion when after is empty. |
createdAt | string | yes | ISO-8601. |
decidedAt | string or null | yes | ISO-8601. |
decidedBy | string or null | yes | |
id | string | yes | |
label | string or null | yes | |
origin | PatchOrigin | yes | |
pageId | string | yes | |
proposalId | string | yes | Groups every hunk derived from one settle. A later push supersedes the previous proposal. |
rationale | string or null | yes | Why the change was proposed. Always null for AGENT_SESSION: an agent is never asked to explain a change it does not know is under review. |
rejectionComment | string or null | yes | The user's reason for rejecting, so the agent can revise. Reaches the agent as an ordinary user turn, never as a 'rejected suggestion'. |
sequence | number | yes | Application order within a proposal. Rejections recompute in this order. |
sessionId | string or null | yes | |
status | PendingPatchStatus | yes | |
workflowJobRunId | string or null | yes | |
PendingPatchResponseDtoDataArrayEnvelope
PendingPatchStatus
Type: one of "PENDING", "ACCEPTED", "REJECTED", "STALE"
ProblemActionableBy
Who can act on this refusal: user (correct the input, sign in), org-admin (an administrator of the organisation), platform (the operators of this installation), none (nobody — it cannot succeed). ABSENT when not known; never guessed.
Type: one of "user", "org-admin", "platform", "none"
ProblemDetailsDto
RFC 9457 problem document. The declared members are the reserved core; extension members are TOP-LEVEL and OPEN, owned by the refusing plane.
| Property | Type | Required | Description |
|---|
actionableBy | ProblemActionableBy | no | Who can act on this refusal: user (correct the input, sign in), org-admin (an administrator of the organisation), platform (the operators of this installation), none (nobody — it cannot succeed). ABSENT when not known; never guessed. |
code | string | yes | SCREAMING_SNAKE_CASE. The machine-branchable refusal, and the value a policy rule, a retry predicate and a UI branch all name. |
detail | string | no | Human-readable and specific to THIS occurrence. |
errors | array of ProblemFieldIssueDto | no | Field-level issues, when the refusal is about the request body. |
instance | string | no | URI reference identifying the occurrence — a request path, a run, a row. |
params | map of string or number or boolean | no | Safe i18n interpolation values for the message keyed by code — typed and allowlisted per code by its declaration. Never server-authored copy, never internal diagnostics. |
retry | ProblemRetry | no | What a retry can achieve: transient (later, unchanged), after-change (only after someone changes something), never (a defect until a fixed version ships). ABSENT when not known. |
status | number | yes | The HTTP status code, repeated in the body so a logged document is self-contained. |
title | string | yes | Short, human-readable, and STABLE for a given type. Never per-occurrence — that is detail. |
traceId | string | no | W3C trace-context trace-id, present when the caller sent a traceparent. Omitted rather than invented when it did not. |
type | string | yes | Absolute URI identifying the refusal TYPE. Derived one-to-one from code, so a caller may branch on either and can never be told two different things. Never about:blank. |
ProblemFieldIssueDto
| Property | Type | Required | Description |
|---|
code | string | no | SCREAMING_SNAKE_CASE code of THIS issue, for a frontend i18n key. Present when the issue was minted by a declared problem. |
detail | string | yes | Prose for logs and developers. A frontend localises from code + params instead. |
params | map of string or number or boolean | no | Safe i18n interpolation values for this issue's code. |
pointer | string | yes | RFC 6901 JSON Pointer into the request body. Root is "/". |
ProblemRetry
What a retry can achieve: transient (later, unchanged), after-change (only after someone changes something), never (a defect until a fixed version ships). ABSENT when not known.
Type: one of "transient", "after-change", "never"
PutResourceShareDto
| Property | Type | Required | Description |
|---|
expiresAt | string (date-time) | no | When the share lapses. |
level | string | yes | The level to grant — one of the type's share relations. |
subjectId | string | yes | |
subjectKind | ShareGranteeKind | yes | A user grantee is bound to that user's current membership of the org (422 when not a member). |
RejectPatchDto
| Property | Type | Required | Description |
|---|
comment | string | no | Why this change is wrong. Stored on the patch and surfaced to the agent as an ordinary user instruction quoting the text, so it can revise. |
ResourceShareDto
| Property | Type | Required | Description |
|---|
expiresAt | string (date-time) or null | yes | |
grantedBy | string | yes | <kind>:<id> of the principal who granted it. |
level | string | yes | The relation the share grants (a level of the type). |
membershipActive | boolean or null | yes | For a membership share, whether it is still the user's current membership of the org; false means the user left and the share grants nothing (it can still be removed). Null for every other kind. |
refusalCode | string or null | yes | The typed refusal code (tenant_mismatch, subject_unresolvable, ...) when state is refused, else null. |
state | ShareState | yes | Whether the share is in force. refused: the authorization plane refused its facts for good, so it grants nothing; re-put it with a valid subject, or remove it. |
subjectId | string | yes | For a membership share, the membership id (one stay of the user in the org). |
subjectKind | ShareSubjectKind | yes | |
userId | string or null | yes | The user of a membership share; null for every other kind. |
ResourceSharesDto
| Property | Type | Required | Description |
|---|
canManage | boolean | yes | Whether the caller may share or unshare this resource. |
expirable | boolean | yes | Whether a share of this type may carry an expiry; when false an expiry is refused. |
levels | array of string | yes | The levels a share of this type may grant, lowest first. A sharer may grant only a level it holds. |
shares | array of ResourceShareDto | yes | |
ResourceSharesDtoDataEnvelope
ReviewStateResponseDto
| Property | Type | Required | Description |
|---|
hasUnreviewedChanges | boolean | yes | Whether the page still has unreviewed agent changes. Always false after accept / undo. |
pageId | string | yes | The page the review action applied to. |
reviewBaseline | string or null | yes | The review baseline after the action. Always null (the page is caught up). |
sessionResync | SessionResync | yes | Whether the page's live authoring session followed the decision. done: a live session re-materialized its working file. skipped: nothing to do (no session, nothing changed, or no live worker). failed: the session plane did not take it; the decision stays applied, so retry POST /pages/{pageId}/session-resync, not the decision. |
ReviewStateResponseDtoDataEnvelope
SessionResync
Whether the page's live authoring session followed the decision. done: a live session re-materialized its working file. skipped: nothing to do (no session, nothing changed, or no live worker). failed: the session plane did not take it; the decision stays applied, so retry POST /pages/{pageId}/session-resync, not the decision.
Type: one of "done", "skipped", "failed"
ShareGranteeKind
A user grantee is bound to that user's current membership of the org (422 when not a member).
Type: one of "user", "agent", "external-subject", "team", "role"
ShareState
Whether the share is in force. refused: the authorization plane refused its facts for good, so it grants nothing; re-put it with a valid subject, or remove it.
Type: one of "active", "refused"
ShareSubjectKind
Type: one of "membership", "agent", "external-subject", "team", "role"
SpaceResponseDto
| Property | Type | Required | Description |
|---|
createdAt | string (date-time) | yes | |
createdBy | string | yes | |
id | string | yes | |
orgId | string | yes | |
pageCount | number | yes | Number of pages in this space |
projectId | string | yes | |
slug | string | yes | |
storeMode | KnowledgeStoreMode | yes | Content-sourcing mode of this space (OWNED: bodies stored in Xema; FEDERATED: bodies read live from the external provider). |
title | string | yes | |
SpaceResponseDtoDataArrayEnvelope
SpaceResponseDtoDataEnvelope
UpdatePageDto
| Property | Type | Required | Description |
|---|
changeNote | string | no | Change note describing what was modified |
content | string | yes | New content |
dataClassification | DataClassification | no | This page's OWN data classification. It composes with the space's declaration through the kernel monotone join, so a page may only ever RAISE the restriction its space set — a value strictly BELOW the space floor is refused with 422 DOCUMENT_CLASSIFICATION_BELOW_SPACE_FLOOR rather than stored as a declaration the join would silently ignore. Omit to leave the page's declaration unchanged. |
labels | map of string | no | Replacement label map (string→string). When supplied, fully replaces the page's existing labels. Omit to leave labels unchanged. |
orientation | one of "PORTRAIT", "LANDSCAPE" | no | A4 page orientation. Omit to leave unchanged. Persisted on the page row AND mirrored into workspace context.json so the Document Buddy agent authors content (column widths, image sizing) that fits. |
pageFormat | one of "A4", "A5", "LETTER", "LEGAL", "TABLOID", "ENVELOPE_DL", "ENVELOPE_C5" | no | Paper format (A4 / A5 / Letter / Legal / Tabloid / DL or C5 envelope). Omit to leave unchanged. Persisted on the page row AND mirrored into workspace context.json so the Document Buddy agent authors content (prose density, image widths) that fits the chosen sheet. |
title | string | no | New title |