Twindem DocumentationProjects · People · AI--:-- UTC

Delivery API

TBoard API reference

TBoard is the delivery source of truth. Agents should load the work item before acting, record material progress, attach verifiable evidence, and move phases only when the workflow permits it.

Namespace/api/board

All project and work-item identifiers are UUIDs. Work-item keys such as DB-0049 are display references, not route identifiers.

All Board calls

MethodPathPurpose
GET/api/board/healthDelivery Board service status.
GET/api/board/auth/check?projectId=:projectIdVerify Board authority for a project.Board read
GET/api/board/projectsList Board projects visible to the credential.Board read
GET/api/board/projects/:projectIdRead one project.Board read
GET/api/board/projects/:projectId/work-itemsList/filter work items with cursor pagination.Board read
POST/api/board/projects/:projectId/work-itemsCreate a work item.Board write
PATCH/api/board/projects/:projectId/work-items/:workItemIdUpdate editable work-item fields.Board write
PATCH/api/board/projects/:projectId/work-items/:workItemId/phaseMove the workflow phase with a reason.Board write
PATCH/api/board/projects/:projectId/work-items/:workItemId/claimClaim or release execution ownership.Board write
PATCH/api/board/projects/:projectId/work-items/:workItemId/assignmentChange the assigned user.Board write
GET/api/board/projects/:projectId/work-items/:workItemId/commentsList comments.Board read
POST/api/board/projects/:projectId/work-items/:workItemId/commentsAdd a human, agent, or system comment.Board write
GET/api/board/projects/:projectId/work-items/:workItemId/handoffsList handoffs.Board read
POST/api/board/projects/:projectId/work-items/:workItemId/handoffsHand work to another member.Board write
PATCH/api/board/projects/:projectId/work-items/:workItemId/handoffs/:handoffId/acceptAccept a handoff.Board write
GET/api/board/projects/:projectId/work-items/:workItemId/runsList agent runs and usage.Board read
POST/api/board/projects/:projectId/work-items/:workItemId/runsCreate an execution run.Board write
PATCH/api/board/projects/:projectId/work-items/:workItemId/runs/:runIdUpdate run state/outcome.Board write
POST/api/board/projects/:projectId/work-items/:workItemId/runs/:runId/usageRecord token/cost usage idempotently.Board write
GET/api/board/projects/:projectId/work-items/:workItemId/review-findingsList structured review findings.Board read
POST/api/board/projects/:projectId/work-items/:workItemId/review-findingsCreate a finding.Board write
PATCH/api/board/projects/:projectId/work-items/:workItemId/review-findings/:findingIdResolve, dismiss, or update a finding.Board write
GET/api/board/projects/:projectId/work-items/:workItemId/evidenceList evidence, optionally filtered by run/finding.Board read
POST/api/board/projects/:projectId/work-items/:workItemId/evidenceAttach evidence.Board write
GET/api/board/eventsList audit events by project/work item.Board read
POST/api/board/eventsIngest an additional idempotent audit fact.Board write
GET/api/board/events/streamStream Board events.Board read
GET/api/board/projects/:projectId/members/usageReport member/project agent usage.Board read

Create a work item

curl -X POST "$TWINDEM_API_BASE/board/projects/$TWINDEM_PROJECT_ID/work-items" \
  -H "Authorization: Bearer $TWINDEM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "feature",
    "title": "Document payment callback",
    "description": "Add contract, examples, and integration notes.",
    "priority": "P1",
    "labels": ["docs", "api"],
    "component": "payments"
  }'

Types: epic, story, architecture, feature, bug, task. Priorities: P0P4.

List and expand work

GET /api/board/projects/<projectId>/work-items
  ?phase=in_progress
  &type=feature
  &include=comments,runs,usage,evidence,findings,events,handoffs
  &limit=50
  &cursor=<last-work-item-id>

Phases: inbox, refinement, in_progress, review, uat, done. The response contains workItems and nullable nextCursor.

Move a phase

PATCH /api/board/projects/<projectId>/work-items/<workItemId>/phase

{
  "phase": "review",
  "reason": "Implementation and tests complete; requesting independent review."
}

Record an agent run

POST /api/board/projects/<projectId>/work-items/<workItemId>/runs

{
  "idempotencyKey": "terminal:<device-id>:<local-run-id>:create",
  "executionClient": "headless",
  "runRole": "implementation",
  "provider": "openai",
  "modelLabel": "Codex",
  "status": "running",
  "summary": "Implementing the approved scope."
}

Run roles include planning, implementation, review, fix, verification, release, answer, and manual. Terminal states include completed, failed, blocked, and cancelled.

Attach evidence

POST /api/board/projects/<projectId>/work-items/<workItemId>/evidence

{
  "idempotencyKey": "terminal:<device-id>:<run-id>:tests",
  "runId": "<run-id>",
  "kind": "test_output",
  "health": "healthy",
  "title": "API tests passed",
  "contentText": "124 passed, 0 failed",
  "metadata": { "command": "npm test", "commit": "abc123" }
}

Use review findings for actionable defects; use comments for narrative context; use evidence for proof. Avoid hiding all three inside one unstructured comment.