Ticket status
A status says where a ticket stands in its lifecycle. Statuses are defined per tenant and identified by their name; displayName is the label meant for people and can be changed freely.
Exactly one status is the tenant's default — the one new tickets start in. position is the order they are meant to be shown in.
A ticket cannot move between arbitrary statuses: the permitted moves are defined as Status Transitions.
Returns the tenant's ticket statuses.
Filterable and sortable — name, displayName, color, isDefault, position, createdAt, updatedAt.
position is the order they are meant to be shown in, isDefault marks the status a new ticket starts in. Exactly one status is the default.
Token issued by the central equipme authentication, sent as Bearer <token>.
JSON filter expression
Free-text term — no effect here
Comma-separated field:direction terms
Selection of fields and relations
name,displayName,positionNumber of entries to skip
0Page size, 1 to 100
100OK
Bad Request
Unauthorized
Forbidden
Internal Server Error
GET /api/v1/ticket-statuses HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"count": 1,
"data": [
{
"allowedSourceStatuses": [
{
"allowedSourceStatuses": [
"[Circular Reference]"
],
"allowedTargetStatuses": [
"[Circular Reference]"
],
"color": "#f5a623",
"createdAt": "2026-01-01T00:00:00.000Z",
"displayName": "In progress",
"isDefault": true,
"name": "in_progress",
"position": 2,
"tenant": {
"id": 1,
"name": "text"
},
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"allowedTargetStatuses": [
{
"allowedSourceStatuses": [
{
"allowedSourceStatuses": [
"[Circular Reference]"
],
"allowedTargetStatuses": [
"[Circular Reference]"
],
"color": "#f5a623",
"createdAt": "2026-01-01T00:00:00.000Z",
"displayName": "In progress",
"isDefault": true,
"name": "in_progress",
"position": 2,
"tenant": {
"id": 1,
"name": "text"
},
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"allowedTargetStatuses": [
"[Circular Reference]"
],
"color": "#f5a623",
"createdAt": "2026-01-01T00:00:00.000Z",
"displayName": "In progress",
"isDefault": true,
"name": "in_progress",
"position": 2,
"tenant": {
"id": 1,
"name": "text"
},
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"color": "#f5a623",
"createdAt": "2026-01-01T00:00:00.000Z",
"displayName": "In progress",
"isDefault": true,
"name": "in_progress",
"position": 2,
"tenant": {
"id": 1,
"name": "text"
},
"updatedAt": "2026-01-01T00:00:00.000Z"
}
]
}Creates a ticket status. name identifies it from then on and displayName is what people see.
allowedSourceStatusNames and allowedTargetStatusNames create the transitions in the same request: which statuses may lead into this one, and which ones it may lead to. Without them the new status is reachable from nowhere.
Setting isDefault makes this the status new tickets start in and takes that role away from the status that held it.
Token issued by the central equipme authentication, sent as Bearer <token>.
Created
Bad Request
Unauthorized
Forbidden
Conflict
Internal Server Error
POST /api/v1/ticket-statuses HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 2
{}{
"data": {
"allowedSourceStatuses": [
{
"allowedSourceStatuses": [
{
"allowedSourceStatuses": "[Circular Reference]",
"allowedTargetStatuses": "[Circular Reference]",
"color": "#f5a623",
"createdAt": "2026-01-01T00:00:00.000Z",
"displayName": "In progress",
"isDefault": true,
"name": "in_progress",
"position": 2,
"tenant": {
"id": 1,
"name": "text"
},
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"allowedTargetStatuses": [
{
"allowedSourceStatuses": "[Circular Reference]",
"allowedTargetStatuses": "[Circular Reference]",
"color": "#f5a623",
"createdAt": "2026-01-01T00:00:00.000Z",
"displayName": "In progress",
"isDefault": true,
"name": "in_progress",
"position": 2,
"tenant": {
"id": 1,
"name": "text"
},
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"color": "#f5a623",
"createdAt": "2026-01-01T00:00:00.000Z",
"displayName": "In progress",
"isDefault": true,
"name": "in_progress",
"position": 2,
"tenant": {
"id": 1,
"name": "text"
},
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"allowedTargetStatuses": [
{
"allowedSourceStatuses": "[Circular Reference]",
"allowedTargetStatuses": "[Circular Reference]",
"color": "#f5a623",
"createdAt": "2026-01-01T00:00:00.000Z",
"displayName": "In progress",
"isDefault": true,
"name": "in_progress",
"position": 2,
"tenant": {
"id": 1,
"name": "text"
},
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"color": "#f5a623",
"createdAt": "2026-01-01T00:00:00.000Z",
"displayName": "In progress",
"isDefault": true,
"name": "in_progress",
"position": 2,
"tenant": {
"id": 1,
"name": "text"
},
"updatedAt": "2026-01-01T00:00:00.000Z"
}
}Deletes a ticket status. Three cases are refused with 400:
the default status — assign a different default first,
the last remaining status,
a status still used by tickets without a
migrationTargetName.
When tickets still carry the status, migrationTargetName names the status they are moved to; it has to differ from the one being deleted. The move and the deletion happen together, so no ticket is ever left without a status.
Token issued by the central equipme authentication, sent as Bearer <token>.
Status name
on_holdNo Content
No content
Bad Request
Unauthorized
Forbidden
Not Found
Internal Server Error
DELETE /api/v1/ticket-statuses/{name} HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 2
{}No content
Changes a ticket status. The body follows JSON Merge Patch semantics: an absent field stays as it is, null clears it, a value sets it. The name cannot be changed — it is the identifier tickets refer to.
Setting isDefault to true moves the default here and clears it on the status that held it. Setting it to false on the current default is answered with 400: a tenant always has exactly one default, so assign a different one instead.
Token issued by the central equipme authentication, sent as Bearer <token>.
Status name
in_progressOK
Bad Request
Unauthorized
Forbidden
Not Found
Internal Server Error
PATCH /api/v1/ticket-statuses/{name} HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 2
{}{
"data": {
"allowedSourceStatuses": [
{
"allowedSourceStatuses": [
{
"allowedSourceStatuses": "[Circular Reference]",
"allowedTargetStatuses": "[Circular Reference]",
"color": "#f5a623",
"createdAt": "2026-01-01T00:00:00.000Z",
"displayName": "In progress",
"isDefault": true,
"name": "in_progress",
"position": 2,
"tenant": {
"id": 1,
"name": "text"
},
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"allowedTargetStatuses": [
{
"allowedSourceStatuses": "[Circular Reference]",
"allowedTargetStatuses": "[Circular Reference]",
"color": "#f5a623",
"createdAt": "2026-01-01T00:00:00.000Z",
"displayName": "In progress",
"isDefault": true,
"name": "in_progress",
"position": 2,
"tenant": {
"id": 1,
"name": "text"
},
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"color": "#f5a623",
"createdAt": "2026-01-01T00:00:00.000Z",
"displayName": "In progress",
"isDefault": true,
"name": "in_progress",
"position": 2,
"tenant": {
"id": 1,
"name": "text"
},
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"allowedTargetStatuses": [
{
"allowedSourceStatuses": "[Circular Reference]",
"allowedTargetStatuses": "[Circular Reference]",
"color": "#f5a623",
"createdAt": "2026-01-01T00:00:00.000Z",
"displayName": "In progress",
"isDefault": true,
"name": "in_progress",
"position": 2,
"tenant": {
"id": 1,
"name": "text"
},
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"color": "#f5a623",
"createdAt": "2026-01-01T00:00:00.000Z",
"displayName": "In progress",
"isDefault": true,
"name": "in_progress",
"position": 2,
"tenant": {
"id": 1,
"name": "text"
},
"updatedAt": "2026-01-01T00:00:00.000Z"
}
}Last updated
Was this helpful?