Returns the boards of your org — the places your work actually is.
Returns the boards of your org — the places your work actually is. The key addresses the board's issues.
GET /v1/todo/projects
| Address | https://api.hanzo.ai/v1/todo/projects |
| Method | GET |
| Operation | get_todo_projects |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Returns the boards of your org — the places your work actually is. The key addresses the board's issues.
A BOARD IS A PLACE WORK IS, not an object somebody provisioned. So the list is assembled from the work itself: the repositories your org has filed issues on, plus the boards the index holds. A repository with nothing on it is not in the list and is still perfectly addressable — GET /projects/<name> reads it and a create files into it — so nothing is lost by leaving it out.
Measured, which is why: reading the forge's whole repository inventory put 745 boards here, of which all but a handful were vendored forks and mirrors (.github, .profile, DOMPurify, BoatAttack) that will never carry this org's work. A list that long is not a list — the estate's real roadmap was in it somewhere and no one could see it.
The forge half is the FORGE's answer for your own account, so two people in one org can legitimately see different boards.
Request
GET /v1/todo/projects takes no parameters and no body — the credential is the whole request.
Response
| Status | Body | Meaning |
|---|---|---|
200 | todoProject[] | ok |
200 body — 7 fields.
| Field | In | Type | Always | Description |
|---|---|---|---|---|
[].createdAt | body | integer | — | CreatedAt is when the board was created, in unix seconds. |
[].description | body | string | — | Description is whatever an index board was created with. |
[].id | body | string | — | ID is the board's opaque handle, and it is NOT how you address it — Key is. |
[].key | body | string | — | Key addresses the board everywhere else — /v1/todo/projects/<key>/issues — and prefixes every issue identifier on it. |
[].name | body | string | — | Name is the board's display name. |
[].org | body | string | — | Org is the IAM org the board belongs to, taken from the validated principal and never from the request. |
[].updatedAt | body | integer | — | UpdatedAt is when the board record last changed, in unix seconds — the BOARD, not the work on it, so filing an issue does not move it. |
Failure carries the platform error shape — see Errors.
Examples
hanzo todo projects listimport { Configuration, TodoApi } from 'hanzoai';
const api = new TodoApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.getTodoProjects();from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import TodoApi
client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = TodoApi(client).get_todo_projects()cfg := cloud.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := cloud.NewAPIClient(cfg)
resp, _, err := client.TodoAPI.GetTodoProjects(context.Background()).Execute()
if err != nil {
return err
}use hanzo_cloud::apis::{configuration::Configuration, todo_api};
let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();
let result = todo_api::get_todo_projects(&cfg, Default::default()).await?;import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.TodoApi;
ApiClient client = new ApiClient();
client.setRequestInterceptor(b -> b.header("Authorization", "Bearer " + System.getenv("HANZO_API_KEY")));
var result = new TodoApi(client).getTodoProjects();curl https://api.hanzo.ai/v1/todo/projects \
-H "Authorization: Bearer $HANZO_API_KEY"The door reaches todo through the todo tool, which names its 12 operations with its own verbs — this one among them, under a name only the door declares. describe explains any of them:
curl -X POST https://api.hanzo.ai/v1/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe",
"arguments": {
"op": "get_todo_board"
}
}
}'How is this guide?