Skip to main content

Notes

A Note stores text content with optional start and end dates, a type classification, and relationships to Resources, Groups, and Tags. Notes support a block-based content system for structured editing and public sharing via unique tokens.

Notes list

Note Properties

PropertyTypeDescription
namestringTitle of the Note (required, non-empty)
descriptionstringMain text content, syncs with first text block
metaJSONArbitrary key-value metadata (defaults to {})
startDatedatetimeOptional start date for temporal filtering
endDatedatetimeOptional end date for temporal filtering
noteTypeIdintegerOptional FK to a Note Type for categorization
shareTokenstring (nullable)Optional 32-character token for public sharing, generated on demand (unique across all Notes)
shareCreatedAtdatetime (nullable)When the current share token was minted; NULL for tokens created before this was recorded
ownerIdintegerFK to owning Group
createdAtdatetimeCreation timestamp
updatedAtdatetimeLast update timestamp

Ownership and Deletion

A Note can be owned by one Group. The owner appears as the Note's parent in the UI.

When the owner Group is deleted, the Note's ownerId is set to NULL (ON DELETE SET NULL). The Note is preserved as unowned.

Date Ranges

Notes have optional startDate and endDate fields for temporal filtering and chronological organization. Both fields are independent -- set one, both, or neither.

Note Types

Note Types classify Notes and apply consistent styling. Each Note Type carries a set of custom HTML slots, processed server-side for shortcodes, with Alpine.js directives available against an entity variable in the detail-page and card slots. See Custom Templates.

Note Type deletion sets NULL

Deleting a Note Type sets noteTypeId to NULL on all Notes of that type. The Notes themselves are preserved, just untyped.

PropertyDescription
nameType identifier (e.g., "Meeting Notes")
descriptionOptional description of the note type
customHeaderHTML template for the Note display header
customDetailFooterHTML template rendered at the bottom of the Note detail page body
customSidebarHTML template for the sidebar
customSummaryHTML template for list views
customAvatarHTML template for Note avatars
customHoverCardHTML template for the hover card shown on a Note link; falls back to customSummary when empty
customListHeaderHTML template rendered at the top of a Note list filtered to this one type
customListFooterHTML template rendered at the bottom of a Note list filtered to this one type
customCSSCSS injected as a page-level <style> block on pages that render this type's templates
customMRQLResultHTML template for rendering Notes of this type in MRQL query results
applyTemplatesToSharesOpt this type's customHeader and customCSS into the public /s/<token> share page. Default false, so existing shares keep their appearance until an author enables it. See Note Sharing.
metaSchemaJSON Schema for metadata validation on Notes of this type
sectionConfigJSON config controlling which sections are visible on Note detail pages
createdAtCreation timestamp
updatedAtLast update timestamp

Slot content is expanded server-side for shortcodes, so read the Note's own fields with [property] and [meta]:

<div class="meeting-header">
<span class="date">[property path="StartDate"]</span>
<span class="type-badge">Meeting</span>
</div>
@-Mentions in descriptions

Note descriptions and text blocks support @-mentions. Type @ to search and link to resources, groups, and tags. Mentioned entities are automatically added as relations when you save. Mentions in notes are additive only: removing a mention does not remove the relation. See Mentions.

Block-Based Content

Notes support an optional block-based content structure. Each block has a type, position, content (JSON), and state (JSON). For full details on block types, schemas, and the block API, see Note Blocks.

Content vs State

Blocks separate content (edited in edit mode) from state (modified while viewing):

  • Content: Todo item text, heading text, query configuration
  • State: Which todos are checked, calendar view mode

Description Synchronization

The Note's description field syncs bidirectionally with the first text block:

  • Editing the first text block updates description
  • Editing description updates the first text block
  • Notes without blocks render description directly

Relationships

Ownership

  • One Group can own a Note (appears in the owner's "Owned Notes")
  • Deleting the owner sets the Note's ownerId to NULL (Note preserved)
  • Many-to-many via groups_related_notes
  • A Note appears in each related Group's "Related Notes" section

Attached Resources

  • Many-to-many via resource_notes
  • Resources appear as attachments on the Note

Tags

  • Many-to-many via note_tags
  • Tags enable cross-cutting organization and filtering

Sharing

Generate a 32-character share token to make a Note publicly accessible. Shared Notes are served on the share server without authentication. See Note Sharing.

Query Parameters

Filter Notes with these parameters on GET /v1/notes:

ParameterTypeDescription
NamestringLIKE search on name
DescriptionstringLIKE search on description
OwnerIdintegerFilter by owner Group
Groupsinteger[]Filter by Group IDs (AND logic, includes owned + related)
Tagsinteger[]Filter by Tag IDs (AND logic)
Idsinteger[]Filter by specific Note IDs
NoteTypeIdintegerFilter by Note Type
NoteTypeIdsinteger[]Filter by several Note Types
SharedbooleanFilter Notes that have a share token
CreatedBeforestringDate upper bound
CreatedAfterstringDate lower bound
UpdatedBeforestringUpdate-time upper bound
UpdatedAfterstringUpdate-time lower bound
StartDateBeforestringFilter on start date
StartDateAfterstringFilter on start date
EndDateBeforestringFilter on end date
EndDateAfterstringFilter on end date
MetaQuerystring[]JSON metadata queries (key:value or key:OP:value)
SortBystring[]Sort columns (e.g., created_at desc, meta->>'key')
MRQLstringMRQL filter expression, with type = "note" implied. See MRQL.

API Operations

For full API details, see API: Notes.