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\nURL Paths
\n\n \
\ Authentication requests should be made to /auth/signin,\n as documented below. All other API requests\
\ should be made to\n sub-paths of /rp/api/1.0/....\n
\n\nAuthentication
\n\n API requests\
\ are authenticated using an OAuth Bearer token.\n You can get a token by authenticating your user by sending a\n \
\ POST request to /auth/signin, with \"username and \"password\"\n parameters form-encoded in the body\
\ of the request.\n\n POST /auth/signin HTTP/1.1\n Content-Type: application/x-www-form-urlencoded\n\n username=user@example.com&password=some-secret-password\n\
\n\n The response will be a JSON object including both\n \"access_token\" and \"refresh_token\"\
property.\n All other requests against the Bench API should include an\n authorization header: Authorization:\
\ Bearer xxxYYYzzz,\n where xxxYYYzzz is the value of \"access_token\" in the response.\n
\n\
\ For example:\n\n $ curl https://bench.gobridgit.com/auth/signin -H 'Content-Type: application/x-www-form-urlencoded'\
\ --data-urlencode 'username=someone@example.com' --data-urlencode 'password=[...snip...]'\n {\n \"access_token\"\
: \"...snip...\",\n \"token_type\": \"Bearer\",\n \"refresh_token\": \"...snip...\"\n \"expiry\"\
: \"2020-01-01T00:00:00.413440849Z\"\n }\n\n
\n\n\n The refresh token can be used to generate new session\
\ by request with /auth/token endpoint:\n\n POST /auth/token HTTP/1.1\n Content-Type: application/x-www-form-urlencoded\n\
\n grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA\n
\n\n Note that once the refresh token is\
\ used, the previous access and refresh token is no longer valid.\n
\n For example:\n\n $ curl https://bench.gobridgit.com/auth/token\
\ -H 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'grant_type=refresh_token' --data-urlencode 'refresh_token=[...snip...]'\n\
\ {\n \"access_token\": \"...snip...\",\n \"token_type\": \"Bearer\",\n \"refresh_token\": \"\
...snip...\"\n \"expiry\": \"2020-01-01T00:00:00.413440849Z\"\n }\n
\n\nPagination
\n\n Several\
\ of the API endpoints are paginated. These are denoted by\n including the offset (zero-based offset)\
\ and limit query\n parameters. For example, to request the 10 items,\n set the offset=0\
\ to limit=10.\n
\n NOTE: the result set contains items with index of 0-9\n
\n To request\
\ the next 10 items (starting at index 10),\n set the offset=10 to limit=10\n
\n\n\
\ Responses to paginated API endpoints return a JSON array of objects.\n If there are results beyond the page you\
\ have requested, the server\n will set a query-has-more: true header in the response.\n
\n\nRequest\
\ Encoding
\n\n GET and DELETE requests should have parameters encoded as URL query\n\
\ parameters. Boolean values should be encoded as true and\n false, not as 1\
\ and 0.\n
\n\nErrors
\n\n Errors are returned for some response codes such as 400\
\ Bad Request in the\n following format:\n\n {\n \"errors\": [\n {\n \"errorType\":\
\ \"ValidationError\",\n \"description\": \"The value of Name must be a string with a minimum length of 1 and\
\ a maximum length of 8 and not whitespace.\",\n \"field\": \"Name\",\n \"values\": [\n null\n\
\ ]\n }\n ],\n \"title\": \"One or more validation errors occurred.\",\n \"status\": 400,\n\
\ \"instance\": \"api/v1/accounts/0/persons\",\n \"requestUid\": \"123e4567-e89b-12d3-a456-426614174000\"\n\
\ }\n
\n"
version: '1.0'
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