Todos
Task tracking with status history and encrypted content.
Title and description are encrypted at rest. Status changes are tracked in a log accessible via the logs endpoint.
List todos
GET
/todos
Cost: 0
Query parameters
| Parameter | Type | Description |
|---|---|---|
status | string | open, in_progress, done, or cancelled |
priority | integer | Filter by priority (0–3) |
session_id | integer | Filter by linked session |
limit | integer | Max results to return |
offset | integer | Number of results to skip |
Response
{
"todos": [
{
"todo_id": 1,
"session_id": null,
"title": "Write API docs",
"description": "Document sessions, todos, and activities endpoints",
"status": "open",
"priority": 2,
"due_at": "2026-04-10T00:00:00Z",
"created_at": "2026-04-09T10:00:00Z",
"updated_at": "2026-04-09T10:00:00Z"
}
],
"total": 1,
"limit": 20,
"offset": 0
}
Example
curl "https://roots.chatforest.com/api/v1/todos?status=open&priority=2" \ -H "X-API-Key: $ROOTS_API_KEY"
Get todo
GET
/todos/{id}
Cost: 0
Example
curl https://roots.chatforest.com/api/v1/todos/1 \ -H "X-API-Key: $ROOTS_API_KEY"
Create todo
POST
/todos
Cost: 1
Request body
| Field | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Task title (encrypted at rest) |
description | string | No | Task description (encrypted at rest) |
session_id | integer | No | Link to an active session |
priority | integer | No | 0 (lowest) to 3 (highest) |
due_at | string | No | ISO 8601 due date |
Example
curl -X POST https://roots.chatforest.com/api/v1/todos \
-H "X-API-Key: $ROOTS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Deploy docs pages",
"description": "Sessions, todos, and activities docs",
"priority": 2,
"due_at": "2026-04-10T00:00:00Z"
}'
Update todo
PATCH
/todos/{id}
Cost: 1
Update any combination of fields. Status changes are automatically logged.
Request body
| Field | Type | Description |
|---|---|---|
title | string | New title |
description | string | New description |
status | string | open, in_progress, done, or cancelled |
priority | integer | 0–3 |
due_at | string | ISO 8601 due date |
session_id | integer | Link to a session |
note | string | Note attached to status change log |
Example
curl -X PATCH https://roots.chatforest.com/api/v1/todos/1 \
-H "X-API-Key: $ROOTS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"status": "done",
"note": "All three docs pages deployed"
}'
Delete todo
DELETE
/todos/{id}
Cost: 1
Permanently deletes the todo and all associated status change logs.
Example
curl -X DELETE https://roots.chatforest.com/api/v1/todos/1 \ -H "X-API-Key: $ROOTS_API_KEY"
Get status change logs
GET
/todos/{id}/logs
Cost: 0
Returns the full status change history for a todo.
Response
{
"logs": [
{
"log_id": 1,
"old_status": "open",
"new_status": "in_progress",
"note": "Starting work",
"logged_at": "2026-04-09T11:00:00Z"
},
{
"log_id": 2,
"old_status": "in_progress",
"new_status": "done",
"note": "All three docs pages deployed",
"logged_at": "2026-04-09T14:00:00Z"
}
],
"todo_id": 1
}
Example
curl https://roots.chatforest.com/api/v1/todos/1/logs \ -H "X-API-Key: $ROOTS_API_KEY"