Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Bench Person Unavailabilities API
description: 'Versioning
The API is currently at version 1.0.'
version: '1.0'
servers:
- url: https://bench.gobridgit.com
description: Bridgit Bench production
security:
- {}
tags:
- name: PersonUnavailabilities
paths:
/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:
<code>{<br/> "errors": [<br/> {<br/> "errorType": "ValidationError",<br/> "description": "End date cannot be before start date",<br/> "errorCode": null,<br/> "values": [<br/> "2020-04-19",<br/> "2020-04-18"<br/> ],<br/> "innerException": null,<br/> "hResult": -2146233088<br/> }<br/> ],<br/> "title": "One or more validation errors occurred.",<br/> "status": 400,<br/> "instance": "/api/v1/accounts/7/persons/unavailabilities?start=2020-04-19&end=2020-04-18",<br/> "requestUid": "603504966a0861525e83e9f7dfbc2706"<br/>}</code>'
'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
<code>{<br/> "errors": [<br/> {<br/> "errorType": "Overlapped",<br/> "description": "Requested unavailable date range outside of employment dates.",<br/> "errorCode": null,<br/> "values": [<br/> "2015-04-01 - 2015-04-30"<br/> ],<br/> "innerException": null,<br/> "hResult": -2146233088<br/> }<br/> ],<br/> "title": "One or more validation errors occurred.",<br/> "status": 400,<br/> "instance": "/api/v1/accounts/7/persons/unavailabilities/2",<br/> "requestUid": "603504966a0861525e83e9f7dfbc2706"<br/>}</code>
Example when start and end dates overlap with each other
<code>{<br/> "errors": [<br/> {<br/> "errorType": "Overlapped",<br/> "description": "Unavailable date ranges overlap with each other.",<br/> "errorCode": null,<br/> "values": [<br/> "2015-04-01 - 2015-04-30",<br/> "2015-04-15 - 2015-05-30"<br/> ],<br/> "innerException": null,<br/> "hResult": -2146233088<br/> }<br/> ],<br/> "title": "One or more validation errors occurred.",<br/> "status": 400,<br/> "instance": "/api/v1/accounts/7/persons/unavailabilities/2",<br/> "requestUid": "603504966a0861525e83e9f7dfbc2706"<br/>}</code>'
'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
<code>{<br/> "errors": [<br/> {<br/> "errorType": "InvalidId",<br/> "description": "Invalid unavailability id provided.",<br/> "errorCode": null,<br/> "values": [<br/> "5",<br/> "7"<br/> ],<br/> "innerException": null,<br/> "hResult": -2146233088<br/> }<br/> ],<br/> "title": "One or more validation errors occurred.",<br/> "status": 400,<br/> "instance": "/api/v1/accounts/7/persons/unavailabilities/2",<br/> "requestUid": "603504966a0861525e83e9f7dfbc2706"<br/>}</code>
Example when new start date after end date or new end date before start date
<code>{<br/> "errors": [<br/> {<br/> "errorType": "ValidationError",<br/> "description": "End date cannot be before start date",<br/> "errorCode": null,<br/> "values": [<br/> "2020-04-19",<br/> "2020-04-18"<br/> ],<br/> "innerException": null,<br/> "hResult": -2146233088<br/> }<br/> ],<br/> "title": "One or more validation errors occurred.",<br/> "status": 400,<br/> "instance": "/api/v1/accounts/7/persons/unavailabilities/2",<br/> "requestUid": "603504966a0861525e83e9f7dfbc2706"<br/>}</code>
Example when start and end date are outside employment dates
<code>{<br/> "errors": [<br/> {<br/> "errorType": "Overlapped",<br/> "description": "Requested unavailable date range outside of employment dates.",<br/> "errorCode": null,<br/> "values": [<br/> "2015-04-01 - 2015-04-30"<br/> ],<br/> "innerException": null,<br/> "hResult": -2146233088<br/> }<br/> ],<br/> "title": "One or more validation errors occurred.",<br/> "status": 400,<br/> "instance": "/api/v1/accounts/7/persons/unavailabilities/2",<br/> "requestUid": "603504966a0861525e83e9f7dfbc2706"<br/>}</code>
Example when start and end dates overlap with each other
<code>{<br/> "errors": [<br/> {<br/> "errorType": "Overlapped",<br/> "description": "Unavailable date ranges overlap with each other.",<br/> "errorCode": null,<br/> "values": [<br/> "2015-04-01 - 2015-04-30",<br/> "2015-04-15 - 2015-05-30"<br/> ],<br/> "innerException": null,<br/> "hResult": -2146233088<br/> }<br/> ],<br/> "title": "One or more validation errors occurred.",<br/> "status": 400,<br/> "instance": "/api/v1/accounts/7/persons/unavailabilities/2",<br/> "requestUid": "603504966a0861525e83e9f7dfbc2706"<br/>}</code>'
'401':
description: Unauthorized
'403':
description: Forbidden
'409':
description: 'Conflict: Example when updated unavailabilities overlap with existing unavailabilities
<code>{<br/> "errors": [<br/> {<br/> "errorType": "Overlapped",<br/> "description": "Unavailable date ranges overlap with existing unavailable dates.",<br/> "errorCode": null,<br/> "innerException": null,<br/> "hResult": -2146233088<br/> }<br/> ],<br/> "title": "One or more validation errors occurred.",<br/> "status": 409,<br/> "instance": "/api/v1/accounts/7/persons/unavailabilities/2",<br/> "requestUid": "603504966a0861525e83e9f7dfbc2706"<br/>}</code>'
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
<code>{<br/> "errors": [<br/> {<br/> "errorType": "InvalidId",<br/> "description": "Invalid unavailability id provided.",<br/> "errorCode": null,<br/> "values": [<br/> "5",<br/> "7"<br/> ],<br/> "innerException": null,<br/> "hResult": -2146233088<br/> }<br/> ],<br/> "title": "One or more validation errors occurred.",<br/> "status": 400,<br/> "instance": "/api/v1/accounts/7/persons/unavailabilities/2",<br/> "requestUid": "603504966a0861525e83e9f7dfbc2706"<br/>}</code>
'
'401':
description: Unauthorized
'403':
description: Forbidden
components:
schemas:
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
- 'null'
example: Parental Leave
externalId:
type:
- string
- 'null'
example: '46'
additionalProperties: false
NewUnavailabilityRequest:
type: object
properties:
description:
maxLength: 50
minLength: 0
type:
- string
- 'null'
startDate:
type: string
format: date-time
endDate:
type:
- string
- 'null'
format: date-time
isPrivate:
type: boolean
rangeType:
enum:
- PreEmployment
- PostEmployment
- Unavailability
- TimeOff
type: string
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
- 'null'
items:
$ref: '#/components/schemas/UnavailabilityResponse'
additionalProperties: false
UnavailabilityUpdateRequest:
type: object
properties:
id:
type: integer
format: int64
description:
maxLength: 50
minLength: 0
type:
- string
- 'null'
startDate:
type:
- string
- 'null'
format: date-time
endDate:
type:
- string
- 'null'
format: date-time
isPrivate:
type:
- boolean
- 'null'
additionalProperties: false
securitySchemes:
Bearer:
type: http
description: Standard Authorization header using the Bearer scheme
scheme: bearer
bearerFormat: JWT