Apply a route to a node
Add a route’s structure underneath an existing order, phase, or component.
Routes compose recursively and are cycle-protected. A route scoped to a department overrides the target’s department.
curl --request POST \
--url https://{instance}/api/v2/concepts/deliverables/{id}/apply-route \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"routeId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({routeId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'})
};
fetch('https://{instance}/api/v2/concepts/deliverables/{id}/apply-route', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{instance}/api/v2/concepts/deliverables/{id}/apply-route"
payload = { "routeId": "3c90c3cc-0d44-4b50-8888-8dd25736052a" }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"identifier": "<string>",
"name": "<string>",
"type": "order",
"parentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"rootParentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"quantity": 123,
"cycleTimeSec": 123,
"durationSec": 123,
"peopleNum": 123,
"costCode": "<string>",
"data": {},
"computed": {
"rootType": "order",
"fullName": [
"<string>"
],
"fullPath": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"shopId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"phasesPath": [
"<string>"
],
"phase": "<string>",
"currentChildren": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"stageId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "order"
}
],
"containedStageIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"containedPhaseNames": [
"<string>"
],
"containedCurrentStageIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"containedCurrentPhaseNames": [
"<string>"
],
"currentStageIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"currentPhaseNames": [
"<string>"
],
"combinedWorkerIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"combinedTagIds": [
"<string>"
],
"workerIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"tags": [
"<string>"
],
"isLeaf": true,
"projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"date": "<string>",
"isAtRisk": false,
"isLate": false,
"effectiveDueDate": "<string>",
"effectiveDueDateIsInherited": false,
"effectiveDueDateIsLate": false,
"hasReworkedStages": false,
"groupIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
}{
"error": {
"message": "<string>",
"code": "BAD_REQUEST",
"requestId": "<string>",
"details": [
{
"path": "<string>",
"message": "<string>",
"code": "<string>"
}
],
"missingPermissions": [
"<string>"
]
},
"context": {}
}{
"error": {
"message": "<string>",
"code": "BAD_REQUEST",
"requestId": "<string>",
"details": [
{
"path": "<string>",
"message": "<string>",
"code": "<string>"
}
],
"missingPermissions": [
"<string>"
]
},
"context": {}
}{
"error": {
"message": "<string>",
"code": "BAD_REQUEST",
"requestId": "<string>",
"details": [
{
"path": "<string>",
"message": "<string>",
"code": "<string>"
}
],
"missingPermissions": [
"<string>"
]
},
"context": {}
}{
"error": {
"message": "<string>",
"code": "BAD_REQUEST",
"requestId": "<string>",
"details": [
{
"path": "<string>",
"message": "<string>",
"code": "<string>"
}
],
"missingPermissions": [
"<string>"
]
},
"context": {}
}{
"error": {
"message": "<string>",
"code": "BAD_REQUEST",
"requestId": "<string>",
"details": [
{
"path": "<string>",
"message": "<string>",
"code": "<string>"
}
],
"missingPermissions": [
"<string>"
]
},
"context": {}
}{
"error": {
"message": "<string>",
"code": "BAD_REQUEST",
"requestId": "<string>",
"details": [
{
"path": "<string>",
"message": "<string>",
"code": "<string>"
}
],
"missingPermissions": [
"<string>"
]
},
"context": {}
}Authorizations
Organization-scoped API key. Create one in the BuildingSwell app under Organization settings, API keys.
Path Parameters
Record id.
Body
Route to apply.
Response
The updated node.
A deliverable as the concepts layer returns it: the node's own fields plus its resolved concept context.
Node id.
Human-readable id.
Node name.
Concept this node represents.
order, route, overhead, template-phase, phase, component, stage, step, qcstep Node directly above this one.
Root of the tree.
How many of this node the work covers.
Cycle time per unit, in seconds.
Total duration, in seconds.
How many people the node is planned for.
Cost code.
Per-concept fields for this type.
Values BuildingSwell derives from the tree on every read. All read-only: anything you send here is ignored.
Show child attributes
Show child attributes
curl --request POST \
--url https://{instance}/api/v2/concepts/deliverables/{id}/apply-route \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"routeId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({routeId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'})
};
fetch('https://{instance}/api/v2/concepts/deliverables/{id}/apply-route', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{instance}/api/v2/concepts/deliverables/{id}/apply-route"
payload = { "routeId": "3c90c3cc-0d44-4b50-8888-8dd25736052a" }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"identifier": "<string>",
"name": "<string>",
"type": "order",
"parentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"rootParentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"quantity": 123,
"cycleTimeSec": 123,
"durationSec": 123,
"peopleNum": 123,
"costCode": "<string>",
"data": {},
"computed": {
"rootType": "order",
"fullName": [
"<string>"
],
"fullPath": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"shopId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"phasesPath": [
"<string>"
],
"phase": "<string>",
"currentChildren": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"stageId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "order"
}
],
"containedStageIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"containedPhaseNames": [
"<string>"
],
"containedCurrentStageIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"containedCurrentPhaseNames": [
"<string>"
],
"currentStageIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"currentPhaseNames": [
"<string>"
],
"combinedWorkerIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"combinedTagIds": [
"<string>"
],
"workerIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"tags": [
"<string>"
],
"isLeaf": true,
"projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"date": "<string>",
"isAtRisk": false,
"isLate": false,
"effectiveDueDate": "<string>",
"effectiveDueDateIsInherited": false,
"effectiveDueDateIsLate": false,
"hasReworkedStages": false,
"groupIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
}{
"error": {
"message": "<string>",
"code": "BAD_REQUEST",
"requestId": "<string>",
"details": [
{
"path": "<string>",
"message": "<string>",
"code": "<string>"
}
],
"missingPermissions": [
"<string>"
]
},
"context": {}
}{
"error": {
"message": "<string>",
"code": "BAD_REQUEST",
"requestId": "<string>",
"details": [
{
"path": "<string>",
"message": "<string>",
"code": "<string>"
}
],
"missingPermissions": [
"<string>"
]
},
"context": {}
}{
"error": {
"message": "<string>",
"code": "BAD_REQUEST",
"requestId": "<string>",
"details": [
{
"path": "<string>",
"message": "<string>",
"code": "<string>"
}
],
"missingPermissions": [
"<string>"
]
},
"context": {}
}{
"error": {
"message": "<string>",
"code": "BAD_REQUEST",
"requestId": "<string>",
"details": [
{
"path": "<string>",
"message": "<string>",
"code": "<string>"
}
],
"missingPermissions": [
"<string>"
]
},
"context": {}
}{
"error": {
"message": "<string>",
"code": "BAD_REQUEST",
"requestId": "<string>",
"details": [
{
"path": "<string>",
"message": "<string>",
"code": "<string>"
}
],
"missingPermissions": [
"<string>"
]
},
"context": {}
}{
"error": {
"message": "<string>",
"code": "BAD_REQUEST",
"requestId": "<string>",
"details": [
{
"path": "<string>",
"message": "<string>",
"code": "<string>"
}
],
"missingPermissions": [
"<string>"
]
},
"context": {}
}