Journal
Fields marked * are required. Updates keep every field they are not given. An AI app can ask vritto_describe for the same details, filtered to what its connection may use.
Journal Entryjournal_entry
A private journal entry with mood and reflections.
journal_findFindthrough vritto_findRead the Journal: search entries the user shared with AI by text, kind, mood, tag or date (newest first; `withheld` counts matches not shared), one entry by id, or view 'stats' for a year's cadence (totals, streak, average mood and energy, by month) over every active entry. ALWAYS pass from/to when the question concerns a period.
| Field | Type | Description |
|---|---|---|
| id | string | Return just this entry. |
| entryId | string | Older name for id. |
| view | one of stats | 'stats': journalling cadence for a year, counted over ACTIVE entries whatever their sharing; never touches a body. Prefer it for how-often, how-many and streak questions. |
| year | string | With view 'stats': the four-digit year (default the current one). |
| query | string | Free-text search over titles, bodies, and tags. |
| kind | one of daily, reflection, gratitude, dream, check_in | Filter by entry kind. |
| mood | one of great, good, okay, low, hard | Filter by mood. |
| entryDate | string | Filter to one entry date YYYY-MM-DD. |
| from | string | Only entries dated ON or AFTER this YYYY-MM-DD date. |
| to | string | Only entries dated ON or BEFORE this YYYY-MM-DD date. |
| tag | string | Filter by tag. |
| includeArchived | boolean | Also return ARCHIVED entries; deleted entries are never returned. |
| detail | one of summary, full | "summary" (default, id/title/entryDate/mood/excerpt/tags) or "full" (every field incl. the complete body). |
| limit | integer | Max records (default 50 in summary mode). |
Example input
{
"from": "2026-09-01",
"to": "2026-09-30"
}journal_addCreatethrough vritto_createAdd a private journal entry. Only a title is required; include entryDate (YYYY-MM-DD), kind, mood, energy (1-5), body, gratitude lines and tags when the user gives them, e.g. an evening reflection with mood "good" and energy 4.
| Field | Type | Description |
|---|---|---|
| record | object | Journal entry fields; only title is required. |
| record.title* | string | Entry title. |
| record.body | string | Private journal body. |
| record.entryDate | string | Local entry date YYYY-MM-DD; defaults to today. |
| record.kind | one of daily, reflection, gratitude, dream, check_in | Entry kind; defaults to "daily". |
| record.status | one of active, archived, deleted | Entry status; defaults to "active". |
| record.mood | one of great, good, okay, low, hard | Mood check-in; defaults to "okay". |
| record.energy | integer | Energy from 1 (drained) to 5 (energized); defaults to 3. |
| record.prompt | string | Prompt that inspired the entry. |
| record.gratitude | list of string | Gratitude lines. |
| record.tags | list of string | Tags. |
| record.linkedRefs | list of object | Linked module records this entry references. |
| record.locationName | string | Optional place label. |
| record.weather | string | Optional weather or ambient context. |
| record.favorite | boolean | Mark the entry as a favorite. |
| record.private | boolean | Whether the entry is private; defaults to true. |
| record.aiContextEnabled | boolean | Whether the user shared this entry with SahAI and connected AI clients. Defaults to FALSE for Journal, never set it to true unless the user asks for that entry to be readable by AI. |
| record.idempotencyKey | string | Stable dedupe key so a retried create does not duplicate the entry. |
| entry | object | Older form of record (journal_createJournalEntry). |
| entry.title | string |
Example input
{
"record": {
"title": "Quiet Saturday",
"body": "Slow morning, long walk by the lake.",
"entryDate": "2026-09-26",
"kind": "daily",
"mood": "good"
}
}journal_changeUpdatethrough vritto_updateChange one journal entry by record.id, e.g. { record: { id, favorite: true } }: only the fields sent change, everything else is kept.
| Field | Type | Description |
|---|---|---|
| record | object | The entry's id plus the fields to change; omitted fields are kept. |
| record.title | string | Entry title. |
| record.body | string | Private journal body. |
| record.entryDate | string | Local entry date YYYY-MM-DD; defaults to today. |
| record.kind | one of daily, reflection, gratitude, dream, check_in | Entry kind; defaults to "daily". |
| record.status | one of active, archived, deleted | Entry status; defaults to "active". |
| record.mood | one of great, good, okay, low, hard | Mood check-in; defaults to "okay". |
| record.energy | integer | Energy from 1 (drained) to 5 (energized); defaults to 3. |
| record.prompt | string | Prompt that inspired the entry. |
| record.gratitude | list of string | Gratitude lines. |
| record.tags | list of string | Tags. |
| record.linkedRefs | list of object | Linked module records this entry references. |
| record.locationName | string | Optional place label. |
| record.weather | string | Optional weather or ambient context. |
| record.favorite | boolean | Mark the entry as a favorite. |
| record.private | boolean | Whether the entry is private; defaults to true. |
| record.aiContextEnabled | boolean | Whether the user shared this entry with SahAI and connected AI clients. Defaults to FALSE for Journal, never set it to true unless the user asks for that entry to be readable by AI. |
| record.idempotencyKey | string | Stable dedupe key so a retried create does not duplicate the entry. |
| record.id* | string | Journal entry ID from journal_find, never invented. |
| expectedRevision | integer | Optional revision guard; the write is rejected if the stored revision differs. |
| entryId | string | Older form (journal_patchJournalEntry): the entry, with patch. |
| patch | object | Older form, with entryId: the fields to change. |
| patch.private | boolean | |
| patch.aiContextEnabled | boolean | |
| entry | object | Older form (journal_updateJournalEntry): a whole replacement entry with its id and title. |
| entry.id | string | Vritto record ID. |
| entry.private | boolean | |
| entry.aiContextEnabled | boolean |
Example input
{
"record": {
"id": "je_quiet_sat",
"mood": "great",
"favorite": true
}
}journal_removeDeletethrough vritto_deleteDelete one journal entry by id (soft delete). Use only for explicit deletion requests.
| Field | Type | Description |
|---|---|---|
| id | string | The entry to delete. |
| entryId | string | Older name for id. |
| expectedRevision | integer | Optional revision guard; the write is rejected if the stored revision differs. |