API reference
5 operations in ticket-links. Raw spec: openapi.json.
GET
/api/v1/tickets/{id}/linksGET /api/tickets/{id}/links — outgoing + incoming edges + the rollup.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes |
Responses
| Status | Description |
|---|---|
200 |
Security: bearer
POST
/api/v1/tickets/{id}/linksPOST /api/tickets/{id}/links — link this ticket (from) to another (to).
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes |
Request body
CreateTicketLinkRequest
Responses
| Status | Description |
|---|---|
200 | |
404 | ticket not found in scope |
409 | duplicate link or idempotency key reused |
Security: bearer
DELETE
/api/v1/tickets/{id}/links/{link_id}DELETE /api/tickets/{id}/links/{link_id} — remove one edge.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | |
link_id | path | string | Yes |
Responses
| Status | Description |
|---|---|
200 | |
404 | link not found in scope |
Security: bearer
POST
/api/v1/tickets/{id}/mergePOST /api/tickets/{id}/merge — merge THIS ticket into `survivor_id`. Children, comments, time entries, cost lines, and expenses fold into the survivor; the source is closed on its own board and marked `merged_into_ticket_id` (its row stays queryable — doctrine #9).
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes |
Request body
MergeRequest
Responses
| Status | Description |
|---|---|
200 | |
404 | ticket not found in scope |
409 | typed merge conflict (self_merge, already_merged, closed_survivor, board_mismatch) |
422 | idempotency key reused |
Security: bearer
GET
/api/v1/tickets/{id}/rollupGET /api/tickets/{id}/rollup — children/members + folded time + billable money.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes |
Responses
| Status | Description |
|---|---|
200 |
Security: bearer