Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Bench Project Fields 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: ProjectFields
paths:
/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:
<code>{<br/> "errors": [<br/> {<br/> "errorType": "CannotBeMadePrivate",<br/> "description": "Fields in request cannot be made private.",<br/> "errorCode": null,<br/> "field": "Id",<br/> "values": [<br/> "5"<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/2/project-fields",<br/> "requestUid": "3dd10d1b-392f-4d5a-b736-50ea1f072342"<br/>}</code>'
'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<code>{<br/> \"errors\": [<br/> {<br/> \"errorType\": \"Duplicate\",<br/> \"description\": \"A name in the request is already in use.\",<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/2/project-fields\",<br/> \"requestUid\": \"8ba8f060-858b-46d9-b3cc-fa1c391ebc66\"<br/>}</code>"
'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<code>{<br/> \"errors\": [<br/> {<br/> \"errorType\": \"DefinedValueError\",<br/> \"description\": \"23001: Cannot remove field defined value. It is in use for required field(s)\",<br/> \"errorCode\": null,<br/> \"innerException\": null,<br/> \"hResult\": -2146233088<br/> }<br/> ],<br/> \"title\": \"One or more validation errors occurred.\",<br/> \"status\": 422,<br/> \"instance\": \"/api/v1/accounts/2/project-fields\",<br/> \"requestUid\": \"fb8b2dd9-360f-4a81-852c-e5b70cfa5a85\"<br/>}</code>"
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<code>{<br/> \"errors\": [<br/> {<br/> \"errorType\": \"NotAllowed\",<br/> \"description\": \"Cannot delete system field(s)\",<br/> \"errorCode\": null,<br/> \"innerException\": null,<br/> \"hResult\": -2146233088<br/> }<br/> ],<br/> \"title\": \"One or more validation errors occurred.\",<br/> \"status\": 422,<br/> \"instance\": \"/api/v1/accounts/2/project-fields\",<br/> \"requestUid\": \"3b3cbfaa-a809-4529-8870-317654a3311e\"<br/>}</code>"
/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
components:
schemas:
FieldDefRequest:
type: object
properties:
id:
type: integer
format: int64
example: 1394
name:
type:
- string
- 'null'
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
- 'null'
items:
$ref: '#/components/schemas/FieldDefinedValueRequest'
isRequired:
type: boolean
example: false
isPrivate:
type: boolean
example: false
isLocked:
type: boolean
example: false
additionalProperties: false
FieldDefinedValueRequest:
type: object
properties:
valueId:
type: integer
format: int64
definedValue:
type:
- string
- 'null'
forRemoval:
type: boolean
deleteExperienceFieldValues:
type: boolean
additionalProperties: false
FieldDefinedValue:
type: object
properties:
valueId:
type: integer
format: int64
example: 13
definedValue:
type:
- string
- 'null'
example: Defined Value
inUse:
type:
- array
- 'null'
items:
type: integer
format: int64
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
ProjectFieldDefinition:
type: object
properties:
id:
type: integer
format: int64
example: 1394
name:
type:
- string
- 'null'
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
- 'null'
items:
$ref: '#/components/schemas/FieldDefinedValue'
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
- 'null'
format: uuid
example: 00000000-0000-0000-0000-000000000000
displayOrder:
type:
- integer
- 'null'
format: int32
example: 1
additionalProperties: false
securitySchemes:
Bearer:
type: http
description: Standard Authorization header using the Bearer scheme
scheme: bearer
bearerFormat: JWT