Developer docs menu

API reference / Projects

Projects API

382 endpoints. Scopes: Scalar360.projects.READ, .CREATE, .UPDATE, .DELETE or .ALL. All calls need Authorization: Scalar360-oauthtoken <access_token> — see Authentication.

GET

List

/api/v1/projects

Scope: Scalar360.projects.READ

ParameterInTypeRequired
qquerystring (default )No
statusquerystringNo
archivedquerybooleanNo
sortByquerystring (default updatedAt)No
sortDirquerystring (default desc)No
pagequeryinteger (default 1)No
pageSizequeryinteger (default 20)No
groupIdquerystringNo
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create

/api/v1/projects

Scope: Scalar360.projects.CREATE

Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 160
descriptionstringmax length 10000
colorstringmax length 32
statusstring
prioritystring
startDatestring (date)
dueDatestring (date)
ownerMemberIdstring (uuid)
accessstring
groupIdstring (uuid)
strictDatesboolean
methodologystring
workflowPresetstring
seedBlueprintboolean
keystringmax length 10
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string"}'
GET

Get

/api/v1/projects/{projectId}

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update

/api/v1/projects/{projectId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 160
descriptionstringmax length 10000
colorstringmax length 32
statusstring
prioritystring
startDatestring (date)
dueDatestring (date)
ownerMemberIdstring (uuid)
versionintegerYesrequired
accessstring
groupIdstring (uuid)
clearGroupboolean
strictDatesboolean
methodologystring
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","description":"string","color":"string","status":"string","priority":"string","startDate":"2026-10-12"}'
GET

Activity

/api/v1/projects/{projectId}/activity

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdquerystring (uuid)No
pagequeryinteger (default 1)No
pageSizequeryinteger (default 30)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/activity" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Archive

/api/v1/projects/{projectId}/archive

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
versionintegerYesrequired
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/archive" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"version":1}'
GET

Backlog

/api/v1/projects/{projectId}/backlog

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
epicIdquerystring (uuid)No
typequerystringNo
qquerystring (default )No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/backlog" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Rank

/api/v1/projects/{projectId}/backlog/rank

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
taskIdsarray of string (uuid)Yesrequired, not empty, max length 500
afterTaskIdstring (uuid)
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/backlog/rank" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"taskIds":["3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"],"afterTaskId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"}'
GET

Billing

/api/v1/projects/{projectId}/billing

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/billing" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Generate invoice

/api/v1/projects/{projectId}/billing/invoice

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/billing/invoice" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update billing

/api/v1/projects/{projectId}/billing/settings

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
customerIdstring (uuid)
defaultHourlyRatenumber
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/billing/settings" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"customerId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","defaultHourlyRate":100}'
GET

Budget

/api/v1/projects/{projectId}/budget

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/budget" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update

/api/v1/projects/{projectId}/budget

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
budgetTypestring
budgetHoursnumber
budgetAmountnumber
budgetAlertPercentinteger
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/budget" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"budgetType":"string","budgetHours":100,"budgetAmount":100,"budgetAlertPercent":1,"version":1}'
GET

Calendar

/api/v1/projects/{projectId}/calendar

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
fromquerystring (date)No
toquerystring (date)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/calendar" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Decisions

/api/v1/projects/{projectId}/client-portal/decisions

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/client-portal/decisions" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create link

/api/v1/projects/{projectId}/client-portal/links

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
clientNamestringYesrequired, not blank, max length 120
clientEmailstringmax length 254
permissionsarray of string
expiresAtstring (date-time)
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/client-portal/links" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"clientName":"string"}'
POST

Revoke link

/api/v1/projects/{projectId}/client-portal/links/{linkId}/revoke

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
linkIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
versionintegerYesrequired
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/client-portal/links/{linkId}/revoke" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"version":1}'
GET

Messages

/api/v1/projects/{projectId}/client-portal/messages

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/client-portal/messages" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Reply

/api/v1/projects/{projectId}/client-portal/messages

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
bodystringYesrequired, not blank, max length 4000
websitestring
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/client-portal/messages" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body":"string"}'
GET

Billing

/api/v1/projects/{projectId}/commercial/billing

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/billing" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create milestone

/api/v1/projects/{projectId}/commercial/billing-milestones

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestring
basisstring
percentnumber
amountnumber
taxPercentnumber
milestoneIdstring (uuid)
dueDatestring (date)
statusstring
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/billing-milestones" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","basis":"string","percent":100,"amount":100,"taxPercent":100,"milestoneId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"}'
PUT

Update milestone

