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)
ownerIdintegerFK to owning Group

Ownership and Deletion

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

Cascade on owner deletion

Deleting the owner Group deletes all Notes it owns. This is a cascade delete (ON DELETE CASCADE), not a soft delete.

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 has custom HTML templates (header, sidebar, summary, avatar) rendered with Pongo2 syntax.

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")
customHeaderHTML template for the Note display header
customSidebarHTML template for the sidebar
customSummaryHTML template for list views
descriptionOptional description of the note type
createdAtCreation timestamp
updatedAtLast update timestamp
customAvatarHTML template for Note avatars

Templates have access to the note object and its metadata via Pongo2 (Django-like) syntax:

<div class="meeting-header">
<span class="date">{{ note.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 cascades to the Note
  • 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
SharedbooleanFilter Notes that have a share token
CreatedBeforestringDate upper bound
CreatedAfterstringDate 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')

API Operations

For full API details, see API: Notes.