Logs

Append, list, and delete activity/comment logs on tracks.


Append a comment or activity log to a task or goal, list logs, and delete individual logs. Anyone who can access the track can also read and append to its logs — logs don't carry a separate ACL.

POST /v1/logs
Authorization: Bearer <token>
Content-Type: application/json
 
{
  "trackId": "track-id",
  "kind": "comment",
  "content": "Blocked on missing test fixtures.",
  "idempotencyKey": "00000000-0000-4000-8000-000000000001"
}

kind is one of comment (default), update, or review. content is required. metadata accepts optional structured JSON, capped at 16KB once serialized — put anything larger in content instead. idempotencyKey is optional; pass a UUID when retrying a create request safely.

GET /v1/logs?trackId=<trackId>&order=desc&cursor=<logId>
Authorization: Bearer <token>

trackId scopes the read to one track's logs. Omit it for an activity feed across every track you can currently access instead, optionally narrowed with authorId=<userId> (works with or without trackId):

GET /v1/logs?authorId=<userId>&order=desc&cursor=<logId>
Authorization: Bearer <token>

Results are ordered newest first by default (order=desc). Use order=asc for chronological replay. Pass the previous response's nextCursor back as cursor with the same order to fetch the next page. The response includes hasNext and nextCursor (the id to pass as cursor on the next call, or null when there's nothing more).

The cross-track feed (when trackId is omitted) is backed by an ACL snapshot taken when each log was written, not a live re-check of the track's current ACL — if you're later removed from a track, logs you could already see there may still appear in this feed (a request with trackId set always reflects that track's live ACL and is unaffected).

DELETE /v1/logs/:logId
Authorization: Bearer <token>

Authors can delete their own logs; a track's creator can delete any log on that track. Deleted logs are omitted from future list responses.

Each log includes userId and authorName resolved for the caller. An author outside what the caller can already see (for example, someone who has since left the workspace) is returned as "unknown" for both fields rather than leaking their account id.

Appending or deleting a log does not consume credits — see Credits for the full table. Listing costs 1 credit.