/api/v1/projects/{projectId}/commercial/billing-milestones/{milestoneId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
milestoneIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestring
basisstring
percentnumber
amountnumber
taxPercentnumber
milestoneIdstring (uuid)
dueDatestring (date)
statusstring
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/billing-milestones/{milestoneId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","basis":"string","percent":100,"amount":100,"taxPercent":100,"milestoneId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"}'
DELETE

Delete milestone

/api/v1/projects/{projectId}/commercial/billing-milestones/{milestoneId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
milestoneIdpathstring (uuid)Yes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/billing-milestones/{milestoneId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Invoice milestone

/api/v1/projects/{projectId}/commercial/billing-milestones/{milestoneId}/invoice

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
milestoneIdpathstring (uuid)Yes
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/billing-milestones/{milestoneId}/invoice" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Boq

/api/v1/projects/{projectId}/commercial/boq

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/boq" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Budget from boq

/api/v1/projects/{projectId}/commercial/boq/budget

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/boq/budget" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Export boq

/api/v1/projects/{projectId}/commercial/boq/export

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/boq/export" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Import boq

/api/v1/projects/{projectId}/commercial/boq/import

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
csvstring
replaceboolean
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/boq/import" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"csv":"string","replace":true}'
POST

Create item

/api/v1/projects/{projectId}/commercial/boq/items

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
sectionIdstring (uuid)
itemCodestring
descriptionstring
unitstring
quantitynumber
ratenumber
taxPercentnumber
inventoryItemIdstring (uuid)
notesstring
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/boq/items" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"sectionId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","itemCode":"string","description":"string","unit":"string","quantity":100,"rate":100}'
PUT

Update item

/api/v1/projects/{projectId}/commercial/boq/items/{itemId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
itemIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
sectionIdstring (uuid)
itemCodestring
descriptionstring
unitstring
quantitynumber
ratenumber
taxPercentnumber
inventoryItemIdstring (uuid)
notesstring
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/boq/items/{itemId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"sectionId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","itemCode":"string","description":"string","unit":"string","quantity":100,"rate":100}'
DELETE

Delete item

/api/v1/projects/{projectId}/commercial/boq/items/{itemId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
itemIdpathstring (uuid)Yes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/boq/items/{itemId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Quotation

/api/v1/projects/{projectId}/commercial/boq/quotation

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/boq/quotation" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Reorder

/api/v1/projects/{projectId}/commercial/boq/reorder

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
sectionsarray of object
sections[].idstring (uuid)
sections[].itemIdsarray of string (uuid)
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/boq/reorder" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"sections":[{"id":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","itemIds":[null]}]}'
POST

Create section

/api/v1/projects/{projectId}/commercial/boq/sections

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestring
areastring
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/boq/sections" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","area":"string","version":1}'
PUT

Update section

/api/v1/projects/{projectId}/commercial/boq/sections/{sectionId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
sectionIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestring
areastring
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/boq/sections/{sectionId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","area":"string","version":1}'
DELETE

Delete section

/api/v1/projects/{projectId}/commercial/boq/sections/{sectionId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
sectionIdpathstring (uuid)Yes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/boq/sections/{sectionId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Change orders

/api/v1/projects/{projectId}/commercial/change-orders

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/change-orders" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create change order

/api/v1/projects/{projectId}/commercial/change-orders

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
titlestring
reasonstring
scopestring
costImpactnumber
timeImpactDaysinteger
shiftDueDateboolean
itemsarray of object
items[].boqItemIdstring (uuid)
items[].itemCodestring
items[].descriptionstring
items[].unitstring
items[].quantitynumber
items[].ratenumber
items[].taxPercentnumber
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/change-orders" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"string","reason":"string","scope":"string","costImpact":100,"timeImpactDays":1,"shiftDueDate":true}'
PUT

Update change order

/api/v1/projects/{projectId}/commercial/change-orders/{changeOrderId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
changeOrderIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
titlestring
reasonstring
scopestring
costImpactnumber
timeImpactDaysinteger
shiftDueDateboolean
itemsarray of object
items[].boqItemIdstring (uuid)
items[].itemCodestring
items[].descriptionstring
items[].unitstring
items[].quantitynumber
items[].ratenumber
items[].taxPercentnumber
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/change-orders/{changeOrderId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"string","reason":"string","scope":"string","costImpact":100,"timeImpactDays":1,"shiftDueDate":true}'
DELETE

Delete change order

/api/v1/projects/{projectId}/commercial/change-orders/{changeOrderId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
changeOrderIdpathstring (uuid)Yes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/change-orders/{changeOrderId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Approve change order

/api/v1/projects/{projectId}/commercial/change-orders/{changeOrderId}/approve

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
changeOrderIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
clientApproverNamestring
shiftDueDateboolean
notestring
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/change-orders/{changeOrderId}/approve" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"clientApproverName":"string","shiftDueDate":true,"note":"string","version":1}'
POST

Reject change order

/api/v1/projects/{projectId}/commercial/change-orders/{changeOrderId}/reject

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
changeOrderIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
clientApproverNamestring
shiftDueDateboolean
notestring
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/change-orders/{changeOrderId}/reject" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"clientApproverName":"string","shiftDueDate":true,"note":"string","version":1}'
POST

Submit change order

/api/v1/projects/{projectId}/commercial/change-orders/{changeOrderId}/submit

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
changeOrderIdpathstring (uuid)Yes
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/change-orders/{changeOrderId}/submit" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'
POST

Log consumption

/api/v1/projects/{projectId}/commercial/consumption

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
consumedOnstring (date)
inventoryItemIdstring (uuid)
descriptionstring
quantitynumber
unitstring
boqItemIdstring (uuid)
warehouseIdstring (uuid)
notesstring
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/consumption" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"consumedOn":"2026-10-12","inventoryItemId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","description":"string","quantity":100,"unit":"string","boqItemId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"}'
DELETE

Delete consumption

/api/v1/projects/{projectId}/commercial/consumption/{consumptionId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
consumptionIdpathstring (uuid)Yes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/consumption/{consumptionId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Contract

/api/v1/projects/{projectId}/commercial/contract

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/contract" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update contract

/api/v1/projects/{projectId}/commercial/contract

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
contractValuenumber
retentionPercentnumber
advanceAmountnumber
advanceRecoveryPercentnumber
defectLiabilityDaysinteger
completionDatestring (date)
customerIdstring (uuid)
clearCustomerboolean
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/contract" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"contractValue":100,"retentionPercent":100,"advanceAmount":100,"advanceRecoveryPercent":100,"defectLiabilityDays":1,"completionDate":"2026-10-12"}'
GET

Lookup

/api/v1/projects/{projectId}/commercial/lookups/{type}

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
typepathstringYes
qquerystringNo
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/lookups/{type}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create request

/api/v1/projects/{projectId}/commercial/material-requests

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
neededBystring (date)
locationstring
notesstring
itemsarray of object
items[].inventoryItemIdstring (uuid)
items[].descriptionstring
items[].quantitynumber
items[].unitstring
items[].boqItemIdstring (uuid)
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/material-requests" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"neededBy":"2026-10-12","location":"string","notes":"string","items":[{"inventoryItemId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","description":"string","quantity":100,"unit":"string","boqItemId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"}],"version":1}'
PUT

Update request

/api/v1/projects/{projectId}/commercial/material-requests/{requestId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
requestIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
neededBystring (date)
locationstring
notesstring
itemsarray of object
items[].inventoryItemIdstring (uuid)
items[].descriptionstring
items[].quantitynumber
items[].unitstring
items[].boqItemIdstring (uuid)
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/material-requests/{requestId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"neededBy":"2026-10-12","location":"string","notes":"string","items":[{"inventoryItemId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","description":"string","quantity":100,"unit":"string","boqItemId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"}],"version":1}'
DELETE

Delete request

/api/v1/projects/{projectId}/commercial/material-requests/{requestId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
requestIdpathstring (uuid)Yes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/material-requests/{requestId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Request action

/api/v1/projects/{projectId}/commercial/material-requests/{requestId}/{action}

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
requestIdpathstring (uuid)Yes
actionpathstringYes
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/material-requests/{requestId}/{action}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'
POST

Create purchase order

/api/v1/projects/{projectId}/commercial/material-requests/{requestId}/purchase-order

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
requestIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
vendorIdstring (uuid)
orderDatestring (date)
dueDatestring (date)
notesstring
linesarray of object
lines[].requestItemIdstring (uuid)
lines[].quantitynumber
lines[].ratenumber
lines[].taxRatenumber
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/material-requests/{requestId}/purchase-order" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"vendorId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","orderDate":"2026-10-12","dueDate":"2026-10-12","notes":"string","lines":[{"requestItemId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","quantity":100,"rate":100,"taxRate":100}]}'
POST

Receive

/api/v1/projects/{projectId}/commercial/material-requests/{requestId}/receive

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
requestIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
linesarray of object
lines[].requestItemIdstring (uuid)
lines[].quantitynumber
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/material-requests/{requestId}/receive" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"lines":[{"requestItemId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","quantity":100}],"version":1}'
GET

Procurement

/api/v1/projects/{projectId}/commercial/procurement

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/procurement" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create running bill

/api/v1/projects/{projectId}/commercial/running-bills

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
periodFromstring (date)
periodTostring (date)
retentionPercentnumber
notesstring
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/running-bills" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"periodFrom":"2026-10-12","periodTo":"2026-10-12","retentionPercent":100,"notes":"string"}'
GET

Running bill

/api/v1/projects/{projectId}/commercial/running-bills/{billId}

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
billIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/running-bills/{billId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update running bill

/api/v1/projects/{projectId}/commercial/running-bills/{billId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
billIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
periodFromstring (date)
periodTostring (date)
retentionPercentnumber
advanceRecoveryAmountnumber
notesstring
linesarray of object
lines[].boqItemIdstring (uuid)
lines[].currentQtynumber
lines[].cumulativeQtynumber
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/running-bills/{billId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"periodFrom":"2026-10-12","periodTo":"2026-10-12","retentionPercent":100,"advanceRecoveryAmount":100,"notes":"string","lines":[{"boqItemId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","currentQty":100,"cumulativeQty":100}]}'
DELETE

Delete running bill

/api/v1/projects/{projectId}/commercial/running-bills/{billId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
billIdpathstring (uuid)Yes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/running-bills/{billId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Running bill action

/api/v1/projects/{projectId}/commercial/running-bills/{billId}/{action}

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
billIdpathstring (uuid)Yes
actionpathstringYes
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/running-bills/{billId}/{action}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'
POST

Retention release

/api/v1/projects/{projectId}/commercial/running-bills/retention-release

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/running-bills/retention-release" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Subcontracts

/api/v1/projects/{projectId}/commercial/subcontracts

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/subcontracts" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create subcontract

/api/v1/projects/{projectId}/commercial/subcontracts

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
vendorIdstring (uuid)
titlestring
scopestring
contractValuenumber
retentionPercentnumber
startDatestring (date)
endDatestring (date)
statusstring
itemsarray of object
items[].boqItemIdstring (uuid)
items[].descriptionstring
items[].unitstring
items[].quantitynumber
items[].ratenumber
items[].taxPercentnumber
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/subcontracts" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"vendorId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","title":"string","scope":"string","contractValue":100,"retentionPercent":100,"startDate":"2026-10-12"}'
PUT

Update subcontract

/api/v1/projects/{projectId}/commercial/subcontracts/{subcontractId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
subcontractIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
vendorIdstring (uuid)
titlestring
scopestring
contractValuenumber
retentionPercentnumber
startDatestring (date)
endDatestring (date)
statusstring
itemsarray of object
items[].boqItemIdstring (uuid)
items[].descriptionstring
items[].unitstring
items[].quantitynumber
items[].ratenumber
items[].taxPercentnumber
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/subcontracts/{subcontractId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"vendorId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","title":"string","scope":"string","contractValue":100,"retentionPercent":100,"startDate":"2026-10-12"}'
DELETE

Delete subcontract

/api/v1/projects/{projectId}/commercial/subcontracts/{subcontractId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
subcontractIdpathstring (uuid)Yes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/subcontracts/{subcontractId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create subcontract bill

/api/v1/projects/{projectId}/commercial/subcontracts/{subcontractId}/bills

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
subcontractIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
periodFromstring (date)
periodTostring (date)
retentionPercentnumber
notesstring
linesarray of object
lines[].subcontractItemIdstring (uuid)
lines[].currentQtynumber
lines[].cumulativeQtynumber
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/subcontracts/{subcontractId}/bills" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"periodFrom":"2026-10-12","periodTo":"2026-10-12","retentionPercent":100,"notes":"string","lines":[{"subcontractItemId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","currentQty":100,"cumulativeQty":100}],"version":1}'
PUT

Update subcontract bill

/api/v1/projects/{projectId}/commercial/subcontracts/{subcontractId}/bills/{billId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
subcontractIdpathstring (uuid)Yes
billIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
periodFromstring (date)
periodTostring (date)
retentionPercentnumber
notesstring
linesarray of object
lines[].subcontractItemIdstring (uuid)
lines[].currentQtynumber
lines[].cumulativeQtynumber
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/subcontracts/{subcontractId}/bills/{billId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"periodFrom":"2026-10-12","periodTo":"2026-10-12","retentionPercent":100,"notes":"string","lines":[{"subcontractItemId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","currentQty":100,"cumulativeQty":100}],"version":1}'
DELETE

Delete subcontract bill

/api/v1/projects/{projectId}/commercial/subcontracts/{subcontractId}/bills/{billId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
subcontractIdpathstring (uuid)Yes
billIdpathstring (uuid)Yes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/subcontracts/{subcontractId}/bills/{billId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Subcontract bill action

/api/v1/projects/{projectId}/commercial/subcontracts/{subcontractId}/bills/{billId}/{action}

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
subcontractIdpathstring (uuid)Yes
billIdpathstring (uuid)Yes
actionpathstringYes
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/subcontracts/{subcontractId}/bills/{billId}/{action}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'
POST

Vendor bill

/api/v1/projects/{projectId}/commercial/subcontracts/{subcontractId}/bills/{billId}/vendor-bill

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
subcontractIdpathstring (uuid)Yes
billIdpathstring (uuid)Yes
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/subcontracts/{subcontractId}/bills/{billId}/vendor-bill" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'
POST

Work order

/api/v1/projects/{projectId}/commercial/subcontracts/{subcontractId}/work-order

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
subcontractIdpathstring (uuid)Yes
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/subcontracts/{subcontractId}/work-order" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Summary

/api/v1/projects/{projectId}/commercial/summary

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/commercial/summary" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Dashboard

/api/v1/projects/{projectId}/dashboard

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/dashboard" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Epics

/api/v1/projects/{projectId}/epics

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/epics" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Feed

/api/v1/projects/{projectId}/feed

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
filterquerystring (default all)No
pagequeryinteger (default 1)No
pageSizequeryinteger (default 20)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/feed" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Forms

/api/v1/projects/{projectId}/forms

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/forms" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create form

/api/v1/projects/{projectId}/forms

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 120
descriptionstringmax length 2000
templatestringmax length 40
targetTypestring
targetStageIdstring (uuid)
targetIssueStatusIdstring (uuid)
fieldsarray of objectmax length 40
fields[].keystringYesrequired, not blank, max length 60
fields[].labelstringYesrequired, not blank, max length 120
fields[].typestringYesrequired, not blank
fields[].requiredboolean
fields[].optionsarray of stringmax length 50
fields[].mapsTostringmax length 80
fields[].placeholderstringmax length 200
fields[].helpTextstringmax length 300
isPublicboolean
activeboolean
successMessagestringmax length 500
regenerateTokenboolean
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/forms" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string"}'
GET

Form

/api/v1/projects/{projectId}/forms/{formId}

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
formIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/forms/{formId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update form

/api/v1/projects/{projectId}/forms/{formId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
formIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 120
descriptionstringmax length 2000
templatestringmax length 40
targetTypestring
targetStageIdstring (uuid)
targetIssueStatusIdstring (uuid)
fieldsarray of objectmax length 40
fields[].keystringYesrequired, not blank, max length 60
fields[].labelstringYesrequired, not blank, max length 120
fields[].typestringYesrequired, not blank
fields[].requiredboolean
fields[].optionsarray of stringmax length 50
fields[].mapsTostringmax length 80
fields[].placeholderstringmax length 200
fields[].helpTextstringmax length 300
isPublicboolean
activeboolean
successMessagestringmax length 500
regenerateTokenboolean
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/forms/{formId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","description":"string","template":"string","targetType":"string","targetStageId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","targetIssueStatusId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"}'
DELETE

Delete form

/api/v1/projects/{projectId}/forms/{formId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
formIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/forms/{formId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Submissions

/api/v1/projects/{projectId}/forms/{formId}/submissions

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
formIdpathstring (uuid)Yes
pagequeryinteger (default 1)No
pageSizequeryinteger (default 20)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/forms/{formId}/submissions" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Submit

/api/v1/projects/{projectId}/forms/{formId}/submit

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
formIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
valuesmap of any
submitterNamestringmax length 120
submitterEmailstringmax length 254
websitestring
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/forms/{formId}/submit" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"values":{},"submitterName":"string","submitterEmail":"string","website":"string"}'
GET

Categories

/api/v1/projects/{projectId}/forums/categories

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/forums/categories" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create category

/api/v1/projects/{projectId}/forums/categories

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 120
displayOrderinteger
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/forums/categories" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string"}'
PUT

Update category

/api/v1/projects/{projectId}/forums/categories/{categoryId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
categoryIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 120
displayOrderinteger
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/forums/categories/{categoryId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","displayOrder":1,"version":1}'
DELETE

Delete category

/api/v1/projects/{projectId}/forums/categories/{categoryId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
categoryIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/forums/categories/{categoryId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Posts

/api/v1/projects/{projectId}/forums/posts

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
categoryIdquerystring (uuid)No
qquerystringNo
pagequeryinteger (default 1)No
pageSizequeryinteger (default 20)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/forums/posts" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create post

/api/v1/projects/{projectId}/forums/posts

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
categoryIdstring (uuid)
titlestringYesrequired, not blank, max length 200
bodystring
versioninteger
mentionMemberIdsarray of string (uuid)max length 50
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/forums/posts" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"string"}'
GET

Post

/api/v1/projects/{projectId}/forums/posts/{postId}

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
postIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/forums/posts/{postId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update post

/api/v1/projects/{projectId}/forums/posts/{postId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
postIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
categoryIdstring (uuid)
titlestringYesrequired, not blank, max length 200
bodystring
versioninteger
mentionMemberIdsarray of string (uuid)max length 50
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/forums/posts/{postId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"categoryId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","title":"string","body":"string","version":1,"mentionMemberIds":["3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"]}'
DELETE

Delete post

/api/v1/projects/{projectId}/forums/posts/{postId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
postIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/forums/posts/{postId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Follow

/api/v1/projects/{projectId}/forums/posts/{postId}/follow

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
postIdpathstring (uuid)Yes
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/forums/posts/{postId}/follow" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
DELETE

Unfollow

/api/v1/projects/{projectId}/forums/posts/{postId}/follow

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
postIdpathstring (uuid)Yes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/forums/posts/{postId}/follow" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Lock

/api/v1/projects/{projectId}/forums/posts/{postId}/lock

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
postIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
valuebooleanYesrequired
versionintegerYesrequired
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/forums/posts/{postId}/lock" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"value":true,"version":1}'
PUT

Pin

/api/v1/projects/{projectId}/forums/posts/{postId}/pin

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
postIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
valuebooleanYesrequired
versionintegerYesrequired
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/forums/posts/{postId}/pin" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"value":true,"version":1}'
POST

Create reply

/api/v1/projects/{projectId}/forums/posts/{postId}/replies

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
postIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
bodystring
versioninteger
mentionMemberIdsarray of string (uuid)max length 50
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/forums/posts/{postId}/replies" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body":"string","version":1,"mentionMemberIds":["3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"]}'
PUT

Update reply

/api/v1/projects/{projectId}/forums/posts/{postId}/replies/{replyId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
postIdpathstring (uuid)Yes
replyIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
bodystring
versioninteger
mentionMemberIdsarray of string (uuid)max length 50
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/forums/posts/{postId}/replies/{replyId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body":"string","version":1,"mentionMemberIds":["3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"]}'
DELETE

Delete reply

/api/v1/projects/{projectId}/forums/posts/{postId}/replies/{replyId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
postIdpathstring (uuid)Yes
replyIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/forums/posts/{postId}/replies/{replyId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Gantt

/api/v1/projects/{projectId}/gantt

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/gantt" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update mood

/api/v1/projects/{projectId}/interior/mood/{itemId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
itemIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
imageUrlstringmax length 2000
notestringmax length 2000
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/interior/mood/{itemId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"imageUrl":"string","note":"string","version":1}'
DELETE

Delete mood

/api/v1/projects/{projectId}/interior/mood/{itemId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
itemIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/interior/mood/{itemId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Rooms

/api/v1/projects/{projectId}/interior/rooms

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/interior/rooms" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create room

/api/v1/projects/{projectId}/interior/rooms

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 120
roomTypestring
areaSqftnumber
floorstringmax length 40
notesstringmax length 2000
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/interior/rooms" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string"}'
PUT

Update room

/api/v1/projects/{projectId}/interior/rooms/{roomId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
roomIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 120
roomTypestring
areaSqftnumber
floorstringmax length 40
notesstringmax length 2000
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/interior/rooms/{roomId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","roomType":"string","areaSqft":100,"floor":"string","notes":"string","version":1}'
DELETE

Delete room

/api/v1/projects/{projectId}/interior/rooms/{roomId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
roomIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/interior/rooms/{roomId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Mood

/api/v1/projects/{projectId}/interior/rooms/{roomId}/mood

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
roomIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/interior/rooms/{roomId}/mood" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Add mood link

/api/v1/projects/{projectId}/interior/rooms/{roomId}/mood

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
roomIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
imageUrlstringmax length 2000
notestringmax length 2000
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/interior/rooms/{roomId}/mood" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"imageUrl":"string","note":"string","version":1}'
PUT

Reorder mood

/api/v1/projects/{projectId}/interior/rooms/{roomId}/mood/order

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
roomIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
idsarray of string (uuid)Yesrequired
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/interior/rooms/{roomId}/mood/order" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"ids":["3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"]}'
POST

Upload mood

/api/v1/projects/{projectId}/interior/rooms/{roomId}/mood/upload

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
roomIdpathstring (uuid)Yes
notequerystringNo

Request body: multipart/form-data with a file field.

Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/interior/rooms/{roomId}/mood/upload" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -F "file=@/path/to/file"
PUT

Reorder rooms

/api/v1/projects/{projectId}/interior/rooms/order

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
idsarray of string (uuid)Yesrequired
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/interior/rooms/order" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"ids":["3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"]}'
GET

Selections

/api/v1/projects/{projectId}/interior/selections

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/interior/selections" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create selection

/api/v1/projects/{projectId}/interior/selections

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
roomIdstring (uuid)
categorystring
itemNamestringYesrequired, not blank, max length 200
brandstringmax length 120
modelstringmax length 120
finishstringmax length 120
sizestringmax length 120
quantitynumber
unitPricenumber
supplierstringmax length 200
leadTimeDaysinteger
imageUrlstringmax length 2000
statusstring
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/interior/selections" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"itemName":"string"}'
PUT

Update selection

/api/v1/projects/{projectId}/interior/selections/{selectionId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
selectionIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
roomIdstring (uuid)
categorystring
itemNamestringYesrequired, not blank, max length 200
brandstringmax length 120
modelstringmax length 120
finishstringmax length 120
sizestringmax length 120
quantitynumber
unitPricenumber
supplierstringmax length 200
leadTimeDaysinteger
imageUrlstringmax length 2000
statusstring
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/interior/selections/{selectionId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"roomId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","category":"string","itemName":"string","brand":"string","model":"string","finish":"string"}'
DELETE

Delete selection

/api/v1/projects/{projectId}/interior/selections/{selectionId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
selectionIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/interior/selections/{selectionId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PATCH

Selection status

/api/v1/projects/{projectId}/interior/selections/{selectionId}/status

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
selectionIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
statusstringYesrequired, not blank
versionintegerYesrequired
Example request
curl -X PATCH "https://api.scalar360.com/api/v1/projects/{projectId}/interior/selections/{selectionId}/status" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"status":"string","version":1}'
POST

Send for approval

/api/v1/projects/{projectId}/interior/selections/send-for-approval

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
selectionIdsarray of string (uuid)Yesrequired
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/interior/selections/send-for-approval" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"selectionIds":["3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"]}'
GET

Statuses

/api/v1/projects/{projectId}/issue-statuses

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/issue-statuses" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update statuses

/api/v1/projects/{projectId}/issue-statuses

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
statusesarray of objectYesrequired, length 2-30
statuses[].idstring (uuid)
statuses[].labelstringYesrequired, not blank, max length 60
statuses[].colorstringmax length 20
statuses[].semanticTypestring
statuses[].displayOrderinteger
statuses[].versioninteger
replacementsmap of string (uuid)
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/issue-statuses" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"statuses":[{"id":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","label":"string","color":"string","semanticType":"string","displayOrder":1,"version":1}],"replacements":{}}'
GET

List

/api/v1/projects/{projectId}/issues

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
qquerystring (default )No
statusIdquerystring (uuid)No
severityquerystringNo
classificationquerystringNo
assigneeIdquerystringNo
reporterquerystringNo
milestoneIdquerystring (uuid)No
dueStatequerystringNo
statequerystringNo
flagquerystringNo
deletedqueryboolean (default false)No
sortByquerystring (default updatedAt)No
sortDirquerystring (default desc)No
pagequeryinteger (default 1)No
pageSizequeryinteger (default 20)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/issues" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create

/api/v1/projects/{projectId}/issues

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
titlestringYesrequired, not blank, max length 240
descriptionstringmax length 20000
statusIdstring (uuid)
severitystring
classificationstring
modulestringmax length 120
reproduciblestring
flagstring
milestoneIdstring (uuid)
taskIdstring (uuid)
assigneeIdstring (uuid)
dueDatestring (date)
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/issues" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"string"}'
GET

Get

/api/v1/projects/{projectId}/issues/{issueId}

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
issueIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/issues/{issueId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update

/api/v1/projects/{projectId}/issues/{issueId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
issueIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
titlestringYesrequired, not blank, max length 240
descriptionstringmax length 20000
statusIdstring (uuid)
severitystring
classificationstring
modulestringmax length 120
reproduciblestring
flagstring
milestoneIdstring (uuid)
taskIdstring (uuid)
assigneeIdstring (uuid)
dueDatestring (date)
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/issues/{issueId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"string","description":"string","statusId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","severity":"string","classification":"string","module":"string"}'
DELETE

Delete

/api/v1/projects/{projectId}/issues/{issueId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
issueIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/issues/{issueId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Activity

/api/v1/projects/{projectId}/issues/{issueId}/activity

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
issueIdpathstring (uuid)Yes
pagequeryinteger (default 1)No
pageSizequeryinteger (default 30)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/issues/{issueId}/activity" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

List for issue

/api/v1/projects/{projectId}/issues/{issueId}/attachments

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
issueIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/issues/{issueId}/attachments" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Upload to issue

/api/v1/projects/{projectId}/issues/{issueId}/attachments

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
issueIdpathstring (uuid)Yes

Request body: multipart/form-data with a file field.

Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/issues/{issueId}/attachments" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -F "file=@/path/to/file"
DELETE

Delete from issue

/api/v1/projects/{projectId}/issues/{issueId}/attachments/{attachmentId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
issueIdpathstring (uuid)Yes
attachmentIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/issues/{issueId}/attachments/{attachmentId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Download from issue

/api/v1/projects/{projectId}/issues/{issueId}/attachments/{attachmentId}/download

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
issueIdpathstring (uuid)Yes
attachmentIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/issues/{issueId}/attachments/{attachmentId}/download" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Comments

/api/v1/projects/{projectId}/issues/{issueId}/comments

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
issueIdpathstring (uuid)Yes
deletedqueryboolean (default false)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/issues/{issueId}/comments" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create comment

/api/v1/projects/{projectId}/issues/{issueId}/comments

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
issueIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
bodystringYesrequired, not blank, max length 10000
mentionMemberIdsarray of string (uuid)max length 50
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/issues/{issueId}/comments" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body":"string"}'
PUT

Update comment

/api/v1/projects/{projectId}/issues/{issueId}/comments/{commentId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
issueIdpathstring (uuid)Yes
commentIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
bodystringYesrequired, not blank, max length 10000
mentionMemberIdsarray of string (uuid)max length 50
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/issues/{issueId}/comments/{commentId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body":"string","mentionMemberIds":["3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"],"version":1}'
DELETE

Delete comment

/api/v1/projects/{projectId}/issues/{issueId}/comments/{commentId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
issueIdpathstring (uuid)Yes
commentIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/issues/{issueId}/comments/{commentId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Restore comment

/api/v1/projects/{projectId}/issues/{issueId}/comments/{commentId}/restore

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
issueIdpathstring (uuid)Yes
commentIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
versionintegerYesrequired
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/issues/{issueId}/comments/{commentId}/restore" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"version":1}'
POST

Convert to task

/api/v1/projects/{projectId}/issues/{issueId}/convert-to-task

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
issueIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
stageIdstring (uuid)
taskListIdstring (uuid)
prioritystring
closeIssueboolean
versionintegerYesrequired
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/issues/{issueId}/convert-to-task" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"version":1}'
GET

Followers

/api/v1/projects/{projectId}/issues/{issueId}/followers

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
issueIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/issues/{issueId}/followers" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Follow

/api/v1/projects/{projectId}/issues/{issueId}/followers/me

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
issueIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
watchingbooleanYesrequired
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/issues/{issueId}/followers/me" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"watching":true,"version":1}'
POST

Restore

/api/v1/projects/{projectId}/issues/{issueId}/restore

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
issueIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
versionintegerYesrequired
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/issues/{issueId}/restore" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"version":1}'
PATCH

Change status

/api/v1/projects/{projectId}/issues/{issueId}/status

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
issueIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
statusIdstring (uuid)
versionintegerYesrequired
Example request
curl -X PATCH "https://api.scalar360.com/api/v1/projects/{projectId}/issues/{issueId}/status" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"statusId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","version":1}'
GET

Modules

/api/v1/projects/{projectId}/issues/modules

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/issues/modules" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Summary

/api/v1/projects/{projectId}/issues/summary

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/issues/summary" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Run macro bulk

/api/v1/projects/{projectId}/macros/{macroId}/run

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
macroIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
taskIdsarray of string (uuid)Yesrequired, length 1-200
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/macros/{macroId}/run" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"taskIds":["3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"]}'
GET

Members

/api/v1/projects/{projectId}/members

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/members" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Add members

/api/v1/projects/{projectId}/members

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
memberIdsarray of string (uuid)Yesrequired, not empty, max length 100
rolestring
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/members" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"memberIds":["3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"]}'
PUT

Update member

/api/v1/projects/{projectId}/members/{memberId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
memberIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
rolestringYesrequired, not blank
versionintegerYesrequired
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/members/{memberId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"role":"string","version":1}'
DELETE

Remove member

/api/v1/projects/{projectId}/members/{memberId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
memberIdpathstring (uuid)Yes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/members/{memberId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Milestones

/api/v1/projects/{projectId}/milestones

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/milestones" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create milestone

/api/v1/projects/{projectId}/milestones

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 160
descriptionstringmax length 10000
ownerMemberIdstring (uuid)
startDatestring (date)
endDatestring (date)
statusstring
flagstring
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/milestones" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string"}'
GET

Milestone

/api/v1/projects/{projectId}/milestones/{milestoneId}

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
milestoneIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/milestones/{milestoneId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update milestone

/api/v1/projects/{projectId}/milestones/{milestoneId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
milestoneIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 160
descriptionstringmax length 10000
ownerMemberIdstring (uuid)
startDatestring (date)
endDatestring (date)
statusstring
flagstring
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/milestones/{milestoneId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","description":"string","ownerMemberId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","startDate":"2026-10-12","endDate":"2026-10-12","status":"string"}'
DELETE

Delete milestone

/api/v1/projects/{projectId}/milestones/{milestoneId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
milestoneIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/milestones/{milestoneId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Complete milestone

/api/v1/projects/{projectId}/milestones/{milestoneId}/complete

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
milestoneIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
versionintegerYesrequired
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/milestones/{milestoneId}/complete" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"version":1}'
POST

Reopen milestone

/api/v1/projects/{projectId}/milestones/{milestoneId}/reopen

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
milestoneIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
versionintegerYesrequired
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/milestones/{milestoneId}/reopen" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"version":1}'
POST

Restore milestone

/api/v1/projects/{projectId}/milestones/{milestoneId}/restore

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
milestoneIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
versionintegerYesrequired
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/milestones/{milestoneId}/restore" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"version":1}'
GET

Tree

/api/v1/projects/{projectId}/pages

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/pages" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create

/api/v1/projects/{projectId}/pages

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
titlestringYesrequired, not blank, max length 200
contentstring
parentIdstring (uuid)
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/pages" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"string"}'
GET

Get

/api/v1/projects/{projectId}/pages/{pageId}

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
pageIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/pages/{pageId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update

/api/v1/projects/{projectId}/pages/{pageId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
pageIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
titlestringYesrequired, not blank, max length 200
contentstring
parentIdstring (uuid)
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/pages/{pageId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"string","content":"string","parentId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","version":1}'
DELETE

Delete

/api/v1/projects/{projectId}/pages/{pageId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
pageIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/pages/{pageId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Move

/api/v1/projects/{projectId}/pages/{pageId}/move

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
pageIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
parentIdstring (uuid)
displayOrderinteger
versionintegerYesrequired
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/pages/{pageId}/move" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"parentId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","displayOrder":1,"version":1}'
GET

Versions

/api/v1/projects/{projectId}/pages/{pageId}/versions

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
pageIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/pages/{pageId}/versions" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Restore

/api/v1/projects/{projectId}/pages/{pageId}/versions/{versionId}/restore

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
pageIdpathstring (uuid)Yes
versionIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/pages/{pageId}/versions/{versionId}/restore" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Reopen

/api/v1/projects/{projectId}/reopen

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
versionintegerYesrequired
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/reopen" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"version":1}'
GET

Burn

/api/v1/projects/{projectId}/reports/burn

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
fromquerystring (date)No
toquerystring (date)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/reports/burn" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Restore

/api/v1/projects/{projectId}/restore

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
versionintegerYesrequired
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/restore" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"version":1}'
POST

Save as template

/api/v1/projects/{projectId}/save-as-template

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 160
descriptionstringmax length 2000
sharedboolean
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/save-as-template" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string"}'
PUT

Sections

/api/v1/projects/{projectId}/sections

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
versionintegerYesrequired
sectionsarray of stringmax length 20
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/sections" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"version":1,"sections":["string"]}'
GET

Drawings

/api/v1/projects/{projectId}/site/drawings

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
includeSupersededqueryboolean (default false)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/site/drawings" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create drawing

/api/v1/projects/{projectId}/site/drawings

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
numberstringYesrequired, not blank, max length 60
titlestringYesrequired, not blank, max length 200
disciplinestring
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/site/drawings" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"number":"string","title":"string"}'
PUT

Update drawing

/api/v1/projects/{projectId}/site/drawings/{drawingId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
drawingIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
numberstringYesrequired, not blank, max length 60
titlestringYesrequired, not blank, max length 200
disciplinestring
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/site/drawings/{drawingId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"number":"string","title":"string","discipline":"string","version":1}'
DELETE

Delete drawing

/api/v1/projects/{projectId}/site/drawings/{drawingId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
drawingIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/site/drawings/{drawingId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Issue revision

/api/v1/projects/{projectId}/site/drawings/{drawingId}/revisions

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
drawingIdpathstring (uuid)Yes
revisionquerystringNo
notesquerystringNo
statusquerystringNo

Request body: multipart/form-data with a file field.

Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/site/drawings/{drawingId}/revisions" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -F "file=@/path/to/file"
PATCH

Drawing status

/api/v1/projects/{projectId}/site/drawings/{drawingId}/status

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
drawingIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
statusstringYesrequired, not blank
versionintegerYesrequired
Example request
curl -X PATCH "https://api.scalar360.com/api/v1/projects/{projectId}/site/drawings/{drawingId}/status" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"status":"string","version":1}'
POST

Upload

/api/v1/projects/{projectId}/site/files

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
ownerTypequerystring (default PROJECT)No
ownerIdquerystring (uuid)No
captionquerystringNo
areaquerystringNo
tagsquerystringNo
takenAtquerystring (date-time)No
latitudequerynumberNo
longitudequerynumberNo
clientVisiblequerybooleanNo

Request body: multipart/form-data with a file field.

Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/site/files" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -F "file=@/path/to/file"
PUT

Update file

/api/v1/projects/{projectId}/site/files/{fileId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
fileIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
captionstringmax length 500
areastringmax length 120
tagsarray of string
takenAtstring (date-time)
clientVisibleboolean
versionintegerYesrequired
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/site/files/{fileId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"caption":"string","area":"string","tags":["string"],"takenAt":"2026-10-12T09:30:00Z","clientVisible":true,"version":1}'
DELETE

Delete file

/api/v1/projects/{projectId}/site/files/{fileId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
fileIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/site/files/{fileId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Download

/api/v1/projects/{projectId}/site/files/{fileId}/download

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
fileIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/site/files/{fileId}/download" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Inspections

/api/v1/projects/{projectId}/site/inspections

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/site/inspections" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create inspection

/api/v1/projects/{projectId}/site/inspections

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
templateIdstring (uuid)
titlestringmax length 200
categorystring
areastringmax length 120
roomIdstring (uuid)
inspectionDatestring (date)
inspectorMemberIdstring (uuid)
itemsarray of object
items[].keystring
items[].labelstring
items[].expectedstring
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/site/inspections" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"templateId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","title":"string","category":"string","area":"string","roomId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","inspectionDate":"2026-10-12"}'
PUT

Update inspection

/api/v1/projects/{projectId}/site/inspections/{inspectionId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
inspectionIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
titlestringmax length 200
areastringmax length 120
roomIdstring (uuid)
inspectionDatestring (date)
inspectorMemberIdstring (uuid)
itemsarray of object
items[].keystring
items[].labelstring
items[].expectedstring
items[].resultstring
items[].notestring
items[].photoIdstring (uuid)
items[].snagIdstring (uuid)
items[].snagReferencestring
versionintegerYesrequired
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/site/inspections/{inspectionId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"string","area":"string","roomId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","inspectionDate":"2026-10-12","inspectorMemberId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","items":[{"key":"string","label":"string","expected":"string","result":"string","note":"string","photoId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"}]}'
DELETE

Delete inspection

/api/v1/projects/{projectId}/site/inspections/{inspectionId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
inspectionIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/site/inspections/{inspectionId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Complete inspection

/api/v1/projects/{projectId}/site/inspections/{inspectionId}/complete

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
inspectionIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
versionintegerYesrequired
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/site/inspections/{inspectionId}/complete" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"version":1}'
POST

Sign off

/api/v1/projects/{projectId}/site/inspections/{inspectionId}/sign-off

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
inspectionIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
notestringmax length 2000
versionintegerYesrequired
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/site/inspections/{inspectionId}/sign-off" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"version":1}'
POST

Snags from inspection

/api/v1/projects/{projectId}/site/inspections/{inspectionId}/snags

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
inspectionIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
itemKeysarray of string
tradestring
prioritystring
assigneeMemberIdstring (uuid)
assigneeNamestringmax length 120
dueDatestring (date)
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/site/inspections/{inspectionId}/snags" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"itemKeys":["string"],"trade":"string","priority":"string","assigneeMemberId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","assigneeName":"string","dueDate":"2026-10-12"}'
GET

Previous labour

/api/v1/projects/{projectId}/site/labour/previous

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
beforequerystring (date)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/site/labour/previous" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Labour summary

/api/v1/projects/{projectId}/site/labour/summary

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
fromquerystring (date)No
toquerystring (date)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/site/labour/summary" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Logs

/api/v1/projects/{projectId}/site/logs

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
fromquerystring (date)No
toquerystring (date)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/site/logs" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create log

/api/v1/projects/{projectId}/site/logs

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
logDatestring (date)Yes
weatherstring
temperatureCnumber
locationstringmax length 200
workDonestring
labourarray of object
labour[].tradestring
labour[].sourcestring
labour[].partystring
labour[].countinteger
labour[].hoursnumber
equipmentarray of object
equipment[].namestring
equipment[].hoursnumber
equipment[].statusstring
materialsReceivedstringmax length 4000
materialRequestIdstring (uuid)
visitorsstringmax length 2000
safetyStatusstring
safetyNotestringmax length 4000
hindrancesstringmax length 4000
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/site/logs" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"logDate":"2026-10-12"}'
GET

Log

/api/v1/projects/{projectId}/site/logs/{logId}

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
logIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/site/logs/{logId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update log

/api/v1/projects/{projectId}/site/logs/{logId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
logIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
logDatestring (date)
weatherstring
temperatureCnumber
locationstringmax length 200
workDonestring
labourarray of object
labour[].tradestring
labour[].sourcestring
labour[].partystring
labour[].countinteger
labour[].hoursnumber
equipmentarray of object
equipment[].namestring
equipment[].hoursnumber
equipment[].statusstring
materialsReceivedstringmax length 4000
materialRequestIdstring (uuid)
visitorsstringmax length 2000
safetyStatusstring
safetyNotestringmax length 4000
hindrancesstringmax length 4000
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/site/logs/{logId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"logDate":"2026-10-12","weather":"string","temperatureC":100,"location":"string","workDone":"string","labour":[{"trade":"string","source":"string","party":"string","count":1,"hours":100}]}'
DELETE

Delete log

/api/v1/projects/{projectId}/site/logs/{logId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
logIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/site/logs/{logId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Reopen log

/api/v1/projects/{projectId}/site/logs/{logId}/reopen

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
logIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
versionintegerYesrequired
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/site/logs/{logId}/reopen" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"version":1}'
POST

Submit log

/api/v1/projects/{projectId}/site/logs/{logId}/submit

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
logIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
versionintegerYesrequired
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/site/logs/{logId}/submit" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"version":1}'
GET

Log by date

/api/v1/projects/{projectId}/site/logs/date/{date}

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
datepathstring (date)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/site/logs/date/{date}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Photos

/api/v1/projects/{projectId}/site/photos

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
areaquerystringNo
fromquerystring (date)No
toquerystring (date)No
tagquerystringNo
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/site/photos" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Rfis

/api/v1/projects/{projectId}/site/rfis

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/site/rfis" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create rfi

/api/v1/projects/{projectId}/site/rfis

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
subjectstringYesrequired, not blank, max length 200
questionstringmax length 20000
disciplinestring
drawingIdstring (uuid)
assigneeMemberIdstring (uuid)
externalNamestringmax length 120
externalEmailstringmax length 254
dueDatestring (date)
costImpactboolean
timeImpactboolean
changeOrderIdstring (uuid)
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/site/rfis" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"subject":"string"}'
PUT

Update rfi

/api/v1/projects/{projectId}/site/rfis/{rfiId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
rfiIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
subjectstringYesrequired, not blank, max length 200
questionstringmax length 20000
disciplinestring
drawingIdstring (uuid)
assigneeMemberIdstring (uuid)
externalNamestringmax length 120
externalEmailstringmax length 254
dueDatestring (date)
costImpactboolean
timeImpactboolean
changeOrderIdstring (uuid)
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/site/rfis/{rfiId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"subject":"string","question":"string","discipline":"string","drawingId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","assigneeMemberId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","externalName":"string"}'
DELETE

Delete rfi

/api/v1/projects/{projectId}/site/rfis/{rfiId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
rfiIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/site/rfis/{rfiId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Answer rfi

/api/v1/projects/{projectId}/site/rfis/{rfiId}/answer

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
rfiIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
answerstringYesrequired, not blank, max length 20000
versionintegerYesrequired
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/site/rfis/{rfiId}/answer" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"answer":"string","version":1}'
PATCH

Rfi status

/api/v1/projects/{projectId}/site/rfis/{rfiId}/status

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
rfiIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
statusstringYesrequired, not blank
versionintegerYesrequired
Example request
curl -X PATCH "https://api.scalar360.com/api/v1/projects/{projectId}/site/rfis/{rfiId}/status" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"status":"string","version":1}'
GET

Snags

/api/v1/projects/{projectId}/site/snags

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/site/snags" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create snag

/api/v1/projects/{projectId}/site/snags

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
areastringmax length 120
roomIdstring (uuid)
tradestringmax length 60
descriptionstringYesrequired, not blank, max length 4000
prioritystring
assigneeMemberIdstring (uuid)
assigneeNamestringmax length 120
dueDatestring (date)
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/site/snags" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"description":"string"}'
PUT

Update snag

/api/v1/projects/{projectId}/site/snags/{snagId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
snagIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
areastringmax length 120
roomIdstring (uuid)
tradestringmax length 60
descriptionstringYesrequired, not blank, max length 4000
prioritystring
assigneeMemberIdstring (uuid)
assigneeNamestringmax length 120
dueDatestring (date)
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/site/snags/{snagId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"area":"string","roomId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","trade":"string","description":"string","priority":"string","assigneeMemberId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"}'
DELETE

Delete snag

/api/v1/projects/{projectId}/site/snags/{snagId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
snagIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/site/snags/{snagId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PATCH

Snag status

/api/v1/projects/{projectId}/site/snags/{snagId}/status

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
snagIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
statusstringYesrequired, not blank
versionintegerYesrequired
Example request
curl -X PATCH "https://api.scalar360.com/api/v1/projects/{projectId}/site/snags/{snagId}/status" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"status":"string","version":1}'
GET

Readiness

/api/v1/projects/{projectId}/site/snags/readiness

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/site/snags/readiness" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Submittals

/api/v1/projects/{projectId}/site/submittals

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/site/submittals" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create submittal

/api/v1/projects/{projectId}/site/submittals

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
itemstringYesrequired, not blank, max length 200
submittalTypestring
specRefstringmax length 120
supplierstringmax length 200
submittedDatestring (date)
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/site/submittals" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"item":"string"}'
PUT

Update submittal

/api/v1/projects/{projectId}/site/submittals/{submittalId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
submittalIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
itemstringYesrequired, not blank, max length 200
submittalTypestring
specRefstringmax length 120
supplierstringmax length 200
submittedDatestring (date)
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/site/submittals/{submittalId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"item":"string","submittalType":"string","specRef":"string","supplier":"string","submittedDate":"2026-10-12","version":1}'
DELETE

Delete submittal

/api/v1/projects/{projectId}/site/submittals/{submittalId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
submittalIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/site/submittals/{submittalId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Resubmit

/api/v1/projects/{projectId}/site/submittals/{submittalId}/resubmit

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
submittalIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
versionintegerYesrequired
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/site/submittals/{submittalId}/resubmit" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"version":1}'
POST

Review submittal

/api/v1/projects/{projectId}/site/submittals/{submittalId}/review

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
submittalIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
statusstringYesrequired, not blank
reviewerNotesstringmax length 4000
versionintegerYesrequired
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/site/submittals/{submittalId}/review" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"status":"string","version":1}'
GET

Sprints

/api/v1/projects/{projectId}/sprints

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/sprints" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create

/api/v1/projects/{projectId}/sprints

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 120
goalstringmax length 2000
startDatestring (date)
endDatestring (date)
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/sprints" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string"}'
GET

Sprint

/api/v1/projects/{projectId}/sprints/{sprintId}

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
sprintIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/sprints/{sprintId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update

/api/v1/projects/{projectId}/sprints/{sprintId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
sprintIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 120
goalstringmax length 2000
startDatestring (date)
endDatestring (date)
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/sprints/{sprintId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","goal":"string","startDate":"2026-10-12","endDate":"2026-10-12","version":1}'
DELETE

Delete

/api/v1/projects/{projectId}/sprints/{sprintId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
sprintIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/sprints/{sprintId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Burndown

/api/v1/projects/{projectId}/sprints/{sprintId}/burndown

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
sprintIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/sprints/{sprintId}/burndown" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Complete

/api/v1/projects/{projectId}/sprints/{sprintId}/complete

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
sprintIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
versionintegerYesrequired
carryOverstring
targetSprintIdstring (uuid)
newSprintNamestringmax length 120
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/sprints/{sprintId}/complete" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"version":1}'
GET

Report

/api/v1/projects/{projectId}/sprints/{sprintId}/report

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
sprintIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/sprints/{sprintId}/report" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Start

/api/v1/projects/{projectId}/sprints/{sprintId}/start

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
sprintIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringmax length 120
goalstringmax length 2000
startDatestring (date)Yes
endDatestring (date)Yes
versionintegerYesrequired
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/sprints/{sprintId}/start" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"startDate":"2026-10-12","endDate":"2026-10-12","version":1}'
GET

Active sprint

/api/v1/projects/{projectId}/sprints/active

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/sprints/active" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Move items

/api/v1/projects/{projectId}/sprints/items

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
taskIdsarray of string (uuid)Yesrequired, not empty, max length 500
sprintIdstring (uuid)
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/sprints/items" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"taskIds":["3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"]}'
GET

Velocity

/api/v1/projects/{projectId}/sprints/velocity

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
limitqueryinteger (default 6)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/sprints/velocity" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Post status

/api/v1/projects/{projectId}/status-updates

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
bodystringYesrequired, not blank, max length 20000
statusColorstring
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/status-updates" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body":"string"}'
DELETE

Delete status

/api/v1/projects/{projectId}/status-updates/{updateId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
updateIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/status-updates/{updateId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Summary

/api/v1/projects/{projectId}/summary

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/summary" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Task lists

/api/v1/projects/{projectId}/task-lists

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/task-lists" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create task list

/api/v1/projects/{projectId}/task-lists

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 120
versioninteger
milestoneIdstring (uuid)
clearMilestoneboolean
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/task-lists" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string"}'
PUT

Update task list

/api/v1/projects/{projectId}/task-lists/{taskListId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskListIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 120
versioninteger
milestoneIdstring (uuid)
clearMilestoneboolean
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/task-lists/{taskListId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","version":1,"milestoneId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","clearMilestone":true}'
DELETE

Delete task list

/api/v1/projects/{projectId}/task-lists/{taskListId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskListIdpathstring (uuid)Yes
versionqueryintegerYes
moveToTaskListIdquerystring (uuid)No
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/task-lists/{taskListId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Reorder task lists

/api/v1/projects/{projectId}/task-lists/reorder

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
taskListIdsarray of string (uuid)Yesrequired, not empty, max length 200
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/task-lists/reorder" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"taskListIds":["3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"]}'
GET

Tasks

/api/v1/projects/{projectId}/tasks

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
qquerystring (default )No
stageIdquerystring (uuid)No
assigneeIdquerystring (uuid)No
priorityquerystringNo
dueStatequerystringNo
startDatequerystring (date)No
endDatequerystring (date)No
sortByquerystring (default position)No
sortDirquerystring (default asc)No
deletedqueryboolean (default false)No
pagequeryinteger (default 1)No
pageSizequeryinteger (default 50)No
taskListIdquerystring (uuid)No
tagIdquerystring (uuid)No
parentTaskIdquerystring (uuid)No
includeSubtasksqueryboolean (default false)No
resolutionquerystringNo
teamquerystringNo
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/tasks" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create task

/api/v1/projects/{projectId}/tasks

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
titlestringYesrequired, not blank, max length 240
descriptionstringmax length 20000
prioritystring
startDatestring (date)
dueDatestring (date)
stageIdstring (uuid)
assigneeIdsarray of string (uuid)max length 50
versioninteger
taskListIdstring (uuid)
parentTaskIdstring (uuid)
estimatedMinutesinteger>= 0, <= 1000000
billingTypestring
tagIdsarray of string (uuid)max length 30
itemTypestring
epicIdstring (uuid)
clearEpicboolean
storyPointsnumber>= 0, <= 999
clearStoryPointsboolean
sprintIdstring (uuid)
clearSprintboolean
resolutionstring
teamIdstring (uuid)
clearTeamboolean
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/tasks" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"string"}'
GET

Get task

/api/v1/projects/{projectId}/tasks/{taskId}

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update task

/api/v1/projects/{projectId}/tasks/{taskId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
titlestringYesrequired, not blank, max length 240
descriptionstringmax length 20000
prioritystring
startDatestring (date)
dueDatestring (date)
stageIdstring (uuid)
assigneeIdsarray of string (uuid)max length 50
versioninteger
taskListIdstring (uuid)
parentTaskIdstring (uuid)
estimatedMinutesinteger>= 0, <= 1000000
billingTypestring
tagIdsarray of string (uuid)max length 30
itemTypestring
epicIdstring (uuid)
clearEpicboolean
storyPointsnumber>= 0, <= 999
clearStoryPointsboolean
sprintIdstring (uuid)
clearSprintboolean
resolutionstring
teamIdstring (uuid)
clearTeamboolean
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"string","description":"string","priority":"string","startDate":"2026-10-12","dueDate":"2026-10-12","stageId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"}'
DELETE

Delete task

/api/v1/projects/{projectId}/tasks/{taskId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Assign me

/api/v1/projects/{projectId}/tasks/{taskId}/assign-me

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/assign-me" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

List

/api/v1/projects/{projectId}/tasks/{taskId}/attachments

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/attachments" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Upload

/api/v1/projects/{projectId}/tasks/{taskId}/attachments

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes

Request body: multipart/form-data with a file field.

Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/attachments" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -F "file=@/path/to/file"
DELETE

Delete

/api/v1/projects/{projectId}/tasks/{taskId}/attachments/{attachmentId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
attachmentIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/attachments/{attachmentId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Download

/api/v1/projects/{projectId}/tasks/{taskId}/attachments/{attachmentId}/download

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
attachmentIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/attachments/{attachmentId}/download" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Checklist

/api/v1/projects/{projectId}/tasks/{taskId}/checklist

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/checklist" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create checklist item

/api/v1/projects/{projectId}/tasks/{taskId}/checklist

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
titlestringYesrequired, not blank, max length 500
completedboolean
displayOrderinteger
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/checklist" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"string"}'
PUT

Update checklist item

/api/v1/projects/{projectId}/tasks/{taskId}/checklist/{itemId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
itemIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
titlestringYesrequired, not blank, max length 500
completedboolean
displayOrderinteger
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/checklist/{itemId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"string","completed":true,"displayOrder":1,"version":1}'
DELETE

Delete checklist item

/api/v1/projects/{projectId}/tasks/{taskId}/checklist/{itemId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
itemIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/checklist/{itemId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Clone task

/api/v1/projects/{projectId}/tasks/{taskId}/clone

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
includeSubtasksboolean
includeChecklistboolean
includeLinksboolean
titlestringmax length 240
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/clone" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"includeSubtasks":true,"includeChecklist":true,"includeLinks":true,"title":"string"}'
GET

Comments

/api/v1/projects/{projectId}/tasks/{taskId}/comments

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
deletedqueryboolean (default false)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/comments" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create comment

/api/v1/projects/{projectId}/tasks/{taskId}/comments

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
bodystringYesrequired, not blank, max length 10000
mentionMemberIdsarray of string (uuid)max length 50
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/comments" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body":"string"}'
PUT

Update comment

/api/v1/projects/{projectId}/tasks/{taskId}/comments/{commentId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
commentIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
bodystringYesrequired, not blank, max length 10000
mentionMemberIdsarray of string (uuid)max length 50
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/comments/{commentId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body":"string","mentionMemberIds":["3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"],"version":1}'
DELETE

Delete comment

/api/v1/projects/{projectId}/tasks/{taskId}/comments/{commentId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
commentIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/comments/{commentId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Restore comment

/api/v1/projects/{projectId}/tasks/{taskId}/comments/{commentId}/restore

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
commentIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
versionintegerYesrequired
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/comments/{commentId}/restore" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"version":1}'
PATCH

Completion

/api/v1/projects/{projectId}/tasks/{taskId}/completion

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
percentinteger>= 0, <= 100
versionintegerYesrequired
Example request
curl -X PATCH "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/completion" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"percent":1,"version":1}'
GET

Dependencies

/api/v1/projects/{projectId}/tasks/{taskId}/dependencies

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/dependencies" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Add dependency

/api/v1/projects/{projectId}/tasks/{taskId}/dependencies

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
predecessorTaskIdstring (uuid)
successorTaskIdstring (uuid)
typestring
lagDaysinteger>= -365, <= 365
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/dependencies" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"predecessorTaskId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","successorTaskId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","type":"string","lagDays":1}'
DELETE

Delete dependency

/api/v1/projects/{projectId}/tasks/{taskId}/dependencies/{dependencyId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
dependencyIdpathstring (uuid)Yes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/dependencies/{dependencyId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Link

/api/v1/projects/{projectId}/tasks/{taskId}/links

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
linkTypestringYesrequired, not blank
targetTaskIdstring (uuid)
targetIssueIdstring (uuid)
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/links" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"linkType":"string"}'
POST

Run macro

/api/v1/projects/{projectId}/tasks/{taskId}/macros/{macroId}/run

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
macroIdpathstring (uuid)Yes
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/macros/{macroId}/run" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Move to project

/api/v1/projects/{projectId}/tasks/{taskId}/move

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
targetProjectIdstring (uuid)Yes
stageIdstring (uuid)
taskListIdstring (uuid)
versionintegerYesrequired
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/move" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"targetProjectId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","version":1}'
PATCH

Move task

/api/v1/projects/{projectId}/tasks/{taskId}/move

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
stageIdstring (uuid)
positionintegerYesrequired
versionintegerYesrequired
resolutionstring
Example request
curl -X PATCH "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/move" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"stageId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","position":1,"version":1,"resolution":"string"}'
GET

Recurrence

/api/v1/projects/{projectId}/tasks/{taskId}/recurrence

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/recurrence" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Set recurrence

/api/v1/projects/{projectId}/tasks/{taskId}/recurrence

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
frequencystringYesrequired, not blank
intervalNinteger>= 1, <= 366
byWeekdaysarray of string
monthDayinteger>= 1, <= 31
modestring
endsstring
endCountinteger>= 1, <= 1000
endDatestring (date)
copySubtasksboolean
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/recurrence" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"frequency":"string","intervalN":1,"byWeekdays":["string"],"monthDay":1,"mode":"string","ends":"string"}'
DELETE

Delete recurrence

/api/v1/projects/{projectId}/tasks/{taskId}/recurrence

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
versionqueryintegerNo
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/recurrence" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Reminders

/api/v1/projects/{projectId}/tasks/{taskId}/reminders

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/reminders" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Add reminder

/api/v1/projects/{projectId}/tasks/{taskId}/reminders

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
remindTypestringYesrequired, not blank
offsetMinutesinteger>= 0, <= 86400
remindAtstring (date-time)
memberIdstring (uuid)
allAssigneesboolean
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/reminders" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"remindType":"string"}'
PUT

Update reminder

/api/v1/projects/{projectId}/tasks/{taskId}/reminders/{reminderId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
reminderIdpathstring (uuid)Yes
versionqueryintegerNo
Body fieldTypeRequiredNotes
remindTypestringYesrequired, not blank
offsetMinutesinteger>= 0, <= 86400
remindAtstring (date-time)
memberIdstring (uuid)
allAssigneesboolean
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/reminders/{reminderId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"remindType":"string","offsetMinutes":1,"remindAt":"2026-10-12T09:30:00Z","memberId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","allAssignees":true}'
DELETE

Delete reminder

/api/v1/projects/{projectId}/tasks/{taskId}/reminders/{reminderId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
reminderIdpathstring (uuid)Yes
versionqueryintegerNo
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/reminders/{reminderId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Restore task

/api/v1/projects/{projectId}/tasks/{taskId}/restore

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
versionintegerYesrequired
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/restore" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"version":1}'
PATCH

Schedule task

/api/v1/projects/{projectId}/tasks/{taskId}/schedule

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
startDatestring (date)
dueDatestring (date)
versionintegerYesrequired
cascadeboolean
Example request
curl -X PATCH "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/schedule" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"startDate":"2026-10-12","dueDate":"2026-10-12","version":1,"cascade":true}'
GET

Status timeline

/api/v1/projects/{projectId}/tasks/{taskId}/status-timeline

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/status-timeline" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Subtasks

/api/v1/projects/{projectId}/tasks/{taskId}/subtasks

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/subtasks" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Transition

/api/v1/projects/{projectId}/tasks/{taskId}/transition

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
stageIdstring (uuid)Yes
positioninteger
versionintegerYesrequired
commentstringmax length 20000
startDatestring (date)
dueDatestring (date)
assigneeIdsarray of string (uuid)max length 50
estimatedMinutesinteger>= 0, <= 1000000
descriptionstringmax length 20000
tagIdsarray of string (uuid)max length 30
customFieldsmap of any
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/transition" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"stageId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","version":1}'
GET

Task transitions

/api/v1/projects/{projectId}/tasks/{taskId}/transitions

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/transitions" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Watchers

/api/v1/projects/{projectId}/tasks/{taskId}/watchers

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/watchers" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update watching

/api/v1/projects/{projectId}/tasks/{taskId}/watchers/me

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
watchingbooleanYesrequired
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/{taskId}/watchers/me" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"watching":true,"version":1}'
GET

Export

/api/v1/projects/{projectId}/tasks/export

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
qquerystring (default )No
stageIdquerystring (uuid)No
assigneeIdquerystring (uuid)No
priorityquerystringNo
dueStatequerystringNo
startDatequerystring (date)No
endDatequerystring (date)No
taskListIdquerystring (uuid)No
tagIdquerystring (uuid)No
includeSubtasksqueryboolean (default true)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/export" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Import csv

/api/v1/projects/{projectId}/tasks/import

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
csvstringYesrequired, not blank, max length 4000000
mappingmap of string
dryRunboolean
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/tasks/import" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"csv":"string"}'
PUT

Terminology

/api/v1/projects/{projectId}/terminology

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
versionintegerYesrequired
terminologymap of stringmax length 20
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/terminology" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"version":1,"terminology":{}}'
GET

List time

/api/v1/projects/{projectId}/time

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
taskIdquerystring (uuid)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/time" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Log time

/api/v1/projects/{projectId}/time

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
taskIdstring (uuid)
entryDatestring (date)
hoursnumber
billableboolean
ratenumber
descriptionstring
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/time" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"taskId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","entryDate":"2026-10-12","hours":100,"billable":true,"rate":100,"description":"string"}'
PUT

Update time

/api/v1/projects/{projectId}/time/{entryId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
entryIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
taskIdstring (uuid)
entryDatestring (date)
hoursnumber
billableboolean
ratenumber
descriptionstring
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/time/{entryId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"taskId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","entryDate":"2026-10-12","hours":100,"billable":true,"rate":100,"description":"string"}'
DELETE

Delete time

/api/v1/projects/{projectId}/time/{entryId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
entryIdpathstring (uuid)Yes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/{projectId}/time/{entryId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Blueprint

/api/v1/projects/{projectId}/transitions

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/transitions" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update blueprint

/api/v1/projects/{projectId}/transitions

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
transitionsarray of objectYesrequired, max length 400
transitions[].idstring (uuid)
transitions[].fromStageIdstring (uuid)
transitions[].toStageIdstring (uuid)
transitions[].allowedRolestring
transitions[].allowedMemberIdsarray of string (uuid)max length 100
transitions[].requiredFieldsarray of stringmax length 30
transitions[].enabledboolean
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/transitions" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"transitions":[{"id":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","fromStageId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","toStageId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","allowedRole":"string","allowedMemberIds":[null],"requiredFields":[null]}]}'
GET

Workflow

/api/v1/projects/{projectId}/workflow

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/{projectId}/workflow" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update workflow

/api/v1/projects/{projectId}/workflow

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
versionintegerYesrequired
stagesarray of objectYesrequired, not empty, max length 20
stages[].idstring (uuid)
stages[].labelstringYesrequired, not blank, max length 80
stages[].colorstringmax length 32
stages[].semanticTypestringYesrequired, not blank
stages[].visibleboolean
stages[].displayOrderinteger
stages[].versioninteger
replacementsmap of string (uuid)
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/{projectId}/workflow" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"version":1,"stages":[{"id":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","label":"string","color":"string","semanticType":"string","visible":true,"displayOrder":1}],"replacements":{}}'
POST

Apply preset

/api/v1/projects/{projectId}/workflow/preset

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
presetstringYesrequired, not blank
versionintegerYesrequired
mappingmap of string
seedBlueprintboolean
createMilestonesboolean
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/workflow/preset" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"preset":"string","version":1}'
POST

Preview preset

/api/v1/projects/{projectId}/workflow/preset/preview

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
projectIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
presetstring
mappingmap of string
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/{projectId}/workflow/preset/preview" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"preset":"string","mapping":{}}'
GET

Projects access

/api/v1/projects/access

Scope: Scalar360.projects.READ

Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/access" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Executions

/api/v1/projects/automation/executions

Scope: Scalar360.projects.READ

ParameterInTypeRequired
ruleIdquerystring (uuid)No
macroIdquerystring (uuid)No
statusquerystringNo
pagequeryinteger (default 1)No
pageSizequeryinteger (default 25)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/automation/executions" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Macros

/api/v1/projects/automation/macros

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdquerystring (uuid)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/automation/macros" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create macro

/api/v1/projects/automation/macros

Scope: Scalar360.projects.CREATE

Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 200
descriptionstringmax length 2000
projectIdstring (uuid)
actionsarray of map of anyYesrequired, length 1-20
activeboolean
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/automation/macros" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","actions":[{}]}'
PUT

Update macro

/api/v1/projects/automation/macros/{macroId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
macroIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 200
descriptionstringmax length 2000
projectIdstring (uuid)
actionsarray of map of anyYesrequired, length 1-20
activeboolean
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/automation/macros/{macroId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","description":"string","projectId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","actions":[{}],"active":true,"version":1}'
DELETE

Delete macro

/api/v1/projects/automation/macros/{macroId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
macroIdpathstring (uuid)Yes
versionqueryintegerNo
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/automation/macros/{macroId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Rules

/api/v1/projects/automation/rules

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdquerystring (uuid)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/automation/rules" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create rule

/api/v1/projects/automation/rules

Scope: Scalar360.projects.CREATE

Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 200
descriptionstringmax length 2000
projectIdstring (uuid)
entityTypestring
triggerstringYesrequired, not blank
triggerFieldstring
triggerOffsetMinutesinteger>= 0, <= 525600
conditionsarray of map of anymax length 20
conditionMatchstring
actionsarray of map of anymax length 20
activeboolean
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/automation/rules" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","trigger":"string"}'
GET

Rule

/api/v1/projects/automation/rules/{ruleId}

Scope: Scalar360.projects.READ

ParameterInTypeRequired
ruleIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/automation/rules/{ruleId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update rule

/api/v1/projects/automation/rules/{ruleId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
ruleIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 200
descriptionstringmax length 2000
projectIdstring (uuid)
entityTypestring
triggerstringYesrequired, not blank
triggerFieldstring
triggerOffsetMinutesinteger>= 0, <= 525600
conditionsarray of map of anymax length 20
conditionMatchstring
actionsarray of map of anymax length 20
activeboolean
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/automation/rules/{ruleId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","description":"string","projectId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","entityType":"string","trigger":"string","triggerField":"string"}'
DELETE

Delete rule

/api/v1/projects/automation/rules/{ruleId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
ruleIdpathstring (uuid)Yes
versionqueryintegerNo
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/automation/rules/{ruleId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PATCH

Toggle rule

/api/v1/projects/automation/rules/{ruleId}/active

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
ruleIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
activebooleanYesrequired
versionintegerYesrequired
Example request
curl -X PATCH "https://api.scalar360.com/api/v1/projects/automation/rules/{ruleId}/active" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"active":true,"version":1}'
POST

Test rule

/api/v1/projects/automation/rules/test

Scope: Scalar360.projects.CREATE

Body fieldTypeRequiredNotes
ruleobjectYesrequired
rule.namestringYesrequired, not blank, max length 200
rule.descriptionstringmax length 2000
rule.projectIdstring (uuid)
rule.entityTypestring
rule.triggerstringYesrequired, not blank
rule.triggerFieldstring
rule.triggerOffsetMinutesinteger>= 0, <= 525600
rule.conditionsarray of map of anymax length 20
rule.conditionMatchstring
rule.actionsarray of map of anymax length 20
rule.activeboolean
rule.versioninteger
projectIdstring (uuid)Yes
taskIdstring (uuid)Yes
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/automation/rules/test" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"rule":{"name":"string","description":"string","projectId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","entityType":"string","trigger":"string","triggerField":"string"},"projectId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","taskId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"}'
GET

Business calendar

/api/v1/projects/business-calendar

Scope: Scalar360.projects.READ

Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/business-calendar" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update business calendar

/api/v1/projects/business-calendar

Scope: Scalar360.projects.UPDATE

Body fieldTypeRequiredNotes
workingDaysarray of integerYesrequired, length 1-7
dailyHoursnumberYesrequired
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/business-calendar" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"workingDays":[1],"dailyHours":100,"version":1}'
POST

Add holiday

/api/v1/projects/business-calendar/holidays

Scope: Scalar360.projects.CREATE

Body fieldTypeRequiredNotes
datestring (date)Yes
namestringYesrequired, not blank, max length 120
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/business-calendar/holidays" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"date":"2026-10-12","name":"string"}'
PUT

Update holiday

/api/v1/projects/business-calendar/holidays/{holidayId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
holidayIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
datestring (date)
namestringYesrequired, not blank, max length 120
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/business-calendar/holidays/{holidayId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"date":"2026-10-12","name":"string","version":1}'
DELETE

Delete holiday

/api/v1/projects/business-calendar/holidays/{holidayId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
holidayIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/business-calendar/holidays/{holidayId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Calendar

/api/v1/projects/calendar

Scope: Scalar360.projects.READ

ParameterInTypeRequired
fromquerystring (date)No
toquerystring (date)No
projectIdquerystring (uuid)No
minequeryboolean (default false)No
typesquerystringNo
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/calendar" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Values

/api/v1/projects/custom-field-values

Scope: Scalar360.projects.READ

ParameterInTypeRequired
entityTypequerystringYes
entityIdquerystring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/custom-field-values" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Save values

/api/v1/projects/custom-field-values

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
entityTypequerystringYes
entityIdquerystring (uuid)Yes
Body fieldTypeRequiredNotes
valuesmap of anyYesrequired
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/custom-field-values" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"values":{}}'
GET

Fields

/api/v1/projects/custom-fields

Scope: Scalar360.projects.READ

ParameterInTypeRequired
entityTypequerystringYes
includeInactivequeryboolean (default false)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/custom-fields" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create field

/api/v1/projects/custom-fields

Scope: Scalar360.projects.CREATE

Body fieldTypeRequiredNotes
entityTypestring
labelstringYesrequired, not blank, max length 100
keystringmax length 60
fieldTypestring
optionsarray of string
requiredboolean
helpTextstringmax length 300
activeboolean
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/custom-fields" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"label":"string"}'
PUT

Update field

/api/v1/projects/custom-fields/{fieldId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
fieldIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
entityTypestring
labelstringYesrequired, not blank, max length 100
keystringmax length 60
fieldTypestring
optionsarray of string
requiredboolean
helpTextstringmax length 300
activeboolean
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/custom-fields/{fieldId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"entityType":"string","label":"string","key":"string","fieldType":"string","options":["string"],"required":true}'
DELETE

Delete field

/api/v1/projects/custom-fields/{fieldId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
fieldIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/custom-fields/{fieldId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Reorder fields

/api/v1/projects/custom-fields/reorder

Scope: Scalar360.projects.UPDATE

Body fieldTypeRequiredNotes
entityTypestringYesrequired, not blank
fieldIdsarray of string (uuid)Yesrequired
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/custom-fields/reorder" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"entityType":"string","fieldIds":["3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"]}'
GET

Dashboard

/api/v1/projects/dashboard

Scope: Scalar360.projects.READ

Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/dashboard" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Feed

/api/v1/projects/feed

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdquerystring (uuid)No
filterquerystring (default all)No
pagequeryinteger (default 1)No
pageSizequeryinteger (default 20)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/feed" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Form templates

/api/v1/projects/form-templates

Scope: Scalar360.projects.READ

Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/form-templates" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

From template

/api/v1/projects/from-template

Scope: Scalar360.projects.CREATE

Body fieldTypeRequiredNotes
templateIdstringYesrequired, not blank, max length 200
namestringYesrequired, not blank, max length 160
descriptionstringmax length 10000
colorstringmax length 32
statusstring
prioritystring
startDatestring (date)Yes
dueDatestring (date)
ownerMemberIdstring (uuid)
accessstring
groupIdstring (uuid)
strictDatesboolean
methodologystring
keystringmax length 10
includeSamplesboolean
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/from-template" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"templateId":"string","name":"string","startDate":"2026-10-12"}'
GET

Groups

/api/v1/projects/groups

Scope: Scalar360.projects.READ

Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/groups" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create group

/api/v1/projects/groups

Scope: Scalar360.projects.CREATE

Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 120
displayOrderinteger
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/groups" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string"}'
PUT

Update group

/api/v1/projects/groups/{groupId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
groupIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 120
displayOrderinteger
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/groups/{groupId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","displayOrder":1,"version":1}'
DELETE

Delete group

/api/v1/projects/groups/{groupId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
groupIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/groups/{groupId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Templates

/api/v1/projects/inspection-templates

Scope: Scalar360.projects.READ

Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/inspection-templates" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create template

/api/v1/projects/inspection-templates

Scope: Scalar360.projects.CREATE

Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 160
categorystring
itemsarray of object
items[].keystring
items[].labelstring
items[].expectedstring
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/inspection-templates" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string"}'
PUT

Update template

/api/v1/projects/inspection-templates/{templateId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
templateIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 160
categorystring
itemsarray of object
items[].keystring
items[].labelstring
items[].expectedstring
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/inspection-templates/{templateId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","category":"string","items":[{"key":"string","label":"string","expected":"string"}],"version":1}'
DELETE

Delete template

/api/v1/projects/inspection-templates/{templateId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
templateIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/inspection-templates/{templateId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Portal

/api/v1/projects/issues

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdquerystring (uuid)No
minequeryboolean (default false)No
qquerystring (default )No
statusIdquerystring (uuid)No
severityquerystringNo
classificationquerystringNo
assigneeIdquerystringNo
reporterquerystringNo
milestoneIdquerystring (uuid)No
dueStatequerystringNo
statequerystringNo
flagquerystringNo
sortByquerystring (default updatedAt)No
sortDirquerystring (default desc)No
pagequeryinteger (default 1)No
pageSizequeryinteger (default 20)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/issues" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Portal

/api/v1/projects/issues/my

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdquerystring (uuid)No
minequeryboolean (default false)No
qquerystring (default )No
statusIdquerystring (uuid)No
severityquerystringNo
classificationquerystringNo
assigneeIdquerystringNo
reporterquerystringNo
milestoneIdquerystring (uuid)No
dueStatequerystringNo
statequerystringNo
flagquerystringNo
sortByquerystring (default updatedAt)No
sortDirquerystring (default desc)No
pagequeryinteger (default 1)No
pageSizequeryinteger (default 20)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/issues/my" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Members

/api/v1/projects/members

Scope: Scalar360.projects.READ

Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/members" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Portal milestones

/api/v1/projects/milestones

Scope: Scalar360.projects.READ

ParameterInTypeRequired
qquerystring (default )No
statusquerystringNo
ownerIdquerystring (uuid)No
projectIdquerystring (uuid)No
minequeryboolean (default false)No
sortByquerystring (default endDate)No
sortDirquerystring (default asc)No
pagequeryinteger (default 1)No
pageSizequeryinteger (default 20)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/milestones" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Portal milestones

/api/v1/projects/milestones/my

Scope: Scalar360.projects.READ

ParameterInTypeRequired
qquerystring (default )No
statusquerystringNo
ownerIdquerystring (uuid)No
projectIdquerystring (uuid)No
minequeryboolean (default false)No
sortByquerystring (default endDate)No
sortDirquerystring (default asc)No
pagequeryinteger (default 1)No
pageSizequeryinteger (default 20)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/milestones/my" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

My tasks

/api/v1/projects/my-tasks

Scope: Scalar360.projects.READ

ParameterInTypeRequired
qquerystring (default )No
projectIdquerystring (uuid)No
stageIdquerystring (uuid)No
priorityquerystringNo
dueStatequerystringNo
sortByquerystring (default dueDate)No
sortDirquerystring (default asc)No
itemTypequerystringNo
sprintquerystringNo
pagequeryinteger (default 1)No
pageSizequeryinteger (default 20)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/my-tasks" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Onboarding

/api/v1/projects/onboarding

Scope: Scalar360.projects.READ

Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/onboarding" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Save onboarding

/api/v1/projects/onboarding

Scope: Scalar360.projects.UPDATE

Body fieldTypeRequiredNotes
industrystringmax length 40
teamTypestringmax length 80
teamSizestringmax length 20
workStylestringmax length 20
defaultMethodologystringmax length 20
defaultTemplateKeystringmax length 200
defaultSectionsarray of stringmax length 20
addRecommendedFieldsboolean
completeboolean
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/onboarding" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"industry":"string","teamType":"string","teamSize":"string","workStyle":"string","defaultMethodology":"string","defaultTemplateKey":"string"}'
POST

Dismiss onboarding

/api/v1/projects/onboarding/dismiss

Scope: Scalar360.projects.CREATE

Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/onboarding/dismiss" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Recurring tasks

/api/v1/projects/recurring-tasks

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdquerystring (uuid)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/recurring-tasks" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Recycle bin

/api/v1/projects/recycle-bin

Scope: Scalar360.projects.READ

ParameterInTypeRequired
typequerystring (default ALL)No
projectIdquerystring (uuid)No
qquerystring (default )No
pagequeryinteger (default 1)No
pageSizequeryinteger (default 25)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/recycle-bin" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Overdue

/api/v1/projects/reports/overdue

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdquerystring (uuid)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/reports/overdue" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Planned vs actual

/api/v1/projects/reports/planned-vs-actual

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdquerystring (uuid)No
groupByquerystringNo
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/reports/planned-vs-actual" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Status distribution

/api/v1/projects/reports/status-distribution

Scope: Scalar360.projects.READ

ParameterInTypeRequired
projectIdquerystring (uuid)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/reports/status-distribution" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Time

/api/v1/projects/reports/time

Scope: Scalar360.projects.READ

ParameterInTypeRequired
groupByquerystring (default user)No
fromquerystring (date)No
toquerystring (date)No
projectIdquerystring (uuid)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/reports/time" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Workload

/api/v1/projects/reports/workload

Scope: Scalar360.projects.READ

ParameterInTypeRequired
fromquerystring (date)No
toquerystring (date)No
projectIdquerystring (uuid)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/reports/workload" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Saved views

/api/v1/projects/saved-views

Scope: Scalar360.projects.READ

ParameterInTypeRequired
modulequerystring (default TASK)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/saved-views" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create saved view

/api/v1/projects/saved-views

Scope: Scalar360.projects.CREATE

Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 80
modulestring
filtersmap of any
isDefaultboolean
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/saved-views" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string"}'
PUT

Update saved view

/api/v1/projects/saved-views/{viewId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
viewIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 80
modulestring
filtersmap of any
isDefaultboolean
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/saved-views/{viewId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","module":"string","filters":{},"isDefault":true,"version":1}'
DELETE

Delete saved view

/api/v1/projects/saved-views/{viewId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
viewIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/saved-views/{viewId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Quota

/api/v1/projects/storage

Scope: Scalar360.projects.READ

Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/storage" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Tags

/api/v1/projects/tags

Scope: Scalar360.projects.READ

Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/tags" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create tag

/api/v1/projects/tags

Scope: Scalar360.projects.CREATE

Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 40
colorstringmax length 32
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/tags" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string"}'
PUT

Update tag

/api/v1/projects/tags/{tagId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
tagIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 40
colorstringmax length 32
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/tags/{tagId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","color":"string","version":1}'
DELETE

Delete tag

/api/v1/projects/tags/{tagId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
tagIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/tags/{tagId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Tasks

/api/v1/projects/tasks

Scope: Scalar360.projects.READ

ParameterInTypeRequired
qquerystring (default )No
projectIdquerystring (uuid)No
assigneequerystringNo
statusquerystringNo
priorityquerystringNo
tagIdsquerystringNo
taskListIdquerystring (uuid)No
dueStatequerystringNo
dateFieldquerystring (default due)No
fromquerystring (date)No
toquerystring (date)No
includeSubtasksqueryboolean (default true)No
itemTypequerystringNo
sprintquerystringNo
sortByquerystring (default dueDate)No
sortDirquerystring (default asc)No
pagequeryinteger (default 1)No
pageSizequeryinteger (default 25)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/tasks" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

My tasks

/api/v1/projects/tasks/my

Scope: Scalar360.projects.READ

ParameterInTypeRequired
qquerystring (default )No
projectIdquerystring (uuid)No
stageIdquerystring (uuid)No
priorityquerystringNo
dueStatequerystringNo
sortByquerystring (default dueDate)No
sortDirquerystring (default asc)No
itemTypequerystringNo
sprintquerystringNo
pagequeryinteger (default 1)No
pageSizequeryinteger (default 20)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/tasks/my" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Teams

/api/v1/projects/teams

Scope: Scalar360.projects.READ

Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/teams" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create team

/api/v1/projects/teams

Scope: Scalar360.projects.CREATE

Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 80
colorstringmax length 20
descriptionstringmax length 500
memberIdsarray of string (uuid)max length 500
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/teams" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string"}'
GET

Team

/api/v1/projects/teams/{teamId}

Scope: Scalar360.projects.READ

ParameterInTypeRequired
teamIdpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/teams/{teamId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update team

/api/v1/projects/teams/{teamId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
teamIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired, not blank, max length 80
colorstringmax length 20
descriptionstringmax length 500
memberIdsarray of string (uuid)max length 500
versioninteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/teams/{teamId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","color":"string","description":"string","memberIds":["3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"],"version":1}'
DELETE

Delete team

/api/v1/projects/teams/{teamId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
teamIdpathstring (uuid)Yes
versionqueryintegerYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/teams/{teamId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Catalog

/api/v1/projects/template-catalog

Scope: Scalar360.projects.READ

Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/template-catalog" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Preview

/api/v1/projects/template-catalog/{key}

Scope: Scalar360.projects.READ

ParameterInTypeRequired
keypathstringYes
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/template-catalog/{key}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Templates

/api/v1/projects/templates

Scope: Scalar360.projects.READ

Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/templates" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PATCH

Update template

/api/v1/projects/templates/{templateId}

Scope: Scalar360.projects.UPDATE

ParameterInTypeRequired
templateIdpathstringYes
Body fieldTypeRequiredNotes
namestringmax length 160
descriptionstringmax length 2000
sharedboolean
Example request
curl -X PATCH "https://api.scalar360.com/api/v1/projects/templates/{templateId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","description":"string","shared":true}'
DELETE

Delete template

/api/v1/projects/templates/{templateId}

Scope: Scalar360.projects.DELETE

ParameterInTypeRequired
templateIdpathstringYes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/projects/templates/{templateId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Duplicate template

/api/v1/projects/templates/{templateId}/duplicate

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
templateIdpathstringYes
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/templates/{templateId}/duplicate" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Approve

/api/v1/projects/timesheets/{timesheetId}/approve

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
timesheetIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
notestring
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/timesheets/{timesheetId}/approve" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"note":"string","version":1}'
POST

Reject

/api/v1/projects/timesheets/{timesheetId}/reject

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
timesheetIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
notestring
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/timesheets/{timesheetId}/reject" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"note":"string","version":1}'
POST

Reopen

/api/v1/projects/timesheets/{timesheetId}/reopen

Scope: Scalar360.projects.CREATE

ParameterInTypeRequired
timesheetIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
notestring
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/timesheets/{timesheetId}/reopen" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"note":"string","version":1}'
GET

Approvals

/api/v1/projects/timesheets/approvals

Scope: Scalar360.projects.READ

ParameterInTypeRequired
statusquerystringNo
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/timesheets/approvals" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Settings

/api/v1/projects/timesheets/settings

Scope: Scalar360.projects.READ

Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/timesheets/settings" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update settings

/api/v1/projects/timesheets/settings

Scope: Scalar360.projects.UPDATE

Body fieldTypeRequiredNotes
approvalRequiredboolean
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/timesheets/settings" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"approvalRequired":true}'
GET

Time logs

/api/v1/projects/timesheets/time-logs

Scope: Scalar360.projects.READ

ParameterInTypeRequired
membershipIdquerystring (uuid)No
projectIdquerystring (uuid)No
fromquerystring (date)No
toquerystring (date)No
billablequerybooleanNo
approvalStatusquerystringNo
minequerybooleanNo
pagequeryinteger (default 1)No
pageSizequeryinteger (default 50)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/timesheets/time-logs" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Export time logs

/api/v1/projects/timesheets/time-logs/export

Scope: Scalar360.projects.READ

ParameterInTypeRequired
membershipIdquerystring (uuid)No
projectIdquerystring (uuid)No
fromquerystring (date)No
toquerystring (date)No
billablequerybooleanNo
approvalStatusquerystringNo
minequerybooleanNo
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/timesheets/time-logs/export" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Week

/api/v1/projects/timesheets/week

Scope: Scalar360.projects.READ

ParameterInTypeRequired
weekStartquerystring (date)No
membershipIdquerystring (uuid)No
Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/timesheets/week" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Upsert cells

/api/v1/projects/timesheets/week/cells

Scope: Scalar360.projects.UPDATE

Body fieldTypeRequiredNotes
weekStartstring (date)
cellsarray of object
cells[].projectIdstring (uuid)
cells[].taskIdstring (uuid)
cells[].datestring (date)
cells[].minutesinteger
cells[].billableboolean
cells[].descriptionstring
Example request
curl -X PUT "https://api.scalar360.com/api/v1/projects/timesheets/week/cells" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"weekStart":"2026-10-12","cells":[{"projectId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","taskId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","date":"2026-10-12","minutes":1,"billable":true,"description":"string"}]}'
POST

Submit

/api/v1/projects/timesheets/week/submit

Scope: Scalar360.projects.CREATE

Body fieldTypeRequiredNotes
weekStartstring (date)
versioninteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/projects/timesheets/week/submit" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"weekStart":"2026-10-12","version":1}'
GET

Presets

/api/v1/projects/workflow-presets

Scope: Scalar360.projects.READ

Example request
curl -X GET "https://api.scalar360.com/api/v1/projects/workflow-presets" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"