Skip to content
Leadtime
English
Esc
↑↓navigate↵open⌘Jpreview

Partially update project journal entry

Updates one or more fields of an existing project journal entry. Only provided fields will be updated; all other fields remain unchanged.

What can be updated:

  • projectId: Move the entry to a different project (must be accessible to user)
  • body: Update the journal entry content (HTML or Markdown format)
  • mood: Change the mood indicator (Sad, Neutral, or Happy)
  • reminder: Update or set a reminder date (ISO 8601 format). Set to null to clear an existing reminder

Update behavior:

  • All fields are optional - only include fields you want to change
  • If a field is not provided, its current value is preserved
  • For reminder: provide a date string to set/update, or null to clear
  • The lastUpdated timestamp is automatically updated when any field changes

Validation:

  • If projectId is provided, it must exist and be accessible to the authenticated user
  • Body content cannot be empty if provided
  • Reminder date must be a valid ISO 8601 date string if provided

What is returned: The complete updated journal entry with all fields, including the body converted to HTML format.

PATCH/projects/journal/{id}
Authorization
AuthorizationOAuth2 access token · headerrequired
Scopes:api:write
or
AuthorizationBearer token (JWT) · headerrequired
Path parameters
idstringrequired
Query parameters
fieldsToReturnstring

Comma-separated list of top-level response fields to return. Overrides the endpoint compact default unless responseShape=full is used.

responseShapestring

Advanced override. Omit for the endpoint compact default. Use full only when you need the complete endpoint response, including nested fields that are not selectable with fieldsToReturn.

Allowed:compactfull
Header parameters
LT-Response-Shapestring

Advanced override. Set to full only when you need the complete endpoint response, including nested fields that are not selectable with fieldsToReturn.

Allowed:full
Request body
requiredapplication/json
bodystring

The journal entry content in HTML or Markdown format. Supports rich text formatting including paragraphs, headings, lists, and highlighting. Accepts Markdown or HTML for complex formatting. This content is rendered by the Leadtime rich editor, not by a plain Markdown viewer.

For quick/simple text, Markdown is acceptable. For polished user-facing content from an agent or integration, prefer structured HTML because it preserves editor blocks, links, and layout more predictably.

Use only the nodes and marks documented below for this field. Supported editor features differ by endpoint and field. Choose formatting for readability, not decoration: use headings for real sections, paragraphs for narrative text, lists or tables for structured facts, blockquotes for quoted context, callouts for important outcomes/risks/notes when supported, and explicit anchors for links. Do not rely on bare URLs or Markdown links when the link must be clickable; use explicit anchors such as <a href="https://example.com" target="_blank" rel="noopener noreferrer nofollow">link text</a>.

In HTML you can use:

Node Types and Marks

Nodes

paragraph Type: block Content: inline* (inline only — do not use block tags such as <p> inside; use e.g. <br>, <strong>, <em>, <span>…) Default paragraph. extraPlaceholder is an internal structure for the editor to show a ghost placeholder in empty “template” lines (ProseMirror JSON fragment or null). For normal agent output leave extraPlaceholder as null. Only set it if you are intentionally mirroring a field placeholder the user already has in the open editor; do not set random placeholder data for free-form answers. Atts:

  • extraPlaceholder: null
<p class="paragraph-base" extraplaceholder="null/some-value"></p>

heading Type: block Content: inline* (inline only — do not use block tags such as <p> inside; use e.g. <br>, <strong>, <em>, <span>…) Atts:

  • level: 1
<h1 class="heading-base"></h1>

bulletList Type: block list Content: listItem+ Atts: none

<ul class="list-base"><li></li></ul>

hardBreak Type: inline Atts: none

<br>

horizontalRule Type: block Atts: none

<hr class="hr-base">

orderedList Type: block list Content: listItem+ Atts:

  • start: 1
  • type: null
<ol class="order-list-base" type="null/some-value"><li></li></ol>

listItem Content: (paragraph|list)* (paragraphs and/or lists, in any order) Atts: none

<li></li>

blockquote Type: block Content: block+ (one or more block child nodes (e.g. paragraph, list, …)) Atts: none

<blockquote class="blockquote-base"><p class="paragraph-base"></p></blockquote>

table Type: block Content: tableRow+ Atts: none

<table style="width: 0px;"><colgroup></colgroup><tbody><tr></tr></tbody></table>

tableRow Content: (tableCell | tableHeader)* Atts: none

<tr></tr>

tableHeader Content: block+ (one or more block child nodes (e.g. paragraph, list, …)) Atts:

  • colspan: 1
  • rowspan: 1
  • colwidth: null
  • align: null
<th colspan="1" rowspan="1" colwidth="null/some-value" style="text-align: null/some-value;"><p class="paragraph-base"></p></th>

tableCell Content: block+ (one or more block child nodes (e.g. paragraph, list, …)) Atts:

  • colspan: 1
  • rowspan: 1
  • colwidth: null
  • align: null
<td colspan="1" rowspan="1" colwidth="null/some-value" style="text-align: null/some-value;"><p class="paragraph-base"></p></td>

callout Type: block Content: block+ (one or more block child nodes (e.g. paragraph, list, …)) Callout / info box. The icon attr is an emoji shortcode (e.g. :information_source:, :warning:); it appears on the callout. Body is block content (paragraphs, lists, etc.) — use normal block HTML such as <p class="paragraph-base"> inside the callout <div>. data-type is "callout". Atts:

  • icon: :information_source:
