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\n

URL 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\n

Authentication

\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\n

Pagination

\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\n

Request 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\n

Errors

\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