Update a handoff ticket
const url = 'https://example.com/api/projects/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/tickets/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0';const options = { method: 'PATCH', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"status":"open","stage":"backlog","work_started_note":"example","priority":"low","title":"example","description":"example","request_type":"bug","resolution_note":"example","role_status":{"role":"frontend","status":"pending","work_started_note":"example","criteria_confirmed":true,"acceptance_criteria":["example"]},"updated_at":"2026-04-15T12:00:00Z","skip_human_test_gate":true}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PATCH \ --url https://example.com/api/projects/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/tickets/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0 \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "status": "open", "stage": "backlog", "work_started_note": "example", "priority": "low", "title": "example", "description": "example", "request_type": "bug", "resolution_note": "example", "role_status": { "role": "frontend", "status": "pending", "work_started_note": "example", "criteria_confirmed": true, "acceptance_criteria": [ "example" ] }, "updated_at": "2026-04-15T12:00:00Z", "skip_human_test_gate": true }'Kanban stages: backlog, up_next, in_progress, validation, live. work_started_note required when moving to in_progress (server readiness). resolution_note optional when closing; recommended. skip_human_test_gate when completing from validation with pending cases (owner/super-admin only).
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”Project UUID
Ticket UUID
Request Body required
Section titled “Request Body required ”object
Planboard Kanban stage.
Required when setting stage to in_progress; also use role_status.work_started_note for per-role in_progress.
Optional closure summary when moving to live/closed; recommended.
object
When status is in_progress, include a short start note.
When marking role done, set true if the role has acceptance_criteria (HO-1132).
Per-role checklist; omit to leave unchanged, empty array to clear (HO-1132).
When moving to complete/closed from stage test while human test cases exist but are not all approved, set true only after explicit human approval. Project owner or super-admin only; other members receive 403. Not persisted. Omit when all cases are approved or there are no cases.
Responses
Section titled “ Responses ”Updated ticket
object
object
Invalid request
object
Human-readable error message
Stable machine-readable error code for client branching
First validation message per field path
object
Structured validation issues (Zod)
object
Seconds until rate limit resets (429 responses)
Not authenticated
object
Human-readable error message
Stable machine-readable error code for client branching
First validation message per field path
object
Structured validation issues (Zod)
object
Seconds until rate limit resets (429 responses)
True if re-linking GitHub may fix the issue
Forbidden
object
Human-readable error message
Stable machine-readable error code for client branching
First validation message per field path
object
Structured validation issues (Zod)
object
Seconds until rate limit resets (429 responses)