Skip to main content

Work Request Settings API

Request types and the work-request pipelines and stages they run on. Reads need work_requests.view (the request form and board use them); writes are @AdminOnly() (admins, or roles with admin.edit / settings.edit). Pipelines here always have scope = 'work_requests' and stages module = 'work_requests'; IDs of sales pipelines or stages return 404. See Work Requests Module.

Request Types​

MethodEndpointPermissionDescription
GET/work-request-settings/types?includeInactive=trueviewList types (active only unless includeInactive=true), with openCount
GET/work-request-settings/types/:idviewGet a type
POST/work-request-settings/typesadminCreate a type
PUT/work-request-settings/types/:idadminUpdate a type (partial)
DELETE/work-request-settings/types/:idadminSoft delete; 409 while the type has open requests

Type body​

{
"name": "Technical Demo",
"slug": "technical_demo",
"description": "Book a product demo with presales",
"icon": null,
"color": "#7C3AED",
"ownerTeamId": "uuid",
"ownerDepartmentId": null,
"defaultPipelineId": "uuid",
"assignmentMode": "manual",
"allowedEntities": ["leads", "opportunities"],
"requestFields": [
{ "label": "Products to demo", "type": "multiselect", "required": true,
"options": [{ "label": "Analytics", "value": "Analytics" }] },
{ "label": "Preferred demo date", "type": "date", "required": true, "helpText": "Customer's preference" }
],
"defaultDueDays": 5,
"defaultBillable": false,
"defaultHourlyRate": null,
"currency": null,
"isActive": true,
"sortOrder": 3
}
FieldValidation
nameRequired
slugOptional; generated from the name ([a-z0-9_]); 409 if taken
assignmentModequeue (default) · auto · manual
allowedEntitiesNon-empty; any of leads, opportunities, accounts, contacts, projects, tasks. Default ["leads","opportunities"]
requestFields[]label required; key generated from it if omitted, unique; type one of text, textarea, number, date, select, multiselect, checkbox, url (else text); select / multiselect need options
defaultPipelineIdMust be a work-request pipeline
ownerTeamId, ownerDepartmentIdMust exist
defaultDueDays, sortOrderNon-negative integers
defaultHourlyRateNon-negative number

Response object adds ownerTeamName, ownerDepartmentName, defaultPipelineName, openCount, createdAt, updatedAt.

Pipelines​

MethodEndpointPermissionDescription
GET/work-request-settings/pipelines?includeInactive=trueviewList work-request pipelines with stageCount and requestCount
GET/work-request-settings/pipelines/:idviewPipeline with its active stages[]
POST/work-request-settings/pipelinesadminCreate (body { name, description?, isActive?, stageMovement?, withDefaultStages? })
PUT/work-request-settings/pipelines/:idadminUpdate name, description, isActive, stageMovement, sortOrder
DELETE/work-request-settings/pipelines/:idadminHard delete; 409 while any request uses it or any type defaults to it

stageMovement is free (default) or sequential. Unless withDefaultStages: false, a new pipeline is seeded with New, In Progress, Review, Completed (isWon) and Cancelled (isLost).

Stages​

MethodEndpointPermissionDescription
GET/work-request-settings/pipelines/:id/stages?includeInactive=trueviewList stages with requestCount
POST/work-request-settings/pipelines/:id/stagesadminAdd a stage ({ name, color?, description?, isWon?, isLost?, sortOrder? })
PUT/work-request-settings/pipelines/:id/stages/reorderadminBody { orderedIds: string[] } — stage ids of this pipeline in the new order
PUT/work-request-settings/stages/:stageIdadminUpdate name, color, description, isWon, isLost, isActive, sortOrder
DELETE/work-request-settings/stages/:stageIdadminHard delete; 409 while requests are in the stage

isWon means entering the stage completes the request, isLost that it cancels it; setting both returns 400. Without sortOrder, a new stage is placed after the last open stage (before the closing ones).

Stage object​

{
"id": "uuid",
"pipelineId": "uuid",
"name": "Solution Design",
"slug": "solution_design",
"color": "#3B82F6",
"description": null,
"sortOrder": 3,
"isActive": true,
"isWon": false,
"isLost": false,
"stageOwnerType": "role",
"requestCount": 4
}

Stage Owner Rules​

Owner rules for work-request stages use the shared stage-ownership endpoints, which work by stage id:

MethodEndpointDescription
GET/lead-settings/stage-ownership/:stageIdCurrent rule (stageOwnerType, stageOwnerUser, stageOwnerTeam, stageOwnerRole)
PUT/lead-settings/stage-ownership/:stageIdBody { stageOwnerType, stageOwnerUserId, stageOwnerTeamId, stageOwnerRoleId }

See Stage Ownership.