Documents
Workspace rich-text Documents and their versioned content.
Read the Workspace Git-backed Documents repository
/api/v1/workspaces/{workspace_id}/knowledge-repositoryPath Parameters
Responses
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
Validate and connect one existing documentation repository
/api/v1/workspaces/{workspace_id}/knowledge-repositoryRequires explicit acknowledgement that every repository reader can read all mirrored Documents. The configured branch must already exist. No repository, branch, or pull request is created.
Path Parameters
Header Parameters
Request Body
application/jsonstring <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
Responses
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
Pause, resume, or disconnect Git-backed Documents
/api/v1/workspaces/{workspace_id}/knowledge-repositoryPath Parameters
Header Parameters
Request Body
Responses
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
Import bounded Markdown content from the connected repository
/api/v1/workspaces/{workspace_id}/knowledge-repository/importPath Parameters
Header Parameters
Responses
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
Synchronize pending Assign and Git changes now
/api/v1/workspaces/{workspace_id}/knowledge-repository/syncBypasses the debounce only. Current permission, expected-head, conflict, size, and rate gates still apply.
Path Parameters
Header Parameters
Responses
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
List bounded repository synchronization history
/api/v1/workspaces/{workspace_id}/knowledge-repository/runsList open revision-bound synchronization conflicts
/api/v1/workspaces/{workspace_id}/knowledge-repository/conflictsApply a revision-bound explicit conflict decision
/api/v1/workspaces/{workspace_id}/knowledge-repository/conflicts/{conflict_id}/resolvePath Parameters
Header Parameters
Request Body
Responses
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
Query bounded editor reference and mention candidates
/api/v1/workspaces/{workspace_id}/reference-optionsReturns grouped, permission-filtered candidates for Assign editor mentions and references. Matching is prefix-and-word based across active member display names, active Workspace Agent names, unarchived Document titles, unarchived Project names and keys, and unarchived Task titles and ticket references. Each requested type is independently limited; no cursor or total is exposed. A blank query returns an empty result.
Path Parameters
Query Parameters
string·min 0·max 100Typeahead text. Leading and trailing whitespace is ignored; blank text returns no candidates.
string[]Repeat to restrict result groups. Omitting it queries all five types.
useragentdocumentprojecttaskinteger·min 1·max 20·default 10Maximum candidates returned for each requested type. Defaults to 10.
Responses
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
Read a published Document
/api/v1/public/documents/{public_id}Public access requires the owning Workspace's public-publishing billing entitlement; absence returns the same privacy-safe 404 as an unavailable identifier. Returns only the public-safe title and content of an unarchived Document. The opaque public identifier is revoked when the Document is unpublished or archived. This route does not disclose Workspace, Project, hierarchy, membership, revision, or audit information.
Path Parameters
Responses
string·const no-storePrevents storage of error responses by clients and intermediaries.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
objectVersioned, server-validated rich-text document. The server accepts only nodes and marks on the Assign allowlist and rejects anything outside it; the client's installed editor extension set is never authoritative. Complexity is bounded at 32 levels of nesting and 50,000 nodes in addition to the per-field byte limits.
Accepted nodes: doc, paragraph, text, heading, bulletList,
orderedList, listItem, taskList, taskItem, blockquote, callout,
codeBlock, blockMath, horizontalRule, hardBreak, image, file, plus the
reference nodes userMention, projectReference, documentReference,
and taskReference. Accepted marks: bold, italic, underline,
strike, code, link.
A Task-description or Comment mutation accepts at most 100 distinct
canonical user identifiers across its userMention nodes. Repeated
mentions of the same user count once.
image and file name an Assign attachment through
attrs.attachmentId and carry no URL and no bytes: attachments travel
only through the attachment upload and download operations, and a
signed URL is minted per request after a fresh authorization check
rather than stored in content. A request whose image or file node
omits attachmentId, or carries a URL-bearing attribute, is rejected.
callout has block children and exactly attrs.kind and attrs.icon.
Kind is callout, note, tip, important, warning, or caution.
Icon is null for the default Lucide icon, an emoji of at most 64 UTF-8
bytes, an allowlisted lucide:name token to override it, or an empty string
to hide it. Unknown Lucide names are rejected. HTML, URLs and image
data are not accepted as icons. Callouts are additive in schemas 1 and 2.
blockMath stores a required string attrs.latex; rendered math HTML
and renderer settings are not persisted. Schema 1 retains the existing node contract; schema 2 additionally admits tables.
Checklists, attachment blocks, display equations, underline, and
projectReference were added additively, so every
previously stored document is still valid and no migration is
required.
Schema 2 additionally accepts table, tableRow, tableCell and tableHeader. A table has tableRow children; a row has tableCell/tableHeader children. Cells contain Assign blocks, starting with a paragraph; nested tables are rejected. Cells accept colspan/rowspan (integers 1–64, default 1), colwidth (null or one integer 24–2000 per spanned column), and align (null, left, center or right). Tables/rows have no attrs, marks or text; cells have no marks/text or other attributes. The occupancy grid must be rectangular with no overlap, holes or spans beyond its rows. Limits are 1000 rows, 64 logical columns and 10000 physical cells, still subject to each field's byte budget and global node/depth limits. Schema 1 rejects all four table nodes. Rich tables exchange through the named assign-table Markdown JSON fence; simple tables use GFM pipes.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
integer·min 1Seconds until the client may retry.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
Authorize a published Document attachment download
/api/v1/public/documents/{public_id}/attachments/{attachment_id}/downloadPublic access requires the owning Workspace's public-publishing billing entitlement; absence returns the same privacy-safe 404 as an unavailable identifier. Mints a short-lived download URL only when the attachment is owned by the published Document and is referenced by its current public body. Historical ownership alone never exposes a removed attachment.
Path Parameters
Responses
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
Authorize a published Document attachment preview
/api/v1/public/documents/{public_id}/attachments/{attachment_id}/previewPublic access requires the owning Workspace's public-publishing billing entitlement; absence returns the same privacy-safe 404 as an unavailable identifier. Mints a short-lived cookie-less inline URL for a previewable attachment that is both owned by and referenced from the current public body.
Path Parameters
Responses
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
List Workspace Documents
/api/v1/workspaces/{workspace_id}/documentsReturns one cursor-paginated page of active root Document metadata, or
archived roots when archived_only=true. Title order is the default;
sort selects modified-time order. Text, Project, location, scope,
descendant, and archive selectors are applied before pagination; a
cursor is valid only for the same selectors and sort. Content is not
included; read it through the content operation.
location classifies a Document by structure only: workspace is
Documents outside every Project and projects is Documents inside one.
It never describes visibility or access; scope remains the audience
filter. A nested Document always shares its parent's Project, so it is
classified by the same rule.
include_descendants=true returns nested Documents as individual rows
instead of roots only, each exactly once, with an ancestors path so a
flattened result can show where it lives.
Path Parameters
Query Parameters
string <uuid>Restrict the page to Documents owned by this Project.
stringRestrict the page by structural location. workspace returns
Documents outside every Project; projects returns Documents that
belong to a Project. Omit for both. Cannot be combined with
project_id when workspace.
workspaceprojectsstring·default titlePage order. title is ascending title (default), updated_desc is
most recently modified first and updated_asc is least recently
modified first, by each Document's own modification time. Ties
break by identifier.
titleupdated_descupdated_ascboolean·default falseReturn nested Documents as individual rows, each once, with their ancestor path.
Responses
integer <int64>·min 0Authorized collection size before cursor bounds; refreshed at read time. Activity counts admitted events before display grouping and Comments include retained ordinals.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
Create a Document
/api/v1/workspaces/{workspace_id}/documentsCanonical content with an unsupported schema or an attempted
schema 2-to-1 downgrade returns 409 document_schema_version_unsupported.
Restoring an older Document revision retains an existing schema 2 floor.
Creates a Document with optional initial content. Omitting content
creates an empty Document.
Public Document creation and transitions to public visibility require the Workspace's
public-publishing billing entitlement; denial returns 403 paid_workspace_required.
Unpublishing and ordinary edits of an existing publication remain available subject to
normal authorization. Public links are unavailable while the entitlement is absent.
Path Parameters
Header Parameters
Request Body
application/jsonstring <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
objectVersioned, server-validated rich-text document. The server accepts only nodes and marks on the Assign allowlist and rejects anything outside it; the client's installed editor extension set is never authoritative. Complexity is bounded at 32 levels of nesting and 50,000 nodes in addition to the per-field byte limits.
Accepted nodes: doc, paragraph, text, heading, bulletList,
orderedList, listItem, taskList, taskItem, blockquote, callout,
codeBlock, blockMath, horizontalRule, hardBreak, image, file, plus the
reference nodes userMention, projectReference, documentReference,
and taskReference. Accepted marks: bold, italic, underline,
strike, code, link.
A Task-description or Comment mutation accepts at most 100 distinct
canonical user identifiers across its userMention nodes. Repeated
mentions of the same user count once.
image and file name an Assign attachment through
attrs.attachmentId and carry no URL and no bytes: attachments travel
only through the attachment upload and download operations, and a
signed URL is minted per request after a fresh authorization check
rather than stored in content. A request whose image or file node
omits attachmentId, or carries a URL-bearing attribute, is rejected.
callout has block children and exactly attrs.kind and attrs.icon.
Kind is callout, note, tip, important, warning, or caution.
Icon is null for the default Lucide icon, an emoji of at most 64 UTF-8
bytes, an allowlisted lucide:name token to override it, or an empty string
to hide it. Unknown Lucide names are rejected. HTML, URLs and image
data are not accepted as icons. Callouts are additive in schemas 1 and 2.
blockMath stores a required string attrs.latex; rendered math HTML
and renderer settings are not persisted. Schema 1 retains the existing node contract; schema 2 additionally admits tables.
Checklists, attachment blocks, display equations, underline, and
projectReference were added additively, so every
previously stored document is still valid and no migration is
required.
Schema 2 additionally accepts table, tableRow, tableCell and tableHeader. A table has tableRow children; a row has tableCell/tableHeader children. Cells contain Assign blocks, starting with a paragraph; nested tables are rejected. Cells accept colspan/rowspan (integers 1–64, default 1), colwidth (null or one integer 24–2000 per spanned column), and align (null, left, center or right). Tables/rows have no attrs, marks or text; cells have no marks/text or other attributes. The occupancy grid must be rectangular with no overlap, holes or spans beyond its rows. Limits are 1000 rows, 64 logical columns and 10000 physical cells, still subject to each field's byte budget and global node/depth limits. Schema 1 rejects all four table nodes. Rich tables exchange through the named assign-table Markdown JSON fence; simple tables use GFM pipes.
Responses
stringQuoted decimal optimistic-concurrency version.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string·min 1·max 63Permanent Workspace-unique URL segment allocated from the title, with a numeric suffix on collision.
string·min 1·max 64Case-insensitive client input normalized to uppercase by the server. A code is unique across Projects, Tasks, and Documents in one Workspace. Internal UUIDs are not a CLI identifier.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
objectRevision-bound derived convenience text. It is null when the body is shorter than 300 normalized characters, generation is pending, or the stored projection is stale. It is never evidence or a replacement for Document content.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
Resolve active Document metadata by Workspace path
/api/v1/workspaces/{workspace_id}/documents/by-path/{document_path}Resolves an exact active Document path within the requested Workspace. Applies the same Workspace and Project read permissions as the Document identifier read. A missing, archived, or inaccessible Document returns 404. Use the returned identifier for content and subsequent Document reads.
Path Parameters
Responses
stringQuoted decimal optimistic-concurrency version.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string·min 1·max 63Permanent Workspace-unique URL segment allocated from the title, with a numeric suffix on collision.
string·min 1·max 64Case-insensitive client input normalized to uppercase by the server. A code is unique across Projects, Tasks, and Documents in one Workspace. Internal UUIDs are not a CLI identifier.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
objectRevision-bound derived convenience text. It is null when the body is shorter than 300 normalized characters, generation is pending, or the stored projection is stale. It is never evidence or a replacement for Document content.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
List Document work links
/api/v1/documents/{document_id}/linksScans at most 100 associations per page and returns only currently authorized live pairs. An empty page may have a continuation. Cursors are bound to the owner and Workspace. Links confer no access.
Path Parameters
Query Parameters
Responses
string·max 4096Signed Workspace/User/session-bound replay custody; present only after a successful requested canonical baseline.
stringDecimal-string snapshot position; present only with a successful baseline cursor.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
List Task Documents
/api/v1/tasks/{task_id}/documentsScans at most 100 associations per page and returns only currently authorized live pairs. An empty page may have a continuation. Cursors are bound to the owner and Workspace. Links confer no access.
Path Parameters
Query Parameters
Responses
string·max 4096Signed Workspace/User/session-bound replay custody; present only after a successful requested canonical baseline.
stringDecimal-string snapshot position; present only with a successful baseline cursor.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
List Milestone Documents
/api/v1/milestones/{milestone_id}/documentsScans at most 100 associations per page and returns only currently authorized live pairs. An empty page may have a continuation. Cursors are bound to the owner and Workspace. Links confer no access.
Path Parameters
Query Parameters
Responses
string·max 4096Signed Workspace/User/session-bound replay custody; present only after a successful requested canonical baseline.
stringDecimal-string snapshot position; present only with a successful baseline cursor.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
Link a Document to a Task or Milestone
/api/v1/documents/{document_id}/links/{target_kind}/{target_id}Requires write authority for both participants. Project-owned Documents can link only within their Project. A Workspace Document can link to any authorized Project. Pair creation and removal are idempotent. Public Document visibility does not publish associations.
Path Parameters
Header Parameters
Responses
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
stringHuman-readable Task code; empty for Milestones until their reference projection is available.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
Remove a Document work link
/api/v1/documents/{document_id}/links/{target_kind}/{target_id}Requires write authority for both participants. Project-owned Documents can link only within their Project. A Workspace Document can link to any authorized Project. Pair creation and removal are idempotent. Public Document visibility does not publish associations.
Path Parameters
Header Parameters
Responses
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
Path Parameters
Responses
stringQuoted decimal optimistic-concurrency version.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string·min 1·max 63Permanent Workspace-unique URL segment allocated from the title, with a numeric suffix on collision.
string·min 1·max 64Case-insensitive client input normalized to uppercase by the server. A code is unique across Projects, Tasks, and Documents in one Workspace. Internal UUIDs are not a CLI identifier.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
objectRevision-bound derived convenience text. It is null when the body is shorter than 300 normalized characters, generation is pending, or the stored projection is stale. It is never evidence or a replacement for Document content.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
Update Document metadata
/api/v1/documents/{document_id}Applies an optimistic compare-and-swap to Document metadata. Content is replaced through the separate content operation so a title rename never competes with an autosave for the same revision. Public Document creation and transitions to public visibility require the Workspace's public-publishing billing entitlement; denial returns 403 paid_workspace_required. Unpublishing and ordinary edits of an existing publication remain available subject to normal authorization. Public links are unavailable while the entitlement is absent.
Path Parameters
Header Parameters
string·min 43·max 43Session-bound CSRF token. It must exactly match the
__Host-assign_csrf cookie sent with the request.
string·min 16·max 200Opaque client-generated key for safely retrying this operation.
Request Body
application/jsonstring <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
Responses
stringQuoted decimal optimistic-concurrency version.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string·min 1·max 63Permanent Workspace-unique URL segment allocated from the title, with a numeric suffix on collision.
string·min 1·max 64Case-insensitive client input normalized to uppercase by the server. A code is unique across Projects, Tasks, and Documents in one Workspace. Internal UUIDs are not a CLI identifier.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
objectRevision-bound derived convenience text. It is null when the body is shorter than 300 normalized characters, generation is pending, or the stored projection is stale. It is never evidence or a replacement for Document content.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
Archive a Document
/api/v1/documents/{document_id}Archives the Document. Archived Documents remain readable by identifier and continue to count against storage accounting until they are purged at the end of the retention window.
Path Parameters
Header Parameters
Responses
string·const no-storePrevents storage of error responses by clients and intermediaries.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
Permanently delete a Document
/api/v1/documents/{document_id}/permanentPermanently removes an active or archived leaf Document, including its revision history, collaboration state and resource links. Requires the same Workspace and owning Project write permission as editing. Documents with any child (including archived children) return 409 document_has_children. Git-bound Documents return 409 document_git_managed. A stale If-Match returns 409 revision_conflict. Attachment objects retain their existing cleanup policy. Archive and Restore use separate operations.
Path Parameters
Header Parameters
Responses
string·const no-storePrevents storage of error responses by clients and intermediaries.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
Path Parameters
Header Parameters
Responses
stringQuoted decimal optimistic-concurrency version.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string·min 1·max 63Permanent Workspace-unique URL segment allocated from the title, with a numeric suffix on collision.
string·min 1·max 64Case-insensitive client input normalized to uppercase by the server. A code is unique across Projects, Tasks, and Documents in one Workspace. Internal UUIDs are not a CLI identifier.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
objectRevision-bound derived convenience text. It is null when the body is shorter than 300 normalized characters, generation is pending, or the stored projection is stale. It is never evidence or a replacement for Document content.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
List Document attachments
/api/v1/documents/{document_id}/attachmentsReturns the newest 100 linked files. Optional attachment_id values select up to 100 exact linked targets regardless of age; deleted, unlinked and private Discuss files are omitted after parent authorization.
Path Parameters
Query Parameters
Responses
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
Attach a completed upload to a Document
/api/v1/documents/{document_id}/attachmentsEstablishes durable Document ownership before content stores the attachment identifier. The idempotent link remains while current or historical revisions may reference it and is removed with Document purge or explicit attachment deletion.
Path Parameters
Header Parameters
Request Body
Responses
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string·min 1·max 255Display filename, at most 255 UTF-8 bytes after NFC normalization.
It must not contain a path separator, null, or control character,
must not be . or .., and must not begin or end with whitespace or
a dot. A violating filename is rejected rather than rewritten.
Filenames never contribute to the server-generated object key.
string·max 255Server-detected from the object's leading bytes, not client-declared.
stringMalware-scan state. New uploads are scanned synchronously before
they become usable: only clean attachments may be linked, previewed,
or downloaded. quarantined attachments remain private and unavailable.
not_scanned is retained only for legacy migration visibility.
not_scannedpendingcleanquarantinedstring <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
Path Parameters
Query Parameters
Responses
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
Path Parameters
Query Parameters
Responses
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
Path Parameters
Responses
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
objectVersioned, server-validated rich-text document. The server accepts only nodes and marks on the Assign allowlist and rejects anything outside it; the client's installed editor extension set is never authoritative. Complexity is bounded at 32 levels of nesting and 50,000 nodes in addition to the per-field byte limits.
Accepted nodes: doc, paragraph, text, heading, bulletList,
orderedList, listItem, taskList, taskItem, blockquote, callout,
codeBlock, blockMath, horizontalRule, hardBreak, image, file, plus the
reference nodes userMention, projectReference, documentReference,
and taskReference. Accepted marks: bold, italic, underline,
strike, code, link.
A Task-description or Comment mutation accepts at most 100 distinct
canonical user identifiers across its userMention nodes. Repeated
mentions of the same user count once.
image and file name an Assign attachment through
attrs.attachmentId and carry no URL and no bytes: attachments travel
only through the attachment upload and download operations, and a
signed URL is minted per request after a fresh authorization check
rather than stored in content. A request whose image or file node
omits attachmentId, or carries a URL-bearing attribute, is rejected.
callout has block children and exactly attrs.kind and attrs.icon.
Kind is callout, note, tip, important, warning, or caution.
Icon is null for the default Lucide icon, an emoji of at most 64 UTF-8
bytes, an allowlisted lucide:name token to override it, or an empty string
to hide it. Unknown Lucide names are rejected. HTML, URLs and image
data are not accepted as icons. Callouts are additive in schemas 1 and 2.
blockMath stores a required string attrs.latex; rendered math HTML
and renderer settings are not persisted. Schema 1 retains the existing node contract; schema 2 additionally admits tables.
Checklists, attachment blocks, display equations, underline, and
projectReference were added additively, so every
previously stored document is still valid and no migration is
required.
Schema 2 additionally accepts table, tableRow, tableCell and tableHeader. A table has tableRow children; a row has tableCell/tableHeader children. Cells contain Assign blocks, starting with a paragraph; nested tables are rejected. Cells accept colspan/rowspan (integers 1–64, default 1), colwidth (null or one integer 24–2000 per spanned column), and align (null, left, center or right). Tables/rows have no attrs, marks or text; cells have no marks/text or other attributes. The occupancy grid must be rectangular with no overlap, holes or spans beyond its rows. Limits are 1000 rows, 64 logical columns and 10000 physical cells, still subject to each field's byte budget and global node/depth limits. Schema 1 rejects all four table nodes. Rich tables exchange through the named assign-table Markdown JSON fence; simple tables use GFM pipes.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
Restore a historical snapshot as a new active revision
/api/v1/documents/{document_id}/revisions/{revision}/restoreThe source snapshot remains immutable. The current Document revision must be supplied in If-Match.
Canonical content with an unsupported schema or an attempted
schema 2-to-1 downgrade returns 409 document_schema_version_unsupported.
Restoring an older Document revision retains an existing schema 2 floor.
Path Parameters
Header Parameters
Responses
stringQuoted decimal optimistic-concurrency version.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string·min 1·max 63Permanent Workspace-unique URL segment allocated from the title, with a numeric suffix on collision.
string·min 1·max 64Case-insensitive client input normalized to uppercase by the server. A code is unique across Projects, Tasks, and Documents in one Workspace. Internal UUIDs are not a CLI identifier.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
objectRevision-bound derived convenience text. It is null when the body is shorter than 300 normalized characters, generation is pending, or the stored projection is stale. It is never evidence or a replacement for Document content.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
Export current or historical Document content as Markdown
/api/v1/documents/{document_id}/markdownPath Parameters
Query Parameters
Responses
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
Replace Document content from Markdown
/api/v1/documents/{document_id}/markdownAccepts bounded valid UTF-8 Markdown. Supported Assign-profile constructs become structured content; unsupported blocks and inline constructs are preserved as inert literal Markdown. Raw HTML is never executed, and tables remain literal until a versioned table format is available.
Path Parameters
Header Parameters
Request Body
text/markdownResponses
stringQuoted decimal optimistic-concurrency version.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
integer·min 1The revision this content belongs to. Send it back in If-Match to save.
objectVersioned, server-validated rich-text document. The server accepts only nodes and marks on the Assign allowlist and rejects anything outside it; the client's installed editor extension set is never authoritative. Complexity is bounded at 32 levels of nesting and 50,000 nodes in addition to the per-field byte limits.
Accepted nodes: doc, paragraph, text, heading, bulletList,
orderedList, listItem, taskList, taskItem, blockquote, callout,
codeBlock, blockMath, horizontalRule, hardBreak, image, file, plus the
reference nodes userMention, projectReference, documentReference,
and taskReference. Accepted marks: bold, italic, underline,
strike, code, link.
A Task-description or Comment mutation accepts at most 100 distinct
canonical user identifiers across its userMention nodes. Repeated
mentions of the same user count once.
image and file name an Assign attachment through
attrs.attachmentId and carry no URL and no bytes: attachments travel
only through the attachment upload and download operations, and a
signed URL is minted per request after a fresh authorization check
rather than stored in content. A request whose image or file node
omits attachmentId, or carries a URL-bearing attribute, is rejected.
callout has block children and exactly attrs.kind and attrs.icon.
Kind is callout, note, tip, important, warning, or caution.
Icon is null for the default Lucide icon, an emoji of at most 64 UTF-8
bytes, an allowlisted lucide:name token to override it, or an empty string
to hide it. Unknown Lucide names are rejected. HTML, URLs and image
data are not accepted as icons. Callouts are additive in schemas 1 and 2.
blockMath stores a required string attrs.latex; rendered math HTML
and renderer settings are not persisted. Schema 1 retains the existing node contract; schema 2 additionally admits tables.
Checklists, attachment blocks, display equations, underline, and
projectReference were added additively, so every
previously stored document is still valid and no migration is
required.
Schema 2 additionally accepts table, tableRow, tableCell and tableHeader. A table has tableRow children; a row has tableCell/tableHeader children. Cells contain Assign blocks, starting with a paragraph; nested tables are rejected. Cells accept colspan/rowspan (integers 1–64, default 1), colwidth (null or one integer 24–2000 per spanned column), and align (null, left, center or right). Tables/rows have no attrs, marks or text; cells have no marks/text or other attributes. The occupancy grid must be rectangular with no overlap, holes or spans beyond its rows. Limits are 1000 rows, 64 logical columns and 10000 physical cells, still subject to each field's byte budget and global node/depth limits. Schema 1 rejects all four table nodes. Rich tables exchange through the named assign-table Markdown JSON fence; simple tables use GFM pipes.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
stringQuoted decimal optimistic-concurrency version.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
List direct child Documents
/api/v1/documents/{document_id}/childrenReturns one cursor-paginated page of direct children the caller may read, title-ordered unless sort selects modified-time order.
Path Parameters
Query Parameters
string·default titleSibling order. title (default), updated_desc or updated_asc, matching the workspace Document collection.
titleupdated_descupdated_ascResponses
integer <int64>·min 0Authorized collection size before cursor bounds; refreshed at read time. Activity counts admitted events before display grouping and Comments include retained ordinals.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
Path Parameters
Responses
stringQuoted decimal optimistic-concurrency version.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
integer·min 1The revision this content belongs to. Send it back in If-Match to save.
objectVersioned, server-validated rich-text document. The server accepts only nodes and marks on the Assign allowlist and rejects anything outside it; the client's installed editor extension set is never authoritative. Complexity is bounded at 32 levels of nesting and 50,000 nodes in addition to the per-field byte limits.
Accepted nodes: doc, paragraph, text, heading, bulletList,
orderedList, listItem, taskList, taskItem, blockquote, callout,
codeBlock, blockMath, horizontalRule, hardBreak, image, file, plus the
reference nodes userMention, projectReference, documentReference,
and taskReference. Accepted marks: bold, italic, underline,
strike, code, link.
A Task-description or Comment mutation accepts at most 100 distinct
canonical user identifiers across its userMention nodes. Repeated
mentions of the same user count once.
image and file name an Assign attachment through
attrs.attachmentId and carry no URL and no bytes: attachments travel
only through the attachment upload and download operations, and a
signed URL is minted per request after a fresh authorization check
rather than stored in content. A request whose image or file node
omits attachmentId, or carries a URL-bearing attribute, is rejected.
callout has block children and exactly attrs.kind and attrs.icon.
Kind is callout, note, tip, important, warning, or caution.
Icon is null for the default Lucide icon, an emoji of at most 64 UTF-8
bytes, an allowlisted lucide:name token to override it, or an empty string
to hide it. Unknown Lucide names are rejected. HTML, URLs and image
data are not accepted as icons. Callouts are additive in schemas 1 and 2.
blockMath stores a required string attrs.latex; rendered math HTML
and renderer settings are not persisted. Schema 1 retains the existing node contract; schema 2 additionally admits tables.
Checklists, attachment blocks, display equations, underline, and
projectReference were added additively, so every
previously stored document is still valid and no migration is
required.
Schema 2 additionally accepts table, tableRow, tableCell and tableHeader. A table has tableRow children; a row has tableCell/tableHeader children. Cells contain Assign blocks, starting with a paragraph; nested tables are rejected. Cells accept colspan/rowspan (integers 1–64, default 1), colwidth (null or one integer 24–2000 per spanned column), and align (null, left, center or right). Tables/rows have no attrs, marks or text; cells have no marks/text or other attributes. The occupancy grid must be rectangular with no overlap, holes or spans beyond its rows. Limits are 1000 rows, 64 logical columns and 10000 physical cells, still subject to each field's byte budget and global node/depth limits. Schema 1 rejects all four table nodes. Rich tables exchange through the named assign-table Markdown JSON fence; simple tables use GFM pipes.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
Replace versioned Document content
/api/v1/documents/{document_id}/contentCanonical content with an unsupported schema or an attempted
schema 2-to-1 downgrade returns 409 document_schema_version_unsupported.
Restoring an older Document revision retains an existing schema 2 floor.
Replaces Document content through versioned optimistic autosave. The
client sends the revision it edited in If-Match. A stale revision
is refused with 409 carrying the current server content, so the
client can keep its local draft and offer compare, reload, or retry
without a second request. Success means durably acknowledged.
This is not a collaborative editing protocol: no CRDT, operational transform, presence, or admission behaviour is implied.
Path Parameters
Header Parameters
Request Body
application/jsonobjectVersioned, server-validated rich-text document. The server accepts only nodes and marks on the Assign allowlist and rejects anything outside it; the client's installed editor extension set is never authoritative. Complexity is bounded at 32 levels of nesting and 50,000 nodes in addition to the per-field byte limits.
Accepted nodes: doc, paragraph, text, heading, bulletList,
orderedList, listItem, taskList, taskItem, blockquote, callout,
codeBlock, blockMath, horizontalRule, hardBreak, image, file, plus the
reference nodes userMention, projectReference, documentReference,
and taskReference. Accepted marks: bold, italic, underline,
strike, code, link.
A Task-description or Comment mutation accepts at most 100 distinct
canonical user identifiers across its userMention nodes. Repeated
mentions of the same user count once.
image and file name an Assign attachment through
attrs.attachmentId and carry no URL and no bytes: attachments travel
only through the attachment upload and download operations, and a
signed URL is minted per request after a fresh authorization check
rather than stored in content. A request whose image or file node
omits attachmentId, or carries a URL-bearing attribute, is rejected.
callout has block children and exactly attrs.kind and attrs.icon.
Kind is callout, note, tip, important, warning, or caution.
Icon is null for the default Lucide icon, an emoji of at most 64 UTF-8
bytes, an allowlisted lucide:name token to override it, or an empty string
to hide it. Unknown Lucide names are rejected. HTML, URLs and image
data are not accepted as icons. Callouts are additive in schemas 1 and 2.
blockMath stores a required string attrs.latex; rendered math HTML
and renderer settings are not persisted. Schema 1 retains the existing node contract; schema 2 additionally admits tables.
Checklists, attachment blocks, display equations, underline, and
projectReference were added additively, so every
previously stored document is still valid and no migration is
required.
Schema 2 additionally accepts table, tableRow, tableCell and tableHeader. A table has tableRow children; a row has tableCell/tableHeader children. Cells contain Assign blocks, starting with a paragraph; nested tables are rejected. Cells accept colspan/rowspan (integers 1–64, default 1), colwidth (null or one integer 24–2000 per spanned column), and align (null, left, center or right). Tables/rows have no attrs, marks or text; cells have no marks/text or other attributes. The occupancy grid must be rectangular with no overlap, holes or spans beyond its rows. Limits are 1000 rows, 64 logical columns and 10000 physical cells, still subject to each field's byte budget and global node/depth limits. Schema 1 rejects all four table nodes. Rich tables exchange through the named assign-table Markdown JSON fence; simple tables use GFM pipes.
Responses
stringQuoted decimal optimistic-concurrency version.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
integer·min 1The revision this content belongs to. Send it back in If-Match to save.
objectVersioned, server-validated rich-text document. The server accepts only nodes and marks on the Assign allowlist and rejects anything outside it; the client's installed editor extension set is never authoritative. Complexity is bounded at 32 levels of nesting and 50,000 nodes in addition to the per-field byte limits.
Accepted nodes: doc, paragraph, text, heading, bulletList,
orderedList, listItem, taskList, taskItem, blockquote, callout,
codeBlock, blockMath, horizontalRule, hardBreak, image, file, plus the
reference nodes userMention, projectReference, documentReference,
and taskReference. Accepted marks: bold, italic, underline,
strike, code, link.
A Task-description or Comment mutation accepts at most 100 distinct
canonical user identifiers across its userMention nodes. Repeated
mentions of the same user count once.
image and file name an Assign attachment through
attrs.attachmentId and carry no URL and no bytes: attachments travel
only through the attachment upload and download operations, and a
signed URL is minted per request after a fresh authorization check
rather than stored in content. A request whose image or file node
omits attachmentId, or carries a URL-bearing attribute, is rejected.
callout has block children and exactly attrs.kind and attrs.icon.
Kind is callout, note, tip, important, warning, or caution.
Icon is null for the default Lucide icon, an emoji of at most 64 UTF-8
bytes, an allowlisted lucide:name token to override it, or an empty string
to hide it. Unknown Lucide names are rejected. HTML, URLs and image
data are not accepted as icons. Callouts are additive in schemas 1 and 2.
blockMath stores a required string attrs.latex; rendered math HTML
and renderer settings are not persisted. Schema 1 retains the existing node contract; schema 2 additionally admits tables.
Checklists, attachment blocks, display equations, underline, and
projectReference were added additively, so every
previously stored document is still valid and no migration is
required.
Schema 2 additionally accepts table, tableRow, tableCell and tableHeader. A table has tableRow children; a row has tableCell/tableHeader children. Cells contain Assign blocks, starting with a paragraph; nested tables are rejected. Cells accept colspan/rowspan (integers 1–64, default 1), colwidth (null or one integer 24–2000 per spanned column), and align (null, left, center or right). Tables/rows have no attrs, marks or text; cells have no marks/text or other attributes. The occupancy grid must be rectangular with no overlap, holes or spans beyond its rows. Limits are 1000 rows, 64 logical columns and 10000 physical cells, still subject to each field's byte budget and global node/depth limits. Schema 1 rejects all four table nodes. Rich tables exchange through the named assign-table Markdown JSON fence; simple tables use GFM pipes.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
stringQuoted decimal optimistic-concurrency version.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
Admit an independent Document collaboration-presence lease
/api/v1/documents/{document_id}/collaboration-sessionsEvaluates the caller's current Document permission and creates an
independent session for this browser client. A caller with read-only
access receives role viewer; a caller who may edit receives editor.
The opaque admission_token lasts five minutes, is scoped to this
Document, actor, and session, and authorizes nothing on this HTTP API.
Each admission has its own token and exclusive connection lease, so
another tab cannot invalidate it. The connected relay renews the
lease; disconnected sessions expire through bounded cleanup.
The lease admits the browser-only durable Yjs relay. Raw updates, checkpoints and awareness are not REST or SDK payloads. Resource schema capability is checked at admission and again for each update/checkpoint.
X-Assign-Document-Schema defaults to 1. An editable schema 2 admission promotes only this resource's envelope through its normal revision transition, preserving opaque updates, checkpoints and replica generation. Existing schema 1 resources continue to accept schema 1 clients. Once promoted, schema 1 admission and already admitted schema 1 writes fail with document_schema_version_unsupported. Invalid header values fail with document_schema_version_unsupported. Project permissions remain authoritative.
Path Parameters
Header Parameters
string·min 43·max 43Session-bound CSRF token. It must exactly match the
__Host-assign_csrf cookie sent with the request.
Responses
string <uuid>Task replica generation; an ordinary description replacement invalidates retained updates from the old generation.
string <uuid>Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
integer·min 1Seconds until the client may retry.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
End the caller's Document collaboration-presence lease
/api/v1/documents/{document_id}/collaboration-sessions/{session_id}Ends only the caller's own session. Repeating a successful end remains
successful. A nonexistent or somebody else's session returns 404 so
the operation cannot disclose collaborator presence. No Workspace
event or Activity item is written.
Path Parameters
Header Parameters
Responses
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.
integer·min 1Seconds until the client may retry.
integer·min 0Delay in seconds before retrying, when an expected maintenance end is known.
string·const no-storePrevents storage of error responses by clients and intermediaries.
string·min 1·max 200Correlation identifier for the request.
string·const nosniffPrevents user agents from MIME-sniffing the response.