OpenapiTodo
Opens a work item on the board — an issue on that repository on the…
Opens a work item on the board — an issue on that repository on the deployment's forge, filed as YOU.
POST /v1/todo/projects/{key}/issues
| Address | https://api.hanzo.ai/v1/todo/projects/{key}/issues |
| Method | POST |
| Operation | post_todo_projects_by_key_issues |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Opens a work item on the board — an issue on that repository on the deployment's forge, filed as YOU.
The column and priority are written as LABELS, which is what makes the card and the forge issue the same object: someone relabelling in the forge web UI has moved your card.
Request
6 fields, body application/json (required).
| Field | In | Type | Required | Description |
|---|---|---|---|---|
key | path | string | yes | Key is the board — the repository name, from the path. |
description | body | string | — | Description becomes the issue body. |
key | body | string | — | Key is the board — the repository name, from the path. |
priority | body | string | — | Priority is one of none, urgent, high, medium or low. |
status | body | string | — | Status is the board column to open into: backlog, todo, in_progress, done or canceled. |
title | body | string | — | Title is required. |
Response
| Status | Body | Meaning |
|---|---|---|
200 | issueView | ok |
200 body — 18 fields.
| Field | In | Type | Always | Description |
|---|---|---|---|---|
assignee | body | string | — | Assignee is who holds the work — an IAM username, or the login of the FIRST assignee when a forge issue has several. |
createdAt | body | integer | — | CreatedAt is when the item was opened, in unix seconds. |
description | body | string | — | Description is the body, markdown as its author wrote it. |
dueAt | body | integer | — | DueAt is when the work is due, in unix seconds; absent means no due date. |
extRef | body | string | — | ExtRef anchors the item to something outside the todo — a mirrored issue ("github:owner/repo#123"), a pushed PR branch, or a record on another plane. |
id | body | string | — | ID is the work item's opaque handle, and it is NOT how you address it — ProjectKey plus Number is. |
identifier | body | string | — | Identifier is the human handle, "<key>#<number>" — the board and the number on it, joined. |
kind | body | string | — | Kind is what the item IS: issue, pr or epic. Set once at create and never changed, so a row does not migrate between surfaces. |
labels | body | string[] | — | Labels are the item's remaining tags, with the status and priority labels lifted OUT — a column that stayed here would render twice, once as the card's column… |
number | body | integer | — | Number is the item's number ON ITS BOARD, from 1 and monotonic there — the forge's own issue number for a forge row, allocated inside the create transaction… |
priority | body | string | — | Priority is urgent, high, medium, low or none. Also a label on a forge row. |
projectKey | body | string | — | ProjectKey is the board this item is on: the repository name for a forge issue, the index board's key otherwise. |
repo | body | string | — | Repo is the git repository the item is bound to, so a repository's Issues and PRs tabs are filters over this one table. |
source | body | string | — | Source is which surface OPENED it: team, git, crm, helpdesk, cms or agent. Also set once. |
startAt | body | integer | — | StartAt is when the work starts, in unix seconds; absent means unscheduled. |
status | body | string | — | Status is the board column: backlog, todo, in_progress, done or canceled, and nothing else. |
title | body | string | — | Title is the item's one-line summary. |
updatedAt | body | integer | — | UpdatedAt is when it last changed, in unix seconds. |
Failure carries the platform error shape — see Errors.
Examples
hanzo todo projects issues create <key>import { Configuration, TodoApi } from 'hanzoai';
const api = new TodoApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postTodoProjectsByKeyIssues({ key: 'key', description: "<description>", key: "<key>" });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).post_todo_projects_by_key_issues(key='key', description="<description>", key="<key>")cfg := cloud.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := cloud.NewAPIClient(cfg)
resp, _, err := client.TodoAPI.PostTodoProjectsByKeyIssues(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::post_todo_projects_by_key_issues(&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).postTodoProjectsByKeyIssues();curl -X POST https://api.hanzo.ai/v1/todo/projects/<key>/issues \
-H "Authorization: Bearer $HANZO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"description": "<description>",
"key": "<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?