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