openapi: 3.0.4 info: title: Bench AccountActivities Accounts 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: Accounts paths: /rp/api/v1/Accounts: get: tags: - Accounts summary: Get all accounts that the user has access to. operationId: Accounts_Query parameters: - name: offset in: query description: Offset for pagination schema: maximum: 2147483647 minimum: 0 type: integer format: int32 default: 0 - name: limit in: query description: Maximum number of results in this page schema: maximum: 2147483647 minimum: 1 type: integer format: int32 default: 1000 responses: '200': description: 'Success: All account models the user has access to' content: text/plain: schema: type: array items: $ref: '#/components/schemas/AccountResponse' application/json: schema: type: array items: $ref: '#/components/schemas/AccountResponse' text/json: schema: type: array items: $ref: '#/components/schemas/AccountResponse' '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/Accounts/_filter: post: tags: - Accounts summary: 'Get all accounts that the user has access to, filter by name (contains), account ids, organization ids, and/or account states (0 = Active, 1 = Deactivated, 2 = All). Sort options include: name = 0, numProjects = 1, numPeople = 2, numMembers = 3 and organizationId = 4 Sort order options include: asc = 0, desc = 1' description: NOTE: Paging limit defaults to 50, and is maximized at 100 items per request. If there are more accounts than were returned, there will be a "query-has-more" header that will be set to true. operationId: Accounts_QueryFilter requestBody: content: application/json-patch+json: schema: $ref: '#/components/schemas/AccountFilterPredicatesAccountSortSortedFilter' application/json: schema: $ref: '#/components/schemas/AccountFilterPredicatesAccountSortSortedFilter' text/json: schema: $ref: '#/components/schemas/AccountFilterPredicatesAccountSortSortedFilter' application/*+json: schema: $ref: '#/components/schemas/AccountFilterPredicatesAccountSortSortedFilter' required: true responses: '200': description: 'Success: All account models the user has access to' content: text/plain: schema: type: array items: $ref: '#/components/schemas/AccountResponse' application/json: schema: type: array items: $ref: '#/components/schemas/AccountResponse' text/json: schema: type: array items: $ref: '#/components/schemas/AccountResponse' '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/Accounts/{id}: get: tags: - Accounts summary: Gets details for the given account description: '
Permissions
Account: Read' operationId: Accounts_Get parameters: - name: id in: path description: The Account ID required: true schema: type: integer format: int32 responses: '200': description: 'Success: Account model' content: text/plain: schema: $ref: '#/components/schemas/AccountResponse' application/json: schema: $ref: '#/components/schemas/AccountResponse' text/json: schema: $ref: '#/components/schemas/AccountResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/Accounts/{id}/person-field-values: get: tags: - Accounts summary: Get all custom field values for all people for the given account description: '
Permissions
HourlyProfile: Read
Person: Read
Private: Read
Finance: Read' operationId: Accounts_QueryProfiles parameters: - name: id in: path description: The Account ID required: true schema: type: integer format: int32 - name: includeEmpty in: query description: If true, the response will include all person field values, even if no value is set for a given field. If false, field values that are empty are not included in the response. schema: type: boolean default: false - name: state in: query description: 'If specified and non-zero, only include field vlaues for people matching the given state. The available values are defined as follows: - active: include only Active people - deactivated: include only Deactivated people - all: include all people, regardless of state' schema: enum: - Active - Deactivated - All type: string default: Active - name: personIds in: query description: Optional paramater of comma delimited ids for filtering results based on the person IDs provided schema: type: array items: type: integer format: int64 - name: offset in: query description: The offset of the result to begin with schema: maximum: 2147483647 minimum: 0 type: integer format: int32 default: 0 - name: limit in: query description: Optional - The number of items return by result set. If no limit given, return all results schema: maximum: 2147483647 minimum: 1 type: integer format: int32 default: 1000 - name: employeeId in: query description: Optional - for filtering result by system field "Employee ID" schema: type: string responses: '200': description: 'Success: All person field values by person Id on the account' content: text/plain: schema: type: array items: $ref: '#/components/schemas/ProfileResponse' application/json: schema: type: array items: $ref: '#/components/schemas/ProfileResponse' text/json: schema: type: array items: $ref: '#/components/schemas/ProfileResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/Accounts/{id}/project-field-values: get: tags: - Accounts summary: Get all custom field values for all projects for the given account description: '
Permissions
Project: Read
Private: Read
Finance: Read' operationId: Accounts_QueryProjectFieldValues parameters: - name: id in: path description: The Account ID required: true schema: type: integer format: int32 - name: includeEmpty in: query description: If true, the response will include all project field values, even if no value is set for a given field. If false, field values that are empty are not included in the response. schema: type: boolean default: false - name: projectIds in: query description: Optional paramater of comma delimited ids for filtering results based on the project IDs provided schema: type: array items: type: integer format: int64 - name: offset in: query description: The offset of the result to begin with schema: maximum: 2147483647 minimum: 0 type: integer format: int32 default: 0 - name: limit in: query description: Optional - The number of items return by result set. If no limit given, return all results schema: maximum: 2147483647 minimum: 1 type: integer format: int32 default: 1000 - name: projectNumber in: query description: Optional - for filtering result by system field "Project Number" schema: type: string - name: externalId in: query description: Optional - for filtering result by system field "External ID" schema: type: string - name: classification in: query description: 'Optional - for filtering result by classification: All or Experience"' schema: enum: - All - Experience type: string default: All responses: '200': description: 'Success: All project field values by person id on the account' content: text/plain: schema: type: array items: $ref: '#/components/schemas/ProjectFieldValuesResponse' application/json: schema: type: array items: $ref: '#/components/schemas/ProjectFieldValuesResponse' text/json: schema: type: array items: $ref: '#/components/schemas/ProjectFieldValuesResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/Accounts/{id}/tasks: get: tags: - Accounts summary: Get all Tasks for all projects in the given account description: '
Permissions
Project: Read
Person: Read
Role: Read
Allocation: Read' operationId: Accounts_QueryTasks parameters: - name: id in: path description: The Account ID required: true schema: type: integer format: int32 - name: relativeDate in: query description: Optional paramater used to calculate date based properties. If not provided, it is set to today's date in UTC. schema: type: string format: date-time example: '2021-01-01' example: '2021-01-01' - name: offset in: query description: Offset for pagination schema: maximum: 2147483647 minimum: 0 type: integer format: int32 default: 0 - name: limit in: query description: Maximum number of results in this page schema: maximum: 2147483647 minimum: 1 type: integer format: int32 default: 5000 - name: projectIds in: query description: (Optional) Filter task(s) to contain tasks that match the projectIds passed in. schema: type: array items: type: integer format: int64 - name: projectState in: query description: (Optional) Filters the result by the state of the project the role is on schema: enum: - Canceled - Upcoming - Active - Complete - Pursuit - Lost - All type: string default: All - name: taskIds in: query description: (Optional) Filters the result to contain tasks that match the taskIds passed in. Works as an AND with filledState and roleNameIds schema: type: array items: type: string format: uuid - name: filledState in: query description: (Optional) Filters the result by the filled state of the roles schema: enum: - 0 - 1 - 2 type: integer format: int32 default: 2 - name: roleIds in: query description: (Optional) Filters the result to contain roles that match the ids passed in. Works as an AND with filledState and roleNameIds schema: type: array items: type: integer format: int64 - name: roleNameIds in: query description: (Optional) Filters the result to contain roles that match the ids passed in. Works as an AND with filledState and roleIds schema: type: array items: type: integer format: int64 - name: roleState in: query description: '(Optional) Filters the result by the state of the role dates: Current, Upcoming, Past, or All' schema: enum: - Past - Current - Upcoming - All type: string default: All responses: '200': description: 'Success: All tasks on projects in the given account with some project information, role requirements and allocations' 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 /rp/api/v1/Accounts/{id}/role-categories: get: tags: - Accounts summary: Get all categories for all projects in the given account description: '
Permissions
Project: Read
Role: Read
HourlyRole: Read' operationId: Accounts_QueryRoleCategories parameters: - name: id in: path description: The Account ID required: true schema: type: integer format: int32 - name: offset in: query description: Offset for pagination schema: maximum: 2147483647 minimum: 0 type: integer format: int32 default: 0 - name: limit in: query description: Maximum number of results in this page schema: maximum: 2147483647 minimum: 1 type: integer format: int32 default: 5000 responses: '200': description: 'Success: All categories on projects in the given account' content: text/plain: schema: type: array items: $ref: '#/components/schemas/AccountRoleCategoryResponse' application/json: schema: type: array items: $ref: '#/components/schemas/AccountRoleCategoryResponse' text/json: schema: type: array items: $ref: '#/components/schemas/AccountRoleCategoryResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/Accounts/{id}/roles: get: tags: - Accounts summary: Get all Salaried roles for all projects in the given account description: '
Permissions
Role: Read
Finance: Read' operationId: Accounts_QueryRoles parameters: - name: id in: path description: The Account ID required: true schema: type: integer format: int32 - name: relativeDate in: query description: Optional paramater used to calculate date based properties. If not provided, it is set to today's date in UTC. schema: type: string format: date-time example: '2021-01-01' example: '2021-01-01' - name: unfilled in: query description: If true, limits the results to include only roles that are unfilled; that is, they don't have any allocations. If false, the results include all roles in the account, both filled and unfilled. schema: type: boolean default: false - name: offset in: query description: Offset for pagination schema: maximum: 2147483647 minimum: 0 type: integer format: int32 default: 0 - name: limit in: query description: Maximum number of results in this page schema: maximum: 2147483647 minimum: 1 type: integer format: int32 default: 5000 - name: projectId in: query description: (Optional) Filter role(s) for specified project ID schema: type: integer format: int64 - name: filledState in: query description: (Optional) Filters the result by the filled state of the roles schema: enum: - 0 - 1 - 2 type: integer format: int32 default: 2 - name: roleIds in: query description: (Optional) Filters the result to contain roles that match the ids passed in. Works as an AND with filledState and roleNameIds schema: type: array items: type: integer format: int64 - name: roleNameIds in: query description: (Optional) Filters the result to contain roles that match the ids passed in. Works as an AND with filledState and roleIds schema: type: array items: type: integer format: int64 - name: projectState in: query description: (Optional) Filters the result by the state of the project the role is on schema: enum: - Canceled - Upcoming - Active - Complete - Pursuit - Lost - All type: string default: All - name: roleState in: query description: '(Optional) Filters the result by the state of the role dates: Current, Upcoming, Past, or All' schema: enum: - Past - Current - Upcoming - All type: string default: All - name: type in: query description: (Optional)Salaried role type to filter results by (Defaults to Operations) schema: enum: - Operations - Preconstruction - All type: string default: Operations responses: '200': description: 'Success: All roles on projects in the given account with some project information, role requirements and allocations' content: text/plain: schema: type: array items: $ref: '#/components/schemas/ProjectRoleDetail' application/json: schema: type: array items: $ref: '#/components/schemas/ProjectRoleDetail' text/json: schema: type: array items: $ref: '#/components/schemas/ProjectRoleDetail' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/Accounts/{id}/hourly-roles: get: tags: - Accounts summary: Get all Hourly roles for all projects in the given account description: '
Permissions
HourlyRole: Read
Finance: Read' operationId: Accounts_QueryHourlyRoles parameters: - name: id in: path description: The Account ID required: true schema: type: integer format: int32 - name: relativeDate in: query description: Optional paramater used to calculate date based properties. If not provided, it is set to today's date in UTC. schema: type: string format: date-time example: '2021-01-01' example: '2021-01-01' - name: offset in: query description: Offset for pagination schema: maximum: 2147483647 minimum: 0 type: integer format: int32 default: 0 - name: limit in: query description: Maximum number of results in this page schema: maximum: 2147483647 minimum: 1 type: integer format: int32 default: 5000 - name: projectId in: query description: (Optional) Filter role(s) for specified project ID schema: type: integer format: int64 - name: filledState in: query description: (Optional) Filters the result by the filled state of the roles schema: enum: - 0 - 1 - 2 type: integer format: int32 default: 2 - name: roleIds in: query description: (Optional) Filters the result to contain roles that match the ids passed in. Works as an AND with filledState and roleNameIds schema: type: array items: type: integer format: int64 - name: roleNameIds in: query description: (Optional) Filters the result to contain roles that match the ids passed in. Works as an AND with filledState and roleIds schema: type: array items: type: integer format: int64 - name: projectState in: query description: (Optional) Filters the result by the state of the project the role is on schema: enum: - Canceled - Upcoming - Active - Complete - Pursuit - Lost - All type: string default: All - name: roleState in: query description: '(Optional) Filters the result by the state of the role dates: Current, Upcoming, Past, or All' schema: enum: - Past - Current - Upcoming - All type: string default: All responses: '200': description: 'Success: All roles on projects in the given account with some project information, role requirements and allocations' content: text/plain: schema: type: array items: $ref: '#/components/schemas/ProjectHourlyRoleDetail' application/json: schema: type: array items: $ref: '#/components/schemas/ProjectHourlyRoleDetail' text/json: schema: type: array items: $ref: '#/components/schemas/ProjectHourlyRoleDetail' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/Accounts/{id}/person-certifications: get: tags: - Accounts summary: Gets the persons certifications for the given account description: '
Permissions
HourlyProfile: Read
Person: Read
Private: Read' operationId: Accounts_QueryPersonCertifications parameters: - name: id in: path description: The Account ID required: true schema: type: integer format: int32 - name: personIds in: query description: Optional paramater of comma delimited ids for filtering results based on the person IDs provided schema: type: array items: type: integer format: int64 - name: offset in: query description: Offset for pagination schema: maximum: 2147483647 minimum: 0 type: integer format: int32 default: 0 - name: limit in: query description: Maximum number of results in this page schema: maximum: 2147483647 minimum: 1 type: integer format: int32 default: 1000 responses: '200': description: 'Success: Lists of person certifications on the account grouped by person ID' content: application/json: schema: type: object additionalProperties: type: array items: $ref: '#/components/schemas/PersonCertificationResponse' example: '1': - id: 123 name: Transportation of Dangerous Goods abbreviation: TDG expiryDate: '2020-01-23' daysWarnBeforeExpire: 7 certificationDate: null certificationDescription: null hasAttachment: false state: Expired '2': - id: 456 name: CPR Training abbreviation: CPR expiryDate: '2020-12-30' daysWarnBeforeExpire: 9 certificationDate: null certificationDescription: null hasAttachment: false state: Expired '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/Accounts/{id}/user-profiles: get: tags: - Accounts summary: Gets the user profiles for the given account description: '
Permissions
Account: Read' operationId: Accounts_QueryUserProfiles parameters: - name: id in: path description: The Account ID required: true schema: type: integer format: int32 - name: offset in: query description: Offset for pagination schema: maximum: 2147483647 minimum: 0 type: integer format: int32 default: 0 - name: limit in: query description: Maximum number of results in this page schema: maximum: 2147483647 minimum: 1 type: integer format: int32 default: 1000 - name: ids in: query description: (Optional) Filters the result to contain account users that match the ids passed in. schema: type: array items: type: integer format: int32 responses: '200': description: 'Success: List of users on the account' content: text/plain: schema: type: array items: $ref: '#/components/schemas/UserProfilesResponse' application/json: schema: type: array items: $ref: '#/components/schemas/UserProfilesResponse' text/json: schema: type: array items: $ref: '#/components/schemas/UserProfilesResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/Accounts/{id}/collaboration-matrix/_filter: post: tags: - Accounts summary: Query the account for instances where two or more persons have collaborated on the same project description: 'When a project ID is supplied, the results will be constrained to the persons within that project. If the project ID is omitted, the results will pull for the entire account and can be filtered by person IDs.
Permissions
Role: Read
Allocation: Read
Person: Read
HourlyRole: Read
HourlyAllocation: Read' operationId: Accounts_QueryCollaborationMatrix parameters: - name: id in: path description: The account ID required: true schema: type: integer format: int32 requestBody: description: filter object including personIds, projectId, roleType, salariedRoleType, and roleNameIds content: application/json-patch+json: schema: $ref: '#/components/schemas/CollaborationMatrixPredicatesFilter' application/json: schema: $ref: '#/components/schemas/CollaborationMatrixPredicatesFilter' text/json: schema: $ref: '#/components/schemas/CollaborationMatrixPredicatesFilter' application/*+json: schema: $ref: '#/components/schemas/CollaborationMatrixPredicatesFilter' required: true responses: '200': description: 'Success: List of projects with person IDs where two or more persons have collaborated' content: text/plain: schema: $ref: '#/components/schemas/CollaborationMatrixResponse' application/json: schema: $ref: '#/components/schemas/CollaborationMatrixResponse' text/json: schema: $ref: '#/components/schemas/CollaborationMatrixResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden components: schemas: CollaborationMatrixProject: type: object properties: name: type: string nullable: true personIds: type: array items: type: integer format: int64 nullable: true id: type: integer format: int64 nullable: true hcopId: type: string format: uuid 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 AccountResponse: type: object properties: id: type: integer format: int32 example: 45 name: type: string nullable: true example: A Great Account logoUrl: type: string nullable: true example: http://www.example.com/logo.png status: enum: - Active - Deactivated - All type: string example: Active numProjects: type: integer format: int32 example: 14 numPeople: type: integer format: int32 example: 68 numMembers: type: integer format: int32 example: 7 expiryDate: type: string format: date-time nullable: true example: '2030-12-31' totalPeopleAttachmentBytes: type: integer format: int64 example: 512 useMetricUnits: type: boolean description: The account level flag on whether units should be displayed using metric or U.S. imperial by caller. example: true organizationId: type: string format: uuid nullable: true oktaOrganizationId: type: string nullable: true example: org_fdfjhsdflsdfsd isDemo: type: boolean example: true companyType: type: string nullable: true example: General Contractor marketSegment: type: string nullable: true example: SMB oktaOrgName: type: string nullable: true example: Okta Organization Name crmAccountId: type: string nullable: true crmOpportunityId: type: string nullable: true additionalProperties: false AccountRoleCategoryResponse: type: object properties: projectId: type: integer format: int64 example: 213 id: type: integer format: int64 example: 134 name: type: string nullable: true example: North Tower additionalProperties: false AccountFilterPredicates: type: object properties: accountIds: type: array items: type: integer format: int32 nullable: true state: enum: - Active - Deactivated - All type: string name: type: string nullable: true organizationId: type: string format: uuid nullable: true isDemo: type: boolean 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 CollaborationMatrixPredicatesFilter: type: object properties: offset: type: integer format: int32 limit: type: integer format: int32 predicates: $ref: '#/components/schemas/CollaborationMatrixPredicates' additionalProperties: false ProfileResponse: type: object properties: personId: type: integer format: int64 example: 1280 fields: type: array items: $ref: '#/components/schemas/FieldValuesResponse' nullable: true additionalProperties: false HourlyRoleAllocation: 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 personHourlyCost: type: number format: double nullable: true additionalProperties: false ProjectExperienceFieldValuesResponse: type: object properties: experienceFieldId: type: string format: uuid nullable: true experienceFieldValueIds: type: array items: type: string format: uuid nullable: true fieldId: type: integer format: int64 example: 1394 name: type: string nullable: true example: Contact Number type: enum: - Boolean - Date - Email - PhoneNumber - Image - Text - LongText - SingleSelect - MultiSelect - Address - Currency - Phone - Integer - Number type: string example: PhoneNumber values: type: array items: type: string nullable: true example: - '5195555555' isRequired: type: boolean isSystem: type: boolean example: false isPrivate: type: boolean example: true isFinancials: type: boolean example: true lastModifiedOn: type: string format: date-time nullable: true example: '2021-05-27T10:58:23.530Z' additionalProperties: false HourlyRoleRequirement: 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 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 ProjectHourlyRoleDetail: type: object properties: projectId: type: integer format: int64 example: 9381 projectName: type: string nullable: true example: Ahrens Lofts projectColour: type: string description: 'The color associated with the project, expressed as a web color string: a ''#'' character, followed by a six-digit hexadecimal number.' nullable: true example: '#4B6BAA' projectStatus: enum: - Canceled - Upcoming - Active - Complete - Pursuit - Lost type: string projectType: enum: - Awarded - Opportunity type: string roleId: type: integer format: int64 example: 3817 roleName: type: string nullable: true example: Project Manager roleHourlyCost: type: number format: double nullable: true example: 123.45 roleType: enum: - Salaried - Hourly - All type: string example: Hourly sortOrder: type: integer format: int32 startDate: type: string format: date-time endDate: type: string format: date-time startTime: type: string format: date-span example: 09:00:00 endTime: type: string format: date-span example: '17:00:00' workDays: type: array items: enum: - 0 - 1 - 2 - 3 - 4 - 5 - 6 type: integer format: int32 nullable: true example: - 1 - 2 - 3 - 4 - 5 skillSet: type: array items: type: integer format: int64 nullable: true roleNote: type: string nullable: true categoryId: type: integer format: int64 nullable: true isFilled: type: boolean billable: type: boolean requirements: type: array items: $ref: '#/components/schemas/HourlyRoleRequirement' description: 'A requirement is a slot of time marked with an allocation %, which represents times that the role is required on the project. Requirements are fulfilled by allocations, which are an assignment of a person to a role over a certain amount of time and with its own allocation %.' nullable: true allocations: type: array items: $ref: '#/components/schemas/HourlyRoleAllocation' description: 'An allocation is an assignment of a person to a role over a certain time and with an associated allocation %.' nullable: true unfilledRanges: type: array items: $ref: '#/components/schemas/HourlyRoleUnfilled' nullable: true notification: $ref: '#/components/schemas/RoleNotificationData' isCommunicated: type: boolean hire: $ref: '#/components/schemas/RoleHire' createdBy: type: integer format: int32 createdOn: type: string format: date-time roleTags: type: array items: $ref: '#/components/schemas/ProjectRoleTagEntity' nullable: true additionalProperties: false HourlyRoleUnfilled: 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 AccountSort: type: object properties: sortBy: enum: - 0 - 1 - 2 - 3 - 4 - 5 type: integer format: int32 direction: enum: - Asc - Desc type: string 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 ProjectRoleDetail: type: object properties: projectId: type: integer format: int64 example: 9381 projectName: type: string nullable: true example: Ahrens Lofts projectColour: type: string description: 'The color associated with the project, expressed as a web color string: a ''#'' character, followed by a six-digit hexadecimal number.' nullable: true example: '#4B6BAA' projectStatus: enum: - Canceled - Upcoming - Active - Complete - Pursuit - Lost type: string projectType: enum: - Awarded - Opportunity type: string taskId: type: string format: uuid nullable: true example: 00000000-0000-0000-0000-000000000000 roleId: type: integer format: int64 example: 3817 roleName: type: string nullable: true example: Project Manager roleCost: type: number format: double nullable: true example: 123.45 roleType: enum: - Salaried - Hourly - All type: string example: Salaried sortOrder: type: integer format: int32 startDate: type: string format: date-time endDate: type: string format: date-time skillSet: type: array items: type: integer format: int64 nullable: true roleNote: type: string nullable: true categoryId: type: integer format: int64 nullable: true isFilled: type: boolean billable: type: boolean roleTags: type: array items: $ref: '#/components/schemas/ProjectRoleTagEntity' nullable: true requirements: type: array items: $ref: '#/components/schemas/RoleRequirement' description: 'A requirement is a slot of time marked with an allocation %, which represents times that the role is required on the project. Requirements are fulfilled by allocations, which are an assignment of a person to a role over a certain amount of time and with its own allocation %.' nullable: true allocations: type: array items: $ref: '#/components/schemas/RoleAllocation' description: 'An allocation is an assignment of a person to a role over a certain time and with an associated allocation %.' nullable: true unfilledRanges: type: array items: $ref: '#/components/schemas/RoleUnfilled' nullable: true externalId: type: string nullable: true notification: $ref: '#/components/schemas/RoleNotificationData' isCommunicated: type: boolean hire: $ref: '#/components/schemas/RoleHire' createdBy: type: integer format: int32 createdOn: type: string format: date-time additionalProperties: false FieldValuesResponse: type: object properties: fieldId: type: integer format: int64 example: 1394 name: type: string nullable: true example: Contact Number type: enum: - Boolean - Date - Email - PhoneNumber - Image - Text - LongText - SingleSelect - MultiSelect - Address - Currency - Phone - Integer - Number type: string example: PhoneNumber values: type: array items: type: string nullable: true example: - '5195555555' isRequired: type: boolean isSystem: type: boolean example: false isPrivate: type: boolean example: true isFinancials: type: boolean example: true lastModifiedOn: type: string format: date-time nullable: true example: '2021-05-27T10:58:23.530Z' additionalProperties: false CollaborationMatrixPredicates: type: object properties: personIds: type: array items: type: integer format: int64 nullable: true projectId: type: integer format: int64 nullable: true roleType: enum: - Salaried - Hourly - All type: string salariedRoleType: enum: - Operations - Preconstruction - All type: string roleNameIds: type: array items: type: integer format: int64 nullable: true additionalProperties: false UserProfilesResponse: type: object properties: id: type: integer format: int32 example: 2313 name: type: string nullable: true example: John Smith title: type: string nullable: true example: Human Resources Manager state: enum: - Inactive - Enabled - Disabled - PendingEmailChange type: string example: Active additionalProperties: false ProjectFieldValuesResponse: type: object properties: projectId: type: integer format: int64 example: 8391 fields: type: array items: $ref: '#/components/schemas/ProjectExperienceFieldValuesResponse' nullable: true additionalProperties: false AccountFilterPredicatesAccountSortSortedFilter: type: object properties: offset: type: integer format: int32 limit: type: integer format: int32 predicates: $ref: '#/components/schemas/AccountFilterPredicates' sort: $ref: '#/components/schemas/AccountSort' additionalProperties: false PersonCertificationResponse: type: object properties: id: type: integer format: int64 example: 1234 name: type: string nullable: true example: CPR Training abbreviation: type: string nullable: true example: CPR expiryDate: type: string format: date-time nullable: true example: '2021-01-01' daysWarnBeforeExpire: type: integer format: int32 nullable: true example: 9 certificationDate: type: string format: date-time nullable: true example: '2021-12-20' certificationDescription: type: string description: Must be no greater than 255 characters. nullable: true example: '"Certification for fall arrest"' hasAttachment: type: boolean state: enum: - Info - Warning - Expired - All type: string readOnly: true example: Info 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 CollaborationMatrixResponse: type: object properties: projects: type: array items: $ref: '#/components/schemas/CollaborationMatrixProject' nullable: true personIds: type: array items: type: integer format: int64 nullable: true additionalProperties: false securitySchemes: Bearer: type: http description: Standard Authorization header using the Bearer scheme scheme: bearer bearerFormat: JWT