Document
A rich-text document that lives in a project. Create seeds the body from Markdown (content); after that the body can only be extended with the append operation, never replaced, and it is not returned by list or get — read it with the content operation. accessType CANNOT BE CHANGED after creation: choose it when you create the document, or change it in the Nifty app. Choosing limited also decides who can reach the document — the member list is seeded from the resolved author, so a document created by an agent is reachable by that author, not by the agent that called the API. A child document always inherits its parent's access type. Google- and Microsoft-linked documents are readable here but are created in those apps.
List Documents
List documents. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 9 fields. Ordered by createdAt unless you pass sort.
Required scope: documents:read
query Parameters
projectIdRestrict the list to one project. Omit to list documents across every project you can access.
sortField to sort by. Prefix with - for descending (-createdAt); a createdAt:desc / createdAt:asc suffix works too, but never both markers at once. Default: createdAt. Listing without projectId orders by -updatedAt instead.
cursorOpaque cursor for the next page (the envelope nextCursor).
limitItems per page (1–200, default 50). A larger value is clamped to the cap rather than rejected, so always follow nextCursor instead of assuming one page held everything.
includeTotalWhen true, the response envelope includes the total number of matching rows. Omit it for cheaper pagination.
expandComma-separated relations to inline (see Expanding objects above). Valid values are listed in the enum.
purgeAt[null]Filter where purgeAt is null (pass true).
purgeAt[notNull]Filter where purgeAt is not null (pass true).
purgeAt[gt]Filter where purgeAt is greater than.
purgeAt[gte]Filter where purgeAt is greater than or equal to.
purgeAt[lt]Filter where purgeAt is less than.
purgeAt[lte]Filter where purgeAt is less than or equal to.
name[eq]Filter where name equals.
name[contains]Filter where name contains.
name[startsWith]Filter where name starts with.
projectId[eq]Filter where projectId equals.
projectId[in]Filter where projectId is one of (comma-separated list).
parentDocumentId[eq]Filter where parentDocumentId equals.
parentDocumentId[in]Filter where parentDocumentId is one of (comma-separated list).
parentDocumentId[null]Filter where parentDocumentId is null (pass true).
parentDocumentId[notNull]Filter where parentDocumentId is not null (pass true).
type[eq]Filter where type equals.
type[in]Filter where type is one of (comma-separated list).
accessType[eq]Filter where accessType equals.
accessType[in]Filter where accessType is one of (comma-separated list).
archived[eq]Filter where archived equals.
editorVersion[eq]Filter where editorVersion equals.
editorVersion[in]Filter where editorVersion is one of (comma-separated list).
createdAt[gt]Filter where createdAt is greater than.
createdAt[gte]Filter where createdAt is greater than or equal to.
createdAt[lt]Filter where createdAt is less than.
createdAt[lte]Filter where createdAt is less than or equal to.
List Documents › Responses
OK
The page of results.
totalTotal rows matching the query (across pages).
limithasMorenextCursorOpaque cursor for the next page; null on the last page.
Create Document
Create a Document. Server-assigned fields are ignored if sent.
Required scope: documents:write
query Parameters
expandComma-separated relations to inline (see Expanding objects above). Valid values are listed in the enum.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Create Document › Request Body
nameDocument display name. Required on create; editable.
projectIdThe project this document belongs to. Required on create — a document always lives in a project — and immutable afterwards.
description1–3 sentence summary of what this document is for (max 2,000 chars; null = none). Surfaced in list results so agents can discover a project's knowledge without fetching bodies. Set it when creating a document; keep it short — it is metadata, not a second body.
parentDocumentIdThe document this one is nested under — a parent in the same project. Set once at creation and immutable thereafter.
folderIdThe folder this document sits in — a document folder in the same project. Omit or send null to place it at the project root. The folder path is derived by the server. Set once at creation; moving a document between folders is not part of the update surface yet.
accessTypeWho can see this document. public (the default) — everyone in the project. limited — only the document's own member list, which starts out as JUST THE RESOLVED AUTHOR: when an agent or integration creates a limited document, the author it resolves to is the one who can reach it, not the caller. private — a legacy state the API cannot set; those documents are readable and filterable but cannot be created here. Choose this when you create the document — it cannot be changed afterwards through the API (change it in the Nifty app instead). A child document always inherits its parent's access type.
contentInitial document body, as Markdown. Supports headings, lists, tables, code blocks and Nifty mention syntax. Create-only: the body of an existing document is EXTENDED with the append operation and read back with the content operation — it can never be replaced or deleted, and it is not returned by list or get.
lockedWhether the document is locked against edits.
archivedWhether the document is archived. Archived documents stay in the project but are hidden from default views. Independent of deletion — an archived document is not deleted, and a deleted document is not archived.
Create Document › Responses
Created
idUnique identifier for this resource.
createdAtCreation timestamp.
nameDocument display name. Required on create; editable.
archivedWhether the document is archived. Archived documents stay in the project but are hidden from default views. Independent of deletion — an archived document is not deleted, and a deleted document is not archived.
accessTypeWho can see this document. public (the default) — everyone in the project. limited — only the document's own member list, which starts out as JUST THE RESOLVED AUTHOR: when an agent or integration creates a limited document, the author it resolves to is the one who can reach it, not the caller. private — a legacy state the API cannot set; those documents are readable and filterable but cannot be created here. Choose this when you create the document — it cannot be changed afterwards through the API (change it in the Nifty app instead). A child document always inherits its parent's access type.
typeWhere the document lives: nifty (a native Nifty document — everything the API creates), or google / dropbox / microsoft for a document linked from that provider. Read-only.
lockedWhether the document is locked against edits.
updatedAtLast update timestamp.
createdByActorIdWho created this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records created any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
updatedByActorIdWho last wrote to this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records last written any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
createdByActorTypeThe creator actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type; read-only, not directly writable.
updatedByActorTypeThe last writer actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type via the row's updatedByActorId; read-only, not directly writable.
purgeAtWhen this resource will be permanently deleted — soft-delete time + 30-day retention; null while live.
deletedByIdMember who soft-deleted this resource (server-stamped). A member id — resolve it with GET /members/{id}.
description1–3 sentence summary of what this document is for (max 2,000 chars; null = none). Surfaced in list results so agents can discover a project's knowledge without fetching bodies. Set it when creating a document; keep it short — it is metadata, not a second body.
subtypeWhat kind of file a linked Google/Microsoft document is: document, spreadsheet or presentation. Null for native Nifty documents. Read-only.
projectIdThe project this document belongs to. Required on create — a document always lives in a project — and immutable afterwards.
authorIdThe team member credited as the document's author — a member id, so resolve it with ?expand=author or GET /members/{id}. When an agent or integration creates a document it resolves to a person (the project owner), and is null only if no person can be resolved. Read-only.
parentDocumentIdThe document this one is nested under — a parent in the same project. Set once at creation and immutable thereafter.
folderIdThe folder this document sits in — a document folder in the same project. Omit or send null to place it at the project root. The folder path is derived by the server. Set once at creation; moving a document between folders is not part of the update surface yet.
externalIdThe provider's own id for a Google/Microsoft-linked document. Null for Nifty-native documents (everything created through this API). Read-only.
externalEmbedUrlEmbed URL for a document linked from another provider. Null for Nifty-native documents (everything created through this API). Read-only.
The related Project, present only when you pass ?expand=project.
The related Team Member, present only when you pass ?expand=author.
The related Document, present only when you pass ?expand=parentDocument.
The related Team Member, present only when you pass ?expand=deletedBy.
The related Actor, present only when you pass ?expand=createdByActor.
The related Actor, present only when you pass ?expand=updatedByActor.
The linked Label rows, present only when you pass ?expand=labels.
Get Document
Retrieve a single Document by id.
Required scope: documents:read
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Document.
query Parameters
expandComma-separated relations to inline (see Expanding objects above). Valid values are listed in the enum.
Get Document › Responses
OK
idUnique identifier for this resource.
createdAtCreation timestamp.
nameDocument display name. Required on create; editable.
archivedWhether the document is archived. Archived documents stay in the project but are hidden from default views. Independent of deletion — an archived document is not deleted, and a deleted document is not archived.
accessTypeWho can see this document. public (the default) — everyone in the project. limited — only the document's own member list, which starts out as JUST THE RESOLVED AUTHOR: when an agent or integration creates a limited document, the author it resolves to is the one who can reach it, not the caller. private — a legacy state the API cannot set; those documents are readable and filterable but cannot be created here. Choose this when you create the document — it cannot be changed afterwards through the API (change it in the Nifty app instead). A child document always inherits its parent's access type.
typeWhere the document lives: nifty (a native Nifty document — everything the API creates), or google / dropbox / microsoft for a document linked from that provider. Read-only.
lockedWhether the document is locked against edits.
updatedAtLast update timestamp.
createdByActorIdWho created this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records created any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
updatedByActorIdWho last wrote to this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records last written any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
createdByActorTypeThe creator actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type; read-only, not directly writable.
updatedByActorTypeThe last writer actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type via the row's updatedByActorId; read-only, not directly writable.
purgeAtWhen this resource will be permanently deleted — soft-delete time + 30-day retention; null while live.
deletedByIdMember who soft-deleted this resource (server-stamped). A member id — resolve it with GET /members/{id}.
description1–3 sentence summary of what this document is for (max 2,000 chars; null = none). Surfaced in list results so agents can discover a project's knowledge without fetching bodies. Set it when creating a document; keep it short — it is metadata, not a second body.
subtypeWhat kind of file a linked Google/Microsoft document is: document, spreadsheet or presentation. Null for native Nifty documents. Read-only.
projectIdThe project this document belongs to. Required on create — a document always lives in a project — and immutable afterwards.
authorIdThe team member credited as the document's author — a member id, so resolve it with ?expand=author or GET /members/{id}. When an agent or integration creates a document it resolves to a person (the project owner), and is null only if no person can be resolved. Read-only.
parentDocumentIdThe document this one is nested under — a parent in the same project. Set once at creation and immutable thereafter.
folderIdThe folder this document sits in — a document folder in the same project. Omit or send null to place it at the project root. The folder path is derived by the server. Set once at creation; moving a document between folders is not part of the update surface yet.
externalIdThe provider's own id for a Google/Microsoft-linked document. Null for Nifty-native documents (everything created through this API). Read-only.
externalEmbedUrlEmbed URL for a document linked from another provider. Null for Nifty-native documents (everything created through this API). Read-only.
The related Project, present only when you pass ?expand=project.
The related Team Member, present only when you pass ?expand=author.
The related Document, present only when you pass ?expand=parentDocument.
The related Team Member, present only when you pass ?expand=deletedBy.
The related Actor, present only when you pass ?expand=createdByActor.
The related Actor, present only when you pass ?expand=updatedByActor.
The linked Label rows, present only when you pass ?expand=labels.
Delete Document
Move this Document to trash. It disappears from list results immediately and is permanently purged after a 30-day retention window; until then it can be restored.
Required scope: documents:delete
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Document.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Delete Document › Responses
No Content
Update Document
Partially update a Document. Only the fields you send are changed.
Required scope: documents:write
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Document.
query Parameters
expandComma-separated relations to inline (see Expanding objects above). Valid values are listed in the enum.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Update Document › Request Body
nameDocument display name. Required on create; editable.
description1–3 sentence summary of what this document is for (max 2,000 chars; null = none). Surfaced in list results so agents can discover a project's knowledge without fetching bodies. Set it when creating a document; keep it short — it is metadata, not a second body.
lockedWhether the document is locked against edits.
archivedWhether the document is archived. Archived documents stay in the project but are hidden from default views. Independent of deletion — an archived document is not deleted, and a deleted document is not archived.
expectedUpdatedAtOptional concurrency guard: the updatedAt you last read. If the resource has changed since, the update is rejected with 409 instead of overwriting the other writer. Re-read, re-derive your change from the current values, and retry with the fresh updatedAt.
Update Document › Responses
OK
idUnique identifier for this resource.
createdAtCreation timestamp.
nameDocument display name. Required on create; editable.
archivedWhether the document is archived. Archived documents stay in the project but are hidden from default views. Independent of deletion — an archived document is not deleted, and a deleted document is not archived.
accessTypeWho can see this document. public (the default) — everyone in the project. limited — only the document's own member list, which starts out as JUST THE RESOLVED AUTHOR: when an agent or integration creates a limited document, the author it resolves to is the one who can reach it, not the caller. private — a legacy state the API cannot set; those documents are readable and filterable but cannot be created here. Choose this when you create the document — it cannot be changed afterwards through the API (change it in the Nifty app instead). A child document always inherits its parent's access type.
typeWhere the document lives: nifty (a native Nifty document — everything the API creates), or google / dropbox / microsoft for a document linked from that provider. Read-only.
lockedWhether the document is locked against edits.
updatedAtLast update timestamp.
createdByActorIdWho created this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records created any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
updatedByActorIdWho last wrote to this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records last written any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
createdByActorTypeThe creator actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type; read-only, not directly writable.
updatedByActorTypeThe last writer actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type via the row's updatedByActorId; read-only, not directly writable.
purgeAtWhen this resource will be permanently deleted — soft-delete time + 30-day retention; null while live.
deletedByIdMember who soft-deleted this resource (server-stamped). A member id — resolve it with GET /members/{id}.
description1–3 sentence summary of what this document is for (max 2,000 chars; null = none). Surfaced in list results so agents can discover a project's knowledge without fetching bodies. Set it when creating a document; keep it short — it is metadata, not a second body.
subtypeWhat kind of file a linked Google/Microsoft document is: document, spreadsheet or presentation. Null for native Nifty documents. Read-only.
projectIdThe project this document belongs to. Required on create — a document always lives in a project — and immutable afterwards.
authorIdThe team member credited as the document's author — a member id, so resolve it with ?expand=author or GET /members/{id}. When an agent or integration creates a document it resolves to a person (the project owner), and is null only if no person can be resolved. Read-only.
parentDocumentIdThe document this one is nested under — a parent in the same project. Set once at creation and immutable thereafter.
folderIdThe folder this document sits in — a document folder in the same project. Omit or send null to place it at the project root. The folder path is derived by the server. Set once at creation; moving a document between folders is not part of the update surface yet.
externalIdThe provider's own id for a Google/Microsoft-linked document. Null for Nifty-native documents (everything created through this API). Read-only.
externalEmbedUrlEmbed URL for a document linked from another provider. Null for Nifty-native documents (everything created through this API). Read-only.
The related Project, present only when you pass ?expand=project.
The related Team Member, present only when you pass ?expand=author.
The related Document, present only when you pass ?expand=parentDocument.
The related Team Member, present only when you pass ?expand=deletedBy.
The related Actor, present only when you pass ?expand=createdByActor.
The related Actor, present only when you pass ?expand=updatedByActor.
The linked Label rows, present only when you pass ?expand=labels.
Search Documents
Full-text ranked search across documents. Ranked by relevance; pages are capped at 200 results. Filterable by 9 fields.
Required scope: documents:read
query Parameters
qFull-text search query. Trimmed before matching; URLs, e-mail addresses and HTML markup are rejected.
projectIdThe project to search within. Required — documents are project-scoped and search has no workspace-wide mode.
cursorOpaque cursor for the next page (the envelope nextCursor).
limitItems per page (1–200, default 50). A larger value is clamped to the cap rather than rejected, so always follow nextCursor instead of assuming one page held everything.
includeTotalWhen true, the response envelope includes the total number of matching rows. Omit it for cheaper pagination.
expandComma-separated relations to inline (see Expanding objects above). Valid values are listed in the enum.
purgeAt[null]Filter where purgeAt is null (pass true).
purgeAt[notNull]Filter where purgeAt is not null (pass true).
purgeAt[gt]Filter where purgeAt is greater than.
purgeAt[gte]Filter where purgeAt is greater than or equal to.
purgeAt[lt]Filter where purgeAt is less than.
purgeAt[lte]Filter where purgeAt is less than or equal to.
name[eq]Filter where name equals.
name[contains]Filter where name contains.
name[startsWith]Filter where name starts with.
projectId[eq]Filter where projectId equals.
projectId[in]Filter where projectId is one of (comma-separated list).
parentDocumentId[eq]Filter where parentDocumentId equals.
parentDocumentId[in]Filter where parentDocumentId is one of (comma-separated list).
parentDocumentId[null]Filter where parentDocumentId is null (pass true).
parentDocumentId[notNull]Filter where parentDocumentId is not null (pass true).
type[eq]Filter where type equals.
type[in]Filter where type is one of (comma-separated list).
accessType[eq]Filter where accessType equals.
accessType[in]Filter where accessType is one of (comma-separated list).
archived[eq]Filter where archived equals.
editorVersion[eq]Filter where editorVersion equals.
editorVersion[in]Filter where editorVersion is one of (comma-separated list).
createdAt[gt]Filter where createdAt is greater than.
createdAt[gte]Filter where createdAt is greater than or equal to.
createdAt[lt]Filter where createdAt is less than.
createdAt[lte]Filter where createdAt is less than or equal to.
Search Documents › Responses
OK
The page of results.
totalTotal rows matching the query (across pages).
limithasMorenextCursorOpaque cursor for the next page; null on the last page.
Add labels to a Document
Link the given ids to this Document as labels. Adds to the existing set rather than replacing it, and adding one that is already linked changes nothing. Returns the complete labels set afterwards.
Required scopes: documents:write documents:link
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Document.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Add labels to a Document › Responses
OK
The complete labels set after the change.
affectedIdsThe ids that were actually linked (ones already linked are omitted).
missingIdsIds you sent that do not exist or are not visible to this token.
Remove labels from a Document
Unlink the given ids from this Document's labels. Removing one that is not linked changes nothing. Returns the complete labels set afterwards.
Required scopes: documents:write documents:link
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Document.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Remove labels from a Document › Responses
OK
The complete labels set after the change.
affectedIdsThe ids that were actually unlinked (ones not linked are omitted).
Content (Document)
Read a document body as Markdown — the rich-text content, which list and get do not return. Returns { format, content, truncated, byteSize, lossy }; a large body is truncated with truncated=true, and lossy=true means some formatting was dropped in the Markdown conversion.
Required scope: documents:read
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Document.
Content (Document) › Responses
OK
formatcontenttruncatedbyteSizelossyAppend (Document)
Append Markdown to the END of a document's body. This is the only way to add to an existing document's content — update cannot change the body, and there is no way to replace or delete existing content. Use content (the read operation) first if you need to know what the document already says. Appends are additive and never overwrite what is there, including what someone else is typing right now.
Required scope: documents:write
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Document.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Append (Document) › Request Body
contentMarkdown to append to the END of the document body. Never replaces or deletes existing content. Supports headings, lists, tables, code blocks and Nifty mention syntax. Empty content is an honest no-op: it returns blocksAppended: 0 and changes nothing, rather than being rejected — so a caller cannot mistake a rejected empty write for a failure.
Append (Document) › Responses
OK
documentIdblocksAppendedbyteSizesanitizedidempotentReplayEdit text (Document)
Replace exact text within a document's body — the way to EDIT existing content, as opposed to append (which only adds to the end) or update (which cannot touch the body at all). Use content (the read operation) first to see the exact text to match. By default only the FIRST match of find is replaced; use occurrence to target the Nth match, anchorBefore/anchorAfter to disambiguate by surrounding text when find is not unique, or replaceAll to replace every match. Fails with a teaching error if find cannot be located or is ambiguous, rather than guessing. replace is inserted as plain text (no Markdown is parsed) and inherits the matched text's formatting.
Required scope: documents:write
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Document.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Edit text (Document) › Request Body
findExact text to locate in the document body (read it first with content — this must match verbatim, not a pattern). Must be non-empty.
replaceText that replaces the located find match. May be empty to delete the matched text outright. Plain text only — unlike append's Markdown, no formatting/mentions are interpreted here; the replacement inherits the surrounding text's existing formatting.
occurrenceWhen find matches more than once, replace only the Nth match (1-based). Omit to target the first match. Ignored when replaceAll is true.
anchorBeforeDisambiguate a non-unique find by requiring this exact text to immediately PRECEDE the match. Use when occurrence is inconvenient (e.g. the match position may shift).
anchorAfterDisambiguate a non-unique find by requiring this exact text to immediately FOLLOW the match. Can be combined with anchorBefore to pin both sides of an ambiguous match.
replaceAllReplace every occurrence of find in the document, not just one. When true, occurrence is ignored.
Edit text (Document) › Responses
OK
documentIdreplacementsbyteSizeidempotentReplayRestore Document
Restore a Document that was deleted, returning it to list results. Restoring one that is already active succeeds and changes nothing.
Required scope: documents:delete
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Document.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Restore Document › Responses
OK
idUnique identifier for this resource.
createdAtCreation timestamp.
nameDocument display name. Required on create; editable.
archivedWhether the document is archived. Archived documents stay in the project but are hidden from default views. Independent of deletion — an archived document is not deleted, and a deleted document is not archived.
accessTypeWho can see this document. public (the default) — everyone in the project. limited — only the document's own member list, which starts out as JUST THE RESOLVED AUTHOR: when an agent or integration creates a limited document, the author it resolves to is the one who can reach it, not the caller. private — a legacy state the API cannot set; those documents are readable and filterable but cannot be created here. Choose this when you create the document — it cannot be changed afterwards through the API (change it in the Nifty app instead). A child document always inherits its parent's access type.
typeWhere the document lives: nifty (a native Nifty document — everything the API creates), or google / dropbox / microsoft for a document linked from that provider. Read-only.
lockedWhether the document is locked against edits.
updatedAtLast update timestamp.
createdByActorIdWho created this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records created any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
updatedByActorIdWho last wrote to this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records last written any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
createdByActorTypeThe creator actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type; read-only, not directly writable.
updatedByActorTypeThe last writer actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type via the row's updatedByActorId; read-only, not directly writable.
purgeAtWhen this resource will be permanently deleted — soft-delete time + 30-day retention; null while live.
deletedByIdMember who soft-deleted this resource (server-stamped). A member id — resolve it with GET /members/{id}.
description1–3 sentence summary of what this document is for (max 2,000 chars; null = none). Surfaced in list results so agents can discover a project's knowledge without fetching bodies. Set it when creating a document; keep it short — it is metadata, not a second body.
subtypeWhat kind of file a linked Google/Microsoft document is: document, spreadsheet or presentation. Null for native Nifty documents. Read-only.
projectIdThe project this document belongs to. Required on create — a document always lives in a project — and immutable afterwards.
authorIdThe team member credited as the document's author — a member id, so resolve it with ?expand=author or GET /members/{id}. When an agent or integration creates a document it resolves to a person (the project owner), and is null only if no person can be resolved. Read-only.
parentDocumentIdThe document this one is nested under — a parent in the same project. Set once at creation and immutable thereafter.
folderIdThe folder this document sits in — a document folder in the same project. Omit or send null to place it at the project root. The folder path is derived by the server. Set once at creation; moving a document between folders is not part of the update surface yet.
externalIdThe provider's own id for a Google/Microsoft-linked document. Null for Nifty-native documents (everything created through this API). Read-only.
externalEmbedUrlEmbed URL for a document linked from another provider. Null for Nifty-native documents (everything created through this API). Read-only.