openapi: 3.0.4
info:
title: Bench AccountActivities ProjectTasks API
description: "
Versioning
\n\n The API is currently at version 1.0. All API endpoints (other than\n authentication) require you to specify the API version as part of the path.\n
\n\nURL Paths
\n\n Authentication requests should be made to /auth/signin,\n as documented below. All other API requests should be made to\n sub-paths of /rp/api/1.0/....\n
\n\nAuthentication
\n\n API requests are authenticated using an OAuth Bearer token.\n You can get a token by authenticating your user by sending a\n POST request to /auth/signin, with \"username and \"password\"\n parameters form-encoded in the body of the request.\n\n POST /auth/signin HTTP/1.1\n Content-Type: application/x-www-form-urlencoded\n\n username=user@example.com&password=some-secret-password\n
\n\n The response will be a JSON object including both\n \"access_token\" and \"refresh_token\" property.\n All other requests against the Bench API should include an\n authorization header: Authorization: Bearer xxxYYYzzz,\n where xxxYYYzzz is the value of \"access_token\" in the response.\n
\n For example:\n\n $ curl https://bench.gobridgit.com/auth/signin -H 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'username=someone@example.com' --data-urlencode 'password=[...snip...]'\n {\n \"access_token\": \"...snip...\",\n \"token_type\": \"Bearer\",\n \"refresh_token\": \"...snip...\"\n \"expiry\": \"2020-01-01T00:00:00.413440849Z\"\n }\n\n
\n\n\n The refresh token can be used to generate new session by request with /auth/token endpoint:\n\n POST /auth/token HTTP/1.1\n Content-Type: application/x-www-form-urlencoded\n\n grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA\n
\n\n Note that once the refresh token is used, the previous access and refresh token is no longer valid.\n
\n For example:\n\n $ curl https://bench.gobridgit.com/auth/token -H 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'grant_type=refresh_token' --data-urlencode 'refresh_token=[...snip...]'\n {\n \"access_token\": \"...snip...\",\n \"token_type\": \"Bearer\",\n \"refresh_token\": \"...snip...\"\n \"expiry\": \"2020-01-01T00:00:00.413440849Z\"\n }\n
\n\nPagination
\n\n Several of the API endpoints are paginated. These are denoted by\n including the offset (zero-based offset) and limit query\n parameters. For example, to request the 10 items,\n set the offset=0 to limit=10.\n
\n NOTE: the result set contains items with index of 0-9\n
\n To request the next 10 items (starting at index 10),\n set the offset=10 to limit=10\n
\n\n Responses to paginated API endpoints return a JSON array of objects.\n If there are results beyond the page you have requested, the server\n will set a query-has-more: true header in the response.\n
\n\nRequest Encoding
\n\n GET and DELETE requests should have parameters encoded as URL query\n parameters. Boolean values should be encoded as true and\n false, not as 1 and 0.\n
\n\nErrors
\n\n Errors are returned for some response codes such as 400 Bad Request in the\n following format:\n\n {\n \"errors\": [\n {\n \"errorType\": \"ValidationError\",\n \"description\": \"The value of Name must be a string with a minimum length of 1 and a maximum length of 8 and not whitespace.\",\n \"field\": \"Name\",\n \"values\": [\n null\n ]\n }\n ],\n \"title\": \"One or more validation errors occurred.\",\n \"status\": 400,\n \"instance\": \"api/v1/accounts/0/persons\",\n \"requestUid\": \"123e4567-e89b-12d3-a456-426614174000\"\n }\n
\n"
version: '1.0'
servers:
- url: https://bench.gobridgit.com
description: Bridgit Bench production
security:
- {}
tags:
- name: ProjectTasks
paths:
/rp/api/v1/accounts/{accountId}/projects/{projectId}/tasks:
post:
tags:
- ProjectTasks
summary: Bulk add tasks for the given account's project.
description: '
Permissions
Project: Read
Person: Read
Role: Write
Allocation: Read'
operationId: ProjectTasks_Add
parameters:
- name: accountId
in: path
description: The Account ID
required: true
schema:
type: integer
format: int32
- name: projectId
in: path
description: The project ID the task belongs to
required: true
schema:
type: integer
format: int64
requestBody:
description: The request information for the task creation
content:
application/json-patch+json:
schema:
minItems: 1
type: array
items:
$ref: '#/components/schemas/BaseTaskRequest'
application/json:
schema:
minItems: 1
type: array
items:
$ref: '#/components/schemas/BaseTaskRequest'
text/json:
schema:
minItems: 1
type: array
items:
$ref: '#/components/schemas/BaseTaskRequest'
application/*+json:
schema:
minItems: 1
type: array
items:
$ref: '#/components/schemas/BaseTaskRequest'
required: true
responses:
'200':
description: Success
content:
text/plain:
schema:
type: array
items:
$ref: '#/components/schemas/TaskResponse'
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/TaskResponse'
text/json:
schema:
type: array
items:
$ref: '#/components/schemas/TaskResponse'
'400':
description: Bad Request
'401':
description: Unauthorized
'403':
description: Forbidden
'422':
description: Unprocessable Entity - Validation failures
put:
tags:
- ProjectTasks
summary: Bulk update tasks for the given account's project.
description: '
Permissions
Project: Read
Person: Read
Role: Write'
operationId: ProjectTasks_Update
parameters:
- name: accountId
in: path
description: The Account ID
required: true
schema:
type: integer
format: int32
- name: projectId
in: path
description: The project ID the task belongs to
required: true
schema:
type: integer
format: int64
requestBody:
description: The request information for the task update
content:
application/json-patch+json:
schema:
minItems: 1
type: array
items:
$ref: '#/components/schemas/TaskUpdateRequest'
application/json:
schema:
minItems: 1
type: array
items:
$ref: '#/components/schemas/TaskUpdateRequest'
text/json:
schema:
minItems: 1
type: array
items:
$ref: '#/components/schemas/TaskUpdateRequest'
application/*+json:
schema:
minItems: 1
type: array
items:
$ref: '#/components/schemas/TaskUpdateRequest'
required: true
responses:
'200':
description: Success
content:
text/plain:
schema:
type: array
items:
$ref: '#/components/schemas/TaskResponse'
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/TaskResponse'
text/json:
schema:
type: array
items:
$ref: '#/components/schemas/TaskResponse'
'400':
description: Bad Request
'401':
description: Unauthorized
'403':
description: Forbidden
'422':
description: Unprocessable Entity - Validation failures
/rp/api/v1/accounts/{accountId}/projects/{projectId}/tasks/{id}/roles:
post:
tags:
- ProjectTasks
summary: Add a role to a task for the given account's project.
description: '
Permissions
Project: Read
Person: Read
Role: Write
Allocation: Read
Finance: Read'
operationId: ProjectTasks_AddRole
parameters:
- name: accountId
in: path
description: The Account ID
required: true
schema:
type: integer
format: int32
- name: projectId
in: path
description: The project ID the task belongs to
required: true
schema:
type: integer
format: int64
- name: id
in: path
description: The task ID the task belongs to
required: true
schema:
type: string
format: uuid
requestBody:
description: The request information for the task creation
content:
application/json-patch+json:
schema:
$ref: '#/components/schemas/TaskRoleRequest'
application/json:
schema:
$ref: '#/components/schemas/TaskRoleRequest'
text/json:
schema:
$ref: '#/components/schemas/TaskRoleRequest'
application/*+json:
schema:
$ref: '#/components/schemas/TaskRoleRequest'
required: true
responses:
'201':
description: Created
content:
text/plain:
schema:
$ref: '#/components/schemas/RoleResponse'
application/json:
schema:
$ref: '#/components/schemas/RoleResponse'
text/json:
schema:
$ref: '#/components/schemas/RoleResponse'
'400':
description: Bad Request
'401':
description: Unauthorized
'403':
description: Forbidden
'422':
description: Unprocessable Entity - Validation failures
/rp/api/v1/accounts/{accountId}/projects/{projectId}/tasks/{id}/roles/bulk:
post:
tags:
- ProjectTasks
summary: Bulk add roles to a task for the given account's project.
description: '
Permissions
Project: Read
Person: Read
Role: Write
Allocation: Read
Finance: Read'
operationId: ProjectTasks_BulkAddRoles
parameters:
- name: accountId
in: path
description: The Account ID
required: true
schema:
type: integer
format: int32
- name: projectId
in: path
description: The project ID the task belongs to
required: true
schema:
type: integer
format: int64
- name: id
in: path
description: The task ID the task belongs to
required: true
schema:
type: string
format: uuid
requestBody:
description: The request information for the task creation
content:
application/json-patch+json:
schema:
minItems: 1
type: array
items:
$ref: '#/components/schemas/TaskRoleRequest'
application/json:
schema:
minItems: 1
type: array
items:
$ref: '#/components/schemas/TaskRoleRequest'
text/json:
schema:
minItems: 1
type: array
items:
$ref: '#/components/schemas/TaskRoleRequest'
application/*+json:
schema:
minItems: 1
type: array
items:
$ref: '#/components/schemas/TaskRoleRequest'
required: true
responses:
'201':
description: Created
content:
text/plain:
schema:
type: array
items:
$ref: '#/components/schemas/RoleResponse'
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/RoleResponse'
text/json:
schema:
type: array
items:
$ref: '#/components/schemas/RoleResponse'
'400':
description: Bad Request
'401':
description: Unauthorized
'403':
description: Forbidden
'422':
description: Unprocessable Entity - Validation failures
/rp/api/v1/accounts/{accountId}/projects/{projectId}/tasks/{taskId}/roles/{id}:
patch:
tags:
- ProjectTasks
summary: Update a task role by ID in the given account's project.
description: '
Permissions
Project: Read
Person: Read
Role: Write
Allocation: Read
Finance: Read'
operationId: ProjectTasks_UpdateRole
parameters:
- name: accountId
in: path
description: The Account ID
required: true
schema:
type: integer
format: int32
- name: projectId
in: path
description: The project ID
required: true
schema:
type: integer
format: int64
- name: taskId
in: path
description: The task ID
required: true
schema:
type: string
format: uuid
- name: id
in: path
description: The role ID the task role belongs to
required: true
schema:
type: integer
format: int64
requestBody:
description: The request information for the role update
content:
application/json-patch+json:
schema:
$ref: '#/components/schemas/TaskRoleUpdateRequest'
application/json:
schema:
$ref: '#/components/schemas/TaskRoleUpdateRequest'
text/json:
schema:
$ref: '#/components/schemas/TaskRoleUpdateRequest'
application/*+json:
schema:
$ref: '#/components/schemas/TaskRoleUpdateRequest'
required: true
responses:
'200':
description: Success
content:
text/plain:
schema:
$ref: '#/components/schemas/RoleResponse'
application/json:
schema:
$ref: '#/components/schemas/RoleResponse'
text/json:
schema:
$ref: '#/components/schemas/RoleResponse'
'400':
description: Bad Request
'401':
description: Unauthorized
'403':
description: Forbidden
'422':
description: Unprocessable Entity - Validation failures
delete:
tags:
- ProjectTasks
summary: Remove task role by ID in the given account's project.
description: '
Permissions
Project: Read
Person: Read
Role: Write
Allocation: Read'
operationId: ProjectTasks_RemoveRole
parameters:
- name: accountId
in: path
description: The Account ID
required: true
schema:
type: integer
format: int32
- name: projectId
in: path
description: The project ID that the task belongs to
required: true
schema:
type: integer
format: int64
- name: taskId
in: path
description: The task ID that the role belongs to
required: true
schema:
type: string
format: uuid
- name: id
in: path
description: The role ID
required: true
schema:
type: integer
format: int64
responses:
'204':
description: No Content - Success
'400':
description: Bad Request
'401':
description: Unauthorized
'403':
description: Forbidden
/rp/api/v1/accounts/{accountId}/projects/{projectId}/tasks/{taskId}/roles/{id}/allocations:
post:
tags:
- ProjectTasks
summary: Allocates a person to a task role on the given account and project
description: 'A person cannot be allocated entirely inside a period of unavailability and cannot be allocated outside of their employment dates.
For allocations that overlap a period of unavailability, the API will truncate or not set the date range that the person is unavailable.
Examples: Unavailable from 2020-01-11 to 2020-01-25, Allocation date from 2020-01-20 to 2020-03-31, will alocate the person from 2020-01-26 to 2020-03-31
Unavailable from 2020-01-11 to 2020-01-25, Allocation date from 2020-01-01 to 2020-03-31, will alocate the person from 2020-01-01 to 2020-01-10 AND 2020-01-26 to 2020-03-31
Permissions
Project: Read
Person: Read
Role: Read
Allocation: Write'
operationId: ProjectTasks_AddAllocation
parameters:
- name: accountId
in: path
description: The Account ID
required: true
schema:
type: integer
format: int32
- name: projectId
in: path
description: The project ID
required: true
schema:
type: integer
format: int64
- name: taskId
in: path
description: The task ID
required: true
schema:
type: string
format: uuid
- name: id
in: path
description: The role ID the task role belongs to
required: true
schema:
type: integer
format: int64
requestBody:
description: Request object containing the person to allocate
content:
application/json-patch+json:
schema:
$ref: '#/components/schemas/TaskAllocationRequest'
application/json:
schema:
$ref: '#/components/schemas/TaskAllocationRequest'
text/json:
schema:
$ref: '#/components/schemas/TaskAllocationRequest'
application/*+json:
schema:
$ref: '#/components/schemas/TaskAllocationRequest'
required: true
responses:
'204':
description: No Content
'400':
description: Bad Request
'401':
description: Unauthorized
'403':
description: Forbidden
'409':
description: Conflict
'422':
description: Unprocessable Entity
delete:
tags:
- ProjectTasks
summary: Removes a person's allocation on a task role on the given account and project
description: 'The request must contain the person id, start and end date to ensure that the role and allocation is correct and hasn''t been modified before trying to delete it.
Permissions
Project: Read
Person: Read
Role: Read
Allocation: Write'
operationId: ProjectTasks_RemoveAllocation
parameters:
- name: accountId
in: path
description: The Account ID
required: true
schema:
type: integer
format: int32
- name: projectId
in: path
description: The Project ID
required: true
schema:
type: integer
format: int64
- name: taskId
in: path
description: The task ID that the role belongs to
required: true
schema:
type: string
format: uuid
- name: id
in: path
description: The role ID
required: true
schema:
type: integer
format: int64
requestBody:
description: Request object containing the person, role, start and end date to allocate
content:
application/json-patch+json:
schema:
$ref: '#/components/schemas/TaskAllocationRequest'
application/json:
schema:
$ref: '#/components/schemas/TaskAllocationRequest'
text/json:
schema:
$ref: '#/components/schemas/TaskAllocationRequest'
application/*+json:
schema:
$ref: '#/components/schemas/TaskAllocationRequest'
required: true
responses:
'204':
description: No Content
'400':
description: Bad Request
'401':
description: Unauthorized
'403':
description: Forbidden
'422':
description: Unprocessable Entity
/rp/api/v1/accounts/{accountId}/projects/{projectId}/tasks/{taskId}/roles/allocations/bulk:
post:
tags:
- ProjectTasks
summary: Bulk allocates people to task roles on the given account and project task
description: 'A person cannot be allocated entirely inside a period of unavailability and cannot be allocated outside of their employment dates.
For allocations that overlap a period of unavailability, the API will truncate or not set the date range that the person is unavailable.
Examples: Unavailable from 2020-01-11 to 2020-01-25, Allocation date from 2020-01-20 to 2020-03-31, will alocate the person from 2020-01-26 to 2020-03-31
Unavailable from 2020-01-11 to 2020-01-25, Allocation date from 2020-01-01 to 2020-03-31, will alocate the person from 2020-01-01 to 2020-01-10 AND 2020-01-26 to 2020-03-31
Permissions
Project: Read
Person: Read
Role: Read
Allocation: Write'
operationId: ProjectTasks_BulkAddAllocation
parameters:
- name: accountId
in: path
description: The Account ID
required: true
schema:
type: integer
format: int32
- name: projectId
in: path
description: The project ID
required: true
schema:
type: integer
format: int64
- name: taskId
in: path
description: The task ID
required: true
schema:
type: string
format: uuid
requestBody:
description: Request object containing the role and the person to allocate
content:
application/json-patch+json:
schema:
type: array
items:
$ref: '#/components/schemas/ProjectAllocationRequest'
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ProjectAllocationRequest'
text/json:
schema:
type: array
items:
$ref: '#/components/schemas/ProjectAllocationRequest'
application/*+json:
schema:
type: array
items:
$ref: '#/components/schemas/ProjectAllocationRequest'
required: true
responses:
'204':
description: No Content
'400':
description: Bad Request
'401':
description: Unauthorized
'403':
description: Forbidden
'409':
description: Conflict
'422':
description: Unprocessable Entity
/rp/api/v1/accounts/{accountId}/projects/{projectId}/tasks/{id}:
delete:
tags:
- ProjectTasks
summary: Remove task by ID in the given account's project.
description: '
Permissions
Project: Read
Person: Read
Role: Write'
operationId: ProjectTasks_Remove
parameters:
- name: accountId
in: path
description: The Account ID
required: true
schema:
type: integer
format: int32
- name: projectId
in: path
description: The project ID that the role belongs to
required: true
schema:
type: integer
format: int64
- name: id
in: path
description: The task ID
required: true
schema:
type: string
format: uuid
responses:
'204':
description: No Content - Success
'400':
description: Bad Request
'401':
description: Unauthorized
'403':
description: Forbidden
/rp/api/v1/accounts/{accountId}/projects/{projectId}/tasks/by-templates:
post:
tags:
- ProjectTasks
summary: Add tasks and roles for the given account's project using task template definition.
description: '
Permissions
Project: Read
Person: Read
Role: Write
Allocation: Read
Finance: Read'
operationId: ProjectTasks_AddTasksByTemplates
parameters:
- name: accountId
in: path
description: The Account ID
required: true
schema:
type: integer
format: int32
- name: projectId
in: path
description: The project ID the tasks belongs to
required: true
schema:
type: integer
format: int64
requestBody:
description: The request information for the task and role creation
content:
application/json-patch+json:
schema:
minItems: 1
type: array
items:
$ref: '#/components/schemas/TasksByTemplatesRequest'
application/json:
schema:
minItems: 1
type: array
items:
$ref: '#/components/schemas/TasksByTemplatesRequest'
text/json:
schema:
minItems: 1
type: array
items:
$ref: '#/components/schemas/TasksByTemplatesRequest'
application/*+json:
schema:
minItems: 1
type: array
items:
$ref: '#/components/schemas/TasksByTemplatesRequest'
required: true
responses:
'201':
description: Created
content:
text/plain:
schema:
type: array
items:
$ref: '#/components/schemas/ProjectTaskDetail'
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ProjectTaskDetail'
text/json:
schema:
type: array
items:
$ref: '#/components/schemas/ProjectTaskDetail'
'400':
description: Bad Request
'401':
description: Unauthorized
'403':
description: Forbidden
'422':
description: Unprocessable Entity - Validation failures
components:
schemas:
RoleCrewTradeResponse:
type: object
properties:
id:
type: integer
description: Trade id (`crewtrade.id`).
format: int64
example: 1
name:
type: string
description: Trade display name.
nullable: true
example: Electrician
colour:
type: string
description: Trade colour as a hex string; one of ResourcePlanning.Common.Validation.CrewTradeColourAttribute.AllowedHexValues.
nullable: true
example: '#D6F0F5'
additionalProperties: false
description: 'Trade summary embedded on ResourcePlanning.Contracts.RoleCrewResponse.Trade. Slim projection of
ResourcePlanning.Contracts.CrewTradeResponse (omits `inUse` and `createdOn`).'
ProjectAllocationRequest:
type: object
properties:
roleId:
type: integer
format: int64
example: 1
personId:
type: integer
format: int64
example: 1
startDate:
type: string
format: date-time
nullable: true
example: '2019-01-01'
endDate:
type: string
format: date-time
nullable: true
example: '2019-12-31'
roleStartDate:
type: string
description: 'Optional. When provided, updates the unfilled role''s start date before creating the allocation.
Must be set together with ResourcePlanning.Contracts.ProjectAllocationRequest.RoleEndDate — supplying only one will fail validation.'
format: date-time
nullable: true
roleEndDate:
type: string
description: 'Optional. When provided, updates the unfilled role''s end date before creating the allocation.
Must be set together with ResourcePlanning.Contracts.ProjectAllocationRequest.RoleStartDate — supplying only one will fail validation.'
format: date-time
nullable: true
additionalProperties: false
RoleNotificationData:
type: object
properties:
notifiedOn:
type: string
format: date-time
recipientIds:
type: array
items:
type: integer
format: int64
nullable: true
additionalProperties: false
BaseRoleResult:
type: object
properties:
id:
type: integer
format: int64
nameId:
type: integer
format: int64
name:
type: string
nullable: true
roleCost:
type: number
format: double
nullable: true
startDate:
type: string
format: date-time
endDate:
type: string
format: date-time
type:
enum:
- Salaried
- Hourly
- All
type: string
skillSet:
type: array
items:
type: integer
format: int64
nullable: true
isFilled:
type: boolean
billable:
type: boolean
requirements:
uniqueItems: true
type: array
items:
$ref: '#/components/schemas/RoleRequirement'
nullable: true
unfilledRanges:
uniqueItems: true
type: array
items:
$ref: '#/components/schemas/RoleUnfilled'
nullable: true
note:
type: string
nullable: true
sortOrder:
type: integer
format: int32
notification:
$ref: '#/components/schemas/RoleNotificationData'
relatedTitles:
type: array
items:
type: string
nullable: true
allocations:
uniqueItems: true
type: array
items:
$ref: '#/components/schemas/RoleAllocation'
nullable: true
hire:
$ref: '#/components/schemas/RoleHire'
additionalProperties: false
TaskAllocationRequest:
type: object
properties:
personId:
type: integer
format: int64
example: 1
startDate:
type: string
format: date-time
example: '2019-01-01'
endDate:
type: string
format: date-time
example: '2019-12-31'
roleStartDate:
type: string
description: 'Optional. When provided, updates the unfilled role''s start date before creating the allocation.
Must be set together with ResourcePlanning.Contracts.TaskAllocationRequest.RoleEndDate — supplying only one will fail validation.'
format: date-time
nullable: true
roleEndDate:
type: string
description: 'Optional. When provided, updates the unfilled role''s end date before creating the allocation.
Must be set together with ResourcePlanning.Contracts.TaskAllocationRequest.RoleStartDate — supplying only one will fail validation.'
format: date-time
nullable: true
additionalProperties: false
RoleResponse:
type: object
properties:
id:
type: integer
format: int64
example: 123
taskId:
type: string
format: uuid
nullable: true
example: 00000000-0000-0000-0000-000000000000
nameId:
type: integer
format: int64
example: 1
name:
type: string
nullable: true
example: Project Engineer
roleCost:
type: number
format: double
nullable: true
example: 123.45
startDate:
type: string
format: date-time
example: '2019-01-01'
endDate:
type: string
format: date-time
example: '2020-12-31'
type:
enum:
- Salaried
- Hourly
- All
type: string
example: Salaried
skillSet:
type: array
items:
type: integer
format: int64
nullable: true
example: '[1,2,3]]'
isFilled:
type: boolean
example: false
billable:
type: boolean
example: false
allocations:
type: array
items:
$ref: '#/components/schemas/RoleRequirement'
nullable: true
unfilledRanges:
type: array
items:
$ref: '#/components/schemas/RoleUnfilled'
nullable: true
note:
type: string
nullable: true
categoryId:
type: integer
format: int64
nullable: true
notification:
$ref: '#/components/schemas/RoleNotificationData'
isCommunicated:
type: boolean
readOnly: true
relatedTitles:
type: array
items:
type: string
nullable: true
externalId:
type: string
nullable: true
createdBy:
type: integer
format: int32
createdOn:
type: string
format: date-time
hire:
$ref: '#/components/schemas/RoleHire'
roleTags:
type: array
items:
$ref: '#/components/schemas/ProjectRoleTagEntity'
nullable: true
assignmentBreakdownBy:
enum:
- Custom
- Phases
- Monthly
- Weekly
type: string
nullable: true
assignedPersonId:
type: integer
format: int64
nullable: true
assignedPersonName:
type: string
nullable: true
crew:
$ref: '#/components/schemas/RoleCrewResponse'
additionalProperties: false
RoleCrewResponse:
type: object
properties:
id:
type: integer
description: Crew id (`crew.id`).
format: int64
example: 42
name:
type: string
description: Crew display name.
nullable: true
example: Concrete crew A
memberCount:
type: integer
description: 'Number of people on the crew roster (`crewmember`) for the linked crew. This is the
crew''s roster size — not the number of people allocated to this specific role.'
format: int32
example: 5
trade:
$ref: '#/components/schemas/RoleCrewTradeResponse'
additionalProperties: false
description: 'Crew summary embedded on a ResourcePlanning.Contracts.RoleResponse when the role is tagged with a crew
(`projectrole.crew_id` not null). Loaded from the related `crew` row; cached and
serialized via MessagePack for role payloads.'
TaskRoleUpdateRequest:
type: object
properties:
name:
type: string
nullable: true
example: Project Engineer
skillSet:
type: array
items:
type: integer
format: int64
nullable: true
example:
- 1
- 2
- 3
note:
maxLength: 250
minLength: 0
type: string
nullable: true
example: Some note
billable:
type: boolean
nullable: true
example: false
allocatedPercent:
maximum: 100
minimum: 1
type: integer
format: int32
nullable: true
example: 100
additionalProperties: false
RoleRequirement:
type: object
properties:
startDate:
type: string
format: date-time
example: '2019-01-01'
endDate:
type: string
format: date-time
example: '2020-12-31'
allocatedPercent:
maximum: 100
minimum: 0
type: integer
format: int32
example: 100
additionalProperties: false
RoleAllocation:
type: object
properties:
personId:
type: integer
format: int64
startDate:
type: string
format: date-time
endDate:
type: string
format: date-time
allocatedPercent:
maximum: 100
minimum: 1
type: integer
description: An integer between 1 and 100 representing the % of time this role is allocated to the project.
format: int32
example: 100
personCost:
type: number
format: double
nullable: true
id:
type: string
format: uuid
additionalProperties: false
TaskRoleRequest:
type: object
properties:
name:
type: string
nullable: true
example: Project Engineer
skillSet:
type: array
items:
type: integer
format: int64
nullable: true
example:
- 1
- 2
- 3
note:
maxLength: 250
minLength: 0
type: string
nullable: true
example: Some note
billable:
type: boolean
example: false
allocatedPercent:
maximum: 100
minimum: 1
type: integer
format: int32
example: 100
additionalProperties: false
TaskResponse:
type: object
properties:
id:
type: string
format: uuid
example: 00000000-0000-0000-0000-000000000000
name:
type: string
nullable: true
example: Project Engineer
startDate:
type: string
format: date-time
example: '2019-01-01'
endDate:
type: string
format: date-time
example: '2020-12-31'
createdOn:
type: string
format: date-time
example: '2021-05-27T10:47:23.530Z'
lastModifiedOn:
type: string
format: date-time
example: '2021-05-27T10:58:23.530Z'
additionalProperties: false
TasksByTemplatesRequest:
type: object
properties:
templateId:
type: string
format: uuid
example: 00000000-0000-0000-0000-000000000000
startDate:
type: string
format: date-time
example: '2019-01-01'
endDate:
type: string
format: date-time
example: '2020-12-31'
additionalProperties: false
TaskUpdateRequest:
required:
- id
type: object
properties:
id:
type: string
format: uuid
name:
type: string
nullable: true
example: Project Engineer
startDate:
type: string
format: date-time
nullable: true
example: '2019-01-01'
endDate:
type: string
format: date-time
nullable: true
example: '2020-12-31'
shiftDates:
type: boolean
description: 'If this property is true and you specify a changed task start or end date in this request,
then the task''s start and end dates, and the start and end dates for all task roles
will be adjusted by the same amount. If this property is set to true, then you must only send
EITHER startDate OR endDate - behavior when setting both is to shift with the task start date'
example: false
shiftSubsequentTasks:
type: boolean
description: 'Used to shift subsequent tasks when the END DATE of this task is changed.
If true, subsequent tasks will be shifted by the same number of days as this task'
nullable: true
additionalProperties: false
BaseTaskRequest:
type: object
properties:
name:
type: string
nullable: true
example: Design Plan
startDate:
type: string
format: date-time
example: '2019-01-01'
endDate:
type: string
format: date-time
example: '2020-12-31'
additionalProperties: false
RoleHire:
type: object
properties:
isHireRequired:
type: boolean
hireDescription:
type: string
nullable: true
previousIsHireRequired:
type: boolean
hireStatus:
enum:
- Hire
- Hired
type: string
nullable: true
previousHireStatus:
enum:
- Hire
- Hired
type: string
nullable: true
taggedByUserId:
type: integer
format: int32
nullable: true
taggedAt:
type: string
format: date-time
nullable: true
hiredAt:
type: string
format: date-time
nullable: true
additionalProperties: false
ProjectRoleTagEntity:
type: object
properties:
id:
type: integer
format: int64
collectionId:
type: integer
format: int64
name:
type: string
nullable: true
collectionName:
type: string
nullable: true
collectionColor:
type: string
nullable: true
additionalProperties: false
description: Represents a role tag with its collection metadata
ProjectTaskDetail:
type: object
properties:
projectId:
type: integer
format: int64
example: 9381
taskId:
type: string
format: uuid
example: 00000000-0000-0000-0000-000000000000
name:
type: string
nullable: true
example: Design Plan
startDate:
type: string
format: date-time
example: '2019-01-01'
endDate:
type: string
format: date-time
example: '2020-12-31'
roles:
uniqueItems: true
type: array
items:
$ref: '#/components/schemas/BaseRoleResult'
nullable: true
createdOn:
type: string
format: date-time
example: '2021-05-27T10:47:23.530Z'
lastModifiedOn:
type: string
format: date-time
example: '2021-05-27T10:58:23.530Z'
additionalProperties: false
RoleUnfilled:
type: object
properties:
startDate:
type: string
format: date-time
example: '2019-01-01'
endDate:
type: string
format: date-time
example: '2020-12-31'
additionalProperties: false
securitySchemes:
Bearer:
type: http
description: Standard Authorization header using the Bearer scheme
scheme: bearer
bearerFormat: JWT