openapi: 3.0.4 info: title: Bench 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' paths: /rp/api/v1/accounts/{accountId}/activities/_filter: post: tags: - AccountActivities summary: Retrieves activity logs for the specified account with optional filtering and pagination. description: 'This endpoint returns a paginated list of activities that occurred within the account. The results can be filtered by: - Person IDs (maximum 10) - Project IDs (maximum 10) - Date range (happenedFrom and happenedTo) - User IDs who triggered the events (maximum 10) - Activity types (maximum 25) Note: Either PersonIds or ProjectIds can be specified, but not both simultaneously. The response includes a `query-has-more` header indicating whether additional records are available beyond the current page.
Permissions
Private: Read
Finance: Read
Person: Read
HourlyProfile: Read
Project: Read
Communication: Read
Role: Read
HourlyRole: Read
Allocation: Read
HourlyAllocation: Read
Settings: Read' operationId: AccountActivities_Filter parameters: - name: accountId in: path description: The account ID (must be greater than zero) required: true schema: type: integer format: int32 requestBody: description: "The filter criteria containing:\n- offset: Starting position for pagination (default: 0, must be non-negative)\n\ - limit: Maximum number of records to return (default: 25, range: 1-50)\n- predicates: Optional filtering predicates\ \ including:\n - personIds: Array of person IDs to filter by (max 50 items)\n - projectIds: Array of project IDs\ \ to filter by (max 10 items)\n - happenedFrom: Start date for filtering events (optional, range: 1900-01-01 to\ \ 2100-01-01)\n - happenedTo: End date for filtering events (optional, range: 1900-01-01 to 2100-01-01, must be\ \ after happenedFrom if both provided)\n - triggeredByUserIds: Array of user IDs who triggered the events (max\ \ 10 items)\n - activityTypes: Array of activity type strings (max 25 items)\n - triggeredByIntegrations: Boolean\ \ to include activities triggered by integrations (default: true)\n - triggeredByUsers: Boolean to include activities\ \ triggered by users (default: true)\n - groupingIds: Array of grouping IDs to filter by" content: application/json-patch+json: schema: $ref: '#/components/schemas/ActivitiesFilter' application/json: schema: $ref: '#/components/schemas/ActivitiesFilter' text/json: schema: $ref: '#/components/schemas/ActivitiesFilter' application/*+json: schema: $ref: '#/components/schemas/ActivitiesFilter' responses: '200': description: Successfully retrieved the activity logs. The response includes a `query-has-more` header indicating if more records are available. headers: query-has-more: description: Query has more resources beyond the pagination requested schema: type: boolean description: Query has more resources beyond the pagination requested content: application/json: schema: type: array items: $ref: '#/components/schemas/ActivityResponse' '400': description: Bad Request - Invalid filter parameters or validation errors (e.g., invalid date range, too many filter values, invalid activity type format) '401': description: Unauthorized - Authentication token is missing or invalid '403': description: Forbidden - User does not have required permissions or account access /rp/api/v1/accounts/{accountId}/certifications: get: tags: - AccountCertifications summary: Gets the certifications for the given account description: '
Permissions
Account: Read' operationId: AccountCertifications_Query parameters: - name: accountId 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 responses: '200': description: 'Success: List of certifications on the account sorted by name' content: application/json: schema: type: array items: $ref: '#/components/schemas/CertificationResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden post: tags: - AccountCertifications summary: Adds a certification on the given account. description: '
Permissions
Account: Write' operationId: AccountCertifications_Add parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 requestBody: description: Request object that contains the certification details content: application/json: schema: $ref: '#/components/schemas/NewCertificationRequest' required: true responses: '201': description: Success content: application/json: schema: $ref: '#/components/schemas/NewCertificationResponse' example: id: 213 name: Transportation of Dangerous Goods abbreviation: TDG requireExpiration: true daysWarnBeforeExpire: 7 inUse: [] '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '409': description: Conflict /rp/api/v1/accounts/{accountId}/certifications/{id}: get: tags: - AccountCertifications summary: Gets the the specified certification for the given account by ID description: '
Permissions
Account: Read' operationId: AccountCertifications_Get parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: The Certification's ID required: true schema: type: integer format: int32 responses: '200': description: 'Success: Certification model' content: application/json: schema: $ref: '#/components/schemas/CertificationResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden patch: tags: - AccountCertifications summary: Updates a certification for the given account description: '
Permissions
Account: Write' operationId: AccountCertifications_Update parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: Id of the certification to update required: true schema: type: integer format: int32 requestBody: description: Request object in the body with fields to change content: application/json: schema: type: object additionalProperties: type: string example: name: Transportation of Dangerous Goods abbreviation: TDG requireExpiration: 'false' daysWarnBeforeExpire: null required: true responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '409': description: Conflict delete: tags: - AccountCertifications summary: Deletes a certification from the given account description: 'NOTE: this will delete all linked attachments to person certifications.
Permissions
Account: Write
Private: Read' operationId: AccountCertifications_Delete parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: Id of the certification to remove required: true schema: type: integer format: int32 responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/groupings: get: tags: - AccountGroupings summary: Gets the groupings for the given account description: '
Permissions
Account: Read' operationId: AccountGroupings_Query parameters: - name: accountId 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 the resultset schema: maximum: 2147483647 minimum: 1 type: integer format: int32 default: 1000 responses: '200': description: 'Success: List of groupings on the account sorted by name' content: application/json: schema: type: array items: $ref: '#/components/schemas/AccountGroupingResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '503': description: Service Unavailable post: tags: - AccountGroupings summary: Adds a grouping on the given account. description: '
Permissions
Account: Write' operationId: AccountGroupings_Add parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 requestBody: description: Request object that contains the grouping details content: application/json: schema: $ref: '#/components/schemas/AccountGroupingRequest' required: true responses: '201': description: Success content: application/json: schema: $ref: '#/components/schemas/AccountGroupingResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '409': description: Conflict '503': description: Service Unavailable /rp/api/v1/accounts/{accountId}/groupings/{id}: get: tags: - AccountGroupings summary: Gets the the specified grouping for the given account by ID description: '
Permissions
Account: Read' operationId: AccountGroupings_Get parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: The grouping's ID required: true schema: type: integer format: int32 responses: '200': description: 'Success: grouping model' content: application/json: schema: $ref: '#/components/schemas/AccountGroupingResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '503': description: Service Unavailable patch: tags: - AccountGroupings summary: Updates a grouping for the given account description: '
Permissions
Account: Write' operationId: AccountGroupings_Update parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: Id of the grouping to update required: true schema: type: integer format: int32 requestBody: description: Request object in the body with fields to change content: application/json: schema: $ref: '#/components/schemas/AccountGroupingRequest' required: true responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '409': description: Conflict '503': description: Service Unavailable delete: tags: - AccountGroupings summary: Deletes a grouping from the given account description: '
Permissions
Account: Write' operationId: AccountGroupings_Delete parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: Id of the grouping to remove required: true schema: type: integer format: int32 responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '503': description: Service Unavailable /rp/api/v1/accounts/{accountId}/invitations: get: tags: - AccountInvitations summary: Gets all invitations for an account description: '
Permissions
Account: Read' operationId: AccountInvitations_Query parameters: - name: accountId in: path description: The ID of the account 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: Number of invitations to pull at a time schema: maximum: 2147483647 minimum: 1 type: integer format: int32 default: 1000 responses: '200': description: 'Success: List of invitations in the account' content: text/plain: schema: type: array items: $ref: '#/components/schemas/InvitationResponse' application/json: schema: type: array items: $ref: '#/components/schemas/InvitationResponse' text/json: schema: type: array items: $ref: '#/components/schemas/InvitationResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden post: tags: - AccountInvitations summary: Sends an join invitation to the given email for an account description: '
Permissions
Account: Write' operationId: AccountInvitations_Post parameters: - name: accountId in: path description: The ID of the account required: true schema: type: integer format: int32 requestBody: description: Request object that contains email content: application/json-patch+json: schema: $ref: '#/components/schemas/AccountInvitationRequest' application/json: schema: $ref: '#/components/schemas/AccountInvitationRequest' text/json: schema: $ref: '#/components/schemas/AccountInvitationRequest' application/*+json: schema: $ref: '#/components/schemas/AccountInvitationRequest' required: true responses: '201': description: 'Created: Invitation Response object' content: text/plain: schema: $ref: '#/components/schemas/InvitationResponse' application/json: schema: $ref: '#/components/schemas/InvitationResponse' text/json: schema: $ref: '#/components/schemas/InvitationResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/invitations/{id}: delete: tags: - AccountInvitations summary: Removes the account's invitation by ID description: '
Permissions
Account: Write' operationId: AccountInvitations_Delete parameters: - name: accountId in: path description: The account Id required: true schema: type: integer format: int32 - name: id in: path description: The Invitation Id required: true schema: type: integer format: int64 responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/users: get: tags: - AccountUsers summary: Gets the users for the given account description: '
Permissions
Account: Read' operationId: AccountUsers_Query parameters: - name: accountId 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: group in: query description: Optional parameter to filter results based on user groups schema: type: string - 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 - name: nameSearch in: query description: (Optional) Searches for users by partial name match (minimum 3 characters). schema: type: string responses: '200': description: 'Success: List of users on the account' content: text/plain: schema: type: array items: $ref: '#/components/schemas/UserResponse' application/json: schema: type: array items: $ref: '#/components/schemas/UserResponse' text/json: schema: type: array items: $ref: '#/components/schemas/UserResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/users/{id}: get: tags: - AccountUsers summary: Gets the the specified user for the given account by ID description: '
Permissions
Account: Read' operationId: AccountUsers_Get parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: The User's ID required: true schema: type: integer format: int32 responses: '200': description: 'Success: List of users on the account' content: text/plain: schema: $ref: '#/components/schemas/UserResponse' application/json: schema: $ref: '#/components/schemas/UserResponse' text/json: schema: $ref: '#/components/schemas/UserResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden patch: tags: - AccountUsers summary: Updates a user for the given account description: 'Name or Title can be null, but they cannot be empty/whitespace. If null the value will not be changed.
Permissions
Account: Write' operationId: AccountUsers_Patch parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: Id of the user to update required: true schema: type: integer format: int32 requestBody: description: Request object in the body with fields to change content: application/json-patch+json: schema: $ref: '#/components/schemas/UserRequest' application/json: schema: $ref: '#/components/schemas/UserRequest' text/json: schema: $ref: '#/components/schemas/UserRequest' application/*+json: schema: $ref: '#/components/schemas/UserRequest' required: true responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '409': description: Conflict delete: tags: - AccountUsers summary: Deactivates a user from the given account description: 'Adminsitrators can only deactivate other users from the account and not themselves.
Permissions
Account: Write' operationId: AccountUsers_Delete parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: Id of the user to remove required: true schema: type: integer format: int32 responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/users/{id}/membership: put: tags: - AccountUsers summary: Modify user's permission group in the account. description: 'Groups in the account can be fetched from the api/v{version}/accounts/{accountId}/groups endpoint.
Permissions
Account: Write' operationId: AccountUsers_SetMembership parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: ID of the user to modify required: true schema: type: integer format: int32 requestBody: description: Request object for the user content: application/json-patch+json: schema: $ref: '#/components/schemas/AccountMembershipRequest' application/json: schema: $ref: '#/components/schemas/AccountMembershipRequest' text/json: schema: $ref: '#/components/schemas/AccountMembershipRequest' application/*+json: schema: $ref: '#/components/schemas/AccountMembershipRequest' required: true responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/users/{userId}/reset-auth-method: post: tags: - AccountUsers summary: 'Resets a user''s authentication method and sends a new invitation email. This can be used to switch a user from SSO to username/password authentication. Note: users can be on multiple accounts in an organization. This resets the auth method in all accounts within the organization.' description: '
Permissions
Account: Write' operationId: AccountUsers_ResetAuthMethod parameters: - name: accountId in: path description: The account that is currently calling this method. required: true schema: type: integer format: int32 - name: userId in: path description: The ID of the account user. required: true schema: type: integer format: int32 responses: '202': description: Accepted '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '422': description: Unprocessable Entity /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 /rp/api/v1/accounts/{accountId}/projects/{projectId}/Allocations: get: tags: - Allocations summary: Gets the allocations for roles in the given account and project description: '
Permissions
Person: Read
Role: Read
Allocation: Read
Private: Read
Finance: Read' operationId: Allocations_Query 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: 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: 1000 - name: personstate in: query description: State of persons to filter results by (Default Active) schema: enum: - Active - Deactivated - All type: string default: Active - name: daysUntilTimeOff in: query description: Used to calculate the upcoming TimeOff unavailabilities based on the relativeDate schema: type: integer format: int32 default: 15 - name: type in: query description: Salaried role type to filter results by (Default to Operations) schema: enum: - Operations - Preconstruction - All type: string default: Operations responses: '200': description: 'Success: List of allocations for roles on the project' content: text/plain: schema: type: array items: $ref: '#/components/schemas/ProjectAllocation' example: - roleId: 8673 taskId: null allocations: - personCost: 123.45 personId: 2234 name: John Smith title: Project Engineer state: Active startDate: '2020-01-01' endDate: '2020-12-31' hasConflict: false allocationState: Current type: 0 id: 00000000-0000-0000-0000-000000000000 titleIdAtAssignment: null upcomingTimeOff: null taskName: null categoryId: null categoryName: null - roleId: 8674 taskId: null allocations: - personCost: 123.45 personId: 2234 name: James William title: Project Manager state: Active startDate: '2019-01-01' endDate: '2019-12-31' hasConflict: false allocationState: Past type: 0 id: 00000000-0000-0000-0000-000000000000 titleIdAtAssignment: null upcomingTimeOff: null taskName: null categoryId: null categoryName: null - roleId: 8675 taskId: null allocations: - personCost: 123.45 personId: 2234 name: Mary Johnson title: Project Coordinator state: Active startDate: '2021-01-01' endDate: '2021-12-31' hasConflict: false allocationState: Upcoming type: 0 id: 00000000-0000-0000-0000-000000000000 titleIdAtAssignment: null upcomingTimeOff: null taskName: null categoryId: null categoryName: null application/json: schema: type: array items: $ref: '#/components/schemas/ProjectAllocation' example: - roleId: 8673 taskId: null allocations: - personCost: 123.45 personId: 2234 name: John Smith title: Project Engineer state: Active startDate: '2020-01-01' endDate: '2020-12-31' hasConflict: false allocationState: Current type: 0 id: 00000000-0000-0000-0000-000000000000 titleIdAtAssignment: null upcomingTimeOff: null taskName: null categoryId: null categoryName: null - roleId: 8674 taskId: null allocations: - personCost: 123.45 personId: 2234 name: James William title: Project Manager state: Active startDate: '2019-01-01' endDate: '2019-12-31' hasConflict: false allocationState: Past type: 0 id: 00000000-0000-0000-0000-000000000000 titleIdAtAssignment: null upcomingTimeOff: null taskName: null categoryId: null categoryName: null - roleId: 8675 taskId: null allocations: - personCost: 123.45 personId: 2234 name: Mary Johnson title: Project Coordinator state: Active startDate: '2021-01-01' endDate: '2021-12-31' hasConflict: false allocationState: Upcoming type: 0 id: 00000000-0000-0000-0000-000000000000 titleIdAtAssignment: null upcomingTimeOff: null taskName: null categoryId: null categoryName: null text/json: schema: type: array items: $ref: '#/components/schemas/ProjectAllocation' example: - roleId: 8673 taskId: null allocations: - personCost: 123.45 personId: 2234 name: John Smith title: Project Engineer state: Active startDate: '2020-01-01' endDate: '2020-12-31' hasConflict: false allocationState: Current type: 0 id: 00000000-0000-0000-0000-000000000000 titleIdAtAssignment: null upcomingTimeOff: null taskName: null categoryId: null categoryName: null - roleId: 8674 taskId: null allocations: - personCost: 123.45 personId: 2234 name: James William title: Project Manager state: Active startDate: '2019-01-01' endDate: '2019-12-31' hasConflict: false allocationState: Past type: 0 id: 00000000-0000-0000-0000-000000000000 titleIdAtAssignment: null upcomingTimeOff: null taskName: null categoryId: null categoryName: null - roleId: 8675 taskId: null allocations: - personCost: 123.45 personId: 2234 name: Mary Johnson title: Project Coordinator state: Active startDate: '2021-01-01' endDate: '2021-12-31' hasConflict: false allocationState: Upcoming type: 0 id: 00000000-0000-0000-0000-000000000000 titleIdAtAssignment: null upcomingTimeOff: null taskName: null categoryId: null categoryName: null '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden post: tags: - Allocations summary: Allocates a person to a 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: Unavaialble 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 Unavaialble 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
Person: Read
Role: Read
Allocation: Write
Private: Read' operationId: Allocations_Post 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 requestBody: description: Request object containing the person, role, start and end date to allocate content: application/json-patch+json: schema: $ref: '#/components/schemas/ProjectAllocationRequest' application/json: schema: $ref: '#/components/schemas/ProjectAllocationRequest' text/json: schema: $ref: '#/components/schemas/ProjectAllocationRequest' application/*+json: schema: $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 put: tags: - Allocations summary: Updates a person's allocation on a 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: Unavaialble 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 Unavaialble 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
Person: Read
Role: Read
Allocation: Write
Private: Read' operationId: Allocations_Put 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 requestBody: description: Request object containing the person, role, start and end date to allocate content: application/json-patch+json: schema: $ref: '#/components/schemas/ProjectAllocationRequest' application/json: schema: $ref: '#/components/schemas/ProjectAllocationRequest' text/json: schema: $ref: '#/components/schemas/ProjectAllocationRequest' application/*+json: schema: $ref: '#/components/schemas/ProjectAllocationRequest' required: true responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '422': description: Unprocessable Entity delete: tags: - Allocations summary: Removes a person's allocation on a role on the given account and project description: 'The request must contain the role id, 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
Person: Read
Role: Read
Allocation: Write' operationId: Allocations_Delete 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 requestBody: description: Request object containing the person, role, start and end date to allocate content: application/json-patch+json: schema: $ref: '#/components/schemas/ProjectAllocationRequest' application/json: schema: $ref: '#/components/schemas/ProjectAllocationRequest' text/json: schema: $ref: '#/components/schemas/ProjectAllocationRequest' application/*+json: schema: $ref: '#/components/schemas/ProjectAllocationRequest' 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}/experience-fields/{experienceFieldId}/values: post: tags: - ExperienceFieldValues summary: Create new experience field values description: '
Permissions
Account: Write' operationId: ExperienceFieldValues_Create parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: experienceFieldId in: path description: The Experience Field UUID required: true schema: type: string format: uuid requestBody: description: Field Values request object content: application/json-patch+json: schema: type: array items: $ref: '#/components/schemas/ExperienceFieldValueRequest' application/json: schema: type: array items: $ref: '#/components/schemas/ExperienceFieldValueRequest' text/json: schema: type: array items: $ref: '#/components/schemas/ExperienceFieldValueRequest' application/*+json: schema: type: array items: $ref: '#/components/schemas/ExperienceFieldValueRequest' responses: '200': description: OK content: text/plain: schema: type: array items: $ref: '#/components/schemas/ExperienceFieldValueResponse' application/json: schema: type: array items: $ref: '#/components/schemas/ExperienceFieldValueResponse' text/json: schema: type: array items: $ref: '#/components/schemas/ExperienceFieldValueResponse' get: tags: - ExperienceFieldValues summary: Query all existing values for an experience field description: '
Permissions
Account: Read' operationId: ExperienceFieldValues_Query parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: experienceFieldId in: path description: The Experience Field UUID required: true schema: type: string format: uuid - name: offset in: query description: Offset value for paging results schema: maximum: 2147483647 minimum: 0 type: integer format: int32 default: 0 - name: limit in: query description: Limit the number of results per page schema: maximum: 2147483647 minimum: 1 type: integer format: int32 default: 1000 - name: name in: query description: Filter by name with a contains check not exact match schema: type: string responses: '200': description: OK content: text/plain: schema: type: array items: $ref: '#/components/schemas/ExperienceFieldValueResponse' application/json: schema: type: array items: $ref: '#/components/schemas/ExperienceFieldValueResponse' text/json: schema: type: array items: $ref: '#/components/schemas/ExperienceFieldValueResponse' /rp/api/v1/accounts/{accountId}/experience-fields/{experienceFieldId}/values/{experienceFieldValueId}: delete: tags: - ExperienceFieldValues summary: Delete an existing experience field value description: '
Permissions
Account: Write' operationId: ExperienceFieldValues_Delete parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: experienceFieldId in: path description: The Experience Field UUID required: true schema: type: string format: uuid - name: experienceFieldValueId in: path description: The Field Value ID UUID required: true schema: type: string format: uuid responses: '204': description: No Content post: tags: - ExperienceFieldValues summary: Update a value for an existing experience field description: '
Permissions
Account: Write' operationId: ExperienceFieldValues_Update parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: experienceFieldId in: path description: The Experience Field UUID required: true schema: type: string format: uuid - name: experienceFieldValueId in: path description: The Experience Field Value ID UUID required: true schema: type: string format: uuid requestBody: description: Field Value request object content: application/json-patch+json: schema: $ref: '#/components/schemas/ExperienceFieldValueRequest' application/json: schema: $ref: '#/components/schemas/ExperienceFieldValueRequest' text/json: schema: $ref: '#/components/schemas/ExperienceFieldValueRequest' application/*+json: schema: $ref: '#/components/schemas/ExperienceFieldValueRequest' responses: '204': description: No Content /rp/api/v1/accounts/{accountId}/experience-fields: get: tags: - ExperienceFields summary: Query all experience fields for an account. description: '
Permissions
Account: Read' operationId: ExperienceFields_Query parameters: - name: accountId in: path required: true schema: type: integer format: int32 responses: '200': description: 'Success: All experience fields in the account' content: text/plain: schema: type: array items: $ref: '#/components/schemas/ExperienceFieldResponse' application/json: schema: type: array items: $ref: '#/components/schemas/ExperienceFieldResponse' text/json: schema: type: array items: $ref: '#/components/schemas/ExperienceFieldResponse' '401': description: Unauthorized '403': description: Forbidden post: tags: - ExperienceFields summary: Promote custom fields to experience fields description: '
Permissions
Account: Write' operationId: ExperienceFields_PromoteCustomFields parameters: - name: accountId in: path required: true schema: type: integer format: int32 requestBody: content: application/json-patch+json: schema: type: array items: type: integer format: int64 application/json: schema: type: array items: type: integer format: int64 text/json: schema: type: array items: type: integer format: int64 application/*+json: schema: type: array items: type: integer format: int64 required: true responses: '200': description: 'Success: All custom fields promoted to experience fields' content: text/plain: schema: type: array items: $ref: '#/components/schemas/ExperienceFieldResponse' application/json: schema: type: array items: $ref: '#/components/schemas/ExperienceFieldResponse' text/json: schema: type: array items: $ref: '#/components/schemas/ExperienceFieldResponse' '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/experience-fields/candidates: get: tags: - ExperienceFields summary: Query candidate experience fields for an account. description: '
Permissions
Account: Write' operationId: ExperienceFields_QueryCandidates parameters: - name: accountId in: path required: true schema: type: integer format: int32 responses: '200': description: 'Success: All experience field candidates for an account' content: text/plain: schema: type: array items: $ref: '#/components/schemas/ExperienceFieldCandidateResponse' application/json: schema: type: array items: $ref: '#/components/schemas/ExperienceFieldCandidateResponse' text/json: schema: type: array items: $ref: '#/components/schemas/ExperienceFieldCandidateResponse' '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/experience-fields/{experienceFieldId}: delete: tags: - ExperienceFields summary: Demote experience fields description: '
Permissions
Account: Write' operationId: ExperienceFields_DemoteExperienceField parameters: - name: accountId in: path required: true schema: type: integer format: int32 - name: experienceFieldId in: path required: true schema: type: string format: uuid responses: '204': description: No Content '200': description: 'Success: All experience fields demoted' '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/external/persons/{externalId}: get: tags: - External operationId: External_GetPerson parameters: - name: accountId in: path required: true schema: type: integer format: int32 - name: externalId in: path required: true schema: type: string responses: '200': description: OK /rp/api/v1/accounts/{accountId}/external/projects/{externalId}: get: tags: - External operationId: External_GetProject parameters: - name: accountId in: path required: true schema: type: integer format: int32 - name: externalId in: path required: true schema: type: string responses: '200': description: OK /rp/api/v1/accounts/{accountId}/external/roles/{externalId}: get: tags: - External operationId: External_GetProjectRole parameters: - name: accountId in: path required: true schema: type: integer format: int32 - name: externalId in: path required: true schema: type: string responses: '200': description: OK /rp/api/v1/accounts/{accountId}/projects/{projectId}/hourly-allocations: get: tags: - HourlyAllocations summary: Gets the allocations for hourly roles in the given account and project description: '
Permissions
HourlyProfile: Read
HourlyRole: Read
HourlyAllocation: Read
Private: Read
Finance: Read' operationId: HourlyAllocations_Query 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: 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: 1000 - name: personstate in: query description: State of persons to filter results by (Default Active) schema: enum: - Active - Deactivated - All type: string default: Active - name: daysUntilTimeOff in: query description: Used to calculate the upcoming TimeOff unavailabilities based on the relativeDate schema: type: integer format: int32 default: 15 responses: '200': description: 'Success: List of allocations for hourly roles on the project' content: text/plain: schema: type: array items: $ref: '#/components/schemas/ProjectHourlyAllocation' application/json: schema: type: array items: $ref: '#/components/schemas/ProjectHourlyAllocation' text/json: schema: type: array items: $ref: '#/components/schemas/ProjectHourlyAllocation' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden post: tags: - HourlyAllocations summary: Allocates an hourly person to an hourly 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: Unavaialble 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 Unavaialble 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
HourlyProfile: Write
HourlyRole: Write
HourlyAllocation: Write' operationId: HourlyAllocations_Post 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 requestBody: description: Request object containing the person, role, start and end date to allocate content: application/json-patch+json: schema: $ref: '#/components/schemas/ProjectAllocationRequest' application/json: schema: $ref: '#/components/schemas/ProjectAllocationRequest' text/json: schema: $ref: '#/components/schemas/ProjectAllocationRequest' application/*+json: schema: $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 put: tags: - HourlyAllocations summary: Updates an hourly person's allocation on an hourly role on the given account and project description: 'An hourly 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: Unavaialble from 2020-01-11 to 2020-01-25, Allocation date from 2020-01-20 to 2020-03-31, will alocate the hourly person from 2020-01-26 to 2020-03-31 Unavaialble from 2020-01-11 to 2020-01-25, Allocation date from 2020-01-01 to 2020-03-31, will alocate the hourly person from 2020-01-01 to 2020-01-10 AND 2020-01-26 to 2020-03-31
Permissions
HourlyProfile: Write
HourlyRole: Write
HourlyAllocation: Write
Private: Read' operationId: HourlyAllocations_Put 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 requestBody: description: Request object containing the hourly person, hourly role, start and end date to allocate content: application/json-patch+json: schema: $ref: '#/components/schemas/ProjectAllocationRequest' application/json: schema: $ref: '#/components/schemas/ProjectAllocationRequest' text/json: schema: $ref: '#/components/schemas/ProjectAllocationRequest' application/*+json: schema: $ref: '#/components/schemas/ProjectAllocationRequest' required: true responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '422': description: Unprocessable Entity delete: tags: - HourlyAllocations summary: Removes an hourly person's allocation on a role on the given account and project description: 'The request must contain the role id, 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
HourlyProfile: Write
HourlyRole: Write
HourlyAllocation: Write' operationId: HourlyAllocations_Delete 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 requestBody: description: Request object containing the person, role, start and end date to allocate content: application/json-patch+json: schema: $ref: '#/components/schemas/ProjectAllocationRequest' application/json: schema: $ref: '#/components/schemas/ProjectAllocationRequest' text/json: schema: $ref: '#/components/schemas/ProjectAllocationRequest' application/*+json: schema: $ref: '#/components/schemas/ProjectAllocationRequest' 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/{id}/hourly-role-names: get: tags: - HourlyRoleNames summary: Get hourly role names in the account description: '
Permissions
Account: Read
Finance: Read
HourlyRole: Read' operationId: HourlyRoleNames_Get parameters: - name: id in: path description: The account ID required: true schema: type: integer format: int32 responses: '200': description: Success content: text/plain: schema: type: array items: $ref: '#/components/schemas/HourlyRoleNameResponse' application/json: schema: type: array items: $ref: '#/components/schemas/HourlyRoleNameResponse' text/json: schema: type: array items: $ref: '#/components/schemas/HourlyRoleNameResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden - User doesn't have permissions on this resource, or the project couldn't be found post: tags: - HourlyRoleNames summary: Add/Update hourly role name(s) in the account description: 'If "alphabetize" parameter flag is true, the role names should be alphabetically ordered by caller, otherwise in the order of the request. To add or update role names you must have permissions to manage account properties.
Permissions
Account: Write
HourlyRole: Write' operationId: HourlyRoleNames_Post parameters: - name: id in: path description: The account ID required: true schema: type: integer format: int32 - name: alphabetize in: query description: Optional flag to set whether role names should be alphabetically ordered by the caller schema: type: boolean default: false requestBody: description: The role name detail content: application/json-patch+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/HourlyRoleNameRequest' application/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/HourlyRoleNameRequest' text/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/HourlyRoleNameRequest' application/*+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/HourlyRoleNameRequest' required: true responses: '200': description: Success content: text/plain: schema: type: array items: $ref: '#/components/schemas/HourlyRoleNameResponse' application/json: schema: type: array items: $ref: '#/components/schemas/HourlyRoleNameResponse' text/json: schema: type: array items: $ref: '#/components/schemas/HourlyRoleNameResponse' '400': description: Bad Request - Request has missing or invalid values '401': description: Unauthorized '403': description: Forbidden - User doesn't have permissions on this resource, or the project couldn't be found delete: tags: - HourlyRoleNames summary: Remove hourly role name(s) by ID in the account description: 'To remove hourly role names you must have permissions to manage account properties. NOTE: The account must contain at least 1 role name.
Permissions
Account: Write
HourlyRole: Write' operationId: HourlyRoleNames_Delete parameters: - name: id in: path description: The account ID required: true schema: type: integer format: int32 requestBody: description: The IDs of the role name to be removed content: application/json-patch+json: schema: minItems: 1 type: array items: type: integer format: int64 application/json: schema: minItems: 1 type: array items: type: integer format: int64 text/json: schema: minItems: 1 type: array items: type: integer format: int64 application/*+json: schema: minItems: 1 type: array items: type: integer format: int64 required: true responses: '204': description: No Content - Success '401': description: Unauthorized '403': description: Forbidden - User doesn't have permissions on this resource, or the project couldn't be found '422': description: Validation failed - if the role name is being used by any role, the name cannot be removed /rp/api/v1/accounts/{accountId}/persons/{personId}/attachments: get: tags: - PersonAttachments summary: Gets the attachments for the given person description: '
Permissions
Person: Read
HourlyProfile: Read
Private: Read' operationId: PersonAttachments_Query parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: personId in: path description: The Person ID required: true schema: 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: 100 - name: state in: query description: The state of the attachment for filter schema: enum: - InProgress - Completed - Failed - All type: string default: Completed - name: creatorId in: query description: The ID of attachment creator for filter schema: type: integer format: int32 responses: '200': description: 'Success: List of attachments on the account' content: application/json: schema: type: array items: $ref: '#/components/schemas/AttachmentResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden post: tags: - PersonAttachments summary: Add an attachment to a person. description: 'User needs either Person:Write or HourlyProfile:Write or PeopleCerts:Write or HourlyPeopleCerts:Write permissions depending on the person type to add an attachment.
Permissions
Person: Write
HourlyProfile: Write
PeopleCerts: Write
HourlyPeopleCerts: Write
Private: Read' operationId: PersonAttachments_Post parameters: - name: accountId in: path description: The account ID required: true schema: type: integer format: int32 - name: personId in: path description: The person ID required: true schema: type: integer format: int64 requestBody: description: The request body for the attachment content: application/json: schema: $ref: '#/components/schemas/NewAttachmentRequest' required: true responses: '201': description: 'Created: Attachment response object with upload URL' content: application/json: schema: $ref: '#/components/schemas/NewAttachmentResponse' '401': description: Unauthorized '403': description: Forbidden '409': description: Conflict - Attachment name exists '422': description: Unprocessable Entity - attachment account limit has been exceeded /rp/api/v1/accounts/{accountId}/persons/{personId}/attachments/{id}: get: tags: - PersonAttachments summary: Get a person's attachment by ID. description: '
Permissions
Person: Read
HourlyProfile: Read
Private: Read' operationId: PersonAttachments_Get parameters: - name: accountId in: path description: The account ID required: true schema: type: integer format: int32 - name: personId in: path description: The person ID required: true schema: type: integer format: int64 - name: id in: path description: The attachment ID required: true schema: type: integer format: int64 responses: '200': description: 'Success: an attachment in response' content: application/json: schema: $ref: '#/components/schemas/AttachmentResponse' '401': description: Unauthorized '403': description: Forbidden delete: tags: - PersonAttachments summary: Delete an attachment from a person. description: 'User needs either Person:Write or HourlyProfile:Write or PeopleCerts:Write or HourlyPeopleCerts:Write permissions depending on the person type to delete an attachment.
Permissions
Person: Write
HourlyProfile: Write
PeopleCerts: Write
HourlyPeopleCerts: Write
Private: Read' operationId: PersonAttachments_Delete parameters: - name: accountId in: path description: The account ID required: true schema: type: integer format: int32 - name: personId in: path description: The person ID required: true schema: type: integer format: int64 - name: id in: path description: The attachment ID required: true schema: type: integer format: int64 responses: '204': description: No Content '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/persons/{personId}/certifications/{certId}/attachments: get: tags: - PersonCertAttachments summary: Get all attachments for a person's certification. description: '
Permissions
Person: Read
HourlyProfile: Read
PersonCerts: Read
HourlyCerts: Read
Private: Read' operationId: PersonCertAttachments_Query parameters: - name: accountId in: path description: The account ID required: true schema: type: integer format: int32 - name: personId in: path description: The person ID required: true schema: type: integer format: int64 - name: certId in: path description: The certification ID required: true schema: type: integer format: int64 - name: offset in: query description: The offset for paging response schema: maximum: 2147483647 minimum: 0 type: integer format: int32 default: 0 - name: limit in: query description: The amount of items in the response schema: maximum: 2147483647 minimum: 1 type: integer format: int32 default: 100 - name: state in: query description: The state of the attachment for filter schema: enum: - InProgress - Completed - Failed - All type: string default: Completed - name: creatorId in: query description: The ID of attachment creator for filter schema: type: integer format: int32 responses: '200': description: 'Success: List of Attachments' content: application/json: schema: type: array items: $ref: '#/components/schemas/AttachmentResponse' '401': description: Unauthorized '403': description: Forbidden post: tags: - PersonCertAttachments summary: Link an attachment to a person's certification. description: '
Permissions
Person: Read
HourlyProfile: Read
Private: Read
PersonCerts: Write
HourlyCerts: Write' operationId: PersonCertAttachments_Post parameters: - name: accountId in: path description: The account ID required: true schema: type: integer format: int32 - name: personId in: path description: The person ID required: true schema: type: integer format: int64 - name: certId in: path description: The certification ID required: true schema: type: integer format: int64 requestBody: description: The request body for the linking content: application/json: schema: $ref: '#/components/schemas/PersonCertAttachmentRequest' required: true responses: '204': description: No Content '401': description: Unauthorized '403': description: Forbidden '409': description: Conflict /rp/api/v1/accounts/{accountId}/persons/{personId}/certifications/{certId}/attachments/{id}: get: tags: - PersonCertAttachments summary: Get an attachment by ID for a person's certification. description: '
Permissions
Person: Read
HourlyProfile: Read
PersonCerts: Read
HourlyCerts: Read
Private: Read' operationId: PersonCertAttachments_Get parameters: - name: accountId in: path description: The account ID required: true schema: type: integer format: int32 - name: personId in: path description: The person ID required: true schema: type: integer format: int64 - name: certId in: path description: The certification ID required: true schema: type: integer format: int64 - name: id in: path description: The attachment ID required: true schema: type: integer format: int64 responses: '200': description: 'Success: an attachment in response' content: application/json: schema: $ref: '#/components/schemas/AttachmentResponse' '401': description: Unauthorized '403': description: Forbidden delete: tags: - PersonCertAttachments summary: Unlink an attachment from a person's certification. description: '
Permissions
Person: Read
HourlyProfile: Read
Private: Read
PersonCerts: Write
HourlyCerts: Write' operationId: PersonCertAttachments_Delete parameters: - name: accountId in: path description: The account ID required: true schema: type: integer format: int32 - name: personId in: path description: The person ID required: true schema: type: integer format: int64 - name: certId in: path description: The certification ID required: true schema: type: integer format: int64 - name: id in: path description: The attachment ID required: true schema: type: integer format: int64 responses: '204': description: No Content '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/persons/{personId}/certifications: get: tags: - PersonCertifications summary: Gets the certifications for the given person description: '
Permissions
Person: Read
HourlyProfile: Read
PersonCerts: Read
HourlyCerts: Read
Private: Read' operationId: PersonCertifications_Query parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: personId in: path description: The Person 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 person certifications that match the ids passed in. schema: type: array items: type: integer format: int64 responses: '200': description: 'Success: List of person certifications on the account sorted by name' content: application/json: schema: type: array items: $ref: '#/components/schemas/PersonCertificationResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden post: tags: - PersonCertifications summary: Adds a certification on the given person. description: '
Permissions
Person: Read
HourlyProfile: Read
PersonCerts: Write
HourlyCerts: Write' operationId: PersonCertifications_Add parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: personId in: path description: The Person ID required: true schema: type: integer format: int32 requestBody: description: Request object that contains the certification details content: application/json: schema: $ref: '#/components/schemas/NewPersonCertificationRequest' required: true responses: '201': description: Success content: application/json: schema: $ref: '#/components/schemas/PersonCertificationResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '409': description: Conflict /rp/api/v1/accounts/{accountId}/persons/{personId}/certifications/{id}: get: tags: - PersonCertifications summary: Gets the specified certification for the given person by ID description: '
Permissions
Person: Read
HourlyProfile: Read
PersonCerts: Read
HourlyCerts: Read
Private: Read' operationId: PersonCertifications_Get parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: personId in: path description: The Person ID required: true schema: type: integer format: int32 - name: id in: path description: The Certification's ID required: true schema: type: integer format: int32 responses: '200': description: 'Success: Certification model' content: application/json: schema: $ref: '#/components/schemas/PersonCertificationResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden put: tags: - PersonCertifications summary: Updates a certification for the given person description: '
Permissions
Person: Read
HourlyProfile: Read
PersonCerts: Write
HourlyCerts: Write' operationId: PersonCertifications_Update parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: personId in: path description: The Person ID required: true schema: type: integer format: int32 - name: id in: path description: Id of the certification to update required: true schema: type: integer format: int32 requestBody: description: Request object in the body with fields to change content: application/json: schema: $ref: '#/components/schemas/PersonCertificationUpdateRequest' required: true responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '409': description: Conflict delete: tags: - PersonCertifications summary: Deletes a certification from the given person and the linked attachments description: 'NOTE: this will delete all linked attachments.
Permissions
Person: Read
HourlyProfile: Read
Private: Read
PersonCerts: Write
HourlyCerts: Write' operationId: PersonCertifications_Delete parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: personId in: path description: The Person ID required: true schema: type: integer format: int32 - name: id in: path description: Id of the certification to remove required: true schema: type: integer format: int32 responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/persons/{personId}/person-field-values: get: tags: - PersonFieldValue summary: Gets all custom field values for the given person. description: '
Permissions
Person: Read
HourlyProfile: Read
Private: Read
Finance: Read' operationId: PersonFieldValue_QueryFieldValues parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: personId in: path description: The Person ID required: true schema: type: integer format: int64 - 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 responses: '200': description: Success content: text/plain: schema: type: array items: $ref: '#/components/schemas/FieldValuesResponse' application/json: schema: type: array items: $ref: '#/components/schemas/FieldValuesResponse' text/json: schema: type: array items: $ref: '#/components/schemas/FieldValuesResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden post: tags: - PersonFieldValue summary: Add or update one or more custom field values on a person description: 'It is mandatory that the fields with isRequired set to true be passed in as part of the request. Example: Say you have 2 person fields on an account "Contact Number" and "Certifications" where isRequired is set to true on "Contact Number". FieldDefinition Example Response - GET PersonFields (/api/v{version}/accounts/{id}/person-fields) [
  {
    "id": 1394,
    "name": "Contact Number",
    "type": "PhoneNumber",
    "isRequired": true,
    "isSystem": false,
    "isPrivate": false,
    "isFinancials": false,
    "isLocked": false
  },
  {
    "id": 1395,
    "name": "Certifications",
    "type": "Text",
    "isRequired": false,
    "isSystem": false,
    "isPrivate": false,
    "isFinancials": false,
    "isLocked": false
  }
]
If you only send in the following your request will result in a 400. [
  {
    "fieldId": 1395,
    "values": [
      "First Aid"
    ]
  }
]

Validation

Single List Selection: A list where only 1 value can be selected. When creating the list, each value should be between 1 and 250 non-empty characters. Multi List Selection: A list where 0 or more values can be selected. When creating the list, each value should be between 1 and 250 non-empty characters. Text: Min length: 0. Max length: 250 Date selector: Format: dd/MM/yyyy Other: Max length: 2400 Checkbox: Accepted values: ```true``` or ```false``` Currency: ^[0-9]{0,15}(\\.[0-9]{0,2})?$ Currency should be greater or equal to zero, starts with 0 to 15 digits of ```0-9``` then optionally followed by ```.``` with 0 to 2 digits of ```0-9``` Phone: ^\\+[1-9]\d{10,14}$ Phone starts with a ```+``` followed by 11 to 15 digits of ```0-9``` where the first digit is not ```0```
Permissions
Person: Write
HourlyProfile: Write
Private: Read
Finance: Read' operationId: PersonFieldValue_SetFieldValues parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: personId in: path description: The Person ID required: true schema: type: integer format: int64 requestBody: description: '' content: application/json-patch+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldValuesPair' application/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldValuesPair' text/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldValuesPair' application/*+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldValuesPair' required: true responses: '200': description: OK '204': description: No Content (success) '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden - User doesn't have permissions on this resource, or the account or person couldn't be found '422': description: Unprocessable Entity patch: tags: - PersonFieldValue summary: Update field values on a person description: '

Validation

Single List Selection: A list where only 1 value can be selected. When creating the list, each value should be between 1 and 250 non-empty characters. Multi List Selection: A list where 0 or more values can be selected. When creating the list, each value should be between 1 and 250 non-empty characters. Text: Min length: 0. Max length: 250 Date selector: Format: dd/MM/yyyy Other: Max length: 2400 Checkbox: Accepted values: ```true``` or ```false``` Currency: ^[0-9]{0,15}(\\.[0-9]{0,2})?$ Currency should be greater or equal to zero, starts with 0 to 15 digits of ```0-9``` then optionally followed by ```.``` with 0 to 2 digits of ```0-9``` Phone: ^\\+[1-9]\d{10,14}$ Phone starts with a ```+``` followed by 11 to 15 digits of ```0-9``` where the first digit is not ```0```
Permissions
Person: Write
HourlyProfile: Write
Private: Read
Finance: Read' operationId: PersonFieldValue_BulkUpdateFieldValues parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: personId in: path description: The Person ID required: true schema: type: integer format: int64 requestBody: description: '' content: application/json-patch+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldValuesPair' application/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldValuesPair' text/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldValuesPair' application/*+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldValuesPair' required: true responses: '200': description: OK '204': description: No Content (success) '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden - User doesn't have permissions on this resource, or the account or person couldn't be found delete: tags: - PersonFieldValue summary: Delete one or more custom field values for a person description: '
Permissions
Person: Write
HourlyProfile: Write
Private: Read
Finance: Read' operationId: PersonFieldValue_ClearFieldValues parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: personId in: path description: The Person ID required: true schema: type: integer format: int64 requestBody: description: The field IDs for which the custom values should be deleted content: application/json-patch+json: schema: minItems: 1 type: array items: type: integer format: int64 application/json: schema: minItems: 1 type: array items: type: integer format: int64 text/json: schema: minItems: 1 type: array items: type: integer format: int64 application/*+json: schema: minItems: 1 type: array items: type: integer format: int64 required: true responses: '200': description: OK '204': description: No Content (success) '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden - User doesn't have permissions on this resource, or the account or person couldn't be found /rp/api/v1/accounts/{accountId}/persons/{personId}/person-field-values/{fieldId}: patch: tags: - PersonFieldValue summary: Update a single field's value(s) for person in the given account. description: '

Validation

Single List Selection: A list where only 1 value can be selected. When creating the list, each value should be between 1 and 250 non-empty characters. Multi List Selection: A list where 0 or more values can be selected. When creating the list, each value should be between 1 and 250 non-empty characters. Text: Min length: 0. Max length: 250 Date selector: Format: dd/MM/yyyy Other: Max length: 2400 Checkbox: Accepted values: ```true``` or ```false``` Currency: ^[0-9]{0,15}(\\.[0-9]{0,2})?$ Currency should be greater or equal to zero, starts with 0 to 15 digits of ```0-9``` then optionally followed by ```.``` with 0 to 2 digits of ```0-9``` Phone: ^\\+[1-9]\d{10,14}$ Phone starts with a ```+``` followed by 11 to 15 digits of ```0-9``` where the first digit is not ```0```
Permissions
Person: Write
HourlyProfile: Write
Private: Read
Finance: Read' operationId: PersonFieldValue_UpdateFieldValue parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: personId in: path description: The Person ID required: true schema: type: integer format: int64 - name: fieldId in: path description: The field ID required: true schema: type: integer format: int64 requestBody: description: '' content: application/json-patch+json: schema: $ref: '#/components/schemas/FieldValuesRequest' application/json: schema: $ref: '#/components/schemas/FieldValuesRequest' text/json: schema: $ref: '#/components/schemas/FieldValuesRequest' application/*+json: schema: $ref: '#/components/schemas/FieldValuesRequest' required: true responses: '200': description: OK '204': description: No Content (success) '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden - User doesn't have permissions on this resource, or the account or person couldn't be found '422': description: Unprocessable Entity /rp/api/v1/accounts/{id}/person-fields: get: tags: - PersonFields summary: Get all the person field definitions on the given account. description: '
Permissions
Account: Read
Private: Read
Finance: Read
Person: Read
HourlyProfile: Read' operationId: PersonFields_Query parameters: - name: id in: path description: The account ID required: true schema: type: integer format: int32 responses: '200': description: 'Success: List of Field Definitions' content: text/plain: schema: type: array items: $ref: '#/components/schemas/PersonFieldDefinitionResponse' application/json: schema: type: array items: $ref: '#/components/schemas/PersonFieldDefinitionResponse' text/json: schema: type: array items: $ref: '#/components/schemas/PersonFieldDefinitionResponse' '401': description: Unauthorized '403': description: Forbidden post: tags: - PersonFields summary: Adds or updates person field definitions on the given account. description: 'If you pass in a FieldDefRequest object without an "id" this endpoint will add a new one to the account if the name isn''t reserved or in use. If you pass in a FieldDefRequest object with an "id" this endpoint will update an existing one that matches the id. To add a value or multiple values to a selection list you must pass an array of "definedValues" that contain objects with a "definedValue" property of the value you want to add. To update a value or multiple values in a selection list you must pass an array of "definedValues" that contain objects with a "valueId" property of the value id to update and a "definedValue" property of the value you want to update it to. To remove a value or multiple values from a selection list you must pass an array of "definedValues" that contain objects with a "valueId" property of the value id to remove, a "definedValue" property of the value you want to remove, and a "forRemoval" property set to true. Example: You have a list of "Years" and you want to change "5" to "5-9" and remove values "6" through "9" and add a value of "10+" [
  {
    "id": 123,
    "name": "Years",
    "type": "SingleSelect",
    "definedValues": [
      {
        "valueId": 584,
        "definedValue": "5-9",
        "forRemoval": false,
        "deleteExperienceFieldValues": false
      },
      {
        "valueId": 585,
        "definedValue": "6",
        "forRemoval": true,
        "deleteExperienceFieldValues": false
      },
      {
        "valueId": 586,
        "definedValue": "7",
        "forRemoval": true,
        "deleteExperienceFieldValues": false
      },
      {
        "valueId": 587,
        "definedValue": "8",
        "forRemoval": true,
        "deleteExperienceFieldValues": false
      },
      {
        "valueId": 588,
        "definedValue": "9",
        "forRemoval": true,
        "deleteExperienceFieldValues": false
      },
      {
        "valueId": 0,
        "definedValue": "10+",
        "forRemoval": false,
        "deleteExperienceFieldValues": false
      }
    ],
    "isRequired": true,
    "isPrivate": false,
    "isLocked": false
  }
]
NOTE: There are a few reserved field names that cannot be used. "Person ID","Photo","Name","Title","Next Availability","Current Project","Issues","Email","Hire Date","Termination Date","Allocated People","Next project","Past projects","Next project start","Current project end","Notes","Certifications","Group", "Company Tenure", "Industry Tenure", "Industry Start Date"

Validation

Title: SingleSelect. A list where only 1 value can be selected. When creating the list, each value should be between 1 and 250 non-empty characters. Title (Hourly): SingleSelect. A list where only 1 value can be selected. When creating the list, each value should be between 1 and 250 non-empty characters. Skill Set: Multi List Selection. A list where 0 or more values can be selected. When creating the list, each value should be between 1 and 250 non-empty characters Skill Set (Hourly): Multi List Selection. A list where 0 or more values can be selected. When creating the list, each value should be between 1 and 250 non-empty characters Other: Free text. Max length: 2400 Home Address: Max length: 250 Cost Rate (hr): Currency. Should be greater or equal to zero, starts with 0 to 15 digits of ```0-9``` then optionally followed by ```.``` with 0 to 2 digits of ```0-9``` Employee ID: Free text. Max length: 250 Date: Format: dd/MM/yyyy Checkbox: Accepted values: true or false
Permissions
Account: Write
Private: Read
Finance: Read' operationId: PersonFields_Post parameters: - name: id in: path required: true schema: type: integer format: int32 requestBody: content: application/json-patch+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldDefRequest' example: - id: 123 name: Years type: SingleSelect definedValues: - valueId: 584 definedValue: 5-9 forRemoval: false deleteExperienceFieldValues: false - valueId: 585 definedValue: '6' forRemoval: true deleteExperienceFieldValues: false - valueId: 586 definedValue: '7' forRemoval: true deleteExperienceFieldValues: false - valueId: 587 definedValue: '8' forRemoval: true deleteExperienceFieldValues: false - valueId: 588 definedValue: '9' forRemoval: true deleteExperienceFieldValues: false - valueId: 0 definedValue: 10+ forRemoval: false deleteExperienceFieldValues: false isRequired: true isPrivate: false isLocked: false application/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldDefRequest' example: - id: 123 name: Years type: SingleSelect definedValues: - valueId: 584 definedValue: 5-9 forRemoval: false deleteExperienceFieldValues: false - valueId: 585 definedValue: '6' forRemoval: true deleteExperienceFieldValues: false - valueId: 586 definedValue: '7' forRemoval: true deleteExperienceFieldValues: false - valueId: 587 definedValue: '8' forRemoval: true deleteExperienceFieldValues: false - valueId: 588 definedValue: '9' forRemoval: true deleteExperienceFieldValues: false - valueId: 0 definedValue: 10+ forRemoval: false deleteExperienceFieldValues: false isRequired: true isPrivate: false isLocked: false text/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldDefRequest' example: - id: 123 name: Years type: SingleSelect definedValues: - valueId: 584 definedValue: 5-9 forRemoval: false deleteExperienceFieldValues: false - valueId: 585 definedValue: '6' forRemoval: true deleteExperienceFieldValues: false - valueId: 586 definedValue: '7' forRemoval: true deleteExperienceFieldValues: false - valueId: 587 definedValue: '8' forRemoval: true deleteExperienceFieldValues: false - valueId: 588 definedValue: '9' forRemoval: true deleteExperienceFieldValues: false - valueId: 0 definedValue: 10+ forRemoval: false deleteExperienceFieldValues: false isRequired: true isPrivate: false isLocked: false application/*+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldDefRequest' example: - id: 123 name: Years type: SingleSelect definedValues: - valueId: 584 definedValue: 5-9 forRemoval: false deleteExperienceFieldValues: false - valueId: 585 definedValue: '6' forRemoval: true deleteExperienceFieldValues: false - valueId: 586 definedValue: '7' forRemoval: true deleteExperienceFieldValues: false - valueId: 587 definedValue: '8' forRemoval: true deleteExperienceFieldValues: false - valueId: 588 definedValue: '9' forRemoval: true deleteExperienceFieldValues: false - valueId: 0 definedValue: 10+ forRemoval: false deleteExperienceFieldValues: false isRequired: true isPrivate: false isLocked: false required: true responses: '200': description: 'Success: List of Field Definitions added or updated' content: text/plain: schema: type: array items: $ref: '#/components/schemas/PersonFieldDefinitionResponse' application/json: schema: type: array items: $ref: '#/components/schemas/PersonFieldDefinitionResponse' text/json: schema: type: array items: $ref: '#/components/schemas/PersonFieldDefinitionResponse' '400': description: 'Bad Request: Example when trying to set system fields to private that aren''t allowed to be private: {
  "errors": [
    {
      "errorType": "CannotBeMadePrivate",
      "description": "Fields in request cannot be made private.",
      "errorCode": null,
      "field": "Id",
      "values": [
        "5"
      ],
      "innerException": null,
      "hResult": -2146233088
    }
  ],
  "title": "One or more validation errors occurred.",
  "status": 400,
  "instance": "/api/v1/accounts/2/person-fields",
  "requestUid": "3dd10d1b-392f-4d5a-b736-50ea1f072342"
}
' '401': description: Unauthorized '403': description: Forbidden '409': description: "Conflict - Field definition with name already exists in the account or trying to add or update a field\ \ to a system field.\n\n Example when trying to add a field that has the same name as an existing one:\n\ {
  \"errors\": [
    {
      \"\ errorType\": \"Duplicate\",
      \"description\": \"A name in the request is already in use.\"\ ,
      \"errorCode\": null,
      \"\ innerException\": null,
      \"hResult\": -2146233088
    }
  ],
  \"\ title\": \"One or more validation errors occurred.\",
  \"status\"\ : 409,
  \"instance\": \"/api/v1/accounts/2/person-fields\",
  \"requestUid\"\ : \"8ba8f060-858b-46d9-b3cc-fa1c391ebc66\"
}
" '422': description: "Unprocessable Entity - Couldn't remove all defined values from list.\n\n Example when trying\ \ to remove a defined value in use from a required list:\n{
  \"errors\": [
    {
      \"\ errorType\": \"DefinedValueError\",
      \"description\": \"23001: Cannot remove field defined value. It is in use for required field(s)\"\ ,
      \"errorCode\": null,
      \"\ innerException\": null,
      \"hResult\": -2146233088
    }
  ],
  \"\ title\": \"One or more validation errors occurred.\",
  \"status\"\ : 422,
  \"instance\": \"/api/v1/accounts/2/person-fields\",
  \"requestUid\"\ : \"fb8b2dd9-360f-4a81-852c-e5b70cfa5a85\"
}
" delete: tags: - PersonFields summary: Deletes one or more person field definitions in the given account by ids description: 'NOTE: system fields cannot be deleted.
Permissions
Account: Write' operationId: PersonFields_Delete parameters: - name: id in: path required: true schema: type: integer format: int32 requestBody: content: application/json-patch+json: schema: minItems: 1 type: array items: type: integer format: int64 application/json: schema: minItems: 1 type: array items: type: integer format: int64 text/json: schema: minItems: 1 type: array items: type: integer format: int64 application/*+json: schema: minItems: 1 type: array items: type: integer format: int64 required: true responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '422': description: "Unprocessable Entity: Attempted to remove system field(s)\n\n Example Response:\n{
  \"\ errors\": [
    {
      \"errorType\": \"\ NotAllowed\",
      \"description\": \"Cannot delete system field(s)\"\ ,
      \"errorCode\": null,
      \"\ innerException\": null,
      \"hResult\": -2146233088
    }
  ],
  \"\ title\": \"One or more validation errors occurred.\",
  \"status\"\ : 422,
  \"instance\": \"/api/v1/accounts/2/person-fields\",
  \"requestUid\"\ : \"3b3cbfaa-a809-4529-8870-317654a3311e\"
}
" /rp/api/v1/accounts/{id}/person-fields/_reorder: put: tags: - PersonFields summary: Update the display order of person field definitions for the given account. description: 'Accepts an array of objects containing fieldId and displayOrder. System fields cannot be reordered and should not be included in the request. All custom fields should be included with their new display order values.
Permissions
Account: Write' operationId: PersonFields_UpdateFieldOrder parameters: - name: id in: path description: The account ID required: true schema: type: integer format: int32 requestBody: description: Array of field order updates content: application/json-patch+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldOrderRequest' application/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldOrderRequest' text/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldOrderRequest' application/*+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldOrderRequest' required: true responses: '200': description: 'Success: Field order updated' content: text/plain: schema: type: array items: $ref: '#/components/schemas/PersonFieldDefinitionResponse' application/json: schema: type: array items: $ref: '#/components/schemas/PersonFieldDefinitionResponse' text/json: schema: type: array items: $ref: '#/components/schemas/PersonFieldDefinitionResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/persons/{personId}/groupings: post: tags: - PersonGroupings summary: Set grouping to the person in the given account description: '
Permissions
Person: Write
HourlyProfile: Write' operationId: PersonGroupings_Set parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: personId in: path description: The person ID required: true schema: type: integer format: int64 requestBody: description: The IDs of grouping for setting to person content: application/json: schema: minItems: 1 type: array items: type: integer format: int64 required: true responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '503': description: Service Unavailable put: tags: - PersonGroupings summary: Update grouping to the person in the given account description: '
Permissions
Person: Write
HourlyProfile: Write' operationId: PersonGroupings_Put parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: personId in: path description: The person ID required: true schema: type: integer format: int64 requestBody: description: The IDs of grouping for setting to person content: application/json: schema: type: array items: type: integer format: int64 required: true responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '503': description: Service Unavailable /rp/api/v1/accounts/{accountId}/persons/{personId}/groupings/{id}: delete: tags: - PersonGroupings summary: Removes grouping from the person in the given account description: '
Permissions
Person: Write
HourlyProfile: Write' operationId: PersonGroupings_Remove parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: personId in: path description: The person ID required: true schema: type: integer format: int64 - name: id in: path description: The grouping ID for person required: true schema: type: integer format: int64 responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '503': description: Service Unavailable /rp/api/v1/accounts/{accountId}/persons/{personId}/historical-experiences/{historicalExperienceId}/experience-fields: post: tags: - PersonHistoricalExperienceFields summary: "Add historical experience field values for a person in an account.\n \nWorth noting that this endpoint\ \ is purely additive, i.e. idempotent.\nIt will also ignore field sets for fields that are not found under the account.\n\ Furthermore, if an experienceFieldValueId is provided, the corresponding value will be ignored." description: '
Permissions
Account: Write' operationId: PersonHistoricalExperienceFields_Post parameters: - name: accountId in: path description: The account ID. required: true schema: type: integer format: int32 - name: personId in: path description: The person ID. required: true schema: type: integer format: int64 - name: historicalExperienceId in: path description: The historical experience ID. required: true schema: type: string format: uuid requestBody: description: The request body. content: application/json-patch+json: schema: $ref: '#/components/schemas/HistoricalExperienceFieldValuesPostRequest' application/json: schema: $ref: '#/components/schemas/HistoricalExperienceFieldValuesPostRequest' text/json: schema: $ref: '#/components/schemas/HistoricalExperienceFieldValuesPostRequest' application/*+json: schema: $ref: '#/components/schemas/HistoricalExperienceFieldValuesPostRequest' responses: '201': description: The added historical experience field values. content: text/plain: schema: $ref: '#/components/schemas/HistoricalExperienceFieldValuesPostResponse' application/json: schema: $ref: '#/components/schemas/HistoricalExperienceFieldValuesPostResponse' text/json: schema: $ref: '#/components/schemas/HistoricalExperienceFieldValuesPostResponse' '403': description: User is not authorized to update profile historical experience. ? /rp/api/v1/accounts/{accountId}/persons/{personId}/historical-experiences/{historicalExperienceId}/experience-fields/{experienceFieldId} : patch: tags: - PersonHistoricalExperienceFields summary: Update a historical experience field value for a person in an account. description: '
Permissions
Account: Write' operationId: PersonHistoricalExperienceFields_Patch parameters: - name: accountId in: path description: The account ID. required: true schema: type: integer format: int32 - name: personId in: path description: The person ID. required: true schema: type: integer format: int64 - name: historicalExperienceId in: path description: The historical experience ID. required: true schema: type: string format: uuid - name: experienceFieldId in: path description: The experience field ID. required: true schema: type: string format: uuid requestBody: description: The request body. content: application/json-patch+json: schema: $ref: '#/components/schemas/HistoricalExperienceFieldValueUpdateRequest' application/json: schema: $ref: '#/components/schemas/HistoricalExperienceFieldValueUpdateRequest' text/json: schema: $ref: '#/components/schemas/HistoricalExperienceFieldValueUpdateRequest' application/*+json: schema: $ref: '#/components/schemas/HistoricalExperienceFieldValueUpdateRequest' responses: '200': description: The updated historical experience field value. content: text/plain: schema: $ref: '#/components/schemas/HistoricalExperienceFieldValue' application/json: schema: $ref: '#/components/schemas/HistoricalExperienceFieldValue' text/json: schema: $ref: '#/components/schemas/HistoricalExperienceFieldValue' '400': description: The target experience field value not found. '403': description: User is not authorized to update profile historical experience. delete: tags: - PersonHistoricalExperienceFields summary: Delete a historical experience field value for a person in an account. description: '
Permissions
Account: Write' operationId: PersonHistoricalExperienceFields_Delete parameters: - name: accountId in: path description: The account ID. required: true schema: type: integer format: int32 - name: personId in: path description: The person ID. required: true schema: type: integer format: int64 - name: historicalExperienceId in: path description: The historical experience ID. required: true schema: type: string format: uuid - name: experienceFieldId in: path description: The experience field ID. required: true schema: type: string format: uuid responses: '204': description: The historical experience field value is deleted. '403': description: User is not authorized to update profile historical experience, or if the experience field value is not found /rp/api/v1/accounts/{accountId}/persons/{personId}/historical-experiences: get: tags: - PersonHistoricalExperiences summary: List historical experience entries for a person. description: '
Permissions
Person: Read' operationId: PersonHistoricalExperiences_GetAll parameters: - name: accountId in: path description: The account ID. required: true schema: type: integer format: int32 - name: personId in: path description: The person ID. required: true schema: type: integer format: int64 - name: limit in: query description: How many to retrieve (1-100, default 50). schema: maximum: 100 minimum: 1 type: integer format: int32 default: 50 - name: offset in: query description: How many to skip (default 0). schema: type: integer format: int32 default: 0 responses: '200': description: The paginated list of historical experience entries. The `query-has-more` header indicates whether more entries are available. content: text/plain: schema: type: array items: $ref: '#/components/schemas/HistoricalExperienceEntryWithExperienceFields' application/json: schema: type: array items: $ref: '#/components/schemas/HistoricalExperienceEntryWithExperienceFields' text/json: schema: type: array items: $ref: '#/components/schemas/HistoricalExperienceEntryWithExperienceFields' '403': description: The user is not authorized to view the historical experience entries. post: tags: - PersonHistoricalExperiences summary: Create a new historical experience entry. description: '
Permissions
Account: Write' operationId: PersonHistoricalExperiences_Post parameters: - name: accountId in: path description: The account ID. required: true schema: type: integer format: int32 - name: personId in: path description: The person ID. required: true schema: type: integer format: int64 requestBody: description: The historical experience request. content: application/json-patch+json: schema: $ref: '#/components/schemas/HistoricalExperienceRequest' application/json: schema: $ref: '#/components/schemas/HistoricalExperienceRequest' text/json: schema: $ref: '#/components/schemas/HistoricalExperienceRequest' application/*+json: schema: $ref: '#/components/schemas/HistoricalExperienceRequest' required: true responses: '201': description: The created historical experience entry. content: text/plain: schema: $ref: '#/components/schemas/HistoricalExperienceFullEntry' application/json: schema: $ref: '#/components/schemas/HistoricalExperienceFullEntry' text/json: schema: $ref: '#/components/schemas/HistoricalExperienceFullEntry' '403': description: The user is not authorized to create the historical experience entry. '422': description: The request is invalid. /rp/api/v1/accounts/{accountId}/persons/{personId}/historical-experiences/{historicalExperienceId}: get: tags: - PersonHistoricalExperiences summary: Get a single historical experience entry. description: '
Permissions
Person: Read' operationId: PersonHistoricalExperiences_GetOne parameters: - name: accountId in: path description: The account ID. required: true schema: type: integer format: int32 - name: personId in: path description: The person ID. required: true schema: type: integer format: int64 - name: historicalExperienceId in: path description: The historical experience ID. required: true schema: type: string format: uuid responses: '201': description: Created content: text/plain: schema: $ref: '#/components/schemas/HistoricalExperienceEntryWithExperienceFields' application/json: schema: $ref: '#/components/schemas/HistoricalExperienceEntryWithExperienceFields' text/json: schema: $ref: '#/components/schemas/HistoricalExperienceEntryWithExperienceFields' '200': description: The historical experience entry. '403': description: The user is not authorized to view the historical experience entry. delete: tags: - PersonHistoricalExperiences summary: Delete a historical experience entry. description: '
Permissions
Account: Write' operationId: PersonHistoricalExperiences_Delete parameters: - name: accountId in: path description: The account ID. required: true schema: type: integer format: int32 - name: personId in: path description: The person ID. required: true schema: type: integer format: int64 - name: historicalExperienceId in: path description: The historical experience ID. required: true schema: type: string format: uuid responses: '204': description: The historical experience entry was deleted. '403': description: The user is not authorized to delete the historical experience entry. put: tags: - PersonHistoricalExperiences summary: Update historical experience entry for a person description: '
Permissions
Account: Write' operationId: PersonHistoricalExperiences_Update parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: personId in: path description: The Person ID required: true schema: type: integer format: int64 - name: historicalExperienceId in: path description: The Historical Experience ID required: true schema: type: string format: uuid requestBody: description: The Historical Experience Update Request content: application/json-patch+json: schema: $ref: '#/components/schemas/HistoricalExperienceUpdateRequest' application/json: schema: $ref: '#/components/schemas/HistoricalExperienceUpdateRequest' text/json: schema: $ref: '#/components/schemas/HistoricalExperienceUpdateRequest' application/*+json: schema: $ref: '#/components/schemas/HistoricalExperienceUpdateRequest' required: true responses: '200': description: Success content: text/plain: schema: $ref: '#/components/schemas/HistoricalExperienceEntryWithExperienceFields' application/json: schema: $ref: '#/components/schemas/HistoricalExperienceEntryWithExperienceFields' text/json: schema: $ref: '#/components/schemas/HistoricalExperienceEntryWithExperienceFields' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden patch: tags: - PersonHistoricalExperiences summary: Patch historical experience entry for a person description: '
Permissions
Account: Write' operationId: PersonHistoricalExperiences_Patch parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: personId in: path description: The Person ID required: true schema: type: integer format: int64 - name: historicalExperienceId in: path description: The Historical Experience ID required: true schema: type: string format: uuid requestBody: description: The Historical Experience Patch Request content: application/json-patch+json: schema: $ref: '#/components/schemas/HistoricalExperiencePatchRequest' application/json: schema: $ref: '#/components/schemas/HistoricalExperiencePatchRequest' text/json: schema: $ref: '#/components/schemas/HistoricalExperiencePatchRequest' application/*+json: schema: $ref: '#/components/schemas/HistoricalExperiencePatchRequest' required: true responses: '200': description: Success content: text/plain: schema: $ref: '#/components/schemas/HistoricalExperienceEntryWithExperienceFields' application/json: schema: $ref: '#/components/schemas/HistoricalExperienceEntryWithExperienceFields' text/json: schema: $ref: '#/components/schemas/HistoricalExperienceEntryWithExperienceFields' '400': description: Bad Request '403': description: Forbidden /rp/api/v1/accounts/{accountId}/persons/{personId}/profile-picture: put: tags: - PersonProfile summary: Updates a person's profile picture with support for upload and set modes. description: 'Two modes of operation: 1. Upload Mode: When no request body is provided, returns a presigned URL for direct image upload to S3. Use a PUT request to upload your image file to the returned signed URL. 2. Set Mode: When a request body with ImageUrl is provided, sets the profile picture to the specified URL
Permissions
Person: Write
HourlyProfile: Write' operationId: PersonProfile_Put parameters: - name: accountId in: path description: The unique identifier of the account required: true schema: type: integer format: int32 - name: personId in: path description: The unique identifier of the person required: true schema: type: integer format: int64 requestBody: description: 'The profile picture request. Can be null for upload mode or contain an ImageUrl for set mode. When null, generates a presigned upload URL. When provided, sets the profile picture to the specified URL.' content: application/json-patch+json: schema: $ref: '#/components/schemas/ProfilePicture' application/json: schema: $ref: '#/components/schemas/ProfilePicture' text/json: schema: $ref: '#/components/schemas/ProfilePicture' application/*+json: schema: $ref: '#/components/schemas/ProfilePicture' responses: '200': description: Success - Profile picture updated or upload URL generated content: text/plain: schema: $ref: '#/components/schemas/ProfilePicture' application/json: schema: $ref: '#/components/schemas/ProfilePicture' text/json: schema: $ref: '#/components/schemas/ProfilePicture' '400': description: Bad Request - Invalid parameters or request format '401': description: Unauthorized - User is not authenticated '403': description: Forbidden - User lacks required permissions or resource not found '422': description: Unprocessable Entity - Unable to process the profile image (e.g., invalid format, upload failure) delete: tags: - PersonProfile summary: Clear a person's profile picture description: '
Permissions
Person: Write
HourlyProfile: Write' operationId: PersonProfile_Delete parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: personId in: path description: The Person ID required: true schema: type: integer format: int64 responses: '204': description: No Content (success) '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden - User doesn't have permissions on this resource, or the account or person couldn't be found /rp/api/v1/accounts/{accountId}/persons/unavailabilities: get: tags: - PersonUnavailabilities summary: Gets the periods of unavailability for persons in the given account description: 'By default this endpoint will return only Periods of Unavailability. NOTE: If you wish to retrieve Pre and Post employment dates you will need to pass the "type" param in the query. NOTE: If you do not have Private Read permissions, description will return as null for private periods of unavailability.
Permissions
Person: Read
HourlyProfile: Read
Unavailabilities: Read
HourlyUnavailabilities: Read
Private: Read' operationId: PersonUnavailabilities_Query parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: start in: query description: 'Date from which to start the range (Default: 0001-01-01)' schema: type: string format: date-time - name: end in: query description: 'Date from which to end the range (Default: 9999-12-31)' schema: type: string format: date-time - name: boundRange in: query description: Setting this value to true will truncate the dates returned to the specified start and end date paramters schema: type: boolean default: false - name: type in: query description: 'Type of the unavailability date range (Default: Unavailability)' schema: enum: - PreEmployment - PostEmployment - Unavailability - TimeOff - All type: string default: Unavailability, TimeOff - name: state in: query description: 'State of persons to filter results by (Default: Active)' schema: enum: - Active - Deactivated - All type: string default: Active - name: personIds in: query description: Optional comma delimited list of person IDs to filter the results if set schema: type: array items: type: integer format: int64 responses: '200': description: 'Success: List of unavailabilities for people in the account by person id' content: text/plain: schema: type: array items: $ref: '#/components/schemas/PersonUnavailabilitiesQueryResponse' application/json: schema: type: array items: $ref: '#/components/schemas/PersonUnavailabilitiesQueryResponse' text/json: schema: type: array items: $ref: '#/components/schemas/PersonUnavailabilitiesQueryResponse' '400': description: 'Bad Request: Example when end date before start date: {
  "errors": [
    {
      "errorType": "ValidationError",
      "description": "End date cannot be before start date",
      "errorCode": null,
      "values": [
        "2020-04-19",
        "2020-04-18"
      ],
      "innerException": null,
      "hResult": -2146233088
    }
  ],
  "title": "One or more validation errors occurred.",
  "status": 400,
  "instance": "/api/v1/accounts/7/persons/unavailabilities?start=2020-04-19&end=2020-04-18",
  "requestUid": "603504966a0861525e83e9f7dfbc2706"
}
' '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/persons/{id}/unavailabilities: get: tags: - PersonUnavailabilities summary: Gets the periods of unavailability for a person in the given account. description: 'NOTE: If you do not have Private Read permissions, description will return as null for private periods of unavailability.
Permissions
Person: Read
HourlyProfile: Read
Unavailabilities: Read
HourlyUnavailabilities: Read
Private: Read' operationId: PersonUnavailabilities_GetUnavailabilities parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: Id of the person to get unavailabilities for required: true schema: type: integer format: int64 - name: start in: query description: 'Date from which to start the range (Default: 0001-01-01)' schema: type: string format: date-time - name: end in: query description: 'Date from which to end the range (Default: 9999-12-31)' schema: type: string format: date-time - name: offset in: query description: The number of items to skip before starting to collect the result set schema: maximum: 2147483647 minimum: 0 type: integer format: int32 default: 0 - name: limit in: query description: The maximum number of results to return schema: maximum: 2147483647 minimum: 1 type: integer format: int32 default: 2147483647 - name: sortOrder in: query description: The order to return unavailabilities. Default is StartDateAscending schema: enum: - StartDateAscending - EndDateDescending type: string default: StartDateAscending responses: '200': description: 'Success: List of unavailabilities for the person in the account' content: text/plain: schema: type: array items: $ref: '#/components/schemas/UnavailabilityResponse' application/json: schema: type: array items: $ref: '#/components/schemas/UnavailabilityResponse' text/json: schema: type: array items: $ref: '#/components/schemas/UnavailabilityResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden post: tags: - PersonUnavailabilities summary: Adds periods of unavailability to a person in the given account description: 'Periods of unavailability cannot overlap with employment dates and cannot overlap with existing periods of unavailability. NOTE: If you do not have Private Write permissions, you cannot create private periods of unavailability.
Permissions
Private: Write
Person: Read
HourlyProfile: Read
Unavailabilities: Write
HourlyUnavailabilities: Write' operationId: PersonUnavailabilities_AddUnavailabilities parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: Id of the person to get unavailabilities for required: true schema: type: integer format: int64 requestBody: description: Array of objects containing description, startDate, endDate, and isPrivate content: application/json-patch+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/NewUnavailabilityRequest' application/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/NewUnavailabilityRequest' text/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/NewUnavailabilityRequest' application/*+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/NewUnavailabilityRequest' required: true responses: '200': description: 'Success: List of the newly created unavailabilities for the person in the account' content: text/plain: schema: type: array items: $ref: '#/components/schemas/UnavailabilityResponse' application/json: schema: type: array items: $ref: '#/components/schemas/UnavailabilityResponse' text/json: schema: type: array items: $ref: '#/components/schemas/UnavailabilityResponse' '400': description: 'Bad Request: Example when start and end date are outside employment dates {
  "errors": [
    {
      "errorType": "Overlapped",
      "description": "Requested unavailable date range outside of employment dates.",
      "errorCode": null,
      "values": [
        "2015-04-01 - 2015-04-30"
      ],
      "innerException": null,
      "hResult": -2146233088
    }
  ],
  "title": "One or more validation errors occurred.",
  "status": 400,
  "instance": "/api/v1/accounts/7/persons/unavailabilities/2",
  "requestUid": "603504966a0861525e83e9f7dfbc2706"
}
Example when start and end dates overlap with each other {
  "errors": [
    {
      "errorType": "Overlapped",
      "description": "Unavailable date ranges overlap with each other.",
      "errorCode": null,
      "values": [
        "2015-04-01 - 2015-04-30",
        "2015-04-15 - 2015-05-30"
      ],
      "innerException": null,
      "hResult": -2146233088
    }
  ],
  "title": "One or more validation errors occurred.",
  "status": 400,
  "instance": "/api/v1/accounts/7/persons/unavailabilities/2",
  "requestUid": "603504966a0861525e83e9f7dfbc2706"
}
' '401': description: Unauthorized '403': description: Forbidden patch: tags: - PersonUnavailabilities summary: Updates periods of unavailability to a person in the given account description: 'This endpoint will only update the fields that are provided in the objects of the array. Any fields not included will use the existing values. NOTE: Periods of unavailability cannot overlap with employment dates and cannot overlap with existing periods of unavailability. NOTE: If you do not have Private Write permissions, you can update the start and end date of private periods of unavailability, but not the description or whether it''s private.
Permissions
Person: Read
HourlyProfile: Read
Private: Write
Unavailabilities: Write
HourlyUnavailabilities: Write' operationId: PersonUnavailabilities_UpdateUnavailabilities parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: Id of the person to get unavailabilities for required: true schema: type: integer format: int64 requestBody: description: Array of objects containing id, description, startDate, endDate, and isPrivate content: application/json-patch+json: schema: type: array items: $ref: '#/components/schemas/UnavailabilityUpdateRequest' application/json: schema: type: array items: $ref: '#/components/schemas/UnavailabilityUpdateRequest' text/json: schema: type: array items: $ref: '#/components/schemas/UnavailabilityUpdateRequest' application/*+json: schema: type: array items: $ref: '#/components/schemas/UnavailabilityUpdateRequest' required: true responses: '200': description: 'Success: List of the updated unavailabilities for the person in the account' content: text/plain: schema: type: array items: $ref: '#/components/schemas/UnavailabilityResponse' application/json: schema: type: array items: $ref: '#/components/schemas/UnavailabilityResponse' text/json: schema: type: array items: $ref: '#/components/schemas/UnavailabilityResponse' '400': description: 'Bad Request: Example when wrong id passed in body {
  "errors": [
    {
      "errorType": "InvalidId",
      "description": "Invalid unavailability id provided.",
      "errorCode": null,
      "values": [
        "5",
        "7"
      ],
      "innerException": null,
      "hResult": -2146233088
    }
  ],
  "title": "One or more validation errors occurred.",
  "status": 400,
  "instance": "/api/v1/accounts/7/persons/unavailabilities/2",
  "requestUid": "603504966a0861525e83e9f7dfbc2706"
}
Example when new start date after end date or new end date before start date {
  "errors": [
    {
      "errorType": "ValidationError",
      "description": "End date cannot be before start date",
      "errorCode": null,
      "values": [
        "2020-04-19",
        "2020-04-18"
      ],
      "innerException": null,
      "hResult": -2146233088
    }
  ],
  "title": "One or more validation errors occurred.",
  "status": 400,
  "instance": "/api/v1/accounts/7/persons/unavailabilities/2",
  "requestUid": "603504966a0861525e83e9f7dfbc2706"
}
Example when start and end date are outside employment dates {
  "errors": [
    {
      "errorType": "Overlapped",
      "description": "Requested unavailable date range outside of employment dates.",
      "errorCode": null,
      "values": [
        "2015-04-01 - 2015-04-30"
      ],
      "innerException": null,
      "hResult": -2146233088
    }
  ],
  "title": "One or more validation errors occurred.",
  "status": 400,
  "instance": "/api/v1/accounts/7/persons/unavailabilities/2",
  "requestUid": "603504966a0861525e83e9f7dfbc2706"
}
Example when start and end dates overlap with each other {
  "errors": [
    {
      "errorType": "Overlapped",
      "description": "Unavailable date ranges overlap with each other.",
      "errorCode": null,
      "values": [
        "2015-04-01 - 2015-04-30",
        "2015-04-15 - 2015-05-30"
      ],
      "innerException": null,
      "hResult": -2146233088
    }
  ],
  "title": "One or more validation errors occurred.",
  "status": 400,
  "instance": "/api/v1/accounts/7/persons/unavailabilities/2",
  "requestUid": "603504966a0861525e83e9f7dfbc2706"
}
' '401': description: Unauthorized '403': description: Forbidden '409': description: 'Conflict: Example when updated unavailabilities overlap with existing unavailabilities {
  "errors": [
    {
      "errorType": "Overlapped",
      "description": "Unavailable date ranges overlap with existing unavailable dates.",
      "errorCode": null,
      "innerException": null,
      "hResult": -2146233088
    }
  ],
  "title": "One or more validation errors occurred.",
  "status": 409,
  "instance": "/api/v1/accounts/7/persons/unavailabilities/2",
  "requestUid": "603504966a0861525e83e9f7dfbc2706"
}
' delete: tags: - PersonUnavailabilities summary: Removes periods of unavailability from a person in the given account description: '
Permissions
Person: Read
HourlyProfile: Read
Private: Read
Unavailabilities: Write
HourlyUnavailabilities: Write' operationId: PersonUnavailabilities_DeleteUnavailabilities parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: Id of the person to get unavailabilities for required: true schema: type: integer format: int64 requestBody: description: Array of unavailability IDs to remove from the user content: application/json-patch+json: schema: minItems: 1 type: array items: type: integer format: int64 application/json: schema: minItems: 1 type: array items: type: integer format: int64 text/json: schema: minItems: 1 type: array items: type: integer format: int64 application/*+json: schema: minItems: 1 type: array items: type: integer format: int64 required: true responses: '204': description: No Content '400': description: 'Bad Request: Example when wrong id passed in body {
  "errors": [
    {
      "errorType": "InvalidId",
      "description": "Invalid unavailability id provided.",
      "errorCode": null,
      "values": [
        "5",
        "7"
      ],
      "innerException": null,
      "hResult": -2146233088
    }
  ],
  "title": "One or more validation errors occurred.",
  "status": 400,
  "instance": "/api/v1/accounts/7/persons/unavailabilities/2",
  "requestUid": "603504966a0861525e83e9f7dfbc2706"
}
' '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/Persons: get: tags: - Persons summary: Gets all people in the given account. description: 'NOTE: If there are more persons in the account than were returned, there will be a "query-has-more" header that will be set to true.
Permissions
HourlyProfile: Read
Person: Read
Finance: Read' operationId: Persons_Query parameters: - name: accountId 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: 1000 - name: email in: query description: Filter user with email schema: type: string - name: state in: query description: 'If specified and not ''Unknown'', only include people matching the given state. The available values are defined as follows: - Unknown: By default, includes only Active people. - 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: ids 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: uniqueId in: query description: Optional paramater of unique identifier for filtering results based on the person unique identifier provided schema: type: string responses: '200': description: 'Success: List of persons in the account' content: text/plain: schema: type: array items: $ref: '#/components/schemas/PersonResponse' application/json: schema: type: array items: $ref: '#/components/schemas/PersonResponse' text/json: schema: type: array items: $ref: '#/components/schemas/PersonResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden post: tags: - Persons summary: Add a person to the given account description: '
Permissions
HourlyProfile: Write
Person: Write
Private: Read
Finance: Read' operationId: Persons_Post parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 requestBody: description: 'Details for the person object and any associated custom field values. Note: the title must be one of the titles already defined on the account.' content: application/json-patch+json: schema: $ref: '#/components/schemas/NewPersonRequest' example: email: jayne@example.com uniqueId: jayne@example.com name: Jayne Peters type: Salaried title: Project Engineer photoUrl: https://www.example.com/jayne.png employmentDates: StartDate: '2020-01-01T00:00:00' EndDate: '2020-12-31T00:00:00' workDays: - 1 - 2 - 3 - 4 - 5 fields: - fieldId: 1394 values: - '5195555555' groupings: null industryStartDate: null application/json: schema: $ref: '#/components/schemas/NewPersonRequest' example: email: jayne@example.com uniqueId: jayne@example.com name: Jayne Peters type: Salaried title: Project Engineer photoUrl: https://www.example.com/jayne.png employmentDates: StartDate: '2020-01-01T00:00:00' EndDate: '2020-12-31T00:00:00' workDays: - 1 - 2 - 3 - 4 - 5 fields: - fieldId: 1394 values: - '5195555555' groupings: null industryStartDate: null text/json: schema: $ref: '#/components/schemas/NewPersonRequest' example: email: jayne@example.com uniqueId: jayne@example.com name: Jayne Peters type: Salaried title: Project Engineer photoUrl: https://www.example.com/jayne.png employmentDates: StartDate: '2020-01-01T00:00:00' EndDate: '2020-12-31T00:00:00' workDays: - 1 - 2 - 3 - 4 - 5 fields: - fieldId: 1394 values: - '5195555555' groupings: null industryStartDate: null application/*+json: schema: $ref: '#/components/schemas/NewPersonRequest' example: email: jayne@example.com uniqueId: jayne@example.com name: Jayne Peters type: Salaried title: Project Engineer photoUrl: https://www.example.com/jayne.png employmentDates: StartDate: '2020-01-01T00:00:00' EndDate: '2020-12-31T00:00:00' workDays: - 1 - 2 - 3 - 4 - 5 fields: - fieldId: 1394 values: - '5195555555' groupings: null industryStartDate: null required: true responses: '200': description: 'Success: Person model of the newly added person' content: text/plain: schema: $ref: '#/components/schemas/PersonResponse' application/json: schema: $ref: '#/components/schemas/PersonResponse' text/json: schema: $ref: '#/components/schemas/PersonResponse' '400': description: Bad Request - Request has missing or invalid values '401': description: Unauthorized '403': description: Forbidden - User doesn't have permissions on this resource, or the account couldn't be found '409': description: Conflict - A person with the provided email already exists on the account '422': description: Unprocessable Entity - Validation failure /rp/api/v1/accounts/{accountId}/Persons/availabilities: get: tags: - Persons summary: Gets the number of days until each person in this account is available and their availability ranges for the duration description: '
Permissions
HourlyProfile: Read
Person: Read' operationId: Persons_QueryNextAvailables parameters: - name: accountId 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: start in: query description: Start date to filter availabilities from (default today UTC) schema: type: string format: date-time - name: end in: query description: End date to filter availabilities to (default 10 years from today UTC) schema: type: string format: date-time - name: boundRange in: query description: Setting this value to true will truncate the dates returned to the specified start and end date paramters schema: type: boolean default: true - name: ids 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: includeUnavailable in: query description: 'If this is set to true it will return the availabilities and next available dates even if a person doesn''t have a next availability. If the person does not have a "nextAvailableDate", then the "availableInDays" property will be -1' schema: type: boolean default: false responses: '200': description: 'Success: List of next availabilities' content: text/plain: schema: type: array items: $ref: '#/components/schemas/PersonNextAvailable' application/json: schema: type: array items: $ref: '#/components/schemas/PersonNextAvailable' text/json: schema: type: array items: $ref: '#/components/schemas/PersonNextAvailable' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/Persons/{id}/externalId: put: tags: - Persons summary: Updates a person to set and externalId that can be referenced by external systems. operationId: Persons_SetExternalId parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: The person ID required: true schema: type: integer format: int64 requestBody: description: Details for the person object content: application/json-patch+json: schema: $ref: '#/components/schemas/ExternalIdRequest' application/json: schema: $ref: '#/components/schemas/ExternalIdRequest' text/json: schema: $ref: '#/components/schemas/ExternalIdRequest' application/*+json: schema: $ref: '#/components/schemas/ExternalIdRequest' required: true responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/Persons/_filter: post: tags: - Persons summary: Gets all people in the given account filter by person ids. description: 'NOTE: If there are more persons in the account than were returned, there will be a "query-has-more" header that will be set to true.
Permissions
HourlyProfile: Read
Person: Read
Finance: Read' operationId: Persons_QueryFilter parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 requestBody: description: Filter object including personIds, state, email, uniqueId, relativeDate, offset and limit content: application/json-patch+json: schema: $ref: '#/components/schemas/PersonFilterPredicatesFilter' application/json: schema: $ref: '#/components/schemas/PersonFilterPredicatesFilter' text/json: schema: $ref: '#/components/schemas/PersonFilterPredicatesFilter' application/*+json: schema: $ref: '#/components/schemas/PersonFilterPredicatesFilter' required: true responses: '200': description: 'Success: List of persons in the account' content: text/plain: schema: type: array items: $ref: '#/components/schemas/PersonResponse' application/json: schema: type: array items: $ref: '#/components/schemas/PersonResponse' text/json: schema: type: array items: $ref: '#/components/schemas/PersonResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/Persons/{id}: patch: tags: - Persons summary: Update a person in the given account. Each of the fields in the request body is optional - only fields that are present in the request will be updated. description: '
Permissions
Person: Write
HourlyProfile: Write
Finance: Read' operationId: Persons_Update parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: The Person ID required: true schema: type: integer format: int64 requestBody: description: 'Details for the person object. Note: the title must be one of the titles already defined on the account.' content: application/json-patch+json: schema: type: object additionalProperties: {} example: Email: jayne@example.com UniqueId: This is a unique String Id Name: Jayne Peters Title: Project Engineer EmploymentDates: StartDate: '2020-01-01T00:00:00' EndDate: '2020-12-31T00:00:00' WorkDays: - 1 - 2 - 3 - 4 - 5 application/json: schema: type: object additionalProperties: {} example: Email: jayne@example.com UniqueId: This is a unique String Id Name: Jayne Peters Title: Project Engineer EmploymentDates: StartDate: '2020-01-01T00:00:00' EndDate: '2020-12-31T00:00:00' WorkDays: - 1 - 2 - 3 - 4 - 5 text/json: schema: type: object additionalProperties: {} example: Email: jayne@example.com UniqueId: This is a unique String Id Name: Jayne Peters Title: Project Engineer EmploymentDates: StartDate: '2020-01-01T00:00:00' EndDate: '2020-12-31T00:00:00' WorkDays: - 1 - 2 - 3 - 4 - 5 application/*+json: schema: type: object additionalProperties: {} example: Email: jayne@example.com UniqueId: This is a unique String Id Name: Jayne Peters Title: Project Engineer EmploymentDates: StartDate: '2020-01-01T00:00:00' EndDate: '2020-12-31T00:00:00' WorkDays: - 1 - 2 - 3 - 4 - 5 required: true responses: '200': description: 'Success: Person model of the updated person' content: text/plain: schema: $ref: '#/components/schemas/PersonResponse' application/json: schema: $ref: '#/components/schemas/PersonResponse' text/json: schema: $ref: '#/components/schemas/PersonResponse' '400': description: Bad Request - Request has missing or invalid values '401': description: Unauthorized '403': description: Forbidden - User doesn't have permissions on this resource, or the person or account couldn't be found '409': description: Conflict - A person with the provided email already exists on the account '422': description: Unprocessable Entity - Validation failure get: tags: - Persons summary: Gets details for the given person description: '
Permissions
Finance: Read
Person: Read
HourlyProfile: Read' operationId: Persons_Get parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: The Person ID required: true schema: type: integer format: int64 - 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' responses: '200': description: 'Success: Person Model for the requested person' content: text/plain: schema: $ref: '#/components/schemas/PersonResponse' application/json: schema: $ref: '#/components/schemas/PersonResponse' text/json: schema: $ref: '#/components/schemas/PersonResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden delete: tags: - Persons summary: Deactivate a person description: '
Permissions
Person: Write
HourlyProfile: Write' operationId: Persons_Delete parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: The Person ID required: true schema: type: integer format: int64 responses: '204': description: No Content (success) '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden - User doesn't have permissions on this resource, or the account couldn't be found /rp/api/v1/accounts/{accountId}/Persons/{id}/deactivate: post: tags: - Persons summary: Deactivate a person with optional deactivation details (reason, notes, would rehire). description: '
Permissions
Person: Write
HourlyProfile: Write' operationId: Persons_Deactivate parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: The Person ID required: true schema: type: integer format: int64 requestBody: description: Optional deactivation details content: application/json-patch+json: schema: $ref: '#/components/schemas/PersonDeactivateRequest' application/json: schema: $ref: '#/components/schemas/PersonDeactivateRequest' text/json: schema: $ref: '#/components/schemas/PersonDeactivateRequest' application/*+json: schema: $ref: '#/components/schemas/PersonDeactivateRequest' responses: '204': description: No Content (success) '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden - User doesn't have permissions on this resource, or the account couldn't be found /rp/api/v1/accounts/{accountId}/Persons/{id}/allocations: get: tags: - Persons summary: Get all allocations for the given person within the selected date range. description: '
Permissions
Role: Read
HourlyRole: Read
Allocation: Read
HourlyAllocation: Read
Person: Read
HourlyProfile: Read' operationId: Persons_GetAllocations parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: The Person's ID required: true schema: type: integer format: int64 - 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: start in: query description: Start date to filter allocations from schema: type: string format: date-time - name: end in: query description: End date to filter allocations to schema: type: string format: date-time - name: roleId in: query description: Optional parameter to get allocations for a specific role schema: type: integer format: int32 - name: projectState in: query description: Optional parameter for filtering results by project state. schema: enum: - Canceled - Upcoming - Active - Complete - Pursuit - Lost - All type: string default: All - name: type in: query description: Optional parameter Salaried role type to filter results by (Default to Operations) schema: enum: - Operations - Preconstruction - All type: string default: Operations responses: '200': description: 'Success: List of allocations' content: text/plain: schema: type: array items: $ref: '#/components/schemas/PersonAllocationResponse' application/json: schema: type: array items: $ref: '#/components/schemas/PersonAllocationResponse' text/json: schema: type: array items: $ref: '#/components/schemas/PersonAllocationResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/Persons/{id}/projects: get: tags: - Persons summary: Get all projects that this person is allocated to, including past, present, and future allocations. description: '
Permissions
Person: Read
HourlyProfile: Read
Allocation: Read
HourlyAllocation: Read' operationId: Persons_GetProjects parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: The Person ID required: true schema: type: integer format: int64 - 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: projectState in: query description: Optional parameter for filtering results by project state. schema: enum: - Canceled - Upcoming - Active - Complete - Pursuit - Lost - All type: string default: All responses: '200': description: Success content: text/plain: schema: type: array items: $ref: '#/components/schemas/PersonProjectResponse' application/json: schema: type: array items: $ref: '#/components/schemas/PersonProjectResponse' text/json: schema: type: array items: $ref: '#/components/schemas/PersonProjectResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/Persons/current-projects: get: tags: - Persons summary: "Get all projects that any person in the given account has an active allocation for. That is, each allocation's\ \ start date is \u2266 now and the end date is \u2267 now." description: '
Permissions
Person: Read
Allocation: Read' operationId: Persons_GetCurrentProjects parameters: - name: accountId 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: 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: projectState in: query description: Optional parameter for filtering results by project state. schema: enum: - Canceled - Upcoming - Active - Complete - Pursuit - Lost - All type: string default: All - name: type in: query description: (Optional)Salaried role type to filter results by (Defaults to All) schema: enum: - Operations - Preconstruction - All type: string default: All responses: '200': description: Success content: text/plain: schema: type: array items: $ref: '#/components/schemas/PersonProjectList' application/json: schema: type: array items: $ref: '#/components/schemas/PersonProjectList' text/json: schema: type: array items: $ref: '#/components/schemas/PersonProjectList' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/Persons/current-projects-hourly: get: tags: - Persons summary: "Get all projects that any person in the given account has an active allocation for. That is, each allocation's\ \ start date is \u2266 now and the end date is \u2267 now." description: '
Permissions
HourlyProfile: Read
HourlyAllocation: Read' operationId: Persons_GetCurrentProjectsHourly parameters: - name: accountId 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: 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: projectState in: query description: Optional parameter for filtering results by project state. schema: enum: - Canceled - Upcoming - Active - Complete - Pursuit - Lost - All type: string default: All responses: '200': description: Success content: text/plain: schema: type: array items: $ref: '#/components/schemas/PersonProjectList' application/json: schema: type: array items: $ref: '#/components/schemas/PersonProjectList' text/json: schema: type: array items: $ref: '#/components/schemas/PersonProjectList' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/Persons/{id}/restore: post: tags: - Persons summary: Reactivate a person description: '
Permissions
Person: Write
HourlyProfile: Write
Finance: Read' operationId: Persons_Restore parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: The Person ID required: true schema: type: integer format: int64 responses: '204': description: No Content (success) '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden - User doesn't have permissions on this resource, or the account couldn't be found '422': description: Validation failure - The person is already active in the account /rp/api/v1/accounts/{accountId}/Phases: get: tags: - Phases summary: Gets the list of phases in the given account description: '
Permissions
Account: Read' operationId: Phases_Query parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 responses: '200': description: 'Success: List of phases' content: text/plain: schema: type: array items: $ref: '#/components/schemas/PhaseResponse' application/json: schema: type: array items: $ref: '#/components/schemas/PhaseResponse' text/json: schema: type: array items: $ref: '#/components/schemas/PhaseResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden post: tags: - Phases summary: Adds a new phase to the given account description: "You must specify \"name\" for this endpoint.\n\n \nIf the \"includeOnNewProjects\"\ property is true, then the phase is included by default on new projects.\n\n \nAn account can\ \ have a maximum of 20 phases.
Permissions
Account: Write" operationId: Phases_Add parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 requestBody: description: Object with the name of the phase and whether to include it by default on new projects content: application/json-patch+json: schema: $ref: '#/components/schemas/PhaseAddRequest' application/json: schema: $ref: '#/components/schemas/PhaseAddRequest' text/json: schema: $ref: '#/components/schemas/PhaseAddRequest' application/*+json: schema: $ref: '#/components/schemas/PhaseAddRequest' required: true responses: '201': description: 'Success: Newly created phase model' content: text/plain: schema: $ref: '#/components/schemas/PhaseResponse' application/json: schema: $ref: '#/components/schemas/PhaseResponse' text/json: schema: $ref: '#/components/schemas/PhaseResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '409': description: Conflict - Phase with name already exists in the account '422': description: Unprocessable Entity - Limit for number of phases on the account has been reached put: tags: - Phases summary: Updates and re-orders the list of phases on an account description: 'This endpoint will update the order of the phases in the account by the order that is sent in NOTE: This endpoint does not require all of the phases to be sent in. HOWEVER, if you do not pass in all of the phases on the account, the order may not come back in an expected order.
Permissions
Account: Write' operationId: Phases_Update parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 requestBody: description: Array of objects with the id of the phase, the name and whether to include it by default on new projects content: application/json-patch+json: schema: type: array items: $ref: '#/components/schemas/PhaseUpdateRequest' application/json: schema: type: array items: $ref: '#/components/schemas/PhaseUpdateRequest' text/json: schema: type: array items: $ref: '#/components/schemas/PhaseUpdateRequest' application/*+json: schema: type: array items: $ref: '#/components/schemas/PhaseUpdateRequest' required: true responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '409': description: Conflict - Phase with name already exists in the account delete: tags: - Phases summary: Removes phases from the given account description: '
Permissions
Account: Write' operationId: Phases_Delete parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 requestBody: description: The Phase IDs to be removed content: application/json-patch+json: schema: type: array items: type: integer format: int64 application/json: schema: type: array items: type: integer format: int64 text/json: schema: type: array items: type: integer format: int64 application/*+json: schema: type: array items: type: integer format: int64 required: true responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/Phases/{id}: get: tags: - Phases summary: Gets the phase by id in the given account description: '
Permissions
Account: Read' operationId: Phases_Get parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: The Phase ID required: true schema: type: integer format: int64 responses: '200': description: 'Success: Phase' content: text/plain: schema: $ref: '#/components/schemas/PhaseResponse' application/json: schema: $ref: '#/components/schemas/PhaseResponse' text/json: schema: $ref: '#/components/schemas/PhaseResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden put: tags: - Phases summary: Updates a single phase on an account description: '
Permissions
Account: Write' operationId: Phases_UpdateSingle parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: The Phase ID required: true schema: type: integer format: int64 requestBody: description: Object with the name and whether to include it by default on new projects content: application/json-patch+json: schema: $ref: '#/components/schemas/PhaseFromRouteUpdateRequest' application/json: schema: $ref: '#/components/schemas/PhaseFromRouteUpdateRequest' text/json: schema: $ref: '#/components/schemas/PhaseFromRouteUpdateRequest' application/*+json: schema: $ref: '#/components/schemas/PhaseFromRouteUpdateRequest' required: true responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '409': description: Conflict - Phase with name already exists in the account /rp/api/v1/accounts/{accountId}/projects/{projectId}/project-field-values: get: tags: - ProjectFieldValue summary: Gets all custom field values for the given project in the given account. description: '
Permissions
Project: Read
Private: Read
Finance: Read' operationId: ProjectFieldValue_QueryFieldValues 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 role belongs to required: true schema: type: integer format: int64 - name: includeEmpty in: query description: Returns fields with empty/unset value as well schema: type: boolean default: false - 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 content: text/plain: schema: type: array items: $ref: '#/components/schemas/FieldValuesResponse' application/json: schema: type: array items: $ref: '#/components/schemas/FieldValuesResponse' text/json: schema: type: array items: $ref: '#/components/schemas/FieldValuesResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden post: tags: - ProjectFieldValue summary: Set project's field values in the given account. description: 'NOTE: It is mandatory that the fields with isRequired set to true be passed in as part of the request. Example: Say you have 2 project fields on an account "Budget" and "City" where isRequired is set to true on "Budget". FieldDefinition Example Response - GET ProjectFields (/api/v{version}/accounts/{id}/project-fields) [
  {
    "id": 1394,
    "name": "Budget",
    "type": "Currency",
    "isRequired": true,
    "isSystem": false,
    "isPrivate": false,
    "isFinancials": false,
    "isLocked": false
  },
  {
    "id": 1395,
    "name": "City",
    "type": "Text",
    "isRequired": false,
    "isSystem": false,
    "isPrivate": false,
    "isFinancials": false,
    "isLocked": false
  }
]
If you only send in the following your request will result in a 400. [
  {
    "fieldId": 1395,
    "values": [
      "Toronto"
    ]
  }
]

Validation

Other: Free text. Max length: 2400 Address: Free text. Max length: 250 Project Number: Free text. Max length: 250 Budget: Currency. Starts with 0 to 15 digits of ```0-9``` then optionally followed by ```.``` with 0 to 2 digits of ```0-9``` External ID: Free text. Max length: 250 Labor Hours (Salaried): Positive integer. Must be greater than 0 and not exceed 2,147,483,647 (Int32.MaxValue). Decimals are not allowed. This is a system field that requires both Project Forecasting and Standard modules to be enabled. Labor Hours (Hourly): Positive integer. Must be greater than 0 and not exceed 2,147,483,647 (Int32.MaxValue). Decimals are not allowed. This is a system field that requires both Project Forecasting and Hourly Profile modules to be enabled. Single List Selection: A list where only 1 value can be selected. When creating the list, each value should be between 1 and 250 non-empty characters. Multi List Selection: A list where 0 or more values can be selected. When creating the list, each value should be between 1 and 250 non-empty characters. Date selector: Format: dd/MM/yyyy Checkbox: Accepted values: ```true``` or ```false```
Permissions
Project: Write
Private: Read
Finance: Read' operationId: ProjectFieldValue_SetFieldValues 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 role belongs to required: true schema: type: integer format: int64 requestBody: description: The request details of field values to be set content: application/json-patch+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldValuesPair' application/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldValuesPair' text/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldValuesPair' application/*+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldValuesPair' required: true responses: '204': description: No Content - Success '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '422': description: Validation fail - One more more field IDs might not be valid patch: tags: - ProjectFieldValue summary: Update field values on a project description: '

Validation

Other: Free text. Max length: 2400 Address: Free text. Max length: 250 Project Number: Free text. Max length: 250 Budget: Currency. Starts with 0 to 15 digits of ```0-9``` then optionally followed by ```.``` with 0 to 2 digits of ```0-9``` External ID: Free text. Max length: 250 Labor Hours (Salaried): Positive integer. Must be greater than 0 and not exceed 2,147,483,647 (Int32.MaxValue). Decimals are not allowed. This is a system field that requires both Project Forecasting and Standard modules to be enabled. Labor Hours (Hourly): Positive integer. Must be greater than 0 and not exceed 2,147,483,647 (Int32.MaxValue). Decimals are not allowed. This is a system field that requires both Project Forecasting and Hourly Profile modules to be enabled. Single List Selection: A list where only 1 value can be selected. When creating the list, each value should be between 1 and 250 non-empty characters. Multi List Selection: A list where 0 or more values can be selected. When creating the list, each value should be between 1 and 250 non-empty characters. Date selector: Format: dd/MM/yyyy Checkbox: Accepted values: ```true``` or ```false```
Permissions
Project: Write
Private: Read
Finance: Read' operationId: ProjectFieldValue_BulkUpdateFieldValues 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 requestBody: description: '' content: application/json-patch+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldValuesPair' application/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldValuesPair' text/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldValuesPair' application/*+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldValuesPair' required: true responses: '200': description: OK '204': description: No Content (success) '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden - User doesn't have permissions on this resource, or the account or project couldn't be found delete: tags: - ProjectFieldValue summary: Clear project's field values by field IDs in the given account. description: '
Permissions
Project: Write
Private: Read
Finance: Read' operationId: ProjectFieldValue_ClearFieldValues 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 role belongs to required: true schema: type: integer format: int64 requestBody: description: The field IDs to be cleared content: application/json-patch+json: schema: minItems: 1 type: array items: type: integer format: int64 application/json: schema: minItems: 1 type: array items: type: integer format: int64 text/json: schema: minItems: 1 type: array items: type: integer format: int64 application/*+json: schema: minItems: 1 type: array items: type: integer format: int64 required: true responses: '204': description: No Content - Success '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/projects/{projectId}/project-field-values/{fieldId}: patch: tags: - ProjectFieldValue summary: Update a single field's value(s) for project in the given account. description: '

Validation

Other: Free text. Max length: 2400 Address: Free text. Max length: 250 Project Number: Free text. Max length: 250 Budget: Currency. Starts with 0 to 15 digits of ```0-9``` then optionally followed by ```.``` with 0 to 2 digits of ```0-9``` External ID: Free text. Max length: 250 Labor Hours (Salaried): Positive integer. Must be greater than 0 and not exceed 2,147,483,647 (Int32.MaxValue). Decimals are not allowed. This is a system field that requires both Project Forecasting and Standard modules to be enabled. Labor Hours (Hourly): Positive integer. Must be greater than 0 and not exceed 2,147,483,647 (Int32.MaxValue). Decimals are not allowed. This is a system field that requires both Project Forecasting and Hourly Profile modules to be enabled. Single List Selection: A list where only 1 value can be selected. When creating the list, each value should be between 1 and 250 non-empty characters. Multi List Selection: A list where 0 or more values can be selected. When creating the list, each value should be between 1 and 250 non-empty characters. Date selector: Format: dd/MM/yyyy Checkbox: Accepted values: ```true``` or ```false```
Permissions
Project: Write
Private: Read
Finance: Read' operationId: ProjectFieldValue_UpdateFieldValue 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 role belongs to required: true schema: type: integer format: int64 - name: fieldId in: path description: The field ID that the data can be updated required: true schema: type: integer format: int64 requestBody: description: The request details of field values to be set content: application/json-patch+json: schema: $ref: '#/components/schemas/FieldValuesRequest' application/json: schema: $ref: '#/components/schemas/FieldValuesRequest' text/json: schema: $ref: '#/components/schemas/FieldValuesRequest' application/*+json: schema: $ref: '#/components/schemas/FieldValuesRequest' required: true responses: '204': description: No Content - Success '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '422': description: Validation fail - One more more field IDs might not be valid /rp/api/v1/accounts/{id}/project-fields: get: tags: - ProjectFields summary: Gets all project field definitions in the given account. description: '
Permissions
Account: Read
Private: Read
Finance: Read' operationId: ProjectFields_Query parameters: - name: id in: path description: The Account ID required: true schema: type: integer format: int32 responses: '200': description: 'Success: List of field definitions' content: text/plain: schema: type: array items: $ref: '#/components/schemas/ProjectFieldDefinition' application/json: schema: type: array items: $ref: '#/components/schemas/ProjectFieldDefinition' text/json: schema: type: array items: $ref: '#/components/schemas/ProjectFieldDefinition' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden post: tags: - ProjectFields summary: Adds or updates field definitions on the given account description: 'If you pass in a FieldDefRequest object without an "id" this endpoint will add a new one to the account if the name isn''t reserved or in use. If you pass in a FieldDefRequest object with an "id" this endpoint will update an existing one that matches the id. To add a value or multiple values to a selection list you must pass an array of "definedValues" that contain objects with a "definedValue" property of the value you want to add. To update a value or multiple values in a selection list you must pass an array of "definedValues" that contain objects with a "valueId" property of the value id to update and a "definedValue" property of the value you want to update it to. To remove a value or multiple values from a selection list you must pass an array of "definedValues" that contain objects with a "valueId" property of the value id to remove, a "definedValue" property of the value you want to remove, and a "forRemoval" property set to true. Example: You have a list of "Years" and you want to change "5" to "5-9" and remove values "6" through "9" and add a value of "10+" [
  {
    "id": 123,
    "name": "Years",
    "type": "SingleSelect",
    "definedValues": [
      {
        "valueId": 584,
        "definedValue": "5-9",
        "forRemoval": false,
        "deleteExperienceFieldValues": false
      },
      {
        "valueId": 585,
        "definedValue": "6",
        "forRemoval": true,
        "deleteExperienceFieldValues": false
      },
      {
        "valueId": 586,
        "definedValue": "7",
        "forRemoval": true,
        "deleteExperienceFieldValues": false
      },
      {
        "valueId": 587,
        "definedValue": "8",
        "forRemoval": true,
        "deleteExperienceFieldValues": false
      },
      {
        "valueId": 588,
        "definedValue": "9",
        "forRemoval": true,
        "deleteExperienceFieldValues": false
      },
      {
        "valueId": 0,
        "definedValue": "10+",
        "forRemoval": false,
        "deleteExperienceFieldValues": false
      }
    ],
    "isRequired": true,
    "isPrivate": false,
    "isLocked": false
  }
]
NOTE: There are a few reserved field names that cannot be used. "Project ID", "Project Name", "Colour", "Start Date", "End Date", "Roles", "Status", "Active Phase", "Issues", "Allocated People", "Notes", "Group"

Validation

Other: Free text. Max length: 2400 Address: Free text. Max length: 250 Project Number: Free text. Max length: 250 Budget: Currency. Starts with 0 to 15 digits of ```0-9``` then optionally followed by ```.``` with 0 to 2 digits of ```0-9``` External ID: Free text. Max length: 250 Labor Hours (Salaried): Positive integer. Must be greater than 0 and not exceed 2,147,483,647 (Int32.MaxValue). Decimals are not allowed. This is a system field that requires both Project Forecasting and Standard modules to be enabled. Labor Hours (Hourly): Positive integer. Must be greater than 0 and not exceed 2,147,483,647 (Int32.MaxValue). Decimals are not allowed. This is a system field that requires both Project Forecasting and Hourly Profile modules to be enabled.
Permissions
Account: Write
Private: Read
Finance: Read' operationId: ProjectFields_Post parameters: - name: id in: path description: The Account ID required: true schema: type: integer format: int32 requestBody: description: Array of field definition request objects content: application/json-patch+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldDefRequest' example: - id: 123 name: Years type: SingleSelect definedValues: - valueId: 584 definedValue: 5-9 forRemoval: false deleteExperienceFieldValues: false - valueId: 585 definedValue: '6' forRemoval: true deleteExperienceFieldValues: false - valueId: 586 definedValue: '7' forRemoval: true deleteExperienceFieldValues: false - valueId: 587 definedValue: '8' forRemoval: true deleteExperienceFieldValues: false - valueId: 588 definedValue: '9' forRemoval: true deleteExperienceFieldValues: false - valueId: 0 definedValue: 10+ forRemoval: false deleteExperienceFieldValues: false isRequired: true isPrivate: false isLocked: false application/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldDefRequest' example: - id: 123 name: Years type: SingleSelect definedValues: - valueId: 584 definedValue: 5-9 forRemoval: false deleteExperienceFieldValues: false - valueId: 585 definedValue: '6' forRemoval: true deleteExperienceFieldValues: false - valueId: 586 definedValue: '7' forRemoval: true deleteExperienceFieldValues: false - valueId: 587 definedValue: '8' forRemoval: true deleteExperienceFieldValues: false - valueId: 588 definedValue: '9' forRemoval: true deleteExperienceFieldValues: false - valueId: 0 definedValue: 10+ forRemoval: false deleteExperienceFieldValues: false isRequired: true isPrivate: false isLocked: false text/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldDefRequest' example: - id: 123 name: Years type: SingleSelect definedValues: - valueId: 584 definedValue: 5-9 forRemoval: false deleteExperienceFieldValues: false - valueId: 585 definedValue: '6' forRemoval: true deleteExperienceFieldValues: false - valueId: 586 definedValue: '7' forRemoval: true deleteExperienceFieldValues: false - valueId: 587 definedValue: '8' forRemoval: true deleteExperienceFieldValues: false - valueId: 588 definedValue: '9' forRemoval: true deleteExperienceFieldValues: false - valueId: 0 definedValue: 10+ forRemoval: false deleteExperienceFieldValues: false isRequired: true isPrivate: false isLocked: false application/*+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldDefRequest' example: - id: 123 name: Years type: SingleSelect definedValues: - valueId: 584 definedValue: 5-9 forRemoval: false deleteExperienceFieldValues: false - valueId: 585 definedValue: '6' forRemoval: true deleteExperienceFieldValues: false - valueId: 586 definedValue: '7' forRemoval: true deleteExperienceFieldValues: false - valueId: 587 definedValue: '8' forRemoval: true deleteExperienceFieldValues: false - valueId: 588 definedValue: '9' forRemoval: true deleteExperienceFieldValues: false - valueId: 0 definedValue: 10+ forRemoval: false deleteExperienceFieldValues: false isRequired: true isPrivate: false isLocked: false required: true responses: '200': description: 'Success: Added/updated field definitions' content: text/plain: schema: type: array items: $ref: '#/components/schemas/ProjectFieldDefinition' application/json: schema: type: array items: $ref: '#/components/schemas/ProjectFieldDefinition' text/json: schema: type: array items: $ref: '#/components/schemas/ProjectFieldDefinition' '400': description: 'Bad Request: Example when trying to set system fields to private that aren''t allowed to be private: {
  "errors": [
    {
      "errorType": "CannotBeMadePrivate",
      "description": "Fields in request cannot be made private.",
      "errorCode": null,
      "field": "Id",
      "values": [
        "5"
      ],
      "innerException": null,
      "hResult": -2146233088
    }
  ],
  "title": "One or more validation errors occurred.",
  "status": 400,
  "instance": "/api/v1/accounts/2/project-fields",
  "requestUid": "3dd10d1b-392f-4d5a-b736-50ea1f072342"
}
' '401': description: Unauthorized '403': description: Forbidden '409': description: "Conflict - Field definition with name already exists in the account or trying to add or update a field\ \ to a system field.\n\n Example when trying to add a field that has the same name as an existing one:\n\ {
  \"errors\": [
    {
      \"\ errorType\": \"Duplicate\",
      \"description\": \"A name in the request is already in use.\"\ ,
      \"errorCode\": null,
      \"\ innerException\": null,
      \"hResult\": -2146233088
    }
  ],
  \"\ title\": \"One or more validation errors occurred.\",
  \"status\"\ : 409,
  \"instance\": \"/api/v1/accounts/2/project-fields\",
  \"requestUid\"\ : \"8ba8f060-858b-46d9-b3cc-fa1c391ebc66\"
}
" '422': description: "Unprocessable Entity - Couldn't remove all defined values from list.\n\n Example when trying\ \ to remove a defined value in use from a required list:\n{
  \"errors\": [
    {
      \"\ errorType\": \"DefinedValueError\",
      \"description\": \"23001: Cannot remove field defined value. It is in use for required field(s)\"\ ,
      \"errorCode\": null,
      \"\ innerException\": null,
      \"hResult\": -2146233088
    }
  ],
  \"\ title\": \"One or more validation errors occurred.\",
  \"status\"\ : 422,
  \"instance\": \"/api/v1/accounts/2/project-fields\",
  \"requestUid\"\ : \"fb8b2dd9-360f-4a81-852c-e5b70cfa5a85\"
}
" delete: tags: - ProjectFields summary: Removes project field definitions in the given account. description: '
Permissions
Account: Write' operationId: ProjectFields_Delete parameters: - name: id in: path description: The Account ID required: true schema: type: integer format: int32 requestBody: description: The Field Definition IDs content: application/json-patch+json: schema: minItems: 1 type: array items: type: integer format: int64 application/json: schema: minItems: 1 type: array items: type: integer format: int64 text/json: schema: minItems: 1 type: array items: type: integer format: int64 application/*+json: schema: minItems: 1 type: array items: type: integer format: int64 required: true responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '422': description: "Unprocessable Entity: Attempted to remove system field(s)\n\n Example Response:\n{
  \"\ errors\": [
    {
      \"errorType\": \"\ NotAllowed\",
      \"description\": \"Cannot delete system field(s)\"\ ,
      \"errorCode\": null,
      \"\ innerException\": null,
      \"hResult\": -2146233088
    }
  ],
  \"\ title\": \"One or more validation errors occurred.\",
  \"status\"\ : 422,
  \"instance\": \"/api/v1/accounts/2/project-fields\",
  \"requestUid\"\ : \"3b3cbfaa-a809-4529-8870-317654a3311e\"
}
" /rp/api/v1/accounts/{id}/project-fields/_reorder: put: tags: - ProjectFields summary: Update the display order of project field definitions for the given account. description: 'Accepts an array of objects containing fieldId and displayOrder. System fields cannot be reordered and should not be included in the request. All custom fields should be included with their new display order values.
Permissions
Account: Write' operationId: ProjectFields_UpdateFieldOrder parameters: - name: id in: path description: The account ID required: true schema: type: integer format: int32 requestBody: description: Array of field order updates content: application/json-patch+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldOrderRequest' application/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldOrderRequest' text/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldOrderRequest' application/*+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/FieldOrderRequest' required: true responses: '200': description: 'Success: Field order updated' content: text/plain: schema: type: array items: $ref: '#/components/schemas/ProjectFieldDefinition' application/json: schema: type: array items: $ref: '#/components/schemas/ProjectFieldDefinition' text/json: schema: type: array items: $ref: '#/components/schemas/ProjectFieldDefinition' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/projects/{projectId}/groupings: post: tags: - ProjectGroupings summary: Set grouping to the project in the given account description: '
Permissions
Project: Write' operationId: ProjectGroupings_Set 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 requestBody: description: The IDs of grouping for setting to project content: application/json: schema: minItems: 1 type: array items: type: integer format: int64 required: true responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '503': description: Service Unavailable put: tags: - ProjectGroupings summary: Update grouping to the project in the given account description: '
Permissions
Project: Write' operationId: ProjectGroupings_Put 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 requestBody: description: The IDs of grouping for setting to project content: application/json: schema: type: array items: type: integer format: int64 required: true responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '503': description: Service Unavailable /rp/api/v1/accounts/{accountId}/projects/{projectId}/groupings/{id}: delete: tags: - ProjectGroupings summary: Removes grouping from the project in the given account description: '
Permissions
Project: Write' operationId: ProjectGroupings_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 required: true schema: type: integer format: int64 - name: id in: path description: The grouping ID for project required: true schema: type: integer format: int64 responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '503': description: Service Unavailable /rp/api/v1/accounts/{accountId}/projects/{projectId}/notes: get: tags: - ProjectNotes summary: Gets all notes on the given account's project. description: '
Permissions
Project: Read
Private: Read' operationId: ProjectNotes_Query 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 note belongs to required: true schema: 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 per page schema: maximum: 2147483647 minimum: 1 type: integer format: int32 default: 100 responses: '200': description: Success content: text/plain: schema: type: array items: $ref: '#/components/schemas/NoteResponse' application/json: schema: type: array items: $ref: '#/components/schemas/NoteResponse' text/json: schema: type: array items: $ref: '#/components/schemas/NoteResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden post: tags: - ProjectNotes summary: Adds a note on the given account's project. description: "When trying to create a private note you must have permissions to manage private values in the account.\ \ \n\nWhen trying to mention a user, you must provide their userID in the following pattern [[mention:userID#123]].
Permissions
Project:\ \ Read
Private: Write" operationId: ProjectNotes_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 to add the note to required: true schema: type: integer format: int64 requestBody: description: Request object that contains the message and whether or not the note is private content: application/json-patch+json: schema: $ref: '#/components/schemas/NewNoteRequest' application/json: schema: $ref: '#/components/schemas/NewNoteRequest' text/json: schema: $ref: '#/components/schemas/NewNoteRequest' application/*+json: schema: $ref: '#/components/schemas/NewNoteRequest' required: true responses: '201': description: Success content: text/plain: schema: $ref: '#/components/schemas/NewNoteResponse' example: id: 213 message: This is a note about something on the project. isPrivate: false creatorId: 453 creatorName: John Smith createdOn: '2021-05-27T10:47:23.53' lastModifiedOn: '2021-05-27T10:47:23.53' application/json: schema: $ref: '#/components/schemas/NewNoteResponse' example: id: 213 message: This is a note about something on the project. isPrivate: false creatorId: 453 creatorName: John Smith createdOn: '2021-05-27T10:47:23.53' lastModifiedOn: '2021-05-27T10:47:23.53' text/json: schema: $ref: '#/components/schemas/NewNoteResponse' example: id: 213 message: This is a note about something on the project. isPrivate: false creatorId: 453 creatorName: John Smith createdOn: '2021-05-27T10:47:23.53' lastModifiedOn: '2021-05-27T10:47:23.53' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '422': description: Unprocessable Entity - Limit for for number of notes reached /rp/api/v1/accounts/{accountId}/projects/{projectId}/notes/{id}: get: tags: - ProjectNotes summary: Gets a note on the given account's project by id. description: '
Permissions
Project: Read
Private: Read' operationId: ProjectNotes_Get 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 note belongs to required: true schema: type: integer format: int64 - name: id in: path description: The ID of the note required: true schema: type: integer format: int64 responses: '200': description: Success content: text/plain: schema: $ref: '#/components/schemas/NoteResponse' application/json: schema: $ref: '#/components/schemas/NoteResponse' text/json: schema: $ref: '#/components/schemas/NoteResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden patch: tags: - ProjectNotes summary: Updates a note on the given account's project. description: 'When trying to update a note''s privacy you must have permissions to manage private values in the account. Only the creator of a note can edit it. When trying to mention a user, you must provide their userID in the following pattern [[mention:userID#123]].
Permissions
Project: Read
Private: Write' operationId: ProjectNotes_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 note is on required: true schema: type: integer format: int64 - name: id in: path description: The ID of the note to update required: true schema: type: integer format: int64 requestBody: description: Request object that contains the message and whether or not the note is private content: application/json-patch+json: schema: $ref: '#/components/schemas/UpdateNoteRequest' application/json: schema: $ref: '#/components/schemas/UpdateNoteRequest' text/json: schema: $ref: '#/components/schemas/UpdateNoteRequest' application/*+json: schema: $ref: '#/components/schemas/UpdateNoteRequest' required: true responses: '200': description: Success content: text/plain: schema: $ref: '#/components/schemas/NoteResponse' application/json: schema: $ref: '#/components/schemas/NoteResponse' text/json: schema: $ref: '#/components/schemas/NoteResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden delete: tags: - ProjectNotes summary: Deletes a note from the given account's project. description: 'Only the creator or an account admin can delete it.
Permissions
Project: Read
Account: Write' operationId: ProjectNotes_Delete 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 note is on required: true schema: type: integer format: int64 - name: id in: path description: The ID of the note to update required: true schema: type: integer format: int64 responses: '204': description: Success '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/projects/{projectId}/role-categories: get: tags: - ProjectRoleCategories summary: Gets categories on the given account's project. description: '
Permissions
Role: Read
HourlyRole: Read' operationId: ProjectRoleCategories_Query parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: projectId in: path description: The project ID to get categories from required: true schema: type: integer format: int64 responses: '200': description: Success content: text/plain: schema: type: array items: $ref: '#/components/schemas/RoleCategoryResponse' application/json: schema: type: array items: $ref: '#/components/schemas/RoleCategoryResponse' text/json: schema: type: array items: $ref: '#/components/schemas/RoleCategoryResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden post: tags: - ProjectRoleCategories summary: Adds a category on the given account's project. description: 'You must be able to manage salaried OR hourly roles.
Permissions
Role: Write
HourlyRole: Write' operationId: ProjectRoleCategories_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 to add the category to required: true schema: type: integer format: int64 requestBody: description: Request object that contains a list of categories. content: application/json-patch+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/NewRoleCategoryRequest' application/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/NewRoleCategoryRequest' text/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/NewRoleCategoryRequest' application/*+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/NewRoleCategoryRequest' required: true responses: '201': description: Created content: text/plain: schema: type: array items: $ref: '#/components/schemas/RoleCategoryResponse' application/json: schema: type: array items: $ref: '#/components/schemas/RoleCategoryResponse' text/json: schema: type: array items: $ref: '#/components/schemas/RoleCategoryResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '422': description: Unprocessable Entity - Limit for for number of categories reached, or name is too long. put: tags: - ProjectRoleCategories summary: Bulk update categories on the given account's project. description: 'NOTE: The category name must not be greater than 100 characters.
Permissions
Role: Write
HourlyRole: Write' operationId: ProjectRoleCategories_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 to add the category to required: true schema: type: integer format: int64 requestBody: description: Request object that contains a list of categories. content: application/json-patch+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/UpdateRoleCategoryRequest' application/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/UpdateRoleCategoryRequest' text/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/UpdateRoleCategoryRequest' application/*+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/UpdateRoleCategoryRequest' required: true responses: '200': description: Success content: text/plain: schema: type: array items: $ref: '#/components/schemas/RoleCategoryResponse' application/json: schema: type: array items: $ref: '#/components/schemas/RoleCategoryResponse' text/json: schema: type: array items: $ref: '#/components/schemas/RoleCategoryResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '422': description: Unprocessable Entity - Limit for for number of categories reached, or name is too long. delete: tags: - ProjectRoleCategories summary: Removes categories on the given account's project. description: 'You must be able to manage salaried OR hourly roles.
Permissions
Role: Write
HourlyRole: Write' operationId: ProjectRoleCategories_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 to delete the categories from required: true schema: type: integer format: int64 requestBody: description: Request object that contains an array of category IDs for removal. content: application/json-patch+json: schema: minItems: 1 type: array items: type: integer format: int64 application/json: schema: minItems: 1 type: array items: type: integer format: int64 text/json: schema: minItems: 1 type: array items: type: integer format: int64 application/*+json: schema: minItems: 1 type: array items: type: integer format: int64 required: true responses: '204': description: No Content - Success '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/projects/{projectId}/roles: get: tags: - ProjectRoles summary: Gets all roles in the given account's project. description: '
Permissions
Role: Read
Finance: Read' operationId: ProjectRoles_Query 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 role belongs to required: true schema: type: integer format: int64 - 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: 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 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 post: tags: - ProjectRoles summary: Add role for the given account's project. description: '
Permissions
Role: Write
Finance: Read' operationId: ProjectRoles_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 role belongs to required: true schema: type: integer format: int64 requestBody: description: The request information for the role creation content: application/json-patch+json: schema: $ref: '#/components/schemas/BaseRoleRequest' application/json: schema: $ref: '#/components/schemas/BaseRoleRequest' text/json: schema: $ref: '#/components/schemas/BaseRoleRequest' application/*+json: schema: $ref: '#/components/schemas/BaseRoleRequest' required: true responses: '201': 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 /rp/api/v1/accounts/{accountId}/projects/{projectId}/roles/bulk: post: tags: - ProjectRoles summary: Bulk add roles for the given account's project. description: '
Permissions
Role: Write
Finance: Read' operationId: ProjectRoles_BulkAdd 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 role belongs to required: true schema: type: integer format: int64 requestBody: description: The request information for the role creation content: application/json-patch+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/BaseRoleRequest' application/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/BaseRoleRequest' text/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/BaseRoleRequest' application/*+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/BaseRoleRequest' required: true responses: '200': description: Success 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 delete: tags: - ProjectRoles summary: Remove role by IDs in the given account's project. description: '
Permissions
Role: Write' operationId: ProjectRoles_BulkRemove 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 requestBody: description: The role IDs for removal content: application/json-patch+json: schema: minItems: 1 type: array items: type: integer format: int64 application/json: schema: minItems: 1 type: array items: type: integer format: int64 text/json: schema: minItems: 1 type: array items: type: integer format: int64 application/*+json: schema: minItems: 1 type: array items: type: integer format: int64 required: true responses: '204': description: No Content - Success '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/projects/{projectId}/roles/{id}: get: tags: - ProjectRoles summary: Get role by ID in the given account's project. description: '
Permissions
Role: Read
Finance: Read' operationId: ProjectRoles_Get 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 role ID required: true schema: type: integer format: int64 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 put: tags: - ProjectRoles summary: 'Update role by ID in the given account''s project. The task ID is required when updating a task role. The task ID cannot be updated.' description: '
Permissions
Role: Write
Finance: Read' operationId: ProjectRoles_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 that the role belongs to required: true schema: type: integer format: int64 - name: id in: path description: The role ID 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/RoleUpdateRequest' application/json: schema: $ref: '#/components/schemas/RoleUpdateRequest' text/json: schema: $ref: '#/components/schemas/RoleUpdateRequest' application/*+json: schema: $ref: '#/components/schemas/RoleUpdateRequest' 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: - ProjectRoles summary: Remove role by ID in the given account's project. description: '
Permissions
Role: Write' operationId: ProjectRoles_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 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}/roles/{id}/externalId: put: tags: - ProjectRoles summary: Updates a role to set an external ID that can be referenced by external systems. operationId: ProjectRoles_SetExternalId 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: id in: path description: The Role ID required: true schema: type: integer format: int64 requestBody: description: Details for the external Id content: application/json-patch+json: schema: $ref: '#/components/schemas/ExternalIdRequest' application/json: schema: $ref: '#/components/schemas/ExternalIdRequest' text/json: schema: $ref: '#/components/schemas/ExternalIdRequest' application/*+json: schema: $ref: '#/components/schemas/ExternalIdRequest' required: true responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /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 /rp/api/v1/accounts/{accountId}/projects/{projectId}/workforce-spend-reports/hours-breakdown: post: tags: - ProjectWorkforceSpendReports summary: Get the workforce spend reports (salaried only) on hours with breakdown, grouped by role name, period, then by assignee, given the project ID description: 'NOTE: If there are more workforce spend reports in the project than were returned, there will be a "query-has-more" header that will be set to true.
Permissions
Project: Read
Person: Read
Role: Read' operationId: ProjectWorkforceSpendReports_GetWorkforceSpendReportsBreakdownHours 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 workforce belongs to required: true schema: type: integer format: int64 requestBody: description: The request information for the workforce spend reports on hours with breakdown content: application/json-patch+json: schema: $ref: '#/components/schemas/BreakdownRequest' application/json: schema: $ref: '#/components/schemas/BreakdownRequest' text/json: schema: $ref: '#/components/schemas/BreakdownRequest' application/*+json: schema: $ref: '#/components/schemas/BreakdownRequest' required: true responses: '200': description: 'Success: Workforce spend hours breakdown in the project in the account' content: text/plain: schema: $ref: '#/components/schemas/HoursBreakdownResponse' application/json: schema: $ref: '#/components/schemas/HoursBreakdownResponse' text/json: schema: $ref: '#/components/schemas/HoursBreakdownResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/projects/{projectId}/workforce-spend-reports/hours-overview: post: tags: - ProjectWorkforceSpendReports summary: Get the workforce spend reports (salaried only) on hours with overview on elapsed, remainder, grouped by role name, and assignee, given the project ID description: 'NOTE: If there are more workforce spend reports in the project than were returned, there will be a "query-has-more" header that will be set to true.
Permissions
Project: Read
Person: Read
Role: Read' operationId: ProjectWorkforceSpendReports_GetWorkforceSpendReportsOverviewHours 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 workforce belongs to required: true schema: type: integer format: int64 requestBody: description: The request information for the workforce spend reports on hours with overview content: application/json-patch+json: schema: $ref: '#/components/schemas/OverviewRequest' application/json: schema: $ref: '#/components/schemas/OverviewRequest' text/json: schema: $ref: '#/components/schemas/OverviewRequest' application/*+json: schema: $ref: '#/components/schemas/OverviewRequest' required: true responses: '200': description: 'Success: Workforce spend hours overview in the project in the account' content: text/plain: schema: $ref: '#/components/schemas/HoursOverviewResponse' application/json: schema: $ref: '#/components/schemas/HoursOverviewResponse' text/json: schema: $ref: '#/components/schemas/HoursOverviewResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/Projects: get: tags: - Projects summary: Gets all projects in the given account description: 'NOTE: If there are more projects in the account than were returned, there will be a "query-has-more" header that will be set to true.
Permissions
Project: Read
Role: Read
HourlyRole: Read' operationId: Projects_Query parameters: - name: accountId 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: 1000 - name: name in: query description: 'Name filter that affects whether or not to return projects back with/without the name contains partial match (Default: Empty)' schema: type: string - name: issues in: query description: 'State filter that affects whether or not to return projects back with/without or any issues (Default: All)' schema: enum: - 0 - 1 - 2 type: integer format: int32 default: 2 - name: ids in: query description: Optional comma delimited list of project IDs to filter the result on schema: type: array items: type: integer format: int64 - name: projectState in: query description: Optional comma delimited list for filtering results by project state. schema: enum: - Canceled - Upcoming - Active - Complete - Pursuit - Lost - All type: string default: All - name: includeProjectNumber in: query description: 'Whether to include the Project Number field in the response (Default: false)' schema: type: boolean default: false responses: '200': description: Success content: text/plain: schema: type: array items: $ref: '#/components/schemas/ProjectResponse' example: - id: 8673 name: Ahrens Lofts colour: '#00FF00' startDate: '2019-01-01' endDate: '2020-12-31' startTime: 08:00:00 endTime: '17:00:00' workDays: - 1 - 2 - 3 - 4 - 5 state: Active winPercent: null unfilledRoles: 3 totalRoles: 16 unfilledHourlyRoles: 4 totalHourlyRoles: 7 totalTasks: 9 unfilledTaskRoles: 0 totalTaskRoles: 0 issuesCount: 5 lastModifiedOn: '2019-01-01T00:00:00' type: Awarded currentPhases: - name: Precon phases: [] groupings: null description: Project Description truncatedDescription: Project Desc externalId: null application/json: schema: type: array items: $ref: '#/components/schemas/ProjectResponse' example: - id: 8673 name: Ahrens Lofts colour: '#00FF00' startDate: '2019-01-01' endDate: '2020-12-31' startTime: 08:00:00 endTime: '17:00:00' workDays: - 1 - 2 - 3 - 4 - 5 state: Active winPercent: null unfilledRoles: 3 totalRoles: 16 unfilledHourlyRoles: 4 totalHourlyRoles: 7 totalTasks: 9 unfilledTaskRoles: 0 totalTaskRoles: 0 issuesCount: 5 lastModifiedOn: '2019-01-01T00:00:00' type: Awarded currentPhases: - name: Precon phases: [] groupings: null description: Project Description truncatedDescription: Project Desc externalId: null text/json: schema: type: array items: $ref: '#/components/schemas/ProjectResponse' example: - id: 8673 name: Ahrens Lofts colour: '#00FF00' startDate: '2019-01-01' endDate: '2020-12-31' startTime: 08:00:00 endTime: '17:00:00' workDays: - 1 - 2 - 3 - 4 - 5 state: Active winPercent: null unfilledRoles: 3 totalRoles: 16 unfilledHourlyRoles: 4 totalHourlyRoles: 7 totalTasks: 9 unfilledTaskRoles: 0 totalTaskRoles: 0 issuesCount: 5 lastModifiedOn: '2019-01-01T00:00:00' type: Awarded currentPhases: - name: Precon phases: [] groupings: null description: Project Description truncatedDescription: Project Desc externalId: null '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden post: tags: - Projects summary: Add a project to the given account description: 'If you add a project with a type of Awarded, it will be created with a state based on the date. If you add a project with a type of Opportunity, it will be created with a state of Pursuit. The "winPercent" is associated with an Opportunity, you can create an Opportunity with a winPercent but not for an Awarded project. NOTE: Opportunities do not count towards allocation statistics so, any roles and allocations set on the project will not cause conflicts, issues, over-allocations etc.
Permissions
Project: Write
Private: Read
Finance: Read' operationId: Projects_Post parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 requestBody: description: Details for the project object and any associated custom field values. content: application/json-patch+json: schema: $ref: '#/components/schemas/NewProjectRequest' example: name: Ahrens Lofts colour: '#00FF00' startDate: '2019-01-01' endDate: '2020-12-31' startTime: 08:00:00 endTime: '17:00:00' workDays: - 1 - 2 - 3 - 4 - 5 type: Awarded fields: - fieldId: 1394 values: - '5195555555' groupings: null description: Project Description phases: null application/json: schema: $ref: '#/components/schemas/NewProjectRequest' example: name: Ahrens Lofts colour: '#00FF00' startDate: '2019-01-01' endDate: '2020-12-31' startTime: 08:00:00 endTime: '17:00:00' workDays: - 1 - 2 - 3 - 4 - 5 type: Awarded fields: - fieldId: 1394 values: - '5195555555' groupings: null description: Project Description phases: null text/json: schema: $ref: '#/components/schemas/NewProjectRequest' example: name: Ahrens Lofts colour: '#00FF00' startDate: '2019-01-01' endDate: '2020-12-31' startTime: 08:00:00 endTime: '17:00:00' workDays: - 1 - 2 - 3 - 4 - 5 type: Awarded fields: - fieldId: 1394 values: - '5195555555' groupings: null description: Project Description phases: null application/*+json: schema: $ref: '#/components/schemas/NewProjectRequest' example: name: Ahrens Lofts colour: '#00FF00' startDate: '2019-01-01' endDate: '2020-12-31' startTime: 08:00:00 endTime: '17:00:00' workDays: - 1 - 2 - 3 - 4 - 5 type: Awarded fields: - fieldId: 1394 values: - '5195555555' groupings: null description: Project Description phases: null required: true responses: '200': description: Success content: text/plain: schema: $ref: '#/components/schemas/ProjectResponse' example: id: 8673 name: Ahrens Lofts colour: '#00FF00' startDate: '2019-01-01' endDate: '2020-12-31' startTime: 08:00:00 endTime: '17:00:00' workDays: - 1 - 2 - 3 - 4 - 5 state: Active winPercent: null unfilledRoles: 3 totalRoles: 16 unfilledHourlyRoles: 4 totalHourlyRoles: 7 totalTasks: 9 unfilledTaskRoles: 0 totalTaskRoles: 0 issuesCount: 5 lastModifiedOn: '2019-01-01T00:00:00' type: Awarded currentPhases: - name: Precon phases: [] groupings: null description: Project Description truncatedDescription: Project Desc externalId: null application/json: schema: $ref: '#/components/schemas/ProjectResponse' example: id: 8673 name: Ahrens Lofts colour: '#00FF00' startDate: '2019-01-01' endDate: '2020-12-31' startTime: 08:00:00 endTime: '17:00:00' workDays: - 1 - 2 - 3 - 4 - 5 state: Active winPercent: null unfilledRoles: 3 totalRoles: 16 unfilledHourlyRoles: 4 totalHourlyRoles: 7 totalTasks: 9 unfilledTaskRoles: 0 totalTaskRoles: 0 issuesCount: 5 lastModifiedOn: '2019-01-01T00:00:00' type: Awarded currentPhases: - name: Precon phases: [] groupings: null description: Project Description truncatedDescription: Project Desc externalId: null text/json: schema: $ref: '#/components/schemas/ProjectResponse' example: id: 8673 name: Ahrens Lofts colour: '#00FF00' startDate: '2019-01-01' endDate: '2020-12-31' startTime: 08:00:00 endTime: '17:00:00' workDays: - 1 - 2 - 3 - 4 - 5 state: Active winPercent: null unfilledRoles: 3 totalRoles: 16 unfilledHourlyRoles: 4 totalHourlyRoles: 7 totalTasks: 9 unfilledTaskRoles: 0 totalTaskRoles: 0 issuesCount: 5 lastModifiedOn: '2019-01-01T00:00:00' type: Awarded currentPhases: - name: Precon phases: [] groupings: null description: Project Description truncatedDescription: Project Desc externalId: null '400': description: "Bad Request - Request has missing or invalid values\n\n Example when trying to add a project\ \ with an invalid colour value:\n{
  \"errors\": [
    {
      \"\ errorType\": \"ValidationError\",
      \"description\": \"colour must be a six-digit hexadecimal number with a '#' in front of it. Ex: #00FF00\"\ ,
      \"errorCode\": null,
      \"\ field\": \"Colour\",
      \"innerException\": null,
      \"\ hResult\": -2146233088
    }
  ],
  \"title\": \"\ One or more validation errors occurred.\",
  \"status\": 400,
  \"\ instance\": \"/api/v1/accounts/2/projects\",
  \"requestUid\": \"82a530a1-36b1-4a8a-8bd9-9833de5b0cbd\"\
}
" '401': description: Unauthorized '403': description: Forbidden - User doesn't have permissions on this resource, or the project couldn't be found. '409': description: "Conflict - A project already exists in the account with the same name.\n\n Example when\ \ trying to add a project that has the same name as an existing one:\n{
  \"errors\": [
    {
      \"\ errorType\": \"Duplicate\",
      \"description\": \"A project in the account already exists with the requested name.\"\ ,
      \"errorCode\": null,
      \"\ innerException\": null,
      \"hResult\": -2146233088
    }
  ],
  \"\ title\": \"One or more validation errors occurred.\",
  \"status\"\ : 409,
  \"instance\": \"/api/v1/accounts/2/projects\",
  \"requestUid\"\ : \"8ba8f060-858b-46d9-b3cc-fa1c391ebc66\"
}
" /rp/api/v1/accounts/{accountId}/Projects/_filter: post: tags: - Projects summary: Gets all projects in the given account filter by project ids. description: 'NOTE: If there are more projects in the account than were returned, there will be a "query-has-more" header that will be set to true.
Permissions
Project: Read
Role: Read
HourlyRole: Read' operationId: Projects_QueryFilter parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 requestBody: description: Filter object including projectIds, projectState, name, issues, relativeDate, offset and limit content: application/json-patch+json: schema: $ref: '#/components/schemas/ProjectFilterPredicatesFilter' application/json: schema: $ref: '#/components/schemas/ProjectFilterPredicatesFilter' text/json: schema: $ref: '#/components/schemas/ProjectFilterPredicatesFilter' application/*+json: schema: $ref: '#/components/schemas/ProjectFilterPredicatesFilter' required: true responses: '200': description: 'Success: List of projects in the account' content: text/plain: schema: type: array items: $ref: '#/components/schemas/ProjectResponse' example: - id: 8673 name: Ahrens Lofts colour: '#00FF00' startDate: '2019-01-01' endDate: '2020-12-31' startTime: 08:00:00 endTime: '17:00:00' workDays: - 1 - 2 - 3 - 4 - 5 state: Active winPercent: null unfilledRoles: 3 totalRoles: 16 unfilledHourlyRoles: 4 totalHourlyRoles: 7 totalTasks: 9 unfilledTaskRoles: 0 totalTaskRoles: 0 issuesCount: 5 lastModifiedOn: '2019-01-01T00:00:00' type: Awarded currentPhases: - name: Precon phases: [] groupings: null description: Project Description truncatedDescription: Project Desc externalId: null application/json: schema: type: array items: $ref: '#/components/schemas/ProjectResponse' example: - id: 8673 name: Ahrens Lofts colour: '#00FF00' startDate: '2019-01-01' endDate: '2020-12-31' startTime: 08:00:00 endTime: '17:00:00' workDays: - 1 - 2 - 3 - 4 - 5 state: Active winPercent: null unfilledRoles: 3 totalRoles: 16 unfilledHourlyRoles: 4 totalHourlyRoles: 7 totalTasks: 9 unfilledTaskRoles: 0 totalTaskRoles: 0 issuesCount: 5 lastModifiedOn: '2019-01-01T00:00:00' type: Awarded currentPhases: - name: Precon phases: [] groupings: null description: Project Description truncatedDescription: Project Desc externalId: null text/json: schema: type: array items: $ref: '#/components/schemas/ProjectResponse' example: - id: 8673 name: Ahrens Lofts colour: '#00FF00' startDate: '2019-01-01' endDate: '2020-12-31' startTime: 08:00:00 endTime: '17:00:00' workDays: - 1 - 2 - 3 - 4 - 5 state: Active winPercent: null unfilledRoles: 3 totalRoles: 16 unfilledHourlyRoles: 4 totalHourlyRoles: 7 totalTasks: 9 unfilledTaskRoles: 0 totalTaskRoles: 0 issuesCount: 5 lastModifiedOn: '2019-01-01T00:00:00' type: Awarded currentPhases: - name: Precon phases: [] groupings: null description: Project Description truncatedDescription: Project Desc externalId: null '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/Projects/{id}/externalId: put: tags: - Projects summary: Updates a project to set and externalId that can be referenced by external systems. operationId: Projects_PutExternalId parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: The Project ID required: true schema: type: integer format: int64 requestBody: description: Details for the project object content: application/json-patch+json: schema: $ref: '#/components/schemas/ExternalIdRequest' application/json: schema: $ref: '#/components/schemas/ExternalIdRequest' text/json: schema: $ref: '#/components/schemas/ExternalIdRequest' application/*+json: schema: $ref: '#/components/schemas/ExternalIdRequest' required: true responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/Projects/{id}: get: tags: - Projects summary: Gets details for the given project description: '
Permissions
Project: Read
Role: Read
HourlyRole: Read' operationId: Projects_Get parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: The Project ID required: true schema: type: integer format: int64 - 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' responses: '200': description: Success content: text/plain: schema: $ref: '#/components/schemas/ProjectResponse' example: id: 8673 name: Ahrens Lofts colour: '#00FF00' startDate: '2019-01-01' endDate: '2020-12-31' startTime: 08:00:00 endTime: '17:00:00' workDays: - 1 - 2 - 3 - 4 - 5 state: Active winPercent: null unfilledRoles: 3 totalRoles: 16 unfilledHourlyRoles: 4 totalHourlyRoles: 7 totalTasks: 9 unfilledTaskRoles: 0 totalTaskRoles: 0 issuesCount: 5 lastModifiedOn: '2019-01-01T00:00:00' type: Awarded currentPhases: - name: Precon phases: [] groupings: null description: Project Description truncatedDescription: Project Desc externalId: null application/json: schema: $ref: '#/components/schemas/ProjectResponse' example: id: 8673 name: Ahrens Lofts colour: '#00FF00' startDate: '2019-01-01' endDate: '2020-12-31' startTime: 08:00:00 endTime: '17:00:00' workDays: - 1 - 2 - 3 - 4 - 5 state: Active winPercent: null unfilledRoles: 3 totalRoles: 16 unfilledHourlyRoles: 4 totalHourlyRoles: 7 totalTasks: 9 unfilledTaskRoles: 0 totalTaskRoles: 0 issuesCount: 5 lastModifiedOn: '2019-01-01T00:00:00' type: Awarded currentPhases: - name: Precon phases: [] groupings: null description: Project Description truncatedDescription: Project Desc externalId: null text/json: schema: $ref: '#/components/schemas/ProjectResponse' example: id: 8673 name: Ahrens Lofts colour: '#00FF00' startDate: '2019-01-01' endDate: '2020-12-31' startTime: 08:00:00 endTime: '17:00:00' workDays: - 1 - 2 - 3 - 4 - 5 state: Active winPercent: null unfilledRoles: 3 totalRoles: 16 unfilledHourlyRoles: 4 totalHourlyRoles: 7 totalTasks: 9 unfilledTaskRoles: 0 totalTaskRoles: 0 issuesCount: 5 lastModifiedOn: '2019-01-01T00:00:00' type: Awarded currentPhases: - name: Precon phases: [] groupings: null description: Project Description truncatedDescription: Project Desc externalId: null '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden patch: tags: - Projects summary: 'Update a project in the given account. Each of the fields in the request body is optional - only fields that are present in the request will be updated. When changing the start or end dates for a project, you can customize how the start and end dates for roles and phases will change in response. See the Model below for details. Note that roles or phases whose start and end dates change such that the start date is after the end date will be automatically deleted from the project.' description: "To update a project's dates you need the ProjectDates permission, which is separate from the Project Write\ \ permission that is required to update other project details. \nThis is because changing project dates can have a\ \ significant impact on any associated roles and phases, and therefore only users with the ProjectDates permission\ \ should be allowed to make those changes.\n\n\nIf the \"shiftDates\" property is true and you specify\ \ a changed project start or end date in this request,\nthen the project's start and end dates, and the start and\ \ end dates for all roles and phases\nwill be adjusted by the same amount. If this property is set to true, then you\ \ must only send\nEITHER startDate OR endDate - behavior when setting both is to shift with project start date..\n\ \n \nIf the \"removeRoleSetup\" property is true, then all roles are removed from the\ \ given project.\n\n \nIf the \"expandRole\" property is true and you specify a changed\ \ project start to be earlier than the\ncurrent start date, or you specify a changed project end date to be later\ \ than the current\nend date, then any roles that share the same date will be expanded so that they\nstill start or\ \ end on the same date that the project starts or ends. The duration of those\nroles will be expanded in this case.\n\ \n \nFor example, take a project running from February 1, 2020 to July 1, 2020, where Role A runs from\n\ February 1, 2020 to March 1, 2020, and Role B runs from February 15, 2020 to July 1, 2020.\nIf a PATCH request is\ \ sent with startDate = January 15, 2020 and expandRole = true, then\nthe project will be modified to run from January\ \ 15, 2020 to July 1, 2020, role A will be modified\nto run from January 15, 2020 to March 1, 2020, and role B will\ \ remain unmodified. If instead you\nspecify expandRole = false, then the roles will be unmodified in this situation.\n\ \n \nIf the \"expandPhases\" property is true and you specify a changed project start\ \ to be earlier than the\ncurrent start date, or you specify a changed project end date to be later than the current\n\ end date, then any phases that share the same date will be expanded so that they\nstill start or end on the same date\ \ that the project starts or ends. The duration of those\nphases will be expanded in this case.\n\n \n\ For example, take a project running from February 1, 2020 to July 1, 2020, where Phase A runs from\nFebruary 1, 2020\ \ to March 1, 2020, and Phase B runs from March 2, 2020 to July 1, 2020.\nIf a PATCH request is sent with startDate\ \ = January 15, 2020 and expandPhases = true, then\nthe project will be modified to run from January 15, 2020 to July\ \ 1, 2020, Phase A will be modified\nto run from January 15, 2020 to March 1, 2020, and Phase B will remain unmodified.\ \ If instead you\nspecify expandPhase = false, then the phases will be unmodified in this situation.\n\n \ \ \nIf you update a project to a \"type\" of Awarded without specifying a state, it will default\ \ to a date based state.\nYou can specify a state, but if you pass Active, Completed or Upcoming the API will ignore\ \ those values and return a date based state.\nIf you set it to Canceled it will cancel the project and the allocation\ \ stats for the account will no longer be affected by the project.\nYou can re-activate a project by passing Active,\ \ Completed or Upcoming and the API will return the proper date based state.\nAn Awarded project can only have a state\ \ of Active, Completed, Upcoming or Canceled.\n\nIf you update a project to type of Opportunity without specifying\ \ a state, default to a state of Pursuit.\nAn Opportunity can only have a state of Pursuit or Lost.\n\nThe \"\ winPercent\" is associated with an Opportunity, you can update the winPercent for an Opportunity in Pursuit\ \ state but not for an Awarded project.\nNOTE: Opportunities do not count towards allocation statistics\ \ so, any roles and allocations set on the project will not cause conflicts, issues, over-allocations etc.
Permissions
Project:\ \ Write
ProjectDates: Write
Role: Read
HourlyRole: Read" operationId: Projects_Update parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: The Project ID required: true schema: type: integer format: int64 requestBody: description: Details for the project object content: application/json-patch+json: schema: type: object additionalProperties: {} example: name: Ahrens Lofts colour: '#00FF00' startDate: '2019-01-01T00:00:00' endDate: '2020-12-31T00:00:00' startTime: 08:00:00 endTime: '17:00:00' workDays: - 1 - 2 - 3 - 4 - 5 type: Awarded state: Active winPercent: 80 description: Project Description shiftDates: false removeRoleSetup: false expandPhases: false expandRole: true application/json: schema: type: object additionalProperties: {} example: name: Ahrens Lofts colour: '#00FF00' startDate: '2019-01-01T00:00:00' endDate: '2020-12-31T00:00:00' startTime: 08:00:00 endTime: '17:00:00' workDays: - 1 - 2 - 3 - 4 - 5 type: Awarded state: Active winPercent: 80 description: Project Description shiftDates: false removeRoleSetup: false expandPhases: false expandRole: true text/json: schema: type: object additionalProperties: {} example: name: Ahrens Lofts colour: '#00FF00' startDate: '2019-01-01T00:00:00' endDate: '2020-12-31T00:00:00' startTime: 08:00:00 endTime: '17:00:00' workDays: - 1 - 2 - 3 - 4 - 5 type: Awarded state: Active winPercent: 80 description: Project Description shiftDates: false removeRoleSetup: false expandPhases: false expandRole: true application/*+json: schema: type: object additionalProperties: {} example: name: Ahrens Lofts colour: '#00FF00' startDate: '2019-01-01T00:00:00' endDate: '2020-12-31T00:00:00' startTime: 08:00:00 endTime: '17:00:00' workDays: - 1 - 2 - 3 - 4 - 5 type: Awarded state: Active winPercent: 80 description: Project Description shiftDates: false removeRoleSetup: false expandPhases: false expandRole: true required: true responses: '200': description: Success content: text/plain: schema: $ref: '#/components/schemas/ProjectResponse' example: id: 8673 name: Ahrens Lofts colour: '#00FF00' startDate: '2019-01-01' endDate: '2020-12-31' startTime: 08:00:00 endTime: '17:00:00' workDays: - 1 - 2 - 3 - 4 - 5 state: Active winPercent: null unfilledRoles: 3 totalRoles: 16 unfilledHourlyRoles: 4 totalHourlyRoles: 7 totalTasks: 9 unfilledTaskRoles: 0 totalTaskRoles: 0 issuesCount: 5 lastModifiedOn: '2019-01-01T00:00:00' type: Awarded currentPhases: - name: Precon phases: [] groupings: null description: Project Description truncatedDescription: Project Desc externalId: null application/json: schema: $ref: '#/components/schemas/ProjectResponse' example: id: 8673 name: Ahrens Lofts colour: '#00FF00' startDate: '2019-01-01' endDate: '2020-12-31' startTime: 08:00:00 endTime: '17:00:00' workDays: - 1 - 2 - 3 - 4 - 5 state: Active winPercent: null unfilledRoles: 3 totalRoles: 16 unfilledHourlyRoles: 4 totalHourlyRoles: 7 totalTasks: 9 unfilledTaskRoles: 0 totalTaskRoles: 0 issuesCount: 5 lastModifiedOn: '2019-01-01T00:00:00' type: Awarded currentPhases: - name: Precon phases: [] groupings: null description: Project Description truncatedDescription: Project Desc externalId: null text/json: schema: $ref: '#/components/schemas/ProjectResponse' example: id: 8673 name: Ahrens Lofts colour: '#00FF00' startDate: '2019-01-01' endDate: '2020-12-31' startTime: 08:00:00 endTime: '17:00:00' workDays: - 1 - 2 - 3 - 4 - 5 state: Active winPercent: null unfilledRoles: 3 totalRoles: 16 unfilledHourlyRoles: 4 totalHourlyRoles: 7 totalTasks: 9 unfilledTaskRoles: 0 totalTaskRoles: 0 issuesCount: 5 lastModifiedOn: '2019-01-01T00:00:00' type: Awarded currentPhases: - name: Precon phases: [] groupings: null description: Project Description truncatedDescription: Project Desc externalId: null '400': description: "Bad Request - Request has missing or invalid values\n\n Example when trying to update\ \ a project with an invalid colour value:\n{
  \"errors\": [
    {
      \"\ errorType\": \"ValidationError\",
      \"description\": \"colour must be a six-digit hexadecimal number with a '#' in front of it. Ex: #00FF00\"\ ,
      \"errorCode\": null,
      \"\ field\": \"Colour\",
      \"innerException\": null,
      \"\ hResult\": -2146233088
    }
  ],
  \"title\": \"\ One or more validation errors occurred.\",
  \"status\": 400,
  \"\ instance\": \"/api/v1/accounts/2/projects\",
  \"requestUid\": \"82a530a1-36b1-4a8a-8bd9-9833de5b0cbd\"\
}
" '401': description: Unauthorized '403': description: Forbidden - User doesn't have permissions on this resource, or the project couldn't be found. '409': description: "Conflict - A project already exists in the account with the same name.\n\n Example when\ \ trying to update a project name to the same name as an existing one:\n{
  \"errors\": [
    {
      \"\ errorType\": \"Duplicate\",
      \"description\": \"A project in the account already exists with the requested name.\"\ ,
      \"errorCode\": null,
      \"\ innerException\": null,
      \"hResult\": -2146233088
    }
  ],
  \"\ title\": \"One or more validation errors occurred.\",
  \"status\"\ : 409,
  \"instance\": \"/api/v1/accounts/2/projects\",
  \"requestUid\"\ : \"8ba8f060-858b-46d9-b3cc-fa1c391ebc66\"
}
" '422': description: "Unprocessable Entity - Updated end or start date is invalid.\n\n Example when trying to\ \ update a project end date that would result in the end date being before the current start date:\n{
  \"\ errors\": [
    {
      \"errorType\": \"\ ValidationError\",
      \"description\": \"Project new end date cannot be before current project start date\"\ ,
      \"errorCode\": null,
      \"\ innerException\": null,
      \"hResult\": -2146233088
    }
  ],
  \"\ title\": \"One or more validation errors occurred.\",
  \"status\"\ : 422,
  \"instance\": \"/api/v1/accounts/2/projects/1\",
  \"requestUid\"\ : \"fd024b9c-6432-4a38-a5eb-5ee458866620\"
}
" delete: tags: - Projects summary: Delete a project description: '
Permissions
Project: Write' operationId: Projects_Delete parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: The Project ID required: true schema: type: integer format: int64 responses: '200': description: OK '204': description: No Content (success) '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden - User doesn't have permissions on this resource, or the project couldn't be found /rp/api/v1/accounts/{accountId}/projects/{projectId}/phases: get: tags: - ProjectsPhases summary: Gets all phases on the given project description: '
Permissions
Project: Read' operationId: ProjectsPhases_Query 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 responses: '200': description: Success content: text/plain: schema: type: array items: $ref: '#/components/schemas/ProjectPhaseResponse' application/json: schema: type: array items: $ref: '#/components/schemas/ProjectPhaseResponse' text/json: schema: type: array items: $ref: '#/components/schemas/ProjectPhaseResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden post: tags: - ProjectsPhases summary: Adds a phase to the given project description: 'You must specify "id", "startDate" and "endDate" of any phase for this endpoint.
Permissions
Project: Write' operationId: ProjectsPhases_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 required: true schema: type: integer format: int64 requestBody: description: Phases to be added to the account content: application/json-patch+json: schema: $ref: '#/components/schemas/ProjectPhaseRequest' application/json: schema: $ref: '#/components/schemas/ProjectPhaseRequest' text/json: schema: $ref: '#/components/schemas/ProjectPhaseRequest' application/*+json: schema: $ref: '#/components/schemas/ProjectPhaseRequest' required: true responses: '201': description: Created content: text/plain: schema: $ref: '#/components/schemas/ProjectPhaseResponse' application/json: schema: $ref: '#/components/schemas/ProjectPhaseResponse' text/json: schema: $ref: '#/components/schemas/ProjectPhaseResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '409': description: Conflict - Phase already exists on the project '422': description: Unprocessable Entity - Phase start or end dates outside of project start or end date delete: tags: - ProjectsPhases summary: Deletes phases from the given project operationId: ProjectsPhases_BulkDelete 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 requestBody: description: The Phase IDs content: application/json-patch+json: schema: minItems: 1 type: array items: type: integer format: int64 application/json: schema: minItems: 1 type: array items: type: integer format: int64 text/json: schema: minItems: 1 type: array items: type: integer format: int64 application/*+json: schema: minItems: 1 type: array items: type: integer format: int64 required: true responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/projects/{projectId}/phases/bulk: post: tags: - ProjectsPhases summary: Adds phases to the given project description: 'You must specify "id", "startDate" and "endDate" of any phase for this endpoint.
Permissions
Project: Write' operationId: ProjectsPhases_BulkAdd 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 requestBody: description: Array of phases to be added to the account content: application/json-patch+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/ProjectPhaseRequest' application/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/ProjectPhaseRequest' text/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/ProjectPhaseRequest' application/*+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/ProjectPhaseRequest' required: true responses: '201': description: Created content: text/plain: schema: type: array items: $ref: '#/components/schemas/ProjectPhaseResponse' application/json: schema: type: array items: $ref: '#/components/schemas/ProjectPhaseResponse' text/json: schema: type: array items: $ref: '#/components/schemas/ProjectPhaseResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '409': description: Conflict - Phase already exists on the project '422': description: Unprocessable Entity - Phase start or end dates outside of project start or end date put: tags: - ProjectsPhases summary: Updates multiple phases on the given project description: "This endpoint will only update the fields that are present in the request.\n\nYou must specify \"id\"\ , \"startDate\" and/or \"endDate\" of the phases for this endpoint.\n\n \nIf the \"shiftDates\"\ property is true and you specify a changed phase start or end date in this request,\nthen the phase's start\ \ and end dates will be adjusted by the same amount.\nIf this property is set to true, then you must only send EITHER\ \ startDate OR endDate - only startDate is considered when both dates are set.\n
Permissions
Project:\ \ Write" operationId: ProjectsPhases_BulkUpdate 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 requestBody: description: New start and end date for the phase from the request body content: application/json-patch+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/ProjectPhaseUpdateRequest' application/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/ProjectPhaseUpdateRequest' text/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/ProjectPhaseUpdateRequest' application/*+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/ProjectPhaseUpdateRequest' required: true responses: '200': description: Success content: text/plain: schema: type: array items: $ref: '#/components/schemas/ProjectPhaseResponse' application/json: schema: type: array items: $ref: '#/components/schemas/ProjectPhaseResponse' text/json: schema: type: array items: $ref: '#/components/schemas/ProjectPhaseResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '422': description: Unprocessable Entity - Phase start or end dates outside of project start or end date /rp/api/v1/accounts/{accountId}/projects/{projectId}/phases/{phaseId}: put: tags: - ProjectsPhases summary: Updates a phase on the given project description: "This endpoint will only update the fields that are present in the request.\n\nYou must specify \"startDate\"\ \ and/or \"endDate\" for this endpoint.\n\n \nIf the \"shiftDates\" property is true and\ \ you specify a changed phase start or end date in this request,\nthen the phase's start and end dates will be adjusted\ \ by the same amount.\n\nIf this property is set to true, then you must only send EITHER startDate OR endDate - only\ \ startDate is considered when both dates are set.\n
Permissions
Project: Write" operationId: ProjectsPhases_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 required: true schema: type: integer format: int64 - name: phaseId in: path description: The Phase ID required: true schema: type: integer format: int64 requestBody: description: New start and end date for the phase from the request body content: application/json-patch+json: schema: $ref: '#/components/schemas/ProjectPhaseFromRouteRequest' application/json: schema: $ref: '#/components/schemas/ProjectPhaseFromRouteRequest' text/json: schema: $ref: '#/components/schemas/ProjectPhaseFromRouteRequest' application/*+json: schema: $ref: '#/components/schemas/ProjectPhaseFromRouteRequest' required: true responses: '200': description: Success content: text/plain: schema: $ref: '#/components/schemas/ProjectPhaseResponse' application/json: schema: $ref: '#/components/schemas/ProjectPhaseResponse' text/json: schema: $ref: '#/components/schemas/ProjectPhaseResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '422': description: Unprocessable Entity - Phase start or end dates outside of project start or end date delete: tags: - ProjectsPhases summary: Deletes a phase from the given project operationId: ProjectsPhases_Delete 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: phaseId in: path description: The Phase ID required: true schema: type: integer format: int64 responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/projects/{projectId}/roles/{roleId}/allocations: post: tags: - RoleAllocations summary: Allocates a person to a 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: Unavaialble 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 Unavaialble 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
Person: Read
Role: Read
Allocation: Write
Private: Read' operationId: RoleAllocations_Post 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: roleId 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/ProjectRoleAllocationRequest' application/json: schema: $ref: '#/components/schemas/ProjectRoleAllocationRequest' text/json: schema: $ref: '#/components/schemas/ProjectRoleAllocationRequest' application/*+json: schema: $ref: '#/components/schemas/ProjectRoleAllocationRequest' required: true responses: '200': description: OK '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '409': description: Conflict '422': description: Unprocessable Entity /rp/api/v1/accounts/{accountId}/role-names: get: tags: - RoleNames summary: Get role names in the account description: '
Permissions
Account: Read
Finance: Read
Role: Read' operationId: RoleNames_Get parameters: - name: accountId in: path description: The account ID required: true schema: type: integer format: int32 responses: '200': description: Success content: text/plain: schema: type: array items: $ref: '#/components/schemas/RoleNameResponse' application/json: schema: type: array items: $ref: '#/components/schemas/RoleNameResponse' text/json: schema: type: array items: $ref: '#/components/schemas/RoleNameResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden - User doesn't have permissions on this resource, or the project couldn't be found post: tags: - RoleNames summary: Add/Update role name(s) in the account description: 'If "alphabetize" parameter flag is true, the role names should be alphabetically ordered by caller, otherwise in the order of the request. To add or update role names you must have permissions to manage account properties.
Permissions
Account: Write
Role: Write' operationId: RoleNames_Post parameters: - name: accountId in: path description: The account ID required: true schema: type: integer format: int32 - name: alphabetize in: query description: Optional flag to set whether role names should be alphabetically ordered by the caller schema: type: boolean default: false requestBody: description: The role name detail content: application/json-patch+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/RoleNameRequest' application/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/RoleNameRequest' text/json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/RoleNameRequest' application/*+json: schema: minItems: 1 type: array items: $ref: '#/components/schemas/RoleNameRequest' required: true responses: '200': description: Success content: text/plain: schema: type: array items: $ref: '#/components/schemas/RoleNameResponse' application/json: schema: type: array items: $ref: '#/components/schemas/RoleNameResponse' text/json: schema: type: array items: $ref: '#/components/schemas/RoleNameResponse' '400': description: Bad Request - Request has missing or invalid values '401': description: Unauthorized '403': description: Forbidden - User doesn't have permissions on this resource, or the project couldn't be found delete: tags: - RoleNames summary: Remove role name(s) by ID in the account description: 'To remove role names you must have permissions to manage account properties. NOTE: The account must contain at least 1 role name.
Permissions
Account: Write
Role: Write' operationId: RoleNames_Delete parameters: - name: accountId in: path description: The account ID required: true schema: type: integer format: int32 requestBody: description: The IDs of the role name to be removed content: application/json-patch+json: schema: minItems: 1 type: array items: type: integer format: int64 application/json: schema: minItems: 1 type: array items: type: integer format: int64 text/json: schema: minItems: 1 type: array items: type: integer format: int64 application/*+json: schema: minItems: 1 type: array items: type: integer format: int64 required: true responses: '204': description: No Content - Success '401': description: Unauthorized '403': description: Forbidden - User doesn't have permissions on this resource, or the project couldn't be found '422': description: Validation failed - if the role name is being used by any role, the name cannot be removed /rp/api/v1/accounts/{accountId}/service-accounts: get: tags: - ServiceAccounts summary: Gets service accounts in the given account description: '
Permissions
Account: Read' operationId: ServiceAccounts_GetServiceAccounts parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: ids in: query description: (Optional) Filters the result to contain accounts that match the ids passed in. schema: type: array items: type: integer format: int32 responses: '200': description: 'Success: Service Account model' content: text/plain: schema: type: array items: $ref: '#/components/schemas/ServiceAccountResponse' application/json: schema: type: array items: $ref: '#/components/schemas/ServiceAccountResponse' text/json: schema: type: array items: $ref: '#/components/schemas/ServiceAccountResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden post: tags: - ServiceAccounts summary: Creates a service account in the given account description: 'This endpoint will generate a unique login and password in the response. There is no way to retrieve the password again after the account is created. This is a limit of 10 service accounts on a single account.
Permissions
Account: Write' operationId: ServiceAccounts_CreateServiceAccount parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 requestBody: description: Object containing the name and group the service account will be created with content: application/json-patch+json: schema: $ref: '#/components/schemas/ServiceAccountRequest' application/json: schema: $ref: '#/components/schemas/ServiceAccountRequest' text/json: schema: $ref: '#/components/schemas/ServiceAccountRequest' application/*+json: schema: $ref: '#/components/schemas/ServiceAccountRequest' required: true responses: '201': description: 'Success: Service Account model with password' content: text/plain: schema: $ref: '#/components/schemas/ServiceAccountDetailResponse' example: password: uI|O..KsE>TPBmq$#j#(*?-jd*Zm@i@0 id: 3245 name: Allocation Integration login: b1c657b0a0864e9597cbdbacc67c79de group: Administrator allowedIPNetworks: null createdOn: '2026-05-25T04:42:55.1879247Z' application/json: schema: $ref: '#/components/schemas/ServiceAccountDetailResponse' example: password: uI|O..KsE>TPBmq$#j#(*?-jd*Zm@i@0 id: 3245 name: Allocation Integration login: b1c657b0a0864e9597cbdbacc67c79de group: Administrator allowedIPNetworks: null createdOn: '2026-05-25T04:42:55.1879247Z' text/json: schema: $ref: '#/components/schemas/ServiceAccountDetailResponse' example: password: uI|O..KsE>TPBmq$#j#(*?-jd*Zm@i@0 id: 3245 name: Allocation Integration login: b1c657b0a0864e9597cbdbacc67c79de group: Administrator allowedIPNetworks: null createdOn: '2026-05-25T04:42:55.1879247Z' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/service-accounts/{id}: put: tags: - ServiceAccounts summary: Updates a service account in the given account description: 'You must specify both "name" and "group" for this endpoint.
Permissions
Account: Write' operationId: ServiceAccounts_UpdateServiceAccount parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: The Service Account ID required: true schema: type: integer format: int32 requestBody: description: Object containing the name and group the service account will be updated with content: application/json-patch+json: schema: $ref: '#/components/schemas/ServiceAccountRequest' application/json: schema: $ref: '#/components/schemas/ServiceAccountRequest' text/json: schema: $ref: '#/components/schemas/ServiceAccountRequest' application/*+json: schema: $ref: '#/components/schemas/ServiceAccountRequest' required: true responses: '204': description: Success '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden delete: tags: - ServiceAccounts summary: Deactivates a service account in the given account description: 'Deactivates the account preventing it from being able to log in and make API calls.
Permissions
Account: Write' operationId: ServiceAccounts_DeactivateServiceAccount parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: The Service Account ID required: true schema: type: integer format: int32 responses: '204': description: Success '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/service-accounts/{id}/reset-password: post: tags: - ServiceAccounts summary: Generates a new password for a service account in the given account description: 'This endpoint will generate a new password in the response. There is no way to retrieve the password again. A new password will need to be generated if you lose it.
Permissions
Account: Write' operationId: ServiceAccounts_ResetPassword parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: The Service Account ID required: true schema: type: integer format: int32 responses: '200': description: 'Success: Service Account model with password' content: text/plain: schema: $ref: '#/components/schemas/ServiceAccountDetailResponse' example: password: uI|O..KsE>TPBmq$#j#(*?-jd*Zm@i@0 id: 3245 name: Allocation Integration login: b1c657b0a0864e9597cbdbacc67c79de group: Administrator allowedIPNetworks: null createdOn: '2026-05-25T04:42:55.1888354Z' application/json: schema: $ref: '#/components/schemas/ServiceAccountDetailResponse' example: password: uI|O..KsE>TPBmq$#j#(*?-jd*Zm@i@0 id: 3245 name: Allocation Integration login: b1c657b0a0864e9597cbdbacc67c79de group: Administrator allowedIPNetworks: null createdOn: '2026-05-25T04:42:55.1888354Z' text/json: schema: $ref: '#/components/schemas/ServiceAccountDetailResponse' example: password: uI|O..KsE>TPBmq$#j#(*?-jd*Zm@i@0 id: 3245 name: Allocation Integration login: b1c657b0a0864e9597cbdbacc67c79de group: Administrator allowedIPNetworks: null createdOn: '2026-05-25T04:42:55.1888354Z' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '422': description: Unprocessable Entitiy - Something went wrong trying to reset the password /rp/api/v1/accounts/{accountId}/shared-filters/{id}: delete: tags: - SharedFilters summary: Delete a shared filter from the given account description: '
Permissions
Account: Write' operationId: SharedFilters_Delete parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: Id of the filter to remove required: true schema: type: string format: uuid responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/accounts/{accountId}/my-filters: get: tags: - UserFilters summary: Gets user's saved filters in the given account description: '
Permissions
Account: Read' operationId: UserFilters_Query parameters: - name: accountId 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: 100 - name: type in: query description: The filter type to return in the result schema: enum: - People - Project - Roles type: string - name: name in: query description: The filter name by partial match to return in the result schema: type: string responses: '200': description: 'Success: List of saved filters on the account' content: text/plain: schema: type: array items: $ref: '#/components/schemas/FilterResponse' application/json: schema: type: array items: $ref: '#/components/schemas/FilterResponse' text/json: schema: type: array items: $ref: '#/components/schemas/FilterResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden post: tags: - UserFilters summary: Add a filter for the user in the given account. description: '
Permissions
Account: Read' operationId: UserFilters_Add parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 requestBody: description: Request object that contains the filter details content: application/json-patch+json: schema: $ref: '#/components/schemas/FilterRequest' application/json: schema: $ref: '#/components/schemas/FilterRequest' text/json: schema: $ref: '#/components/schemas/FilterRequest' application/*+json: schema: $ref: '#/components/schemas/FilterRequest' required: true responses: '201': description: Success content: text/plain: schema: $ref: '#/components/schemas/FilterResponse' application/json: schema: $ref: '#/components/schemas/FilterResponse' text/json: schema: $ref: '#/components/schemas/FilterResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden '409': description: Conflict '422': description: Unprocessable Entity /rp/api/v1/accounts/{accountId}/my-filters/{id}: get: tags: - UserFilters summary: Get user's saved filter for the given account by ID description: '
Permissions
Account: Read' operationId: UserFilters_Get parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: The filter's ID required: true schema: type: integer format: int32 responses: '200': description: 'Success: filter model' content: text/plain: schema: $ref: '#/components/schemas/FilterResponse' application/json: schema: $ref: '#/components/schemas/FilterResponse' text/json: schema: $ref: '#/components/schemas/FilterResponse' '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden patch: tags: - UserFilters summary: Update user's saved filter from the given account description: '
Permissions
Account: Read' operationId: UserFilters_Update parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: Id of the filter to remove required: true schema: type: integer format: int32 requestBody: description: Account request object content: application/json-patch+json: schema: $ref: '#/components/schemas/FilterUpdateRequest' application/json: schema: $ref: '#/components/schemas/FilterUpdateRequest' text/json: schema: $ref: '#/components/schemas/FilterUpdateRequest' application/*+json: schema: $ref: '#/components/schemas/FilterUpdateRequest' required: true responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden delete: tags: - UserFilters summary: Delete user's saved filter from the given account description: '
Permissions
Account: Read' operationId: UserFilters_Delete parameters: - name: accountId in: path description: The Account ID required: true schema: type: integer format: int32 - name: id in: path description: Id of the filter to remove required: true schema: type: integer format: int32 responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden /rp/api/v1/Users/{id}/membership: put: tags: - Users summary: Modify system user's permission group. operationId: Users_SetMembership parameters: - name: id in: path description: Id of the user to remove required: true schema: type: integer format: int32 requestBody: description: Request object for the user content: application/json-patch+json: schema: $ref: '#/components/schemas/MembershipRequest' application/json: schema: $ref: '#/components/schemas/MembershipRequest' text/json: schema: $ref: '#/components/schemas/MembershipRequest' application/*+json: schema: $ref: '#/components/schemas/MembershipRequest' required: true responses: '204': description: No Content '400': description: Bad Request '401': description: Unauthorized '403': description: Forbidden components: schemas: 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 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 AccountGroupingRequest: type: object properties: name: type: string nullable: true additionalProperties: false AccountGroupingResponse: type: object properties: id: type: integer format: int64 name: type: string nullable: true lastModifiedOn: type: string format: date-time inUseByPeople: type: array items: type: integer format: int64 nullable: true inUseByProjects: type: array items: type: integer format: int64 nullable: true inUseByUsers: type: array items: type: integer format: int32 nullable: true additionalProperties: false AccountInvitationRequest: required: - email type: object properties: groupingPermissions: type: array items: $ref: '#/components/schemas/GroupingGroup' nullable: true email: maxLength: 254 minLength: 6 type: string group: maxLength: 50 minLength: 1 type: string nullable: true additionalProperties: false AccountMembershipRequest: type: object properties: groupingPermissions: type: array items: $ref: '#/components/schemas/GroupingGroup' nullable: true group: type: string nullable: true example: Administrator 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 AccountSort: type: object properties: sortBy: enum: - 0 - 1 - 2 - 3 - 4 - 5 type: integer format: int32 direction: enum: - Asc - Desc type: string additionalProperties: false ActiveFilterRequest: type: object properties: verb: enum: - Above - Below - Between - Includes - Excludes - Equals type: string nullable: true example: Includes valueIds: type: array items: type: integer format: int64 nullable: true example: - 1 - 2 - 3 shortValues: type: array items: type: integer format: int32 nullable: true intValues: type: array items: type: integer format: int32 nullable: true longValues: type: array items: type: integer format: int64 nullable: true decimalValues: type: array items: type: number format: double nullable: true dateValues: type: array items: type: string format: date nullable: true stringValue: type: string nullable: true blankValue: type: boolean nullable: true dynamicData: type: object additionalProperties: type: string nullable: true nullable: true example: - key: k value: v additionalProperties: false ActiveFilterResponse: type: object properties: id: type: integer format: int64 verb: enum: - Above - Below - Between - Includes - Excludes - Equals type: string nullable: true valueIds: type: array items: type: integer format: int64 nullable: true shortValues: type: array items: type: integer format: int32 nullable: true intValues: type: array items: type: integer format: int32 nullable: true longValues: type: array items: type: integer format: int64 nullable: true decimalValues: type: array items: type: number format: double nullable: true dateValues: type: array items: type: string format: date nullable: true stringValue: type: string nullable: true blankValue: type: boolean nullable: true dynamicData: type: object additionalProperties: type: string nullable: true nullable: true additionalProperties: false ActiveFilterSetRequest: required: - filters - type type: object properties: type: enum: - People - Project - Roles type: string example: Project fieldDefId: type: integer format: int64 nullable: true example: 123 filterType: type: string nullable: true example: ProjectStartDate filters: type: array items: $ref: '#/components/schemas/ActiveFilterRequest' additionalProperties: false ActiveFilterSetResponse: type: object properties: id: type: integer format: int64 type: enum: - People - Project - Roles type: string fieldDefId: type: integer format: int64 nullable: true filterType: type: string nullable: true filters: type: array items: $ref: '#/components/schemas/ActiveFilterResponse' nullable: true additionalProperties: false ActivitiesFilter: type: object properties: offset: type: integer format: int32 limit: maximum: 50 minimum: 1 type: integer format: int32 predicates: $ref: '#/components/schemas/ActivitiesFilterPredicates' additionalProperties: false ActivitiesFilterPredicates: type: object properties: personIds: maxItems: 10 type: array items: type: integer format: int64 nullable: true projectIds: maxItems: 10 type: array items: type: integer format: int64 nullable: true happenedFrom: type: string format: date-time nullable: true happenedTo: type: string format: date-time nullable: true triggeredByUserIds: maxItems: 50 type: array items: type: integer format: int32 nullable: true activityTypes: maxItems: 25 type: array items: type: string nullable: true triggeredByIntegrations: type: boolean triggeredByUsers: type: boolean groupingIds: type: array items: type: integer format: int64 nullable: true includeBlankGroupIds: type: boolean activityTypeSearch: maxLength: 100 type: string nullable: true additionalProperties: false ActivityResponse: type: object properties: happenedOn: type: string format: date-time triggeredByUserId: type: integer format: int64 triggeredByUserName: type: string nullable: true activityType: type: string nullable: true personId: type: integer format: int64 nullable: true projectId: type: integer format: int64 nullable: true roleId: type: integer format: int64 nullable: true payload: nullable: true diff: nullable: true triggeredByUserType: enum: - Member - ServiceAccount type: string groupingIds: type: array items: type: integer format: int64 nullable: true additionalProperties: false AttachmentResponse: type: object properties: id: type: integer format: int64 example: 123 name: type: string nullable: true example: document.txt size: type: integer format: int64 example: 1024 mimeType: type: string nullable: true example: application/octet-stream isPrivate: type: boolean example: false binaryUrl: type: string nullable: true example: https://bench.gobridgit.com/bin/attachments/accounts/1/persons/1/document.txt creatorId: type: integer format: int32 example: 1 createdOn: type: string format: date-time example: '2021-01-01T00:00:00Z' state: enum: - InProgress - Completed - Failed - All type: string example: InProgress certificationIds: type: array items: type: integer format: int64 nullable: true example: - 1 additionalProperties: false Availability: type: object properties: startDate: type: string format: date-time example: '2021-01-01' endDate: type: string format: date-time example: '2021-12-31' availablePercent: type: integer format: int32 nullable: true example: 100 reason: enum: - Available - Allocated - PreEmployment - PostEmployment - Unavailability type: string nullable: true additionalProperties: false BaseRoleRequest: type: object properties: name: type: string nullable: true example: Project Engineer taskId: type: string format: uuid nullable: true example: a2c09162-dbd8-4079-947d-fbc412061de5 startDate: type: string format: date-time example: '2019-01-01' endDate: type: string format: date-time example: '2020-12-31' 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 categoryId: type: integer format: int64 nullable: true example: 123 billable: type: boolean example: false allocations: type: array items: $ref: '#/components/schemas/RoleRequirement' nullable: true roleTagIds: type: array items: type: integer format: int64 nullable: true assignmentBreakdownBy: enum: - Custom - Phases - Monthly - Weekly type: string 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 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 BreakdownRequest: type: object properties: offset: type: integer format: int32 example: 0 limit: type: integer format: int32 example: 1000 startDate: type: string format: date-time example: '2020-01-01T00:00:00Z' endDate: type: string format: date-time example: '2021-12-31T00:00:00Z' period: enum: - Annual - Quarter - Month - Week type: string example: '0' bounded: type: boolean example: false roleNameIds: type: array items: type: integer format: int64 description: 'RoleNameIds to filter by. [] for all. [1, 2, 3]' nullable: true roleType: enum: - Salaried - Hourly - All type: string description: RoleType to filter by. Salaried by default. Hourly is not supported. salariedRoleType: enum: - Operations - Preconstruction - All type: string description: SalariedRoleType to filter by. All by default. opsPreconFilter: enum: - 0 - 1 - 2 - 3 type: integer description: ResourcePlanning.Contracts.BreakdownRequest.OpsPreconFilter to filter by. ResourcePlanning.Contracts.OpsPreconFilter.OperationsPrecon by default. format: int32 additionalProperties: false CertificationResponse: type: object properties: id: type: integer format: int64 example: 123 name: type: string nullable: true example: CPR Training abbreviation: type: string nullable: true example: CPR requireExpiration: type: boolean example: false daysWarnBeforeExpire: type: integer format: int32 nullable: true example: 7 inUse: type: array items: type: integer format: int64 nullable: true example: - 1 - 2 - 3 - 4 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 CollaborationMatrixPredicatesFilter: type: object properties: offset: type: integer format: int32 limit: type: integer format: int32 predicates: $ref: '#/components/schemas/CollaborationMatrixPredicates' additionalProperties: false 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 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 EmploymentDatesResponse: type: object properties: startDate: type: string format: date-time nullable: true endDate: type: string format: date-time nullable: true additionalProperties: false ExperienceFieldCandidateResponse: type: object properties: customFieldId: type: integer format: int64 name: type: string nullable: true example: Experience additionalProperties: false ExperienceFieldResponse: type: object properties: experienceFieldId: type: string format: uuid example: 00000000-0000-0000-0000-000000000000 projectFieldId: type: integer format: int64 example: 1 name: type: string nullable: true example: Experience type: enum: - Boolean - Date - Email - PhoneNumber - Image - Text - LongText - SingleSelect - MultiSelect - Address - Currency - Phone - Integer - Number type: string example: SingleSelect isRequired: type: boolean example: true additionalProperties: false ExperienceFieldValueRequest: type: object properties: name: maxLength: 250 minLength: 1 type: string nullable: true example: '"Apartment"' additionalProperties: false ExperienceFieldValueResponse: type: object properties: experienceFieldValueId: type: string format: uuid nullable: true name: type: string nullable: true additionalProperties: false ExternalIdRequest: type: object properties: externalId: type: string nullable: true additionalProperties: false FieldDefRequest: type: object properties: id: 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 definedValues: type: array items: $ref: '#/components/schemas/FieldDefinedValueRequest' nullable: true isRequired: type: boolean example: false isPrivate: type: boolean example: false isLocked: type: boolean example: false additionalProperties: false FieldDefinedValue: type: object properties: valueId: type: integer format: int64 example: 13 definedValue: type: string nullable: true example: Defined Value inUse: type: array items: type: integer format: int64 nullable: true additionalProperties: false FieldDefinedValueRequest: type: object properties: valueId: type: integer format: int64 definedValue: type: string nullable: true forRemoval: type: boolean deleteExperienceFieldValues: type: boolean additionalProperties: false FieldOrderRequest: required: - displayOrder - fieldId type: object properties: fieldId: maximum: 9.223372036854776e+18 minimum: 1 type: integer description: The field ID to reorder format: int64 example: 1234 displayOrder: maximum: 2147483647 minimum: 1 type: integer description: The new display order position (1-indexed) format: int32 example: 1 additionalProperties: false FieldValuesPair: type: object properties: fieldId: type: integer format: int64 example: 1394 values: type: array items: type: string nullable: true example: - '5195555555' additionalProperties: false FieldValuesRequest: type: object properties: values: type: array items: type: string nullable: true example: - '5195555555' 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 FilterRequest: required: - name - predicates - type type: object properties: name: minLength: 1 type: string example: My filter type: enum: - People - Project - Roles type: string example: Project predicates: minLength: 1 type: string example: '[{"activeFilters":[{"value":true}],"filterType":"FILTER_ISSUES"}]' filtersSet: type: array items: $ref: '#/components/schemas/ActiveFilterSetRequest' nullable: true additionalProperties: false FilterResponse: type: object properties: id: type: integer format: int64 example: 123 name: type: string nullable: true example: My filter type: enum: - People - Project - Roles type: string example: Project predicates: type: string nullable: true example: '[{"activeFilters":[{"value":true}],"filterType":"FILTER_ISSUES"}]' filtersSet: type: array items: $ref: '#/components/schemas/ActiveFilterSetResponse' nullable: true additionalProperties: false FilterUpdateRequest: type: object properties: name: type: string nullable: true example: My filter predicates: type: string nullable: true example: '[{"activeFilters":[{"value":true}],"filterType":"FILTER_ISSUES"}]' filtersSet: type: array items: $ref: '#/components/schemas/ActiveFilterSetRequest' nullable: true additionalProperties: false GroupingGroup: type: object properties: id: type: integer format: int64 example: 124 groupId: type: integer format: int32 example: 323 additionalProperties: false HistoricalExperienceEntryWithExperienceFields: required: - roleName type: object properties: experienceFields: type: array items: $ref: '#/components/schemas/HistoricalExperienceFieldValue' nullable: true historicalExperienceId: type: string format: uuid roleName: type: string nullable: true currentCompany: type: boolean assignmentStartDate: type: string format: date-time nullable: true assignmentEndDate: type: string format: date-time nullable: true assignmentDuration: type: integer format: int32 assignmentHours: type: number format: double nullable: true additionalProperties: false HistoricalExperienceFieldValue: required: - fieldName - value type: object properties: experienceFieldId: type: string format: uuid experienceFieldValueId: type: string format: uuid fieldName: type: string nullable: true value: type: string nullable: true additionalProperties: false HistoricalExperienceFieldValueRequest: type: object properties: experienceFieldId: type: string format: uuid experienceFieldValueId: type: string format: uuid nullable: true value: type: string nullable: true additionalProperties: false HistoricalExperienceFieldValueUpdateRequest: type: object properties: experienceFieldValueId: type: string format: uuid nullable: true value: type: string nullable: true additionalProperties: false HistoricalExperienceFieldValuesPostRequest: type: object properties: experienceFields: type: array items: $ref: '#/components/schemas/HistoricalExperienceFieldValueRequest' nullable: true additionalProperties: false HistoricalExperienceFieldValuesPostResponse: type: object properties: experienceFields: type: array items: $ref: '#/components/schemas/HistoricalExperienceFieldValue' nullable: true additionalProperties: false HistoricalExperienceFullEntry: required: - projectName - roleName type: object properties: historicalProjectId: type: string format: uuid projectName: type: string nullable: true projectDescription: type: string nullable: true projectStartDate: type: string format: date-time nullable: true projectEndDate: type: string format: date-time nullable: true companyName: type: string nullable: true experienceFields: type: array items: $ref: '#/components/schemas/HistoricalExperienceFieldValue' description: "List of experience fields for this historical experience entry.\n \nNote that you should\ \ avoid touching this property directly and use the `ExperienceFieldsDict` property instead.\nThis property is\ \ only here to provide a JSON representation of the experience fields.\nThe dictionary version is more useful\ \ in most cases." nullable: true historicalExperienceId: type: string format: uuid roleName: type: string nullable: true currentCompany: type: boolean assignmentStartDate: type: string format: date-time nullable: true assignmentEndDate: type: string format: date-time nullable: true assignmentDuration: type: integer format: int32 assignmentHours: type: number format: double nullable: true additionalProperties: false HistoricalExperiencePatchRequest: type: object properties: roleName: type: string nullable: true assignmentStartDate: type: string format: date-time nullable: true assignmentEndDate: type: string format: date-time nullable: true assignmentDuration: type: integer format: int32 nullable: true assignmentHours: type: number format: double nullable: true additionalProperties: false HistoricalExperienceRequest: required: - projectName - roleName type: object properties: projectName: type: string nullable: true projectStartDate: type: string format: date-time nullable: true projectEndDate: type: string format: date-time nullable: true roleName: type: string nullable: true currentCompany: type: boolean experienceFields: type: array items: $ref: '#/components/schemas/HistoricalExperienceFieldValueRequest' nullable: true projectDescription: type: string nullable: true companyName: type: string nullable: true assignmentStartDate: type: string format: date-time nullable: true assignmentEndDate: type: string format: date-time nullable: true assignmentDuration: type: integer format: int32 nullable: true assignmentHours: type: number format: double nullable: true additionalProperties: false HistoricalExperienceUpdateRequest: required: - experienceFields - roleName type: object properties: roleName: type: string nullable: true experienceFields: type: array items: $ref: '#/components/schemas/HistoricalExperienceFieldValueRequest' nullable: true assignmentStartDate: type: string format: date-time nullable: true assignmentEndDate: type: string format: date-time nullable: true assignmentDuration: type: integer format: int32 nullable: true assignmentHours: type: number format: double 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 HourlyRoleNameRequest: type: object properties: id: type: integer format: int64 example: 1 name: type: string nullable: true example: Project Engineer hourlyCost: type: number format: double nullable: true example: 123.45 additionalProperties: false HourlyRoleNameResponse: type: object properties: id: type: integer format: int64 example: 1 name: type: string nullable: true example: Project Engineer type: enum: - Salaried - Hourly - All type: string example: Salaried hourlyCost: type: number format: double nullable: true example: 123.45 inUse: type: boolean readOnly: true projectIds: type: array items: type: integer format: int64 nullable: true example: - 1 alphabetize: type: boolean 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 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 HoursBreakdownResponse: type: object properties: workforceSpendHoursBreakdown: type: array items: $ref: '#/components/schemas/RoleWorkforceSpendHoursBreakdown' nullable: true totalWorkforceSpendHoursFilled: type: integer format: int64 totalWorkforceSpendHoursUnfilled: type: integer format: int64 totalWorkforceSpendHours: type: integer format: int64 additionalProperties: false HoursOverviewResponse: type: object properties: workforceSpendHoursOverview: type: array items: $ref: '#/components/schemas/RoleWorkforceSpendHoursOverview' nullable: true totalWorkforceSpendHoursElapsed: type: integer format: int64 totalWorkforceSpendHoursRemainder: type: integer format: int64 totalWorkforceSpendHours: type: integer format: int64 additionalProperties: false InvitationResponse: type: object properties: id: type: integer format: int64 email: type: string nullable: true group: type: string nullable: true status: enum: - Pending - Expired - Failed type: string createdOn: type: string format: date-time groupingPermissions: type: array items: $ref: '#/components/schemas/GroupingGroup' nullable: true additionalProperties: false MembershipRequest: type: object properties: group: type: string nullable: true example: Administrator additionalProperties: false NewAttachmentRequest: required: - name type: object properties: name: minLength: 1 type: string example: document.txt isPrivate: type: boolean example: false additionalProperties: false NewAttachmentResponse: type: object properties: uploadUrl: type: string nullable: true example: https://bench.gobridgit.com/uploads/ id: type: integer format: int64 example: 123 name: type: string nullable: true example: document.txt size: type: integer format: int64 example: 1024 mimeType: type: string nullable: true example: application/octet-stream isPrivate: type: boolean example: false binaryUrl: type: string nullable: true example: https://bench.gobridgit.com/bin/attachments/accounts/1/persons/1/document.txt creatorId: type: integer format: int32 example: 1 createdOn: type: string format: date-time example: '2021-01-01T00:00:00Z' state: enum: - InProgress - Completed - Failed - All type: string example: InProgress certificationIds: type: array items: type: integer format: int64 nullable: true example: - 1 additionalProperties: false NewCertificationRequest: type: object properties: name: type: string nullable: true example: CPR Training abbreviation: type: string nullable: true example: CPR requireExpiration: type: boolean example: false daysWarnBeforeExpire: maximum: 365 minimum: 1 type: integer format: int32 nullable: true example: 7 additionalProperties: false NewCertificationResponse: type: object properties: id: type: integer format: int64 example: 123 name: type: string nullable: true example: CPR Training abbreviation: type: string nullable: true example: CPR requireExpiration: type: boolean example: false daysWarnBeforeExpire: type: integer format: int32 nullable: true example: 7 inUse: type: array items: type: integer format: int64 nullable: true example: - 1 - 2 - 3 - 4 additionalProperties: false NewNoteRequest: type: object properties: message: type: string nullable: true example: This is a note about something on the project. This is mentioning [[mention:userID#123]] to notify them. isPrivate: type: boolean example: false additionalProperties: false NewNoteResponse: type: object properties: id: type: integer format: int64 example: 213 message: type: string nullable: true example: This is an updated message on a note. isPrivate: type: boolean example: false creatorId: type: integer format: int32 example: 453 creatorName: type: string nullable: true example: John Smith 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 NewPersonCertificationRequest: type: object properties: certificationId: type: integer format: int64 example: 1234 expiryDate: type: string format: date-time nullable: true example: '2021-01-01' certificationDate: type: string format: date-time nullable: true example: '2021-12-20' certificationDescription: type: string description: Must be no greater than ResourcePlanning.Contracts.NewPersonCertificationRequest.MaxDescriptionLength characters. nullable: true example: '"Certification for fall arrest"' additionalProperties: false NewPersonRequest: type: object properties: email: type: string format: email nullable: true example: jayne@example.com uniqueId: type: string nullable: true example: This is a unique string that is less than 255 characters name: maxLength: 250 minLength: 1 type: string nullable: true example: Jayne Peters type: enum: - Salaried - Hourly type: string example: Salaried title: maxLength: 250 minLength: 1 type: string nullable: true example: Project Engineer photoUrl: type: string format: uri nullable: true example: https://www.example.com/jayne.png employmentDates: type: object additionalProperties: type: string format: date-time nullable: true description: Request object for representing employment dates on a person. nullable: true workDays: minItems: 1 type: array items: enum: - 0 - 1 - 2 - 3 - 4 - 5 - 6 type: integer format: int32 default: - 1 - 2 - 3 - 4 - 5 nullable: true example: - 1 - 2 - 3 - 4 - 5 fields: type: array items: $ref: '#/components/schemas/FieldValuesPair' nullable: true groupings: minItems: 1 type: array items: type: integer format: int64 nullable: true industryStartDate: type: string format: date-time nullable: true example: '2020-01-01T00:00:00Z' additionalProperties: false NewProjectRequest: type: object properties: name: type: string nullable: true example: Ahrens Lofts colour: pattern: ^#[0-9a-fA-F]{6}$ type: string description: 'The color associated with the project, expressed as a web color string: a ''#'' character, followed by a six-digit hexadecimal number. If not provided, color rules will be evaluated.' nullable: true example: '#4B6BAA' startDate: type: string format: date-time example: '2019-01-01' endDate: type: string format: date-time example: '2020-12-31' startTime: type: string format: date-span example: 08:00:00 endTime: type: string format: date-span example: '17:00:00' workDays: minItems: 1 type: array items: enum: - 0 - 1 - 2 - 3 - 4 - 5 - 6 type: integer format: int32 nullable: true example: - 1 - 2 - 3 - 4 - 5 type: enum: - Awarded - Opportunity type: string winPercent: maximum: 100 minimum: 0 type: integer format: int32 nullable: true example: 100 fields: type: array items: $ref: '#/components/schemas/FieldValuesPair' nullable: true groupings: minItems: 1 type: array items: type: integer format: int64 nullable: true description: type: string nullable: true example: Project Description phases: type: array items: $ref: '#/components/schemas/ProjectPhaseRequest' nullable: true additionalProperties: false NewRoleCategoryRequest: required: - name type: object properties: name: type: string example: North Tower additionalProperties: false NewUnavailabilityRequest: type: object properties: description: maxLength: 50 minLength: 0 type: string nullable: true startDate: type: string format: date-time endDate: type: string format: date-time nullable: true isPrivate: type: boolean rangeType: enum: - PreEmployment - PostEmployment - Unavailability - TimeOff type: string additionalProperties: false NoteResponse: type: object properties: id: type: integer format: int64 example: 213 message: type: string nullable: true example: This is an updated message on a note. isPrivate: type: boolean example: false creatorId: type: integer format: int32 example: 453 creatorName: type: string nullable: true example: John Smith 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 OverviewRequest: type: object properties: offset: type: integer format: int32 example: 0 limit: type: integer format: int32 example: 1000 startDate: type: string format: date-time example: '2020-01-01T00:00:00Z' endDate: type: string format: date-time example: '2021-12-31T00:00:00Z' relativeDate: type: string format: date-time example: '2020-08-01T00:00:00Z' roleNameIds: type: array items: type: integer format: int64 description: 'RoleNameIds to filter by. [] for all. [1, 2, 3]' nullable: true roleType: enum: - Salaried - Hourly - All type: string description: RoleType to filter by. Salaried by default. Hourly is not supported. salariedRoleType: enum: - Operations - Preconstruction - All type: string description: SalariedRoleType to filter by. All by default. opsPreconFilter: enum: - 0 - 1 - 2 - 3 type: integer description: ResourcePlanning.Contracts.OverviewRequest.OpsPreconFilter to filter by. ResourcePlanning.Contracts.OpsPreconFilter.OperationsPrecon by default. format: int32 additionalProperties: false PeriodWorkforceSpendHoursBreakdown: type: object properties: startDate: type: string format: date-time endDate: type: string format: date-time personWorkforceSpendHoursBreakdown: type: array items: $ref: '#/components/schemas/PersonWorkforceSpendHoursBreakdown' nullable: true periodWorkforceSpendHoursFilled: type: integer format: int64 periodWorkforceSpendHoursUnfilled: type: integer format: int64 periodWorkforceSpendHoursTotal: type: integer format: int64 additionalProperties: false PersonAllocation: type: object properties: personCost: type: number format: double nullable: true example: 123.45 personId: type: integer format: int64 example: 2324 name: type: string nullable: true example: John Smith title: type: string nullable: true example: Project Engineer state: enum: - Active - Deactivated - All type: string example: Active startDate: type: string format: date-time example: '2020-01-01' endDate: type: string format: date-time example: '2020-12-31' hasConflict: type: boolean example: false allocationState: enum: - Unknown - Past - Current - Upcoming - All type: string example: Current type: enum: - Salaried - Hourly type: string id: type: string format: uuid titleIdAtAssignment: type: integer format: int64 nullable: true upcomingTimeOff: type: array items: $ref: '#/components/schemas/UnavailabilityResponse' nullable: true additionalProperties: false PersonAllocationResponse: type: object properties: projectId: type: integer format: int64 projectName: type: string nullable: true projectColour: type: string nullable: true projectType: enum: - Awarded - Opportunity type: string projectStatus: enum: - Canceled - Upcoming - Active - Complete - Pursuit - Lost type: string nullable: true taskId: type: string format: uuid nullable: true roleId: type: integer format: int64 roleName: type: string nullable: true startDate: type: string format: date-time endDate: type: string format: date-time allocatedPercent: type: integer format: int32 additionalProperties: false PersonCertAttachmentRequest: type: object properties: attachmentId: type: integer format: int64 example: 1 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 PersonCertificationUpdateRequest: type: object properties: expiryDate: type: string format: date-time nullable: true example: '2021-01-01' 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"' additionalProperties: false PersonDeactivateRequest: type: object properties: deactivationReason: maxLength: 100 minLength: 0 type: string nullable: true deactivationNotes: maxLength: 240 minLength: 0 type: string nullable: true wouldRehire: type: boolean nullable: true employmentEndDate: type: string format: date-time nullable: true additionalProperties: false PersonFieldDefinitionResponse: type: object properties: personType: type: array items: enum: - Salaried - Hourly type: string nullable: true example: Salaried displayOrder: type: integer format: int32 nullable: true example: 1 id: 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 definedValues: type: array items: $ref: '#/components/schemas/FieldDefinedValue' nullable: true isRequired: type: boolean example: false isSystem: type: boolean example: false isPrivate: type: boolean example: false isFinancials: type: boolean example: false isLocked: type: boolean example: false additionalProperties: false PersonFilterPredicates: type: object properties: personIds: type: array items: type: integer format: int64 nullable: true state: enum: - Active - Deactivated - All type: string email: type: string nullable: true uniqueId: type: string nullable: true relativeDate: type: string format: date-time additionalProperties: false PersonFilterPredicatesFilter: type: object properties: offset: type: integer format: int32 limit: type: integer format: int32 predicates: $ref: '#/components/schemas/PersonFilterPredicates' additionalProperties: false PersonHourlyAllocation: type: object properties: personHourlyCost: type: number format: double nullable: true example: 123.45 personId: type: integer format: int64 example: 2324 name: type: string nullable: true example: John Smith title: type: string nullable: true example: Project Engineer state: enum: - Active - Deactivated - All type: string example: Active startDate: type: string format: date-time example: '2020-01-01' endDate: type: string format: date-time example: '2020-12-31' hasConflict: type: boolean example: false allocationState: enum: - Unknown - Past - Current - Upcoming - All type: string example: Current type: enum: - Salaried - Hourly type: string id: type: string format: uuid titleIdAtAssignment: type: integer format: int64 nullable: true upcomingTimeOff: type: array items: $ref: '#/components/schemas/UnavailabilityResponse' nullable: true additionalProperties: false PersonNextAvailable: type: object properties: personId: type: integer format: int64 example: 8673 nextAvailableDate: type: string format: date-time nullable: true example: '2019-01-01' availableInDays: type: integer format: int32 example: 82 availabilities: type: array items: $ref: '#/components/schemas/Availability' nullable: true additionalProperties: false PersonProjectList: type: object properties: personId: type: integer format: int64 example: 8673 projects: type: array items: $ref: '#/components/schemas/Project' nullable: true additionalProperties: false PersonProjectResponse: type: object properties: id: type: integer format: int64 example: 8673 name: type: string nullable: true example: Ahrens Lofts startDate: type: string format: date-time endDate: type: string format: date-time projectType: enum: - Awarded - Opportunity type: string projectStatus: enum: - Canceled - Upcoming - Active - Complete - Pursuit - Lost type: string additionalProperties: false PersonResponse: type: object properties: id: type: integer format: int64 email: type: string nullable: true externalId: type: string nullable: true uniqueId: type: string nullable: true name: type: string nullable: true type: enum: - Salaried - Hourly type: string title: type: string nullable: true photoUrl: type: string nullable: true state: enum: - Active - Deactivated - All type: string hasConflict: type: boolean readOnly: true nextConflict: type: string format: date-time nullable: true lastModifiedOn: type: string format: date-time hourlyCostRate: type: number format: double nullable: true employmentDates: $ref: '#/components/schemas/EmploymentDatesResponse' workDays: type: array items: enum: - 0 - 1 - 2 - 3 - 4 - 5 - 6 type: integer format: int32 nullable: true groupings: type: array items: type: integer format: int64 nullable: true industryStartDate: type: string format: date-time nullable: true deactivationReason: type: string nullable: true deactivationNotes: type: string nullable: true wouldRehire: type: boolean nullable: true additionalProperties: false PersonUnavailabilitiesQueryResponse: type: object properties: state: enum: - Active - Deactivated - All type: string example: Active personId: type: integer format: int64 example: 82 unavailabilities: type: array items: $ref: '#/components/schemas/UnavailabilityResponse' nullable: true additionalProperties: false PersonWorkforceSpendHoursBreakdown: type: object properties: personId: type: integer format: int64 personName: type: string nullable: true personWorkforceSpendHours: type: integer format: int64 additionalProperties: false PersonWorkforceSpendHoursOverview: type: object properties: personId: type: integer format: int64 personName: type: string nullable: true personElapsedHours: type: integer format: int64 personRemainderHours: type: integer format: int64 personTotalHours: type: integer format: int64 additionalProperties: false PhaseAddRequest: type: object properties: name: type: string nullable: true example: Pre-Construction includeOnNewProjects: type: boolean additionalProperties: false PhaseFromRouteUpdateRequest: type: object properties: name: type: string nullable: true example: Pre-Construction includeOnNewProjects: type: boolean additionalProperties: false PhaseResponse: type: object properties: id: type: integer format: int64 example: 1234 name: type: string nullable: true example: Pre-Construction includeOnNewProjects: type: boolean projects: type: array items: type: integer format: int64 nullable: true example: - 1 - 12 - 123 - 1234 additionalProperties: false PhaseUpdateRequest: type: object properties: id: type: integer format: int64 example: 1234 name: type: string nullable: true example: Pre-Construction includeOnNewProjects: type: boolean additionalProperties: false ProfilePicture: type: object properties: ImageUrl: type: string nullable: true example: https://example.com/images/image.png 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 Project: type: object properties: id: type: integer format: int64 example: 9381 name: type: string nullable: true example: Ahrens Lofts colour: type: string nullable: true startDate: type: string format: date-time endDate: type: string format: date-time projectType: enum: - Awarded - Opportunity type: string state: enum: - Canceled - Upcoming - Active - Complete - Pursuit - Lost type: string readOnly: true additionalProperties: false ProjectAllocation: type: object properties: roleId: type: integer format: int64 example: 8673 taskId: type: string format: uuid nullable: true allocations: type: array items: $ref: '#/components/schemas/PersonAllocation' nullable: true taskName: type: string nullable: true categoryId: type: integer format: int64 nullable: true categoryName: type: string nullable: true additionalProperties: false 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.\n\ Must be set together with ResourcePlanning.Contracts.ProjectAllocationRequest.RoleEndDate \u2014 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.\nMust\ \ be set together with ResourcePlanning.Contracts.ProjectAllocationRequest.RoleStartDate \u2014 supplying only\ \ one will fail validation." format: date-time nullable: true additionalProperties: false ProjectCurrentPhase: type: object properties: name: type: string nullable: true example: Precon 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 ProjectFieldDefinition: type: object properties: id: 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 definedValues: type: array items: $ref: '#/components/schemas/FieldDefinedValue' nullable: true isRequired: type: boolean example: false isSystem: type: boolean example: false isPrivate: type: boolean example: false isFinancials: type: boolean example: false isLocked: type: boolean example: false experienceFieldId: type: string format: uuid nullable: true example: 00000000-0000-0000-0000-000000000000 displayOrder: type: integer format: int32 nullable: true example: 1 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 ProjectFilterPredicates: type: object properties: projectIds: type: array items: type: integer format: int64 nullable: true projectState: enum: - Canceled - Upcoming - Active - Complete - Pursuit - Lost - All type: string name: type: string nullable: true issues: enum: - 0 - 1 - 2 type: integer format: int32 relativeDate: type: string format: date-time includeProjectNumber: type: boolean additionalProperties: false ProjectFilterPredicatesFilter: type: object properties: offset: type: integer format: int32 limit: type: integer format: int32 predicates: $ref: '#/components/schemas/ProjectFilterPredicates' additionalProperties: false ProjectHourlyAllocation: type: object properties: roleId: type: integer format: int64 example: 8673 taskId: type: string format: uuid nullable: true allocations: type: array items: $ref: '#/components/schemas/PersonHourlyAllocation' nullable: true categoryId: type: integer format: int64 nullable: true categoryName: type: string nullable: true 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 ProjectPhaseFromRouteRequest: type: object properties: startDate: type: string format: date-time nullable: true example: '2020-01-01' endDate: type: string format: date-time nullable: true example: '2020-12-31' shiftDates: type: boolean additionalProperties: false ProjectPhaseRequest: type: object properties: id: type: integer format: int64 example: 1234 startDate: type: string format: date-time example: '2020-01-01' endDate: type: string format: date-time example: '2020-12-31' additionalProperties: false ProjectPhaseResponse: type: object properties: id: type: integer format: int64 example: 1234 name: type: string nullable: true example: Pre-Construction startDate: type: string format: date-time example: '2020-01-01' endDate: type: string format: date-time example: '2020-12-31' lastModifiedOn: type: string format: date-time example: '2021-05-27T10:58:23.530Z' additionalProperties: false ProjectPhaseUpdateRequest: type: object properties: id: type: integer format: int64 example: 1234 startDate: type: string format: date-time nullable: true example: '2020-01-01' endDate: type: string format: date-time nullable: true example: '2020-12-31' shiftDates: type: boolean additionalProperties: false ProjectResponse: type: object properties: id: type: integer format: int64 example: 8673 name: type: string nullable: true example: Ahrens Lofts colour: 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' startDate: type: string format: date-time example: '2019-01-01' endDate: type: string format: date-time example: '2020-12-31' startTime: type: string format: date-span example: 08: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 state: enum: - Canceled - Upcoming - Active - Complete - Pursuit - Lost type: string example: Active winPercent: type: integer format: int32 nullable: true example: 100 unfilledRoles: type: integer format: int32 example: 3 totalRoles: type: integer format: int32 example: 5 unfilledHourlyRoles: type: integer format: int32 example: 4 totalHourlyRoles: type: integer format: int32 example: 7 totalTasks: type: integer format: int32 example: 9 unfilledTaskRoles: type: integer format: int32 example: 5 totalTaskRoles: type: integer format: int32 example: 5 issuesCount: type: integer format: int64 example: 5 lastModifiedOn: type: string format: date-time example: '2019-01-01T00:00:00Z' type: enum: - Awarded - Opportunity type: string example: Awarded currentPhases: type: array items: $ref: '#/components/schemas/ProjectCurrentPhase' nullable: true phases: type: array items: $ref: '#/components/schemas/ProjectPhaseResponse' nullable: true groupings: type: array items: type: integer format: int64 nullable: true example: - 1 - 2 - 3 description: type: string nullable: true example: Project Description truncatedDescription: type: string nullable: true example: Project Desc externalId: type: string nullable: true projectNumber: type: string nullable: true additionalProperties: false ProjectRoleAllocationRequest: 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' 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 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 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 RoleCategoryResponse: type: object properties: id: type: integer format: int64 example: 134 name: type: string nullable: true example: North Tower 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\ncrew's roster\ \ size \u2014 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.' 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`).' 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 RoleNameRequest: type: object properties: id: type: integer format: int64 example: 1 name: type: string nullable: true example: Project Engineer cost: type: number format: double nullable: true example: 123.45 additionalProperties: false RoleNameResponse: type: object properties: id: type: integer format: int64 example: 1 name: type: string nullable: true example: Project Engineer type: enum: - Salaried - Hourly - All type: string example: Salaried cost: type: number format: double nullable: true example: 123.45 inUse: type: boolean readOnly: true example: true projectIds: type: array items: type: integer format: int64 nullable: true example: - 1 alphabetize: type: boolean additionalProperties: false RoleNotificationData: type: object properties: notifiedOn: type: string format: date-time recipientIds: type: array items: type: integer format: int64 nullable: true 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 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 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 RoleUpdateRequest: type: object properties: id: type: integer format: int64 removeSetup: type: boolean expandAllocations: type: boolean shiftDates: type: boolean crewId: type: integer format: int64 nullable: true startTime: type: string format: date-span nullable: true endTime: type: string format: date-span nullable: true workDays: type: array items: enum: - 0 - 1 - 2 - 3 - 4 - 5 - 6 type: integer format: int32 nullable: true name: type: string nullable: true example: Project Engineer taskId: type: string format: uuid nullable: true example: a2c09162-dbd8-4079-947d-fbc412061de5 startDate: type: string format: date-time example: '2019-01-01' endDate: type: string format: date-time example: '2020-12-31' 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 categoryId: type: integer format: int64 nullable: true example: 123 billable: type: boolean example: false allocations: type: array items: $ref: '#/components/schemas/RoleRequirement' nullable: true roleTagIds: type: array items: type: integer format: int64 nullable: true assignmentBreakdownBy: enum: - Custom - Phases - Monthly - Weekly type: string nullable: true additionalProperties: false RoleWorkforceSpendHoursBreakdown: type: object properties: roleNameId: type: integer format: int64 roleName: type: string nullable: true workforceSpendHoursFilled: type: integer format: int64 workforceSpendHoursUnfilled: type: integer format: int64 workforceSpendHoursTotal: type: integer format: int64 periodWorkforceSpendHoursBreakdown: type: array items: $ref: '#/components/schemas/PeriodWorkforceSpendHoursBreakdown' nullable: true additionalProperties: false RoleWorkforceSpendHoursOverview: type: object properties: roleNameId: type: integer format: int64 roleName: type: string nullable: true workforceSpendHoursElapsedFilled: type: integer format: int64 workforceSpendHoursElapsedUnfilled: type: integer format: int64 workforceSpendHoursRemainderFilled: type: integer format: int64 workforceSpendHoursRemainderUnfilled: type: integer format: int64 workforceSpendHoursElapsed: type: integer format: int64 workforceSpendHoursRemainder: type: integer format: int64 workforceSpendHoursTotal: type: integer format: int64 personWorkforceSpendHoursOverview: type: array items: $ref: '#/components/schemas/PersonWorkforceSpendHoursOverview' nullable: true additionalProperties: false ServiceAccountDetailResponse: type: object properties: password: type: string nullable: true example: uI|O..KsE>TPBmq$#j#(*?-jd*Zm@i@0 id: type: integer format: int32 example: 3245 name: type: string nullable: true example: Allocation Integration login: type: string nullable: true example: b1c657b0a0864e9597cbdbacc67c79de group: type: string nullable: true example: Administrator allowedIPNetworks: type: array items: type: string nullable: true createdOn: type: string format: date-time example: '2020-01-01' additionalProperties: false ServiceAccountRequest: type: object properties: name: type: string nullable: true example: Allocation Integration group: type: string nullable: true example: Administrator allowedIPNetworks: maxItems: 50 type: array items: type: string description: The list of allowed IP networks for the service account. nullable: true example: - 192.168.1.0/24 - 10.0.0.0/8 additionalProperties: false ServiceAccountResponse: type: object properties: id: type: integer format: int32 example: 3245 name: type: string nullable: true example: Allocation Integration login: type: string nullable: true example: b1c657b0a0864e9597cbdbacc67c79de group: type: string nullable: true example: Administrator allowedIPNetworks: type: array items: type: string nullable: true createdOn: type: string format: date-time example: '2020-01-01' 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.\n\ Must be set together with ResourcePlanning.Contracts.TaskAllocationRequest.RoleEndDate \u2014 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.\nMust\ \ be set together with ResourcePlanning.Contracts.TaskAllocationRequest.RoleStartDate \u2014 supplying only one\ \ will fail validation." format: date-time nullable: true 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 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 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 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 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 UnavailabilityResponse: type: object properties: id: type: integer format: int64 example: 46 rangeType: enum: - PreEmployment - PostEmployment - Unavailability - TimeOff type: string example: Unavailability startDate: type: string format: date-time example: '2020-04-21' endDate: type: string format: date-time example: '2020-05-21' isPrivate: type: boolean example: false description: type: string nullable: true example: Parental Leave externalId: type: string nullable: true example: '46' additionalProperties: false UnavailabilityUpdateRequest: type: object properties: id: type: integer format: int64 description: maxLength: 50 minLength: 0 type: string nullable: true startDate: type: string format: date-time nullable: true endDate: type: string format: date-time nullable: true isPrivate: type: boolean nullable: true additionalProperties: false UpdateNoteRequest: type: object properties: message: type: string nullable: true example: This is an updated message on a note, this is mentioning [[mention:userID#123]] to notify them. isPrivate: type: boolean nullable: true example: false additionalProperties: false UpdateRoleCategoryRequest: required: - id - name type: object properties: id: type: integer format: int64 name: minLength: 1 type: string example: North Tower 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 UserRequest: type: object properties: name: type: string nullable: true example: John Smith title: type: string nullable: true example: Human Resources Manager phoneNumber: type: string nullable: true example: '+18005551234' team: type: string nullable: true example: Management additionalProperties: false UserResponse: 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 team: type: string nullable: true example: Management email: type: string nullable: true example: johnsmith@example.com state: enum: - Inactive - Enabled - Disabled - PendingEmailChange type: string example: Active group: type: string nullable: true example: Administrator groupingPermissions: type: array items: $ref: '#/components/schemas/GroupingGroup' nullable: true phoneNumber: type: string nullable: true example: '+18005551234' createdOn: type: string format: date-time example: '2020-01-01' invitationId: type: integer format: int64 nullable: true lastLoginOn: type: string format: date-time nullable: true example: '2026-01-15T10:30:00Z' additionalProperties: false securitySchemes: Bearer: type: http description: Standard Authorization header using the Bearer scheme scheme: bearer bearerFormat: JWT security: - {} tags: - name: AccountActivities - name: AccountCertifications - name: AccountGroupings - name: AccountInvitations - name: AccountUsers - name: Accounts - name: Allocations - name: ExperienceFieldValues - name: ExperienceFields - name: External - name: HourlyAllocations - name: HourlyRoleNames - name: PersonAttachments - name: PersonCertAttachments - name: PersonCertifications - name: PersonFieldValue - name: PersonFields - name: PersonGroupings - name: PersonHistoricalExperienceFields - name: PersonHistoricalExperiences - name: PersonProfile - name: PersonUnavailabilities - name: Persons - name: Phases - name: ProjectFieldValue - name: ProjectFields - name: ProjectGroupings - name: ProjectNotes - name: ProjectRoleCategories - name: ProjectRoles - name: ProjectTasks - name: ProjectWorkforceSpendReports - name: Projects - name: ProjectsPhases - name: RoleAllocations - name: RoleNames - name: ServiceAccounts - name: SharedFilters - name: UserFilters - name: Users servers: - url: https://bench.gobridgit.com description: Bridgit Bench production