These distinctions keep immutable originals, human metadata, permissions, and
retrieval behavior explicit.
Notes on an exact revision
The Notes card on Document Detail keeps attributed working context beside one exact file revision. A user who can change the document can add a note of up to 16 KiB. Each row shows its author and created or edited time. The author may edit or delete their own note; an administrator may moderate any note. Notes are deliberately revision-owned. Uploading a replacement starts its Notes card empty, while the earlier revision keeps its history. Trash makes the card read-only until restore. The API rechecks both document change permission and note ownership in the write transaction, and records create, update, and delete audit events.Replacement versions
Open a live document and use Upload replacement to add a newer revision. The new upload becomes another document row with its own immutable original, source, extracted text, processing state, and direct URL. The version history remains available from every visible member of the family. For example, suppose document 120 isLease agreement — signed 2024. Uploading
an amended PDF creates document 184 and records 120 as its predecessor:
#/documents/120 still opens the 2024 file. Documents, ranked Search,
Calendar, and archive research normally return 184 instead because it is the
newest live revision visible to that caller.
A replacement must extend the current family head. Uploading from an earlier
revision returns a generic conflict, and only one of two concurrent replacements
can win. A trashed newest revision still reserves that position until it is
restored or permanently deleted. These rules keep replacement history linear
instead of silently creating sibling branches; the conflict never identifies a
newer revision the caller cannot view.
Use the query language when the task needs a different view:
What replacement carries forward
Replacement preserves continuity metadata needed to keep the logical document filed and accessible:- filing system, owner, category, sensitivity, document type, and title;
- explicit document ACL grants;
- tags assigned by a person or deterministic rule; and
- correspondent relationships.
- the immutable original and acquisition source;
- extracted content, detected languages, thumbnails, and processing results;
- classifier-owned tags and accepted or pending document dates;
- every custom-field value, including document links;
- notes and the previous archive number.
Exact document links
An administrator first creates a custom field whose type is Document link in Settings > Archive configuration > Metadata > Custom fields. On a document, open Linked documents and choose Add link to select an unused relationship type. Change link searches documents the current user may view; an exact numeric ID or canonical same-instance document URL is also accepted, including URL-encoded links and their filing-system context. Remove link removes the value. Example: an invoice uses thePayment receipt field to point to receipt 312.
The receipt detail shows the invoice under Linked documents:
Deliberate relationship limits
These limits are intentional. They prevent Versions and Linked documents from becoming two overlapping ways to build an ambiguous document graph:- a document cannot link to itself;
- one revision cannot link to another revision in its own version family; use Versions for that relationship; and
- replacement never copies or retargets a link.
Permissions and filing systems
A link write requires permission to change the source and view the live target. A cross-system link additionally requires entry to both filing systems. Reads repeat authorization at both ends:- a hidden or trashed target is omitted from the source’s fields;
- a hidden or trashed source is omitted from Linked documents counts and pages;
- no hidden ID, title, address, existence flag, or count is returned; and
- a pasted remote URL is rejected without fetching it.
Typed custom fields
Administrators define fields under Settings > Archive configuration > Metadata > Custom fields. Text, URL, number, monetary, date, yes/no, select, multi-choice, and Document link values use type-specific editors on Document Detail. Select and multi-choice definitions require a non-empty, unique choice list. Once a field has values, its type cannot change; an in-use choice cannot be removed. Adding choices and renaming the field remain safe. Filesystem sidecars may set an existing field by its exact name. The watcher uses the same server-side type validation as the API and writes metadata in the document transaction: an unknown field or invalid value rejects the intake instead of leaving a partially described document. Automations expose named field pickers and the selected field’s real value control.Find documents by field presence or value
has-field: resolves an exact custom-field name in the selected filing system.
It works in Documents, ranked Search, saved Views, Calendar, and archive research:
field: when the value matters:
has-field: query,
so opening the View, copying its URL, and using Back/Forward retain one canonical
filter.
Trash, restore, and permanent deletion
Trashing a linked target temporarily removes it from outgoing field projection, Linked documents, and positivehas-field: matching. The stored value remains,
so restoring the same target makes the relationship visible again.
Permanent deletion removes every incoming Document link whose exact target is
the purged row. Restoring is no longer possible. CAS blobs remain governed by
offline garbage collection, independently of the relationship row.
Trashing one version does not merge or renumber its family. Live discovery picks
the newest remaining revision visible to the caller; direct Trash recovery stays
an exact-row operation.
API entry points
GET /api/documents/{id}— typed fields, notes, therendered_layoutAPI projection, and read-only previous archive numberPOST /api/documents/{id}/notes/— attributed note creationPATCH|DELETE /api/documents/{id}/notes/{note}— author/admin note mutationGET /api/documents/{id}/versions/— paged visible family historyPOST /api/documents/{id}/versions/— idempotent replacement uploadGET /api/documents/{id}/referenced-by/— paged computed backlinksPUT|DELETE /api/documents/{id}/custom_fields/{field}— exact typed-value mutation- Query language —
version:,has-field:,field:, andasn:selectors