<div data-type="callout" icon=":information_source:"><p class="paragraph-base"></p></div>

appImage Type: block Block for an image file already uploaded in Leadtime.

  • fileId: Id of the stored image. Must be a real uploaded file; do not invent.
  • filename: Display name; should match the file.
  • width, align, size: Layout as in the editor. If no file id is available, obtain one via upload/API before outputting this node with a fake id. Atts:
  • fileId:
  • filename:
  • width: 500
  • align: left
  • size: 0
<div data-type="appImage" fileid="" filename="" width="500" align="left" size="0"></div>

collapse Type: block Content: collapseTitle collapseBody (a collapse title node, then a collapse body) Expandable/collapsible section. Required structure: one collapseTitle (summary, inline) then one collapseBody (blocks) as direct children, matching data-type= collapseTitle / collapseBody tags under <collapse>. Do not use title/body nodes outside of a collapse. Atts: none

<collapse><collapse-title></collapse-title><collapse-body><p class="paragraph-base"></p></collapse-body></collapse>

collapseBody Content: block+ (one or more block child nodes (e.g. paragraph, list, …)) Expandable body of a collapse. Only use as sibling of collapseTitle inside a collapse; holds the block content that shows when expanded. Atts: none

<collapse-body><p class="paragraph-base"></p></collapse-body>

collapseTitle Content: inline* (inline only — do not use block tags such as <p> inside; use e.g. <br>, <strong>, <em>, <span>…) Clickable title row of a collapse block. Only use inside a collapse that also has collapseBody; content is the summary line shown when collapsed. Atts: none

<collapse-title></collapse-title>

emoji Type: inline Inline emoji. icon is a colon shortcode (e.g. :thumbsup:, :white_check_mark:) stored in data-icon; body is often empty. Use names your emoji set supports; avoid inventing invalid shortcodes in final HTML if you need them to render. Atts:

  • icon: :smile:
<span data-type="emoji" data-icon=":smile:"></span>

Marks

link Atts:

  • href: null
  • target: _blank
  • rel: noopener noreferrer nofollow
  • class: null
  • title: null
<a target="_blank" rel="noopener noreferrer nofollow" href="">link text example</a>

bold Atts: none

<strong>bold text example</strong>

code Atts: none

<code>code text example</code>

italic Atts: none

<em>italic text example</em>

strike Atts: none

<s>strike text example</s>

underline Atts: none

<u>underline text example</u>

If provided, must not be empty. If not provided, the current body content is preserved.

moodstring

Mood indicator for the journal entry. Use Sad for negative reactions, problems, or escalations. Use Neutral for factual observations or open-ended notes. Use Happy for positive feedback, wins, or progress. If not provided, the current mood is preserved.

Allowed:SadNeutralHappy
projectIdstring

The UUID of the project this journal entry belongs to. If provided, the entry will be moved to this project. The project must exist and be accessible to the authenticated user. If not provided, the current projectId is preserved.

reminderobject | null

Reminder date in ISO 8601 format (YYYY-MM-DD). Provide a date string to set or update the reminder. Set to null to clear an existing reminder. If not provided (omitted from request), the current reminder is preserved.

Responses
200
bodystringrequired

The journal entry content converted to HTML format with all formatting preserved. Includes paragraphs, headings, lists, highlighting, and other rich text elements.

createdAtstringrequired

ISO 8601 timestamp indicating when the journal entry was created

createdBystringrequired

UUID of the user who created this journal entry

idstringrequired

Unique identifier for the journal entry (UUID)

lastUpdatedstringrequired

ISO 8601 timestamp indicating when the journal entry was last updated. This is automatically updated whenever any field is modified via PATCH.

moodstringrequired

Mood indicator for the journal entry. Sad indicates negative reactions, problems, or escalations. Neutral indicates factual observations or open-ended notes. Happy indicates positive feedback, wins, or progress.

Allowed:SadNeutralHappy
projectIdstringrequired

The UUID of the project this journal entry belongs to

reminderobject | nullrequired

Optional reminder date in ISO 8601 format (YYYY-MM-DD). Set when creating or updating an entry to schedule a follow-up reminder. Null if no reminder is set.

400

Validation errors

401

Unauthorized - Invalid or missing authentication token

403

Forbidden - Insufficient API scopes or permissions

Try it
Server
Authorization
Parameters
Bodyapplication/json
Request
curl -X PATCH "https://leadtime.app/api/public/projects/journal/string" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "body": "<h1>Updated Project Status</h1><p>Progress update...</p>",
  "mood": "Happy",
  "projectId": "550e8400-e29b-41d4-a716-446655440000",
  "reminder": "2024-12-31"
}'
Response
{
  "body": "<h1>Project Update</h1><p>Today we completed milestone 1.</p>",
  "createdAt": "2024-01-15T10:30:00Z",
  "createdBy": "550e8400-e29b-41d4-a716-446655440000",
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "lastUpdated": "2024-01-16T14:20:00Z",
  "mood": "Neutral",
  "projectId": "550e8400-e29b-41d4-a716-446655440000",
  "reminder": "2024-12-31"
}