Skip to content

Journal

The Journal is a timeline of notes optionally linked to one or more people. Entries support markdown and can be filtered by person or searched by text.

All endpoints require authentication and operate only on the authenticated user’s own entries.

GET /api/journal

Returns entries ordered by date descending. This is the one list endpoint in the API that paginates, see Pagination.

Query parameters

ParameterTypeDescription
pageintegerPage number, defaults to 1. Page size is fixed at 50.
personstringFilter to entries tagging this person ID.
qstringSearch text in title and body.
Terminal window
curl "https://your-instance.example.com/api/journal?page=1&person=clx1" \
-H "Authorization: Bearer ntag_xxx"
{
"entries": [
{ "id": "clxj1", "title": "Coffee with Ada", "date": "2026-07-18T09:00:00.000Z", "body": "Caught up on..." }
],
"pagination": { "page": 1, "pageSize": 50, "totalCount": 1, "totalPages": 1 }
}
POST /api/journal
FieldTypeNotes
titlestringRequired, 1-200 characters.
datestringRequired.
hasTimebooleanWhether date includes a meaningful time of day, or is calendar-day-only. Defaults to false.
bodystringRequired, up to 50,000 characters. Markdown supported.
personIdsstring[]People tagged in this entry. Defaults to [].
updateLastContactbooleanWhether to bump lastContact for tagged people. Defaults to true on create.
Terminal window
curl -X POST https://your-instance.example.com/api/journal \
-H "Authorization: Bearer ntag_xxx" \
-H "Content-Type: application/json" \
-d '{
"title": "Coffee with Ada",
"date": "2026-07-18T09:00:00.000Z",
"hasTime": true,
"body": "Caught up on her latest project.",
"personIds": ["clx1"]
}'
{ "entry": { "id": "clxj1", "title": "Coffee with Ada", "people": [ { "id": "clx1", "name": "Ada" } ] } }
GET /api/journal/{id}
Terminal window
curl https://your-instance.example.com/api/journal/clxj1 \
-H "Authorization: Bearer ntag_xxx"
{ "entry": { "id": "clxj1", "title": "Coffee with Ada" } }
PUT /api/journal/{id}

Same body as create. Note that updateLastContact defaults to false on update, unlike create where it defaults to true.

Terminal window
curl -X PUT https://your-instance.example.com/api/journal/clxj1 \
-H "Authorization: Bearer ntag_xxx" \
-H "Content-Type: application/json" \
-d '{
"title": "Coffee with Ada",
"date": "2026-07-18T09:00:00.000Z",
"body": "Caught up on her latest project. She is starting a new one soon.",
"personIds": ["clx1"]
}'
{ "entry": { "id": "clxj1", "body": "Caught up on her latest project. She is starting a new one soon." } }
DELETE /api/journal/{id}

Soft-deletes the entry.

Terminal window
curl -X DELETE https://your-instance.example.com/api/journal/clxj1 \
-H "Authorization: Bearer ntag_xxx"
{ "message": "Journal entry deleted" }