Hanzo

Tracker

Package tracker is your org's issue tracker: projects, issues, and the filters to find them.

Package tracker is your org's issue tracker: projects, issues, and the filters to find them.

Base URLhttps://api.hanzo.ai
Operations9
AuthAuthorization: Bearer $HANZO_API_KEY

tracker

GET /v1/tracker/milestones

Returns every milestone across your org's repositories, each stamped with the repository it belongs to.

The forge scopes milestones to a repository and publishes no org-level list, so this is a server-side fan-out over the repositories you can see. It runs here rather than in the browser because a client-side fan-out would need the forge reachable from the page and a credential held there.

PATCH /v1/tracker/projects/{key}/issues/{num}

Edits a work item — rename it, rewrite it, move it to another column, or re-prioritise it. Absent fields are left alone.

MOVING A CARD IS A RELABEL. The column lives in the forge's label set, so the move replaces that set rather than writing a status column here that a forge-side change could contradict. Moving to done also CLOSES the issue on the forge, because a done card and an open issue are a contradiction.

ParameterInTypeRequiredDescription
keypathstringyesKey is the board — the repository name, from the path.
numpathintegeryesNum is the issue number on that repository, from the path.

Request bodyapplication/json (required)

FieldTypeRequiredDescription
descriptionstringDescription rewrites the body.
keystringKey is the board — the repository name, from the path.
numintegerNum is the issue number on that repository, from the path.
prioritystringPriority re-prioritises it.
statusstringStatus moves the card to another column.
titlestringTitle renames the work item.

GET /v1/tracker/projects/{key}/issues

Returns one board's issues — the work items of that repository on the forge, with their column, priority, assignee and labels.

The column is a LABEL on the forge, so the board and the forge web UI are the same object seen twice: relabelling in either moves the card in both. A closed issue reads as done whatever its labels say.

ParameterInTypeRequiredDescription
keypathstringyesKey is the project whose issues to list, from the path.
statusquerystringStatus keeps only issues in that board column: backlog, todo, in_progress, done or canceled.
kindquerystringKind keeps only work items of that shape: issue, pr or epic.
repoquerystringRepo keeps only issues bound to that git repository.
sourcequerystringSource keeps only issues opened from that surface: team, git, crm, helpdesk, cms or agent.
scheduledquerybooleanScheduled keeps only issues that carry a date — a start, a due date or both.

POST /v1/tracker/projects/{key}/issues

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.

ParameterInTypeRequiredDescription
keypathstringyesKey is the board — the repository name, from the path.

Request bodyapplication/json (required)

FieldTypeRequiredDescription
descriptionstringDescription becomes the issue body.
keystringKey is the board — the repository name, from the path.
prioritystringPriority is one of none, urgent, high, medium or low.
statusstringStatus is the board column to open into: backlog, todo, in_progress, done or canceled.
titlestringTitle is required.

GET /v1/tracker/projects/{key}

Returns one board of your org by its key — the repository name. 404 when your org has no repository under that key, or when your own forge account cannot see it.

ParameterInTypeRequiredDescription
keypathstringyesKey is the project's org-unique handle: 2-8 uppercase alphanumerics starting with a letter ("ENG", "OPS2").

PATCH /v1/tracker/projects/{key}

Refused — a board is a repository on the forge

Answers 405. A tracker board IS a repository on this deployment's forge, so creating, renaming and deleting one is a FORGE operation carried out with FORGE permissions.

Offering it here would put a second door on the same object, guarded by this surface instead of by the forge — a weaker guard on the same thing. So the route exists and refuses, rather than 404ing: "not this service's job" and "no such thing" are different facts, and the body names the forge so a caller knows where the job IS done.

What this surface DOES own is the work on a board: list the boards you can see, read and file their issues, move a card between columns, and roll milestones up across the org. Those are the routes beside this one.

ParameterInTypeRequiredDescription
keypathstringyes

DELETE /v1/tracker/projects/{key}

Refused — a board is a repository on the forge

Answers 405. A tracker board IS a repository on this deployment's forge, so creating, renaming and deleting one is a FORGE operation carried out with FORGE permissions.

Offering it here would put a second door on the same object, guarded by this surface instead of by the forge — a weaker guard on the same thing. So the route exists and refuses, rather than 404ing: "not this service's job" and "no such thing" are different facts, and the body names the forge so a caller knows where the job IS done.

What this surface DOES own is the work on a board: list the boards you can see, read and file their issues, move a card between columns, and roll milestones up across the org. Those are the routes beside this one.

ParameterInTypeRequiredDescription
keypathstringyes

GET /v1/tracker/projects

Returns the boards of your org — one per repository on the deployment's forge that you can see. The key is the repository name, and it is what addresses the board's issues.

Archived repositories are omitted: they are not live work. The set is the FORGE's answer for your own account, so two people in one org can legitimately see different boards.

POST /v1/tracker/projects

Refused — a board is a repository on the forge

Answers 405. A tracker board IS a repository on this deployment's forge, so creating, renaming and deleting one is a FORGE operation carried out with FORGE permissions.

Offering it here would put a second door on the same object, guarded by this surface instead of by the forge — a weaker guard on the same thing. So the route exists and refuses, rather than 404ing: "not this service's job" and "no such thing" are different facts, and the body names the forge so a caller knows where the job IS done.

What this surface DOES own is the work on a board: list the boards you can see, read and file their issues, move a card between columns, and roll milestones up across the org. Those are the routes beside this one.


All Hanzo APIs · Interactive reference

How is this guide?

On this page