VoidTrack Docs

API overview

Base URL, authentication, and response conventions for the REST API.

The REST API is the same surface the web UI and the MCP server both use. Nothing writes anywhere else.

Base URL and auth

The base URL is /api/v1. Every request authenticates with a workspace scoped API key, printed once by pnpm seed.

Authorization: Bearer vt_...

Resources

ResourceEndpoints
TeamsGET/POST /teams
IssuesGET/POST /issues, GET/PATCH /issues/:identifier
CommentsGET/POST /issues/:identifier/comments
ProjectsGET/POST /projects, PATCH /projects/:id
InitiativesGET/POST /initiatives, PATCH /initiatives/:id
CyclesGET/POST /cycles
LabelsGET/POST /labels
UsersGET /users
DocumentsGET/POST /documents, GET/PATCH/DELETE /documents/:id
UpdatesGET/POST /updates, GET /updates/candidates
RelationsGET/POST /issues/:identifier/relations, DELETE /issues/:identifier/relations/:relationId

Conventions

The API is built to be agent friendly, so most references are by human readable key rather than internal id:

  • Teams by key, for example VOID.
  • Issues by identifier, for example VOID-12.
  • Workflow states by name, for example In Progress.
  • Users by email, or me for the API key's owner.
  • Cycles by number, or current.
  • Projects and initiatives by name.
  • Unknown labels are created on the fly rather than rejected.

Example

curl -s localhost:3000/api/v1/issues \
  -H "Authorization: Bearer $VOIDTRACK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"team": "VOID", "title": "Ship the MCP server", "priority": 2, "labels": ["mcp"]}'

Full reference

Every endpoint, generated straight from the route handlers, is documented in the API Reference section: request and response schemas, parameters, and auth requirements per resource.

Prefer talking to VoidTrack from an agent instead of curl? See MCP.

On this page