SpedySpedy Docs

Tickets

Create, update, assign, and transition tickets -- the core work items in Spedy.

Tickets are the fundamental work items in Spedy. Every task, bug, feature request, or piece of work lives as a ticket on a board. Tickets support statuses, priorities, assignments, labels, due dates, time estimates, and more.

List Tickets

GET /api/v1/boards/{boardId}/tickets

Returns a paginated list of tickets on the board.

Query Parameters

ParameterTypeRequiredDescription
pagenumberNoPage number (default: 1)
limitnumberNoItems per page (default: 20, max: 100)
statusIdstringNoFilter by status ID
assigneeIdstringNoFilter by assignee user ID
customerIdstringNoFilter by customer ID
typeIdstringNoFilter by ticket type ID (comma-separated for multiple)
labelIdstringNoFilter by label ID (comma-separated for multiple)
searchstringNoSearch in title and description
includePlanningbooleanNoInclude tickets in PLANNING statuses (default: false)
includeArchivedbooleanNoInclude archived/done tickets
overduebooleanNoOnly overdue tickets
noDueDatebooleanNoOnly tickets without a due date
dueBeforestringNoTickets due on or before this date (ISO 8601)
dueAfterstringNoTickets due on or after this date (ISO 8601)
impactLevelstringNoFilter by impact level (comma-separated)
externalReferencestringNoFilter by external reference (partial match)

Example Response

{
  "data": [
    {
      "id": "tkt_abc123",
      "displayId": "WEB-42",
      "title": "Fix login page styling",
      "status": {
        "id": "sts_def456",
        "name": "In Progress",
        "category": "ACTIVE"
      },
      "priority": "HIGH",
      "assignee": {
        "id": "usr_abc123",
        "name": "Alex Smith"
      },
      "type": {
        "id": "typ_abc123",
        "name": "Bug"
      },
      "labels": [],
      "dueDate": "2025-04-01T00:00:00Z",
      "createdAt": "2025-03-15T10:00:00Z"
    }
  ],
  "total": 42,
  "page": 1,
  "pageSize": 20,
  "totalPages": 3
}

Create Ticket

POST /api/v1/boards/{boardId}/tickets

Request Body

FieldTypeRequiredDescription
titlestringYesTicket title (max 200 characters)
descriptionstringNoDetailed description (max 50,000 characters)
statusIdstringNoInitial status ID (defaults to Backlog)
assigneeIdstringNoAssignee user ID
customerIdstringNoCustomer ID
prioritystringNoLOW, MEDIUM, HIGH, or CRITICAL
typeIdstringNoTicket type ID
labelIdsstring[]NoLabel IDs to attach
dueDatestringNoDue date (ISO 8601)
startDatestringNoPlanned start date (ISO 8601)
estimatedHoursnumberNoEstimated hours (min 0.1)
storyPointsnumberNoStory points
externalReferencestringNoExternal reference ID (max 200 characters)
impactLevelstringNoLOW, MEDIUM, HIGH, or CRITICAL
milestoneIdstringNoMilestone ID to assign

Example Request

{
  "title": "Fix login page styling",
  "description": "The login button is misaligned on mobile devices.",
  "priority": "HIGH",
  "typeId": "typ_bug123",
  "assigneeId": "usr_abc123",
  "labelIds": ["lbl_frontend"],
  "dueDate": "2025-04-01T00:00:00Z"
}

Get Ticket

GET /api/v1/boards/{boardId}/tickets/{ticketId}

Returns full ticket details including description, comments count, attachment count, and related data.

Update Ticket

PATCH /api/v1/boards/{boardId}/tickets/{ticketId}

All fields are optional. Send only the fields you want to change. Set a field to null to clear it.

Request Body

FieldTypeRequiredDescription
titlestringNoTicket title
descriptionstringNoDetailed description
assigneeIdstring | nullNoAssignee (null to unassign)
customerIdstring | nullNoCustomer (null to remove)
prioritystring | nullNoPriority level (null to remove)
typeIdstringNoTicket type ID
statusIdstringNoStatus ID
labelIdsstring[]NoLabel IDs (replaces existing labels)
dueDatestring | nullNoDue date (null to remove)
startDatestring | nullNoStart date (null to remove)
estimatedHoursnumber | nullNoEstimated hours (null to remove)
storyPointsnumber | nullNoStory points (null to remove)
externalReferencestring | nullNoExternal reference (null to remove)
impactLevelstring | nullNoImpact level (null to remove)
milestoneIdstring | nullNoMilestone ID (null to unassign)
resolutionstring | nullNoResolution description
resolutionTypestring | nullNofixed, wont_fix, duplicate, cannot_reproduce, or by_design

Delete Ticket

DELETE /api/v1/boards/{boardId}/tickets/{ticketId}

Permanently deletes the ticket. Returns 204 No Content.

Update Ticket Status

PATCH /api/v1/boards/{boardId}/tickets/{ticketId}/status

Change the ticket's workflow status.

Request Body

FieldTypeRequiredDescription
statusIdstringYesTarget status ID

Assign Ticket

PATCH /api/v1/boards/{boardId}/tickets/{ticketId}/assign

Assign or unassign a user from the ticket.

Request Body

FieldTypeRequiredDescription
assigneeIdstring | nullYesUser ID to assign, or null to unassign

Move Ticket

POST /api/v1/boards/{boardId}/tickets/{ticketId}/move

Move a ticket to a different board.

Request Body

FieldTypeRequiredDescription
targetBoardIdstringYesDestination board ID

Example Response

{
  "data": {
    "id": "tkt_abc123",
    "displayId": "NEW-1",
    "title": "Fix login page styling",
    "boardId": "brd_newboard"
  }
}

Transition Ticket

POST /api/v1/boards/{boardId}/tickets/{ticketId}/transition

Transition a ticket to a new status with optional validation of transition rules.

Request Body

FieldTypeRequiredDescription
statusIdstringYesTarget status ID
statusChangeReasonstringNoReason for the transition

Approve Ticket

POST /api/v1/boards/{boardId}/tickets/{ticketId}/approve

Approve a ticket that's in a planning/backlog status, moving it into the active workflow.