ログ

トラックへの活動/コメントログの追加・一覧・削除です。


タスクやゴールにコメント/活動ログを残し、一覧取得し、個別ログを削除できます。トラックにアクセスできる人は誰でもログの閲覧・追記ができます — ログ自体は独立した ACL を持ちません。

accountId は認証トークンから解決されるため、リクエストでは渡しません。アクティブなワークスペースはトークン、または workspaceId クエリパラメータから決まります。ログの追記と削除は無料で、一覧取得は 1 credit です。

ログを作成する

POST /v1/logs
Authorization: Bearer <token>
Content-Type: application/json
 
{
  "trackId": "00000000-0000-4000-8000-000000000010",
  "kind": "comment",
  "content": "Blocked on missing test fixtures.",
  "metadata": { "source": "ci", "runId": "build-184" },
  "idempotencyKey": "00000000-0000-4000-8000-000000000001"
}

trackId は必須で、タスクまたはゴールの UUID を渡します。content は必須で、検証前に前後の空白が取り除かれます。

kind は次のいずれかです。

Kind 用途
comment 議論、質問、メモ、共有コンテキスト
update 作業状況の報告、変更内容、発見、次のアクション
review 判定、QA 結果、承認、レビュー結果

comment が既定値です。内部用の system kind はプラットフォーム生成イベント用に予約されており、公開 API からは書き込めません。

metadata は任意の JSON オブジェクトで、シリアライズ後 16KB が上限です。人が読む長い詳細は content に書いてください。idempotencyKey は任意で、安全に作成リクエストをリトライしたい場合に UUID を渡します。同じ idempotency key を再利用すると既存ログを返しますが、そのログが削除済みの場合は 409 を返します。

201 を返します。

{
	"log": {
		"id": "00000000-0000-4000-8000-000000000020",
		"entryId": "00000000-0000-4000-8000-000000000010",
		"userId": "user_123",
		"authorName": "Ada",
		"kind": "comment",
		"content": "Blocked on missing test fixtures.",
		"metadata": { "source": "ci", "runId": "build-184" },
		"idempotencyKey": "00000000-0000-4000-8000-000000000001",
		"createdAt": "2026-07-07T10:15:00.000Z"
	},
	"type": "task"
}

1つのトラックのログを一覧する

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

trackId を渡すと1つのトラックのログに絞り込み、常にそのトラックの現在の ACL を反映します。authorId=<userId> を追加すると、そのトラック上で見えている特定著者のログだけに絞り込めます。

アクティビティフィードを一覧する

trackId を省略すると、今アクセスできる全トラックを横断するアクティビティフィードになります。

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

authorIdtrackId の有無どちらでも使えます。指定した著者が呼び出し側から見えない場合、その著者がログを書いたかどうかを漏らさないよう空のレスポンスを返します。

結果は既定で新しい順(order=desc)です。時系列で再生したい場合、または cursor と組み合わせて既知のログ以降の新着だけを取得したい場合は order=asc を使います。次のページを取得するには、前回レスポンスの nextCursor を同じ order のまま cursor に渡します。

{
	"logs": [
		{
			"id": "00000000-0000-4000-8000-000000000020",
			"entryId": "00000000-0000-4000-8000-000000000010",
			"userId": "user_123",
			"authorName": "Ada",
			"kind": "comment",
			"content": "Blocked on missing test fixtures.",
			"metadata": { "source": "ci", "runId": "build-184" },
			"idempotencyKey": "00000000-0000-4000-8000-000000000001",
			"createdAt": "2026-07-07T10:15:00.000Z"
		}
	],
	"type": "task",
	"total": 1,
	"hasNext": false,
	"nextCursor": null
}

typetrackId を指定した場合だけ含まれます。横断フィードはタスクとゴールをまたぐ可能性があるため含まれません。

trackId を省略した横断フィードは、各ログを書いた時点での ACL スナップショットに基づいており、トラックの現在の ACL をその都度確認しているわけではありません — 後でトラックへのアクセスを失っても、すでに見えていたログはこのフィードに残り続けることがあります(trackId を指定したリクエストは常にそのトラックの現在の ACL を反映するため、この影響を受けません)。

各ログには、呼び出し側に対して解決済みの userIdauthorName が含まれます。呼び出し側からすでに見えている範囲の外にいる著者、たとえばその後ワークスペースを離れたユーザーは、アカウント id を漏らさないよう、両方とも "unknown" として返されます。

ログを削除する

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

200 を返します。

{
	"deleted": true,
	"type": "task"
}

著者は自分のログを削除でき、トラックの作成者はそのトラック上の任意のログを削除できます。削除済みログは以後の一覧レスポンスから除外されます。存在しない、またはすでに削除済みのログは 404 です。

コスト

Operation コスト
logs.create free
logs.list 1 credit
logs.delete free

全体の表はクレジットを参照してください。

よくある間違い

  • REST の trackId にはトラック UUID を渡してください。CLI と MCP の log コマンドでは、タスクまたはゴールの UUID を含む URL も受け取れます。
  • nextCursor を次の一覧リクエストに渡すときは、order を変えないでください。
  • metadata は小さな機械可読フィールド用です。長い説明は content に入れてください。