{
  "openapi": "3.0.3",
  "info": {
    "title": "Compass Endpoints",
    "version": "1.0",
    "description": "Endpoints for Compass\n\n## Authentication\n\nAll endpoints require authentication. The supported methods are:\n\n| Method | Header | Status |\n|--------|--------|--------|\n| Bearer token | `Authorization: Bearer <token>` | **Recommended** |\n| API Key | `x-compass-api-key: <key>` | Supported |\n| Basic auth | `Authorization: Basic <base64>` | **Deprecated** |\n| Legacy token | `x-compass-token: <token>` | **Deprecated** |\n\n### ⚠️ Deprecation Notice\n\n**Basic authentication** and **legacy token authentication** (`x-compass-token`) are deprecated and\nwill be removed in a future release. Consumers must migrate to Bearer token authentication.\n\n### Migration to Bearer Token Authentication\n\nUse the following endpoints to obtain and manage tokens:\n\n**Obtain a new token**\n```\nPOST /v2/api/token/auth\nContent-Type: application/json\n\n{ \"FirmId\": 9999, \"Username\": \"johndoe\", \"Password\": \"P@ssw0rd!\" }\n```\nReturns a `Token` (Bearer access token) and a `Refresh` token. Include the access token in subsequent requests:\n```\nAuthorization: Bearer <Token>\n```\n\n**Refresh an existing token**\n```\nPOST /v2/api/token/auth/refresh\nContent-Type: application/json\n\n{ \"Refresh\": \"<Refresh token>\" }\n```\nReturns a new access token and refresh token.\n",
    "contact": {
      "name": "Unanet, Inc",
      "url": "https://unanet.com/"
    }
  },
  "servers": [
    {
      "url": "/"
    }
  ],
  "tags": [
    {
      "name": "Authentication",
      "description": "Token authentication endpoints. Use these to obtain and refresh Bearer tokens."
    },
    {
      "name": "Companies",
      "description": "Endpoints for managing companies"
    },
    {
      "name": "Projects",
      "description": "Endpoints for managing projects"
    }
  ],
  "paths": {
    "/v2/api/token/auth": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "Obtain a Bearer token",
        "description": "Authenticates with firm ID, username, and password and returns a Bearer access token\nand a refresh token.\n\nUse the returned `Token` in the `Authorization: Bearer` header for all subsequent requests.\n\nStore the `Refresh` token to use with `POST /v2/api/token/auth/refresh` when the access token expires.\n**Example request body:**\n```json\n{\n  \"FirmId\": 9999,\n  \"Username\": \"johndoe\",\n  \"Password\": \"P@ssw0rd!\"\n}\n```\n",
        "operationId": "postAuthToken",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "FirmId",
                  "Username",
                  "Password"
                ],
                "properties": {
                  "FirmId": {
                    "type": "integer",
                    "description": "The numeric firm (tenant) identifier."
                  },
                  "Username": {
                    "type": "string"
                  },
                  "Password": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Authentication successful. Returns an access token and a refresh token.",
            "content": {
              "application/json": {
                "type": "object",
                "properties": {
                  "Response": {
                    "type": "object",
                    "properties": {
                      "Token": {
                        "type": "string",
                        "description": "Bearer token for use in the Authorization header."
                      },
                      "Refresh": {
                        "type": "string",
                        "description": "Refresh token for obtaining a new access token."
                      }
                    }
                  },
                  "Success": {
                    "type": "boolean"
                  },
                  "StatusCode": {
                    "type": "integer"
                  },
                  "ErrorMessage": {
                    "type": "string",
                    "nullable": true
                  },
                  "ValidationErrors": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "PropertyName": {
                          "type": "string"
                        },
                        "DisplayMessage": {
                          "type": "string"
                        },
                        "ErrorCode": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — invalid credentials."
          },
          "422": {
            "description": "Unprocessable Entity — validation failure."
          },
          "429": {
            "description": "Too Many Requests — rate limit exceeded."
          }
        }
      }
    },
    "/v2/api/token/auth/refresh": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "Refresh a Bearer token",
        "description": "Accepts a refresh token and returns a new access token and refresh token without requiring\nthe user to re-enter their credentials.\n\nUse the `Refresh` value returned by `POST /v2/api/token/auth` as the request body.\n\n**Example request body:**\n```json\n{\n  \"Refresh\": \"dGhpcyBpcyBhIHJlZnJlc2ggdG9rZW4...\"\n}\n```\n",
        "operationId": "postRefreshToken",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "Refresh"
                ],
                "properties": {
                  "Refresh": {
                    "type": "string",
                    "description": "The refresh token previously returned by POST /v2/api/token/auth."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Token refreshed successfully. Returns a new access token and refresh token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "AuthResponse": {
                      "type": "object",
                      "properties": {
                        "success": {
                          "type": "boolean"
                        },
                        "token": {
                          "type": "string",
                          "description": "New Bearer token for use in the Authorization header."
                        },
                        "refresh": {
                          "type": "string",
                          "description": "New refresh token."
                        },
                        "error": {
                          "type": "string",
                          "nullable": true
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — refresh token is invalid or expired."
          },
          "422": {
            "description": "Unprocessable Entity — validation failure."
          }
        }
      }
    },
    "/api/projects": {
      "get": {
        "summary": "Get a list of projects",
        "description": "Returns a list of projects",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjects",
        "parameters": [
          {
            "$ref": "#/components/parameters/SizeQueryParam"
          },
          {
            "$ref": "#/components/parameters/FromQueryParam"
          },
          {
            "name": "fields",
            "in": "query",
            "description": "Comma separated list of specific fields to return.",
            "required": false,
            "schema": {
              "type": "string",
              "example": "ProjectId,ProjectName,OtherProjectName,ProjectNumber"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of Projects",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "post": {
        "summary": "Create a number of projects",
        "description": "Create a number of projects (maximum of 50), and return the created projects",
        "tags": [
          "Projects"
        ],
        "operationId": "CreateProjects",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ProjectRequest"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of projects that were created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Value passed in for Project Authorization did not match the list of acceptable values."
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "413": {
            "description": "Request Entity too large",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "The attempt to insert data exceeded the maximum record upload size of 50."
                }
              }
            }
          }
        }
      }
    },
    "/api/projects/{projectId}": {
      "get": {
        "summary": "Get details of a project.",
        "description": "Get details of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectDetails",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Project Details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "put": {
        "summary": "Update details of a project.",
        "description": "Update details of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "UpdateProjectDetails",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updated project details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Value passed in for Project Authorization did not match the list of acceptable values."
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "ProjectName is a required field and can not be set to empty."
                }
              }
            }
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a project.",
        "description": "Delete a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProject",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Delete was successful."
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      }
    },
    "/api/projects/search": {
      "get": {
        "summary": "Get a list of projects by search",
        "description": "Returns a list of projects that match search request",
        "tags": [
          "Projects"
        ],
        "operationId": "ProjectsSearch",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "description": "Search query on fields using Lucene query language. Search all fields by using q=searchterm. Search on specific field using q=field:searchterm",
            "required": true,
            "schema": {
              "type": "string",
              "example": "ProjectName:example"
            }
          },
          {
            "$ref": "#/components/parameters/SizeQueryParam"
          },
          {
            "$ref": "#/components/parameters/FromQueryParam"
          },
          {
            "name": "includeDeleted",
            "in": "query",
            "description": "Include deleted items in result",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false,
              "example": false
            }
          },
          {
            "name": "fields",
            "in": "query",
            "description": "Comma separated list of specific fields to return.",
            "required": false,
            "schema": {
              "type": "string",
              "example": "ProjectId,ProjectName,OtherProjectName,ProjectNumber"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of projects that match search request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "410": {
            "description": "Gone",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "You requested a from value greater than 0 but the cache for this request was expired after 6 minutes"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Get a list of projects by search using request body",
        "description": "Returns a list of projects that match search request",
        "tags": [
          "Projects"
        ],
        "operationId": "ProjectsSearchPost",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "QueryString"
                ],
                "properties": {
                  "QueryString": {
                    "type": "string",
                    "example": "field:searchterm",
                    "description": "Search Query"
                  },
                  "Size": {
                    "type": "integer",
                    "format": "int32",
                    "description": "The number of items to return",
                    "default": 50,
                    "example": 50,
                    "maximum": 500
                  },
                  "From": {
                    "type": "integer",
                    "format": "int32",
                    "description": "The number of items to skip before starting to collect the return set.",
                    "default": 0,
                    "example": 0
                  },
                  "Fields": {
                    "type": "string",
                    "description": "Comma separated list of specific fields to return."
                  },
                  "IncludeDeleted": {
                    "type": "boolean",
                    "description": "Include deleted items in result",
                    "default": false,
                    "example": false
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of projects that match search request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "410": {
            "description": "Gone",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "You requested a from value greater than 0 but the cache for this request was expired after 6 minutes"
                }
              }
            }
          }
        }
      }
    },
    "/api/projects/{projectId}/consultantcontacts": {
      "get": {
        "summary": "Get consultant contacts on a project.",
        "description": "Get consultant contacts on a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectConsultantContacts",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/SizeQueryParam"
          },
          {
            "$ref": "#/components/parameters/FromQueryParam"
          },
          {
            "name": "q",
            "in": "query",
            "description": "Simple search query on fields. Search all fields by using q=searchterm. Search a specific field by using q=field:searchterm. Use double quotes on the search term to search for exact matches (q=\"searchterm\" | q=field:\"searchterm\").",
            "required": false,
            "schema": {
              "type": "string",
              "example": "comments:searchterm"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "description": "Comma separated list of specific fields to return.",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Id,Contact.ContactId,Contact.FirstName,Contact.LastName"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of consultant contacts on a project",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectConsultantContactResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Add consultant contacts to a Project.",
        "description": "Add consultant contacts to a Project.",
        "tags": [
          "Projects"
        ],
        "operationId": "CreateProjectConsultantContacts",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/CreateProjectConsultantContactRequest"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully added consultant contacts, returns full list of consultant contacts.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectConsultantContactResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "put": {
        "summary": "Update consultant contacts on a project.",
        "description": "Update consultant contacts on a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "UpdateProjectConsultantContacts",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/UpdateProjectConsultantContactRequest"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated consultant contacts, returns full list of consultant contacts.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectConsultantContactResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete all consultant contacts on a project",
        "description": "Delete all consultant contacts on a project",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectConsultantContacts",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted all consultant contacts. Returns empty object"
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      }
    },
    "/api/projects/{projectId}/consultantcontacts/{consultantContactId}": {
      "get": {
        "summary": "Get consultant contact on a project.",
        "description": "Get consultant contact on a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetConsultantContact",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/ConsultantContactIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Consultant contact details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectConsultantContactResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "put": {
        "summary": "Update consultant contact on a project.",
        "description": "Update consultant contact on a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "UpdateProjectConsultantContact",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/ConsultantContactIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateSingleProjectConsultantContactRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated consultant contact, returns newly updated consultant contact.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectConsultantContactResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete consultant contact on a project.",
        "description": "Delete consultant contact on a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectConsultantContact",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/ConsultantContactIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted consultant contact. Returns empty object"
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      }
    },
    "/api/projects/{projectId}/contracttypes": {
      "get": {
        "summary": "Get contract types of a project.",
        "description": "Get contract types of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectContractTypes",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/SizeQueryParam"
          },
          {
            "$ref": "#/components/parameters/FromQueryParam"
          },
          {
            "name": "q",
            "in": "query",
            "description": "Simple search query on fields. Search a specific field by using q=field:searchterm. Search all fields by using q=searchterm. Use double quotes on the search term to search for exact matches (q=\"searchterm\" | q=field:\"searchterm\").",
            "required": false,
            "schema": {
              "type": "string",
              "example": "ContractTypeName:searchterm"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of contract types of a project",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectContractTypeResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "post": {
        "summary": "Add contract types to a project.",
        "description": "Add contract types to a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "CreateProjectContractTypes",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ProjectContractTypeRequest"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully added contract types, returns list of added contract types.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectContractTypeResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "delete": {
        "summary": "Delete all contract types of a project",
        "description": "Delete all contract types of a project",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectContractTypes",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted all contract types. Returns empty object"
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      }
    },
    "/api/projects/{projectId}/contracttypes/{contractTypeId}": {
      "get": {
        "summary": "Get contract type of a project.",
        "description": "Get contract type of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetContractType",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/ContractTypeIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Contract type details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectContractTypeResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "delete": {
        "summary": "Delete a project's contract type.",
        "description": "Delete a project's contract type.",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectContractType",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/ContractTypeIdPathParam"
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted contract type. Returns empty object"
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      }
    },
    "/api/projects/{projectId}/aeschedule": {
      "get": {
        "summary": "Get AE Schedule of a project.",
        "description": "Get AE Schedule of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectAESchedule",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Project AE schedule details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectAEScheduleResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "post": {
        "summary": "Create AE Schedule of a project.",
        "description": "Create AE Schedule of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "CreateProjectAESchedule",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectAEScheduleRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updated project AE schedule details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectAEScheduleResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "put": {
        "summary": "Update AE Schedule of a project.",
        "description": "Update AE Schedule of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "UpdateProjectAESchedule",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectAEScheduleRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updated project AE schedule details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectAEScheduleResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "delete": {
        "summary": "Delete AE Schedule of a project.",
        "description": "Clears out Comments and Construction Completed Date fields. Request body is not used, but it is required to call the endpoint with header 'Content-Type: application/json'",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectAESchedule",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectAEScheduleRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updated project AE schedule details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectAEScheduleResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      }
    },
    "/api/projects/{projectId}/aeschedule/items": {
      "get": {
        "summary": "Get AE Schedule items of a project.",
        "description": "Get AE Schedule items of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectAEScheduleItems",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/SizeQueryParam"
          },
          {
            "$ref": "#/components/parameters/FromQueryParam"
          },
          {
            "name": "q",
            "in": "query",
            "description": "Simple search query on fields. Search all fields by using q=searchterm. Search a specific field by using q=field:searchterm. Use double quotes on the search term to search for exact matches (q=\"searchterm\" | q=field:\"searchterm\").",
            "required": false,
            "schema": {
              "type": "string",
              "example": "PhaseComments:searchterm"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "description": "Comma separated list of specific fields to return.",
            "required": false,
            "schema": {
              "type": "string",
              "example": "ScheduleItemID,ProjectID,EstimatedStartDate,SchedulePhaseName"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "AE Schedule items",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectAEScheduleItemResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "post": {
        "summary": "Create AE Schedule items of a project.",
        "description": "Create AE Schedule items of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "CreateProjectAEScheduleItems",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ProjectAEScheduleItemRequest"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "AE Schedule item",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectAEScheduleItemResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      }
    },
    "/api/projects/{projectId}/aeschedule/items/{aeScheduleItemId}": {
      "get": {
        "summary": "Get AE Schedule item of a project.",
        "description": "Get AE Schedule item of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectAEScheduleItem",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/AEScheduleItemIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "AE Schedule item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectAEScheduleItemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "put": {
        "summary": "Update AE Schedule item of a project.",
        "description": "Update AE Schedule item of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "UpdateProjectAEScheduleItem",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/AEScheduleItemIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectAEScheduleItemRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "AE Schedule item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectAEScheduleItemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "delete": {
        "summary": "Delete AE Schedule item of a project.",
        "description": "Delete AE Schedule item of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectAEScheduleItem",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/AEScheduleItemIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted AE schedule item.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "The AE Schedule Item has been deleted."
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      }
    },
    "/api/projects/constructionschedule": {
      "get": {
        "summary": "Get construction schedules of all projects.",
        "description": "Get construction schedules of all projects.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetConstructionSchedules",
        "parameters": [
          {
            "$ref": "#/components/parameters/SizeQueryParam"
          },
          {
            "$ref": "#/components/parameters/FromQueryParam"
          },
          {
            "name": "q",
            "in": "query",
            "description": "Simple search query on fields. Search all fields by using q=searchterm. Search a specific field by using q=field:searchterm. Use double quotes on the search term to search for exact matches (q=\"searchterm\" | q=field:\"searchterm\").",
            "required": false,
            "schema": {
              "type": "string",
              "example": "ScheduleComments:searchterm"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "description": "Comma separated list of specific fields to return.",
            "required": false,
            "schema": {
              "type": "string",
              "example": "ProjectId,DateOfBid,DateOfAward,ExecutionDate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Construction Schedules of all projects",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectConstructionScheduleResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      }
    },
    "/api/projects/{projectId}/constructionschedule": {
      "get": {
        "summary": "Get Construction Schedule of a project.",
        "description": "Get Construction Schedule of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectConstructionSchedule",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "name": "fields",
            "in": "query",
            "description": "Comma separated list of specific fields to return.",
            "required": false,
            "schema": {
              "type": "string",
              "example": "ProjectId,DateOfBid,DateOfAward,ExecutionDate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Project construction schedule details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectConstructionScheduleResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "post": {
        "summary": "Create construction schedule for a project.",
        "description": "Create construction schedule for a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "CreateProjectConstructionSchedule",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectConstructionScheduleRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Created project construction schedule details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectConstructionScheduleResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "put": {
        "summary": "Update construction schedule of a project.",
        "description": "Update construction schedule of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "UpdateProjectConstructionSchedule",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectConstructionScheduleRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updated project construction schedule details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectConstructionScheduleResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "delete": {
        "summary": "Delete Construction Schedule of a project.",
        "description": "Clears out construction schedule fields. Request body is not used, but it is required to call the endpoint with header 'Content-Type: application/json'",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectConstructionSchedule",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectConstructionScheduleRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updated project construction schedule details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectConstructionScheduleResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      }
    },
    "/api/projects/{projectId}/constructiontype": {
      "get": {
        "summary": "Get construction types of a project.",
        "description": "Get construction types of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectConstructionTypes",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/SizeQueryParam"
          },
          {
            "$ref": "#/components/parameters/FromQueryParam"
          },
          {
            "name": "q",
            "in": "query",
            "description": "Simple search query on fields. Search a specific field by using q=field:searchterm. Search all fields by using q=searchterm. Use double quotes on the search term to search for exact matches (q=\"searchterm\" | q=field:\"searchterm\").",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Name:searchterm"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of construction types of a project",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectConstructionTypeResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Add construction types to a project.",
        "description": "Add construction types to a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "CreateProjectConstructionTypes",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ProjectConstructionTypeRequest"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully added construction types, returns list of newly added construction types.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectConstructionTypeResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "put": {
        "summary": "Update construction types to a project.",
        "description": "Update construction types to a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "UpdateProjectConstructionTypes",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ProjectConstructionTypeRequest"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated construction types, returns list of newly added construction types.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectConstructionTypeResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete all construction types of a project",
        "description": "Delete all construction types of a project",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectConstructionTypes",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted all construction types. Returns empty object"
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      }
    },
    "/api/projects/{projectId}/constructiontype/{constructionTypeId}": {
      "get": {
        "summary": "Get construction type of a project.",
        "description": "Get construction type of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetConstructionType",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/ConstructionTypeIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Construction type details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectConstructionTypeResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete construction type of a project.",
        "description": "Delete construction type of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectConstructionType",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/ConstructionTypeIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted construction type. Returns empty object"
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      }
    },
    "/api/projects/{projectId}/feebreakdown": {
      "get": {
        "summary": "Get fee breakdown of a project.",
        "description": "Get fee breakdown of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectFeeBreakdown",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Fee breakdown details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectFeeBreakdownResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Add fee breakdown to a project.",
        "description": "Add fee breakdown to a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "CreateProjectFeeBreakdown",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectFeeBreakdownRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully added fee breakdown, returns added fee breakdown.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectFeeBreakdownResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "put": {
        "summary": "Update fee breakdown on a project.",
        "description": "Update fee breakdown on a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "UpdateProjectFeeBreakdown",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectFeeBreakdownRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated fee breakdown, returns updated fee breakdown.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectFeeBreakdownResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "delete": {
        "summary": "Delete fee breakdown of a project.",
        "description": "Delete fee breakdown of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectFeeBreakdown",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted fee breakdown.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Fee Breakdown associated to project 8876318 has been deleted."
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      }
    },
    "/api/projects/{projectId}/opportunity": {
      "get": {
        "summary": "Get associated opportunity of a project.",
        "description": "Get associated opportunity of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectOpportunity",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Opportunity details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpportunityResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Add associated opportunity to a project.",
        "description": "Add associated opportunity to a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "AddProjectOpportunity",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectOpportunityRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully added associated opportunity, returns opportunity details.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpportunityResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "put": {
        "summary": "Update associated opportunity of a project.",
        "description": "Update associated opportunity of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "UpdateProjectOpportunity",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectOpportunityRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated associated opporunity, returns opportunity details.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpportunityResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Removes associated opportunity from a project.",
        "description": "Removes associated opportunity from a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectOpportunity",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully removed associated opportunity from project."
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      }
    },
    "/api/projects/{projectId}/descriptions": {
      "get": {
        "summary": "Get descriptions of a project.",
        "description": "Get descriptions of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectDescriptions",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/SizeQueryParam"
          },
          {
            "$ref": "#/components/parameters/FromQueryParam"
          },
          {
            "name": "q",
            "in": "query",
            "description": "Simple search query on fields. Search a specific field by using q=field:searchterm. Search all fields by using q=searchterm. Use double quotes on the search term to search for exact matches (q=\"searchterm\" | q=field:\"searchterm\").",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Header:searchterm"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "description": "Comma separated list of specific fields to return.",
            "required": false,
            "schema": {
              "type": "string",
              "example": "DescriptionId,DescriptionTypeId,DescriptionType,Header,Description"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of descriptions of a project",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectDescriptionResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Add descriptions to a project.",
        "description": "Add descriptions to a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "CreateProjectDescriptions",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ProjectDescriptionRequest"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully added descriptions, returns list of newly added descriptions.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectDescriptionResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "DescriptionType cannot be null"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete all descriptions of a project",
        "description": "Delete all descriptions of a project",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectDescriptions",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted all descriptions. Returns empty object"
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      }
    },
    "/api/projects/{projectId}/descriptions/{descriptionId}": {
      "get": {
        "summary": "Get description of a project.",
        "description": "Get description of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectDescription",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/DescriptionIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Description details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectDescriptionResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "put": {
        "summary": "Update description of a project.",
        "description": "Update description of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "UpdateProjectDescription",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/DescriptionIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectDescriptionRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated description, returns updated description.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectDescriptionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "DescriptionType cannot be null"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete description of a project.",
        "description": "Delete description of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectDescription",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/DescriptionIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted description. Returns empty object"
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      }
    },
    "/api/projects/{projectId}/status": {
      "get": {
        "summary": "Get status of a project.",
        "description": "Get status of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectStatus",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Project Status details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectStatusResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "post": {
        "summary": "Add status to a project.",
        "description": "Add status to a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "CreateProjectStatus",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectStatusRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully added status, returns status details.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectStatusResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "put": {
        "summary": "Update status of a project.",
        "description": "Update status of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "UpdateProjectStatus",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectStatusRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated status, returns status details.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectStatusResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "delete": {
        "summary": "Removes status from a project.",
        "description": "Removes status from a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectStatus",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully removed status from project."
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      }
    },
    "/api/projects/{projectId}/divisions": {
      "get": {
        "summary": "Get divisions of a project.",
        "description": "Get divisions of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectDivisions",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/SizeQueryParam"
          },
          {
            "$ref": "#/components/parameters/FromQueryParam"
          },
          {
            "name": "q",
            "in": "query",
            "description": "Simple search query on fields. Search all fields by using q=searchterm. Search a specific field by using q=field:searchterm. Use double quotes on the search term to search for exact matches (q=\"searchterm\" | q=field:\"searchterm\").",
            "required": false,
            "schema": {
              "type": "string",
              "example": "DivisionName:searchterm"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "description": "Comma separated list of specific fields to return.",
            "required": false,
            "schema": {
              "type": "string",
              "example": "DivisionID,DivisionName,DivisionAccronym,DivisionAddress1"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of divisions of a project",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DivisionResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Add divisions to a Project.",
        "description": "Add divisions to a Project.",
        "tags": [
          "Projects"
        ],
        "operationId": "CreateProjectDivisions",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/AssociateDivisionRequest"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully added divisions, returns full list of divisions.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DivisionResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete all divisions of a project",
        "description": "Delete all divisions of on a project",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectDivisions",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted all divisions. Returns empty object"
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      }
    },
    "/api/projects/{projectId}/divisions/{divisionId}": {
      "get": {
        "summary": "Get division of a project.",
        "description": "Get division of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectDivision",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/DivisionIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Division details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DivisionResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete division of a project.",
        "description": "Delete division of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectDivision",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/DivisionIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted division. Returns empty object"
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      }
    },
    "/api/projects/{projectId}/offices": {
      "get": {
        "summary": "Get associated offices of a project.",
        "description": "Get associated offices of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectOffices",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/SizeQueryParam"
          },
          {
            "$ref": "#/components/parameters/FromQueryParam"
          },
          {
            "name": "q",
            "in": "query",
            "description": "Simple search query on fields. Search all fields by using q=searchterm. Search a specific field by using q=field:searchterm. Use double quotes on the search term to search for exact matches (q=\"searchterm\" | q=field:\"searchterm\").",
            "required": false,
            "schema": {
              "type": "string",
              "example": "OfficeName:searchterm"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "description": "Comma separated list of specific fields to return.",
            "required": false,
            "schema": {
              "type": "string",
              "example": "OfficeID,OfficeName,OfficeAcronym,OfficeAddress1"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of offices of a project",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OfficeResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Add associated offices to a Project.",
        "description": "Add associated offices to a Project.",
        "tags": [
          "Projects"
        ],
        "operationId": "CreateProjectOffices",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/AssociateOfficeRequest"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully added offices, returns full list of offices.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OfficeResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete all associated offices on a project",
        "description": "Delete all associated offices on a project",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectOffices",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted all offices. Returns empty object"
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      }
    },
    "/api/projects/{projectId}/offices/{officeId}": {
      "get": {
        "summary": "Get associated office of a project.",
        "description": "Get associated office of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectOffice",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/OfficeIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Office details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OfficeResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete associated office on a project.",
        "description": "Delete associated office on a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectOffice",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/OfficeIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted office. Returns empty object"
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      }
    },
    "/api/projects/{projectId}/ownerclient": {
      "get": {
        "summary": "Get owner client companies on a project.",
        "description": "Get owner client companies on a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectOwnerClients",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/SizeQueryParam"
          },
          {
            "$ref": "#/components/parameters/FromQueryParam"
          },
          {
            "name": "q",
            "in": "query",
            "description": "Simple search query on fields. Search all fields by using q=searchterm. Search a specific field by using q=field:searchterm. Use double quotes on the search term to search for exact matches (q=\"searchterm\" | q=field:\"searchterm\").",
            "required": false,
            "schema": {
              "type": "string",
              "example": "comments:searchterm"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "description": "Comma separated list of specific fields to return.",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Id,Company.Id,Company.Name,Comments"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of owner client companies on a project",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectOwnerClientResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Add owner client companies to a project.",
        "description": "Add owner client companies to a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "CreateProjectOwnerClients",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/CreateProjectOwnerClientRequest"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully added owner client companies, returns full list of owner client companies.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectOwnerClientResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "put": {
        "summary": "Update owner client companies on a project.",
        "description": "Update owner client companies on a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "UpdateProjectOwnerClients",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/UpdateProjectOwnerClientRequest"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated owner client companies, returns updated owner client companies.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectOwnerClientResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete all owner client companies on a project",
        "description": "Delete all owner client companies on a project",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectOwnerClients",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted all owner client companies. Returns empty object"
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      }
    },
    "/api/projects/{projectId}/ownerclient/{ownerClientId}": {
      "get": {
        "summary": "Get owner client company on a project.",
        "description": "Get owner client company on a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectOwnerClient",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/OwnerClientIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Owner client company details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectOwnerClientResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "put": {
        "summary": "Update owner client company on a project.",
        "description": "Update owner client company on a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "UpdateProjectOwnerClient",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/OwnerClientIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateSingleProjectOwnerClientRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated owner client company, returns newly updated owner client company.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectOwnerClientResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete owner client company on a project.",
        "description": "Delete owner client company on a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectOwnerClient",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/OwnerClientIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted owner client company from project. Returns empty object"
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      }
    },
    "/api/projects/{projectId}/ownerclientcontacts": {
      "get": {
        "summary": "Get owner / client contacts on a project.",
        "description": "Get owner / client contacts on a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectOwnerClientContacts",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/SizeQueryParam"
          },
          {
            "$ref": "#/components/parameters/FromQueryParam"
          },
          {
            "name": "q",
            "in": "query",
            "description": "Simple search query on fields. Search all fields by using q=searchterm. Search a specific field by using q=field:searchterm. Use double quotes on the search term to search for exact matches (q=\"searchterm\" | q=field:\"searchterm\").",
            "required": false,
            "schema": {
              "type": "string",
              "example": "comments:searchterm"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "description": "Comma separated list of specific fields to return.",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Id,Contact.ContactId,Contact.FirstName,Contact.LastName"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of owner / client contacts on a project",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectOwnerClientContactResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Add owner / client contacts to a Project.",
        "description": "Add owner / client contacts to a Project.",
        "tags": [
          "Projects"
        ],
        "operationId": "CreateProjectOwnerClientContacts",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/CreateProjectOwnerClientContactRequest"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully added owner / client contacts, returns full list of owner / client contacts.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectOwnerClientContactResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "put": {
        "summary": "Update owner / client contacts on a project.",
        "description": "Update owner / client contacts on a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "UpdateProjectOwnerClientContacts",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/UpdateProjectOwnerClientContactRequest"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated owner / client contacts, returns full list of owner / client contacts.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectOwnerClientContactResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete all owner / client contacts on a project",
        "description": "Delete all owner / client contacts on a project",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectOwnerClientContacts",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted all owner / client contacts. Returns empty object"
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      }
    },
    "/api/projects/{projectId}/ownerclientcontacts/{ownerClientContactId}": {
      "get": {
        "summary": "Get owner / client contact on a project.",
        "description": "Get owner / client contact on a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetOwnerClientContact",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/OwnerClientContactIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "OwnerClient contact details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectOwnerClientContactResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "put": {
        "summary": "Update owner / client contact on a project.",
        "description": "Update owner / client contact on a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "UpdateProjectOwnerClientContact",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/OwnerClientContactIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateSingleProjectOwnerClientContactRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated owner / client contact, returns newly updated owner / client contact.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectOwnerClientContactResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete owner / client contact on a project.",
        "description": "Delete owner / client contact on a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectOwnerClientContact",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/OwnerClientContactIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted owner / client contact. Returns empty object"
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      }
    },
    "/api/projects/{projectId}/practiceareas": {
      "get": {
        "summary": "Get practice areas of a project.",
        "description": "Get practice areas of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectPracticeAreas",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/SizeQueryParam"
          },
          {
            "$ref": "#/components/parameters/FromQueryParam"
          },
          {
            "name": "q",
            "in": "query",
            "description": "Simple search query on fields. Search all fields by using q=searchterm. Search a specific field by using q=field:searchterm. Use double quotes on the search term to search for exact matches (q=\"searchterm\" | q=field:\"searchterm\").",
            "required": false,
            "schema": {
              "type": "string",
              "example": "PracticeAreaName:searchterm"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "description": "Comma separated list of specific fields to return.",
            "required": false,
            "schema": {
              "type": "string",
              "example": "PracticeAreaID,PracticeAreaName,PracticeAreaAcronym,PracticeAreaAddress1"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of practiceareas of a project",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PracticeAreaResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Add practice areas to a project.",
        "description": "Add practice areas to a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "CreateProjectPracticeAreas",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/AssociatePracticeAreaRequest"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully added practice areas, returns full list of practice areas.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PracticeAreaResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete all practice areas of a project",
        "description": "Delete all practice areas of on a project",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectPracticeAreas",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted all practice areas. Returns empty object"
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      }
    },
    "/api/projects/{projectId}/practiceareas/{practiceAreaId}": {
      "get": {
        "summary": "Get practice area of a project.",
        "description": "Get practice area of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectPracticeArea",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/PracticeAreaIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Practice Area details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PracticeAreaResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete practice area of a project.",
        "description": "Delete practice area of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectPracticeArea",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/PracticeAreaIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted practice area. Returns empty object"
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      }
    },
    "/api/projects/{projectId}/studios": {
      "get": {
        "summary": "Get studios of a project.",
        "description": "Get studios of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectStudios",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/SizeQueryParam"
          },
          {
            "$ref": "#/components/parameters/FromQueryParam"
          },
          {
            "name": "q",
            "in": "query",
            "description": "Simple search query on fields. Search all fields by using q=searchterm. Search a specific field by using q=field:searchterm. Use double quotes on the search term to search for exact matches (q=\"searchterm\" | q=field:\"searchterm\").",
            "required": false,
            "schema": {
              "type": "string",
              "example": "StudioName:searchterm"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "description": "Comma separated list of specific fields to return.",
            "required": false,
            "schema": {
              "type": "string",
              "example": "StudioID,StudioName,StudioAcronym,StudioAddress1"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of studios of a project",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/StudioResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Add studios to a project.",
        "description": "Add studios to a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "CreateProjectStudios",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/AssociateStudioRequest"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully added studios, returns full list of studios.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/StudioResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete all studios of a project",
        "description": "Delete all studios of on a project",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectStudios",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted all studios. Returns empty object"
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      }
    },
    "/api/projects/{projectId}/studios/{studioId}": {
      "get": {
        "summary": "Get studio of a project.",
        "description": "Get studio of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectStudio",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/StudioIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Studio details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StudioResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete studio of a project.",
        "description": "Delete studio of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectStudio",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/StudioIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted studio. Returns empty object"
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Project 123 does not exist."
                }
              }
            }
          }
        }
      }
    },
    "/api/projects/constructioncosts": {
      "get": {
        "summary": "Get construction costs of all projects.",
        "description": "Get construction costs of all projects.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetConstructionCosts",
        "parameters": [
          {
            "$ref": "#/components/parameters/SizeQueryParam"
          },
          {
            "$ref": "#/components/parameters/FromQueryParam"
          },
          {
            "name": "q",
            "in": "query",
            "description": "Simple search query on fields. Search all fields by using q=searchterm. Search a specific field by using q=field:searchterm. Use double quotes on the search term to search for exact matches (q=\"searchterm\" | q=field:\"searchterm\").",
            "required": false,
            "schema": {
              "type": "string",
              "example": "ConstCostComments:searchterm"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "description": "Comma separated list of specific fields to return.",
            "required": false,
            "schema": {
              "type": "string",
              "example": "ProjectId,OurResponsibility_AC,OurResponsibility_PC,ConstCostComments"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Construction Costs of all projects",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectConstructionCostsResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      }
    },
    "/api/projects/{projectId}/constructioncosts": {
      "get": {
        "summary": "Get Construction Costs of a project.",
        "description": "Get Construction Costs of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectConstructionCosts",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "name": "fields",
            "in": "query",
            "description": "Comma separated list of specific fields to return.",
            "required": false,
            "schema": {
              "type": "string",
              "example": "ProjectId,OurResponsibility_AC,OurResponsibility_PC,ConstCostComments"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Project construction costs",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectConstructionCostsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "post": {
        "summary": "Create construction costs for a project.",
        "description": "Create construction costs for a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "CreateProjectConstructionCosts",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectConstructionCostsRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Created project construction costs",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectConstructionCostsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "put": {
        "summary": "Update construction costs of a project.",
        "description": "Update construction costs of a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "UpdateProjectConstructionCosts",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectConstructionCostsRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updated project construction costs",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectConstructionCostsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "delete": {
        "summary": "Delete Construction Costs of a project.",
        "description": "Clears out construction costs fields. Request body is not used, but it is required to call the endpoint with header 'Content-Type: application/json'",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectConstructionCosts",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectConstructionCostsRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updated project construction costs",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectConstructionCostsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      }
    },
    "/api/projects/{projectId}/staffteam": {
      "get": {
        "summary": "Get staff team members on a project.",
        "description": "Get staff team members on a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectStaffTeam",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/SizeQueryParam"
          },
          {
            "$ref": "#/components/parameters/FromQueryParam"
          },
          {
            "name": "q",
            "in": "query",
            "description": "Simple search query on fields. Search all fields by using q=searchterm. Search a specific field by using q=field:searchterm. Use double quotes on the search term to search for exact matches (q=\"searchterm\" | q=field:\"searchterm\").",
            "required": false,
            "schema": {
              "type": "string",
              "example": "description:searchterm"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of staff team members on a project",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectStaffTeamResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "post": {
        "summary": "Add staff team members to a project.",
        "description": "Add staff team members to a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "CreateProjectStaffTeam",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/CreateProjectStaffTeamRequest"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully added staff team members, returns newly added staff team members.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectStaffTeamResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "delete": {
        "summary": "Delete all staff team members on a project",
        "description": "Delete all staff team members on a project",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectStaffTeam",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted all staff team members. Returns empty object"
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      }
    },
    "/api/projects/{projectId}/staffteam/{staffTeamId}": {
      "get": {
        "summary": "Get staff team member on a project.",
        "description": "Get staff team member on a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "GetProjectStaffTeamInvidivual",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/StaffTeamIdPathParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Staff team member details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectStaffTeamResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "put": {
        "summary": "Update staff team member on a project.",
        "description": "Update staff team member on a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "UpdateProjectStaffTeamIndividual",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/StaffTeamIdPathParam"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateProjectStaffTeamRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated staff team member, returns newly updated staff team member.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectStaffTeamResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Project Staff Team ID does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Error: Project Staff Team with id [123] not found"
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete staff team member on a project.",
        "description": "Delete staff team member on a project.",
        "tags": [
          "Projects"
        ],
        "operationId": "DeleteProjectStaffTeamIndividual",
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectIdPathParam"
          },
          {
            "$ref": "#/components/parameters/StaffTeamIdPathParam"
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted staff team member. Returns empty object"
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      }
    },
    "/api/companies": {
      "get": {
        "summary": "Get a list of companies",
        "description": "Returns a list of companies",
        "tags": [
          "Companies"
        ],
        "operationId": "GetCompanies",
        "parameters": [
          {
            "$ref": "#/components/parameters/SizeQueryParam"
          },
          {
            "$ref": "#/components/parameters/FromQueryParam"
          },
          {
            "name": "full",
            "in": "query",
            "description": "Whether to return a full or summary set of properties",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false,
              "example": true
            }
          },
          {
            "name": "fields",
            "in": "query",
            "description": "Comma separated list of specific fields to return.",
            "required": false,
            "schema": {
              "type": "string",
              "example": "CompanyId,Name,Acronym,ParentCompanyName"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of companies",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "oneOf": [
                      {
                        "$ref": "#/components/schemas/CompanyFullResponse"
                      },
                      {
                        "$ref": "#/components/schemas/CompanySummaryResponse"
                      }
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          }
        }
      },
      "post": {
        "summary": "Create a number of companies",
        "description": "Create a number of companies (maximum of 50), and return the created companies",
        "tags": [
          "Companies"
        ],
        "operationId": "CreateCompanies",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/CompanyRequest"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of companies that were created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CompanyFullResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Value passed in for Company Authorization did not match the list of acceptable values."
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "413": {
            "description": "Request Entity too large",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "The attempt to insert data exceeded the maximum record upload size of 50."
                }
              }
            }
          }
        }
      }
    },
    "/api/companies/{companyId}": {
      "get": {
        "summary": "Get details of a company.",
        "description": "Get details of a company.",
        "tags": [
          "Companies"
        ],
        "operationId": "GetCompanyDetails",
        "parameters": [
          {
            "description": "Company ID",
            "name": "companyId",
            "in": "path",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "required": true,
            "example": 8876318
          }
        ],
        "responses": {
          "200": {
            "description": "Company Details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyFullResponse"
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Company does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Company 123 does not exist."
                }
              }
            }
          }
        }
      },
      "put": {
        "summary": "Update details of a company.",
        "description": "Update details of a company.",
        "tags": [
          "Companies"
        ],
        "operationId": "UpdateCompanyDetails",
        "parameters": [
          {
            "$ref": "#/paths/~1api~1companies~1%7BcompanyId%7D/get/parameters/0"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CompanyRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updated company details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyFullResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Value passed in for Company Authorization did not match the list of acceptable values."
                }
              }
            }
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "CompanyName is a required field and can not be set to empty."
                }
              }
            }
          },
          "404": {
            "description": "Company does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Company 123 does not exist."
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a company.",
        "description": "Delete a company.",
        "tags": [
          "Companies"
        ],
        "operationId": "DeleteCompany",
        "parameters": [
          {
            "$ref": "#/paths/~1api~1companies~1%7BcompanyId%7D/get/parameters/0"
          }
        ],
        "responses": {
          "200": {
            "description": "Delete was successful."
          },
          "401": {
            "description": "Error: Unauthorized"
          },
          "404": {
            "description": "Company does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Company 123 does not exist."
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AssociateDivisionRequest": {
        "type": "object",
        "properties": {
          "DivisionID": {
            "type": "integer",
            "format": "int32",
            "example": 88086,
            "description": "Division ID"
          },
          "DivisionName": {
            "type": "string",
            "example": "DivisionName",
            "description": "Division Name",
            "maxLength": 500
          }
        }
      },
      "DivisionRequest": {
        "type": "object",
        "required": [
          "DivisionName"
        ],
        "properties": {
          "DivisionName": {
            "type": "string",
            "example": "DivisionName",
            "description": "Division Name",
            "maxLength": 500
          },
          "DivisionAccronym": {
            "type": "string",
            "example": "DivisionAccronym",
            "description": "Division Accronym",
            "maxLength": 50
          },
          "DivisionAddress1": {
            "type": "string",
            "example": "DivisionAddress1",
            "description": "Division Address1",
            "maxLength": 150
          },
          "DivisionAddress2": {
            "type": "string",
            "example": "DivisionAddress2",
            "description": "Division Address2",
            "maxLength": 150
          },
          "DivisionCity": {
            "type": "string",
            "example": "DivisionCity",
            "description": "Division City",
            "maxLength": 100
          },
          "DivisionStateID": {
            "type": "integer",
            "format": "int32",
            "example": 22053,
            "description": "Division StateID"
          },
          "DivisionZip": {
            "type": "string",
            "example": "DivisionZip",
            "description": "Division Zip",
            "maxLength": 20
          },
          "DivisionCountryID": {
            "type": "integer",
            "format": "int32",
            "example": 25487,
            "description": "Division CountryID"
          },
          "DivisionPhone": {
            "type": "string",
            "example": "DivisionPhone",
            "description": "Division Phone Number",
            "maxLength": 20
          },
          "DivisionFax": {
            "type": "string",
            "example": "DivisionFax",
            "description": "Division Fax Number",
            "maxLength": 20
          },
          "DivisionEmail": {
            "type": "string",
            "example": "DivisionEmail",
            "description": "Division Email",
            "maxLength": 100
          },
          "DivisionURL": {
            "type": "string",
            "example": "DivisionURL",
            "description": "Division URL",
            "maxLength": 100
          },
          "DunsID": {
            "type": "string",
            "example": "DunsID",
            "description": "Duns ID",
            "maxLength": 50
          },
          "OwnershipID": {
            "type": "integer",
            "format": "int32",
            "example": 23237,
            "description": "Ownership ID"
          },
          "BusinessLicense": {
            "type": "string",
            "example": "BusinessLicense",
            "description": "Business License",
            "maxLength": 50
          },
          "BusinessStatusID": {
            "type": "integer",
            "format": "int32",
            "example": 94988,
            "description": "Business StatusID"
          },
          "YearFounded": {
            "type": "integer",
            "format": "int32",
            "example": 4133,
            "description": "Year Founded"
          },
          "TotalStaffNum": {
            "type": "integer",
            "format": "int32",
            "example": 21683,
            "description": "Total Staff Number"
          },
          "PreviousDivisionNames": {
            "type": "string",
            "example": "PreviousDivisionNames",
            "description": "Previous Division Names",
            "maxLength": 255
          },
          "PreviousDivision_YearFounded": {
            "type": "string",
            "example": "PreviousDivision_YearFounded",
            "description": "Previous Division Year Founded"
          },
          "PreviousDivision_DunsID": {
            "type": "string",
            "example": "PreviousDivision_DunsID",
            "description": "Previous Division Duns ID",
            "maxLength": 50
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Create Date"
          },
          "ModifyDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Modify Date"
          },
          "DeleteRecord": {
            "type": "boolean",
            "description": "Delete Record"
          },
          "Available": {
            "type": "boolean",
            "description": "Available"
          },
          "UserID": {
            "type": "integer",
            "format": "int32",
            "example": 14003,
            "description": "User ID"
          },
          "old_divisionid": {
            "type": "string",
            "example": "old_divisionid",
            "description": "Old Division Id",
            "maxLength": 50
          },
          "divisionSalesGoal": {
            "type": "number",
            "format": "float",
            "example": 80.2,
            "description": "Division Sales Goal"
          },
          "MarginPercentage": {
            "type": "number",
            "format": "float",
            "example": 92.01,
            "description": "Margin Percentage"
          },
          "AssessmentPercentage": {
            "type": "number",
            "format": "float",
            "example": 40.82,
            "description": "Assessment Percentage"
          }
        }
      },
      "DivisionResponse": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "DivisionID": {
                "type": "integer",
                "format": "int32",
                "example": 88086,
                "description": "Division ID"
              }
            }
          },
          {
            "$ref": "#/components/schemas/DivisionRequest"
          },
          {
            "type": "object",
            "properties": {
              "ROW_VERSION": {
                "type": "string",
                "nullable": true,
                "format": "byte",
                "maxLength": 8,
                "example": null
              }
            }
          }
        ]
      },
      "AssociateOfficeRequest": {
        "type": "object",
        "properties": {
          "OfficeID": {
            "type": "integer",
            "format": "int32",
            "example": 88086,
            "description": "Office ID"
          },
          "OfficeName": {
            "type": "string",
            "example": "OfficeName",
            "description": "Office Name",
            "maxLength": 100
          }
        }
      },
      "OfficeRequest": {
        "type": "object",
        "required": [
          "OfficeName"
        ],
        "properties": {
          "OfficeName": {
            "type": "string",
            "example": "OfficeName",
            "description": "Office Name",
            "maxLength": 100
          },
          "OfficeAcronym": {
            "type": "string",
            "example": "OfficeAcronym",
            "description": "Office Acronym",
            "maxLength": 20
          },
          "HeadquarterIndicator": {
            "type": "integer",
            "format": "int32",
            "example": 1,
            "description": "Headquarter Indicator"
          },
          "OfficeAddress1": {
            "type": "string",
            "example": "OfficeAddress1",
            "description": "Office Address1",
            "maxLength": 150
          },
          "OfficeAddress2": {
            "type": "string",
            "example": "OfficeAddress2",
            "description": "Office Address2",
            "maxLength": 150
          },
          "OfficeCity": {
            "type": "string",
            "example": "OfficeCity",
            "description": "Office City",
            "maxLength": 100
          },
          "OfficeStateID": {
            "type": "integer",
            "format": "int32",
            "example": 55,
            "description": "Office StateID"
          },
          "OfficeZip": {
            "type": "string",
            "example": "94655",
            "description": "Office Zip",
            "maxLength": 20
          },
          "OfficeCounty": {
            "type": "string",
            "example": "OfficeCounty",
            "description": "Office County",
            "maxLength": 100
          },
          "OfficeCountryID": {
            "type": "integer",
            "format": "int32",
            "example": 1,
            "description": "Office CountryID"
          },
          "OfficePhone": {
            "type": "string",
            "example": "123-456-7890",
            "description": "Office Phone Number",
            "maxLength": 20
          },
          "OfficeFax": {
            "type": "string",
            "example": "123-456-7890",
            "description": "Office Fax Number",
            "maxLength": 20
          },
          "OfficeEmail": {
            "type": "string",
            "example": "OfficeEmail",
            "description": "Office Email",
            "maxLength": 100
          },
          "OfficeURL": {
            "type": "string",
            "example": "OfficeURL",
            "description": "Office URL",
            "maxLength": 100
          },
          "FederalID": {
            "type": "string",
            "example": "FederalID",
            "description": "Federal ID",
            "maxLength": 50
          },
          "DunsID": {
            "type": "string",
            "example": "DunsID",
            "description": "Duns ID",
            "maxLength": 50
          },
          "AcassID": {
            "type": "string",
            "example": "AcassID",
            "description": "Acass ID",
            "maxLength": 50
          },
          "BusinessLicense": {
            "type": "string",
            "example": "BusinessLicense",
            "description": "Business License",
            "maxLength": 50
          },
          "BusinessStatusID": {
            "type": "integer",
            "format": "int32",
            "example": 98913,
            "description": "BusinessStatusID"
          },
          "TotalStaffNum": {
            "type": "integer",
            "format": "int32",
            "example": 39277,
            "description": "Total Staff Number"
          },
          "InsuranceCoverage": {
            "type": "string",
            "example": "InsuranceCoverage",
            "description": "Insurance Coverage",
            "maxLength": 255
          },
          "InsuranceCarrier": {
            "type": "string",
            "example": "InsuranceCarrier",
            "description": "Insurance Carrier",
            "maxLength": 255
          },
          "OwnershipID": {
            "type": "integer",
            "format": "int32",
            "example": 38124,
            "description": "Ownership ID"
          },
          "PreviousFirmNames": {
            "type": "string",
            "example": "PreviousFirmNames",
            "description": "Previous Firm Names",
            "maxLength": 255
          },
          "YearFounded": {
            "type": "string",
            "example": "2000",
            "description": "Year Founded",
            "maxLength": 4
          },
          "PreviousFirm_YearFounded": {
            "type": "integer",
            "format": "int32",
            "example": 1999,
            "description": "Previous Firm Year Founded"
          },
          "PreviousFirm_DunsID": {
            "type": "string",
            "example": "PreviousFirm_DunsID",
            "description": "Previous Firm Duns ID",
            "maxLength": 50
          },
          "ServicesProvided": {
            "type": "string",
            "example": "ServicesProvided",
            "description": "Services Provided",
            "maxLength": 500
          },
          "DeleteIndicator": {
            "type": "boolean",
            "description": "Delete Indicator"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Create Date"
          },
          "ModifyDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Modify Date"
          },
          "UserID": {
            "type": "integer",
            "format": "int32",
            "example": 9129,
            "description": "User ID"
          },
          "old_officeid": {
            "type": "string",
            "example": "old_officeid",
            "description": "Old Office Id",
            "maxLength": 50
          },
          "officeSalesGoal": {
            "type": "number",
            "format": "float",
            "example": 43.13,
            "description": "Office Sales Goal"
          },
          "MarginPercentage": {
            "type": "number",
            "format": "float",
            "example": 4.78,
            "description": "Margin Percentage"
          },
          "AssessmentPercentage": {
            "type": "number",
            "format": "float",
            "example": 78.69,
            "description": "Assessment Percentage"
          },
          "GoPercent": {
            "type": "number",
            "format": "float",
            "example": 60.19,
            "description": "Project Probability"
          },
          "GetPercent": {
            "type": "number",
            "format": "float",
            "example": 26.37,
            "description": "Get Percent"
          },
          "SelfPerformHours": {
            "type": "integer",
            "format": "int32",
            "example": 2608,
            "description": "Self Perform Hours"
          },
          "FeeCIPercent": {
            "type": "number",
            "format": "float",
            "example": 48.67,
            "description": "Fee CI Percent"
          },
          "LaborDifferential": {
            "type": "integer",
            "format": "int32",
            "example": 38977,
            "description": "Labor Differential"
          },
          "Available": {
            "type": "boolean",
            "description": "Available"
          }
        }
      },
      "OfficeResponse": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "OfficeID": {
                "type": "integer",
                "format": "int32",
                "example": 88086,
                "description": "Office ID"
              }
            }
          },
          {
            "$ref": "#/components/schemas/OfficeRequest"
          },
          {
            "type": "object",
            "properties": {
              "ROW_VERSION": {
                "type": "string",
                "nullable": true,
                "format": "byte",
                "maxLength": 8,
                "example": null
              }
            }
          }
        ]
      },
      "OpportunityRequest": {
        "type": "object",
        "properties": {
          "ClientId": {
            "type": "integer",
            "format": "int32",
            "example": 17216,
            "description": "Potential Client Company seeking services requested for the opportunity."
          },
          "ClientName": {
            "type": "string",
            "example": "ClientName",
            "description": "Client Company Name"
          },
          "SF255Form": {
            "type": "integer",
            "format": "int32",
            "example": 19909,
            "description": "Indicates whether a SF 255 form has been created for the project."
          },
          "SF330Form": {
            "type": "integer",
            "format": "int32",
            "example": 82307,
            "description": "Indicates whether an SF 330 form has been generated for the Opportunity."
          },
          "OpportunityName": {
            "type": "string",
            "example": "OpportunityName",
            "description": "The name of the opportunity",
            "maxLength": 255
          },
          "EstimatedSelectionDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Estimated date the client will make a selection."
          },
          "CloseDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Date the status was changed to Closed."
          },
          "Cost": {
            "type": "number",
            "format": "float",
            "example": 51.25,
            "description": "Typically the total cost of the Project to the Client."
          },
          "Size": {
            "type": "integer",
            "format": "int32",
            "example": 98729,
            "description": "Estimated Size of the Project"
          },
          "SizeUnit": {
            "type": "string",
            "example": "SF",
            "description": "Unit of measurement being used in the Estimated Size field.",
            "maxLength": 50
          },
          "Fee": {
            "type": "number",
            "format": "float",
            "example": 55.71,
            "description": "The total Estimated Fee for the entire Project."
          },
          "Probability": {
            "type": "integer",
            "format": "int32",
            "example": 20610,
            "description": "Probability that your firm with win the project.  Percent used to calculate the factored fee."
          },
          "NextAction": {
            "type": "string",
            "example": "NextAction",
            "description": "Free Text field used to list the next action required for the Opportunity",
            "maxLength": 4000
          },
          "RFPRecieved": {
            "type": "boolean",
            "description": "Date the RFP was actually released"
          },
          "ProposalNumber": {
            "type": "string",
            "example": "ProposalNumber",
            "description": "Number assigned to Proposal.",
            "maxLength": 255
          },
          "ProposalDueDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Date the proposal is due."
          },
          "ExpectedRFPDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Date the RFP is expected to be released"
          },
          "QualsDueDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Date the Qualifications are due"
          },
          "ProposalSubmitted": {
            "type": "boolean",
            "description": "Was the proposal submitted?"
          },
          "PresentationDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Date of the presentation"
          },
          "Comments": {
            "type": "string",
            "example": "Comments",
            "description": "Comments about the opportunity lifecycle."
          },
          "MarketingCostBudget": {
            "type": "number",
            "format": "float",
            "example": 76.14,
            "description": "Estimated cost to firm to pursue Project"
          },
          "MarketingCostActual": {
            "type": "number",
            "format": "float",
            "example": 4.42,
            "description": "Actual cost to firm to pursue Project"
          },
          "OpportunityNumber": {
            "type": "string",
            "example": "OpportunityNumber",
            "description": "Unique Identifier for the Opportunity.",
            "maxLength": 50
          },
          "ActiveInd": {
            "type": "integer",
            "format": "int32",
            "example": 1,
            "description": "Is Active? 1=Open or 0=Closed."
          },
          "DeleteRecord": {
            "type": "boolean",
            "description": "Is Deleted"
          },
          "Address1": {
            "type": "string",
            "example": "Address1",
            "description": "Address Line 1 for the location of the Opportunity.",
            "maxLength": 255
          },
          "Address2": {
            "type": "string",
            "example": "Address2",
            "description": "Address Line 2 for the location of the Opportunity.",
            "maxLength": 255
          },
          "City": {
            "type": "string",
            "example": "City",
            "description": "City of the project's address.",
            "maxLength": 100
          },
          "State": {
            "type": "string",
            "example": "State",
            "description": "State of the project's address.",
            "maxLength": 100
          },
          "PostalCode": {
            "type": "string",
            "example": "PostalCode",
            "description": "Postal/zip code of the project's address.",
            "maxLength": 20
          },
          "Country": {
            "type": "string",
            "example": "Country",
            "description": "Country of the project's address.",
            "maxLength": 100
          },
          "OpportunityDescription": {
            "type": "string",
            "example": "OpportunityDescription",
            "description": "Text field that allows you to enter a brief description of the Opportunity.",
            "maxLength": 4000
          },
          "ExternalId": {
            "type": "string",
            "example": "ExternalId",
            "description": "Unique ID of another system.",
            "maxLength": 255
          },
          "OpportunityShortText1": {
            "type": "string",
            "example": "OpportunityShortText1",
            "description": "Custom Short Text Field 1",
            "maxLength": 4000
          },
          "OpportunityShortText2": {
            "type": "string",
            "example": "OpportunityShortText2",
            "description": "Custom Short Text Field 2",
            "maxLength": 4000
          },
          "OpportunityShortText3": {
            "type": "string",
            "example": "OpportunityShortText3",
            "description": "Custom Short Text Field 3",
            "maxLength": 4000
          },
          "OpportunityShortText4": {
            "type": "string",
            "example": "OpportunityShortText4",
            "description": "Custom Short Text Field 4",
            "maxLength": 4000
          },
          "OpportunityShortText5": {
            "type": "string",
            "example": "OpportunityShortText5",
            "description": "Custom Short Text Field 5",
            "maxLength": 4000
          },
          "OpportunityNumber1": {
            "type": "integer",
            "format": "int32",
            "example": 43942,
            "description": "Custom Number Field 1"
          },
          "OpportunityNumber2": {
            "type": "integer",
            "format": "int32",
            "example": 60750,
            "description": "Custom Number Field 2"
          },
          "OpportunityNumber3": {
            "type": "integer",
            "format": "int32",
            "example": 10738,
            "description": "Custom Number Field 3"
          },
          "OpportunityNumber4": {
            "type": "integer",
            "format": "int32",
            "example": 26152,
            "description": "Custom Number Field 4"
          },
          "OpportunityNumber5": {
            "type": "integer",
            "format": "int32",
            "example": 79427,
            "description": "Custom Number Field 5"
          },
          "OpportunityDate1": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Custom Date Field 1"
          },
          "OpportunityDate2": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Custom Date Field 2"
          },
          "OpportunityDate3": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Custom Date Field 3"
          },
          "OpportunityDate4": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Custom Date Field 4"
          },
          "OpportunityDate5": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Custom Date Field 5"
          },
          "OpportunityValueListID1": {
            "type": "integer",
            "format": "int32",
            "example": 52086,
            "description": "Custom Value List Field 1"
          },
          "OpportunityValueListID2": {
            "type": "integer",
            "format": "int32",
            "example": 48749,
            "description": "Custom Value List Field 2"
          },
          "OpportunityValueListID3": {
            "type": "integer",
            "format": "int32",
            "example": 26524,
            "description": "Custom Value List Field 3"
          },
          "OpportunityValueListID4": {
            "type": "integer",
            "format": "int32",
            "example": 94407,
            "description": "Custom Value List Field 4"
          },
          "OpportunityValueListID5": {
            "type": "integer",
            "format": "int32",
            "example": 17228,
            "description": "Custom Value List Field 5"
          },
          "OpportunityMoney1": {
            "type": "number",
            "format": "float",
            "example": 17.31,
            "description": "Custom Currency Field 1"
          },
          "OpportunityMoney2": {
            "type": "number",
            "format": "float",
            "example": 34.39,
            "description": "Custom Currency Field 2"
          },
          "OpportunityMoney3": {
            "type": "number",
            "format": "float",
            "example": 62.11,
            "description": "Custom Currency Field 3"
          },
          "OpportunityMoney4": {
            "type": "number",
            "format": "float",
            "example": 60.54,
            "description": "Custom Currency Field 4"
          },
          "OpportunityMoney5": {
            "type": "number",
            "format": "float",
            "example": 80.54,
            "description": "Custom Currency Field 5"
          },
          "OpportunityPercent1": {
            "type": "number",
            "format": "float",
            "example": 35.26,
            "description": "Custom Percent Field 1"
          },
          "OpportunityPercent2": {
            "type": "number",
            "format": "float",
            "example": 63.74,
            "description": "Custom Percent Field 2"
          },
          "OpportunityPercent3": {
            "type": "number",
            "format": "float",
            "example": 6.57,
            "description": "Custom Percent Field 3"
          },
          "OpportunityPercent4": {
            "type": "number",
            "format": "float",
            "example": 39.58,
            "description": "Custom Percent Field 4"
          },
          "OpportunityPercent5": {
            "type": "number",
            "format": "float",
            "example": 93.4,
            "description": "Custom Percent Field 5"
          },
          "EstimatedStartDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Date project is estimated to start."
          },
          "EstimatedCompletionDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Date project is estimated to complete."
          },
          "FirmFee": {
            "type": "number",
            "format": "float",
            "example": 44.01,
            "description": "Your firm's fee for the Project."
          },
          "ProjectProbability": {
            "type": "integer",
            "format": "int32",
            "example": 83412,
            "description": "Probability that the project will go forward."
          },
          "OwnerId": {
            "type": "integer",
            "format": "int32",
            "example": 70597,
            "description": "ID of Owner Company for the opportunity.  Often the same as Client."
          },
          "OwnerName": {
            "type": "string",
            "example": "OwnerName",
            "description": "Owner Company Name"
          },
          "TeamOppFirmOrgFeeSource": {
            "type": "integer",
            "format": "int32",
            "example": 65331,
            "description": "Team Opp Firm Org Fee Source"
          },
          "OppType": {
            "type": "number",
            "format": "byte",
            "description": "On-Call? (1=Yes; 0=No)"
          },
          "PreConStartDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Date PreConstruction Started"
          },
          "PreConEndDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Date PreConstruction Completed"
          },
          "DesignStartDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Date Design Started."
          },
          "DesignCompletionDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Date Design Completed."
          },
          "ConstructionStartDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Date Construction Started"
          },
          "ConstructionCompletionDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Date Construction Completed."
          },
          "fundProbability": {
            "type": "number",
            "format": "float",
            "example": 73.17,
            "description": "Fund Probability"
          },
          "ROW_VERSION": {
            "type": "string",
            "nullable": true,
            "format": "byte",
            "maxLength": 8,
            "example": null
          },
          "ShortListed": {
            "type": "boolean",
            "description": "Was the firm shortlisted?  true or false"
          },
          "Interviewed": {
            "type": "boolean",
            "description": "Was the firm interviewed?  true or false"
          },
          "ShortListedDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10"
          },
          "Score": {
            "type": "integer",
            "format": "int32",
            "example": 46908,
            "description": "Displays the score from the most recently completed Go/No Go form."
          },
          "CreateDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Opportunity creation date/time."
          },
          "CreatedByUserId": {
            "type": "integer",
            "format": "int32",
            "example": 54015,
            "description": "Opportunity creator (ID)."
          },
          "LastModifiedDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Date/time of when the record was last modifed."
          },
          "LastModifiedByUserId": {
            "type": "integer",
            "format": "int32",
            "example": 81862,
            "description": "ID of the User who last modified the record."
          },
          "LastDeletedDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Datetime of record deletion."
          },
          "LastDeletedByUserId": {
            "type": "integer",
            "format": "int32",
            "example": 52104,
            "description": "ID of the User who deleted the record."
          },
          "EstimatedFeePercentage": {
            "type": "number",
            "format": "double",
            "description": "Calculation: Total Estimated Fee / (Estimated Cost - Total Estimated Fee)."
          },
          "FactoredFee": {
            "type": "number",
            "format": "float",
            "example": 40.99,
            "description": "Calculation: Firm Estimated Fee x Project Probability x Win Probability."
          },
          "GrossRevenueSTD": {
            "type": "number",
            "format": "float",
            "example": 49.4,
            "description": "Total cost of the Project to the Client"
          },
          "GrossMarginDollarsSTD": {
            "type": "number",
            "format": "float",
            "example": 96.28,
            "description": "Your firms portion of the project cost in dollars."
          },
          "GrossMarginPercentSTD": {
            "type": "number",
            "format": "float",
            "example": 75.53,
            "description": "The percentage of the gross revenue that goes to your firm."
          },
          "FactoredCostSTD": {
            "type": "number",
            "format": "float",
            "example": 81.93,
            "description": "Calculation: Estimated Cost x Project Probability x Win Probability."
          },
          "FeeCIPercent": {
            "type": "number",
            "format": "float",
            "example": 90.38,
            "description": "Fee CI Percent"
          },
          "FeeCIDifVolume": {
            "type": "number",
            "format": "float",
            "example": 52.96,
            "description": "Fee CI Difference Volume"
          },
          "LaborDifferentialDollars": {
            "type": "integer",
            "format": "int32",
            "example": 82864,
            "description": "Labor Differential Dollars"
          },
          "OppSelfPerformHours": {
            "type": "integer",
            "format": "int32",
            "example": 22721,
            "description": "Hours your firm will perform on the Project. Used to calculate complex construction Gross Margin % (GM%)."
          },
          "EstimatedManagementUnits": {
            "type": "number",
            "format": "float",
            "example": 8.78,
            "description": "Estimated Management Units"
          },
          "GrossMargin": {
            "type": "number",
            "format": "float",
            "example": 30.74,
            "description": "Gross Margin"
          },
          "GrossMarginPercent": {
            "type": "number",
            "format": "float",
            "example": 56.36,
            "description": "Gross Margin Percent"
          },
          "MasterOpportunityId": {
            "type": "integer",
            "format": "int32",
            "example": 20037,
            "description": "Master Opportunity ID"
          },
          "OppTypeDescription": {
            "type": "string",
            "example": "Opp Type",
            "maxLength": 10,
            "description": "Opportunity Type Description"
          },
          "AutoNumber": {
            "type": "integer",
            "format": "int32",
            "example": 73969,
            "description": "Auto Number"
          },
          "Stage": {
            "type": "string",
            "example": "Stage",
            "description": "Stages of Opportunity lifecycle. Critical for generating valuable reports.  We recommend prefacing the values with a number so that they always appear in the order you expect them to.",
            "maxLength": 100
          },
          "StageType": {
            "type": "string",
            "example": "StageType",
            "maxLength": 50,
            "description": "Stage Type"
          },
          "Note": {
            "type": "string",
            "example": "Note",
            "description": "Opportunity Note"
          },
          "RedZoneScore": {
            "type": "integer",
            "format": "int32",
            "example": 53599
          },
          "OpportunityLongText1": {
            "type": "string",
            "example": "OpportunityLongText1",
            "description": "Custom Long Text Field 1",
            "maxLength": 4000
          },
          "OpportunityLongText2": {
            "type": "string",
            "example": "OpportunityLongText2",
            "description": "Custom Long Text Field 2",
            "maxLength": 4000
          },
          "OpportunityLongText3": {
            "type": "string",
            "example": "OpportunityLongText3",
            "description": "Custom Long Text Field 3",
            "maxLength": 4000
          },
          "OpportunityLongText4": {
            "type": "string",
            "example": "OpportunityLongText4",
            "description": "Custom Long Text Field 4",
            "maxLength": 4000
          },
          "OpportunityLongText5": {
            "type": "string",
            "example": "OpportunityLongText5",
            "description": "Custom Long Text Field 5",
            "maxLength": 4000
          },
          "approvalLevel": {
            "type": "string",
            "example": "approvalLevel",
            "description": "Custom value list of approval levels",
            "maxLength": 50
          },
          "approvalStatus": {
            "type": "string",
            "nullable": true,
            "enum": [
              "Out for approval",
              "Approved",
              "Denied"
            ],
            "maxLength": 50,
            "description": "Approval Status"
          },
          "OppLat": {
            "type": "number",
            "format": "float",
            "example": 2.19,
            "description": "Opportunity Latitude"
          },
          "OppLong": {
            "type": "number",
            "format": "float",
            "example": 70.3,
            "description": "Opportunity Longitude"
          },
          "StageId": {
            "type": "integer",
            "format": "int32",
            "example": 56795,
            "description": "Stage Id"
          },
          "County": {
            "type": "string",
            "example": "County",
            "maxLength": 250,
            "description": "County of the project's address."
          },
          "RegionId": {
            "type": "integer",
            "format": "int32",
            "example": 91677,
            "description": "Region ID"
          },
          "WorkHoursEngineer": {
            "type": "number",
            "format": "float",
            "example": 53.35,
            "description": "Estimated engineering work hours on the project"
          },
          "WorkHoursConstruction": {
            "type": "number",
            "format": "float",
            "example": 85.53,
            "description": "Estimated construction work hours on the project"
          },
          "WorkHoursDesign": {
            "type": "number",
            "format": "float",
            "example": 62.25,
            "description": "Estimated design work hours on the project"
          },
          "FeePercent": {
            "type": "number",
            "format": "float",
            "example": 64.5,
            "description": "Fee Percent"
          },
          "SolicitationNumber": {
            "type": "string",
            "example": "SolicitationNumber",
            "maxLength": 100,
            "description": "Solicitation Number"
          },
          "OnCallContractStartDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "On Call Contract Start Date"
          },
          "OnCallContractEndDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "On Call Contract End Date"
          },
          "OriginalFirmEstimatedFee": {
            "type": "number",
            "format": "float",
            "example": 35.66,
            "description": "Original Firm Estimated Fee"
          },
          "OppFormID": {
            "type": "integer",
            "format": "int32",
            "example": 91984,
            "description": "Opportunity Form ID"
          },
          "Markup": {
            "type": "number",
            "format": "float",
            "example": 26.75,
            "description": "Markup"
          },
          "PropertyId": {
            "type": "integer",
            "format": "int32",
            "example": 78452,
            "description": "Property ID"
          },
          "ReferredByID": {
            "type": "integer",
            "format": "int32",
            "example": 24060,
            "description": "Referred By ID"
          }
        }
      },
      "OpportunityResponse": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "OpportunityId": {
                "type": "integer",
                "format": "int32",
                "example": 665488,
                "description": "Opportunity ID"
              }
            }
          },
          {
            "$ref": "#/components/schemas/OpportunityRequest"
          }
        ]
      },
      "AssociatePersonnelRequest": {
        "type": "object",
        "properties": {
          "PersonnelId": {
            "type": "integer",
            "format": "int32",
            "description": "Personnel Id",
            "example": 37664
          }
        }
      },
      "PersonnelSummaryResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/AssociatePersonnelRequest"
          },
          {
            "type": "object",
            "properties": {
              "Prefix": {
                "type": "string",
                "nullable": true,
                "enum": [
                  "None",
                  "Mr.",
                  "Ms.",
                  "Dr.",
                  "Esq",
                  "Mr. and Mrs.",
                  "Mrs.",
                  "Ph.D.",
                  "Rev.",
                  "Sir."
                ],
                "description": "Prefix",
                "maxLength": 20
              },
              "FirstName": {
                "type": "string",
                "example": "FirstName",
                "description": "First Name",
                "maxLength": 100
              },
              "MI": {
                "type": "string",
                "example": "MI",
                "description": "Middle Name",
                "maxLength": 100
              },
              "LastName": {
                "type": "string",
                "example": "LastName",
                "description": "Last Name",
                "maxLength": 100
              },
              "Suffix": {
                "type": "string",
                "example": "Suffix",
                "description": "Suffix",
                "maxLength": 30
              },
              "Title": {
                "type": "string",
                "example": "Title",
                "description": "Title",
                "maxLength": 100
              },
              "Acronym": {
                "type": "string",
                "example": "Acronym",
                "description": "Acronym",
                "maxLength": 10
              },
              "NickName": {
                "type": "string",
                "example": "NickName",
                "description": "NickName",
                "maxLength": 100
              },
              "FormalName": {
                "type": "string",
                "example": "FormalName",
                "description": "Formal Name",
                "maxLength": 100
              },
              "OfficeCellPhone": {
                "type": "string",
                "example": "(123) 456-7890",
                "description": "Office Cell Phone",
                "maxLength": 20
              },
              "OfficePhone": {
                "type": "string",
                "example": "(123) 456-7890",
                "description": "Office Phone",
                "maxLength": 20
              },
              "OfficePhoneExtension": {
                "type": "string",
                "example": "x464",
                "description": "Office Phone Extension",
                "maxLength": 10
              },
              "OfficeEmail": {
                "type": "string",
                "example": "office@example.com",
                "description": "OfficeEmail",
                "maxLength": 150
              },
              "PersonalCellPhone": {
                "type": "string",
                "example": "(123) 456-7890",
                "description": "Personal Cell Phone",
                "maxLength": 20
              },
              "CellPhone": {
                "type": "string",
                "example": "(123) 456-7890",
                "description": "Cell Phone",
                "maxLength": 20
              },
              "HomePhone": {
                "type": "string",
                "example": "(123) 456-7890",
                "description": "Home Phone",
                "maxLength": 20
              },
              "HomeEmail": {
                "type": "string",
                "example": "home@example.com",
                "description": "Home Email",
                "maxLength": 150
              },
              "ExternalId": {
                "type": "string",
                "example": "ExternalId",
                "description": "ExternalId",
                "maxLength": 50
              },
              "Status": {
                "type": "string",
                "nullable": true,
                "enum": [
                  "Active",
                  "Inactive"
                ],
                "maxLength": 15,
                "description": "Status"
              },
              "ProfileImageUrl": {
                "type": "string",
                "example": "ProfileImageUrl",
                "description": "Profile Image Url",
                "maxLength": 1000
              }
            }
          }
        ]
      },
      "AssociatePracticeAreaRequest": {
        "type": "object",
        "properties": {
          "PracticeAreaID": {
            "type": "integer",
            "format": "int32",
            "example": 12373,
            "description": "Practice Area ID"
          },
          "PracticeAreaName": {
            "type": "string",
            "example": "PracticeAreaName",
            "description": "Practice Area Name",
            "maxLength": 50
          }
        }
      },
      "PracticeAreaRequest": {
        "type": "object",
        "required": [
          "PracticeAreaName"
        ],
        "properties": {
          "PracticeAreaName": {
            "type": "string",
            "example": "PracticeAreaName",
            "description": "Practice Area Name",
            "maxLength": 50
          },
          "PracticeAreaAcronym": {
            "type": "string",
            "example": "PracticeAreaAcronym",
            "description": "Practice Area Acronym",
            "maxLength": 50
          },
          "PracticeAreaAddress1": {
            "type": "string",
            "example": "PracticeAreaAddress1",
            "description": "Practice Area Address1",
            "maxLength": 150
          },
          "PracticeAreaAddress2": {
            "type": "string",
            "example": "PracticeAreaAddress2",
            "description": "Practice Area Address2",
            "maxLength": 150
          },
          "PracticeAreaCity": {
            "type": "string",
            "example": "PracticeAreaCity",
            "description": "Practice Area City",
            "maxLength": 100
          },
          "PracticeAreaStateID": {
            "type": "integer",
            "format": "int32",
            "example": 44,
            "description": "Practice Area State ID"
          },
          "PracticeAreaZip": {
            "type": "string",
            "example": "38893",
            "description": "Practice Area Zip",
            "maxLength": 20
          },
          "PracticeAreaCountryID": {
            "type": "integer",
            "format": "int32",
            "example": 2,
            "description": "Practice Area Country ID"
          },
          "PracticeAreaPhone": {
            "type": "string",
            "example": "(123) 456-7890",
            "description": "Practice Area Phone",
            "maxLength": 20
          },
          "PracticeAreaFax": {
            "type": "string",
            "example": "(123) 456-7890",
            "description": "Practice Area Fax",
            "maxLength": 20
          },
          "PracticeAreaEmail": {
            "type": "string",
            "example": "example@example.com",
            "description": "Practice Area Email",
            "maxLength": 100
          },
          "PracticeAreaUrl": {
            "type": "string",
            "example": "PracticeAreaUrl",
            "description": "Practice Area Url",
            "maxLength": 100
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Create Date"
          },
          "ModifyDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Modify Date"
          },
          "DeleteRecord": {
            "type": "boolean",
            "description": "Delete Record"
          },
          "Available": {
            "type": "boolean",
            "description": "Available"
          },
          "UserID": {
            "type": "integer",
            "format": "int32",
            "example": 58200,
            "description": "UserID"
          },
          "old_practiceareaid": {
            "type": "string",
            "example": "old_practiceareaid",
            "description": "Old Practice Area ID",
            "maxLength": 50
          },
          "practiceareaSalesGoal": {
            "type": "number",
            "format": "float",
            "example": 39.94,
            "description": "Practice Area Sales Goal"
          },
          "MarginPercentage": {
            "type": "number",
            "format": "float",
            "example": 93.62,
            "description": "Margin Percentage"
          },
          "AssessmentPercentage": {
            "type": "number",
            "format": "float",
            "example": 12.37,
            "description": "Assessment Percentage"
          }
        }
      },
      "PracticeAreaResponse": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "PracticeAreaID": {
                "type": "integer",
                "format": "int32",
                "example": 66483,
                "description": "Practice Area ID"
              }
            }
          },
          {
            "$ref": "#/components/schemas/PracticeAreaRequest"
          },
          {
            "type": "object",
            "properties": {
              "ROW_VERSION": {
                "type": "string",
                "nullable": true,
                "format": "byte",
                "maxLength": 8,
                "example": null
              }
            }
          }
        ]
      },
      "ProjectAEScheduleItemRequest": {
        "type": "object",
        "properties": {
          "EstimatedStartDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Estimated Start Date"
          },
          "ActualStartDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Actual Start Date"
          },
          "EstimatedCompletionDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Estimated Completion Date"
          },
          "ActualCompletionDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Actual Completion Date"
          },
          "IsCurrentPhase": {
            "type": "boolean",
            "description": "Is Current Phase?"
          },
          "SchedulePhaseName": {
            "type": "string",
            "example": "Schedule Phase Name",
            "description": "Schedule Phase Name.",
            "maxLength": 100
          },
          "EstimatedVal": {
            "type": "number",
            "format": "float",
            "example": 16.6,
            "description": "Estimated Value"
          },
          "ActualVal": {
            "type": "number",
            "format": "float",
            "example": 79.7,
            "description": "Actual Value"
          },
          "PhaseComments": {
            "type": "string",
            "example": "Phase Comments",
            "description": "Phase Comments",
            "maxLength": 4000
          }
        }
      },
      "ProjectAEScheduleItemResponse": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "ScheduleItemID": {
                "type": "integer",
                "format": "int32",
                "example": 89248,
                "description": "Schedule Item ID"
              },
              "ProjectID": {
                "type": "integer",
                "format": "int32",
                "example": 85284,
                "description": "Project ID"
              }
            }
          },
          {
            "$ref": "#/components/schemas/ProjectAEScheduleItemRequest"
          }
        ]
      },
      "ProjectAEScheduleRequest": {
        "type": "object",
        "properties": {
          "Comments": {
            "type": "string",
            "example": "Comments",
            "description": "Comments",
            "maxLength": 500
          },
          "ConstructionCompletionDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Construction Completion Date"
          },
          "CompletionDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Completion Date"
          }
        }
      },
      "ProjectAEScheduleResponse": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "ScheduleId": {
                "type": "integer",
                "format": "int32",
                "example": 82877,
                "description": "Schedule Id"
              },
              "ProjectId": {
                "type": "integer",
                "format": "int32",
                "example": 82500,
                "description": "Project Id"
              },
              "ProjectStatusName": {
                "type": "string",
                "example": "ProjectStatusName",
                "description": "Project Status Name. Status is required before you can post a new AE Schedule. Manage project status via /api/projects/status.",
                "maxLength": 100
              }
            }
          },
          {
            "$ref": "#/components/schemas/ProjectAEScheduleRequest"
          }
        ]
      },
      "ProjectCompanyRequest": {
        "type": "object",
        "properties": {
          "CompanyId": {
            "type": "integer",
            "format": "int32",
            "example": 71088,
            "description": "Company Id"
          }
        }
      },
      "ProjectCompanyResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ProjectCompanyRequest"
          },
          {
            "type": "object",
            "properties": {
              "Name": {
                "type": "string",
                "example": "Name",
                "description": "Name"
              },
              "ExternalId": {
                "type": "string",
                "example": "ExternalId",
                "description": "External Id"
              }
            }
          }
        ]
      },
      "ProjectConstructionCostsRequest": {
        "type": "object",
        "properties": {
          "OurResponsibility_AC": {
            "type": "number",
            "format": "float",
            "example": 57.08,
            "description": "Our Responsibility Actual Costs"
          },
          "OurResponsibility_PC": {
            "type": "number",
            "format": "float",
            "example": 30.91,
            "description": "Our Responsibility Published Cost"
          },
          "OrigPreconst_AC": {
            "type": "number",
            "format": "float",
            "example": 85.42,
            "description": "Original Preconstruction Actual Cost"
          },
          "ConstBudget_AC": {
            "type": "number",
            "format": "float",
            "example": 85.39,
            "description": "Construction Budget Actual Cost"
          },
          "OwnTotalDevCost_AC": {
            "type": "number",
            "format": "float",
            "example": 23.61,
            "description": "Owner Total Development Cost Actual Cost"
          },
          "OrigConstContract_AC": {
            "type": "number",
            "format": "float",
            "example": 17.72,
            "description": "Original Construction Contract (OCC) Actual Cost"
          },
          "OrigPreconst_PC": {
            "type": "number",
            "format": "float",
            "example": 27.58,
            "description": "Original Preconstruction Published Cost"
          },
          "ModPreconst_PC": {
            "type": "number",
            "format": "float",
            "example": 38.58,
            "description": "Modified Preconstruction Published Cost"
          },
          "ConstBudget_PC": {
            "type": "number",
            "format": "float",
            "example": 59.97,
            "description": "Construction Budget Published Cost"
          },
          "OwnTotalDevCost_PC": {
            "type": "number",
            "format": "float",
            "example": 50.13,
            "description": "Owner Total Development Cost Published Cost"
          },
          "OrigConstContract_PC": {
            "type": "number",
            "format": "float",
            "example": 81.07,
            "description": "Original Construction Contract (OCC) Published Cost"
          },
          "ModConstContract_PC": {
            "type": "number",
            "format": "float",
            "example": 60.15,
            "description": "Modified Construction Contract (MCC) Published Cost"
          },
          "StdChangeOrd_PC": {
            "type": "number",
            "format": "float",
            "example": 67.35,
            "description": "Standard Change Order Value(Change Orders, not GMP or Precon)(COV) Published Cost"
          },
          "GMPChangeOrd_count": {
            "type": "integer",
            "format": "int32",
            "example": 2,
            "description": "GMP Change Order Count"
          },
          "GMPChangeOrd_val": {
            "type": "number",
            "format": "float",
            "example": 23.13,
            "description": "GMP Change Order Value"
          },
          "PreconChangeOrd_count": {
            "type": "integer",
            "format": "int32",
            "example": 3,
            "description": "Precon Change Order Count"
          },
          "PreconChangeOrd_val": {
            "type": "number",
            "format": "float",
            "example": 62.95,
            "description": "Precon Change Order Value"
          },
          "StdChangeOrd_count": {
            "type": "integer",
            "format": "int32",
            "example": 5,
            "description": "Standard Change Order Count"
          },
          "StdChangeOrd_val": {
            "type": "number",
            "format": "float",
            "example": 13,
            "description": "Standard Change Order Value"
          },
          "ChangeOrdComments": {
            "type": "string",
            "example": "ChangeOrdComments",
            "description": "Reasons for Change Orders",
            "maxLength": 4000
          },
          "ConstCostComments": {
            "type": "string",
            "example": "ConstCostComments",
            "description": "Project Construction Costs Comments",
            "maxLength": 4000
          },
          "FinCont_PC": {
            "type": "number",
            "format": "float",
            "example": 78.87,
            "description": "Final (or Current) Contract Published Cost"
          },
          "FinCostab_PC": {
            "type": "number",
            "format": "float",
            "example": 70.02,
            "description": "% Final Costs Above/Below Published Cost"
          },
          "RFIs": {
            "type": "number",
            "format": "float",
            "example": 53.48,
            "description": "RFIs"
          },
          "ConsValueEngSav": {
            "type": "number",
            "format": "float",
            "example": 56.22,
            "description": "Construction Value Engineering Savings"
          },
          "ConsValueEngSavPercentage": {
            "type": "number",
            "format": "float",
            "example": 50.62,
            "description": "Value Engineering Savings %"
          },
          "TotalSavReturnedToOwner": {
            "type": "number",
            "format": "float",
            "example": 81.44,
            "description": "Total Savings Returned To Owner"
          },
          "ConfidentialCost": {
            "type": "boolean",
            "description": "Confidential Cost"
          },
          "ModPreconst_AC": {
            "type": "number",
            "format": "float",
            "example": 48.57,
            "description": "Modified Preconstruction Actual Cost"
          },
          "ModConstContract_AC": {
            "type": "number",
            "format": "float",
            "example": 40.66,
            "description": "Modified Construction Contract (MCC) Actual Cost"
          },
          "StdChangeOrd_AC": {
            "type": "number",
            "format": "float",
            "example": 62.18,
            "description": "Standard Change Order Value(Change Orders, not GMP or Precon)(COV) Actual Cost"
          },
          "FinCont_AC": {
            "type": "number",
            "format": "float",
            "example": 97.46,
            "description": "Final (or Current) Contract Actual Cost"
          },
          "FinCostab_AC": {
            "type": "number",
            "format": "float",
            "example": 26.4,
            "description": "% Final Costs Above/Below Actual Cost"
          },
          "TotalChangeOrd_count": {
            "type": "integer",
            "format": "int32",
            "example": 10,
            "description": "Total Change Order Count"
          },
          "TotalChangeOrd_val": {
            "type": "number",
            "format": "float",
            "example": 79.19,
            "description": "Total Change Order Value"
          },
          "PreconInContract": {
            "type": "string",
            "example": "PreconInContract",
            "description": "Precon In Contract",
            "maxLength": 4000
          }
        }
      },
      "ProjectConstructionCostsResponse": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "ProjectId": {
                "type": "integer",
                "format": "int32",
                "example": 77623
              }
            }
          },
          {
            "$ref": "#/components/schemas/ProjectConstructionCostsRequest"
          }
        ]
      },
      "ProjectConstructionScheduleRequest": {
        "type": "object",
        "properties": {
          "DateOfBid": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Date of Bid"
          },
          "DateOfAward": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Date of Award"
          },
          "ExecutionDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Execution Date"
          },
          "ScheduledStartDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Scheduled Start Date"
          },
          "ScheduledCompletionDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Scheduled Completion Date"
          },
          "ActualStartDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Actual Start Date"
          },
          "ActualCompletionDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Actual Completion Date"
          },
          "ScheduledStartDateConstruction": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Scheduled Start Date"
          },
          "ScheduledSubstantialCompletionDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Scheduled Substantial Completion Date"
          },
          "ActualStartDateConstruction": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Actual Start Date"
          },
          "ModifiedScheduledSubstantialCompletionDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Modified Scheduled Substantial Completion Date"
          },
          "ActualSubstantialCompletionDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Actual Substantial Completion Date"
          },
          "FinalPaymentDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Final Payment Date"
          },
          "WarrantyExpirationDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Warranty Expiration Date"
          },
          "ReasonForScheduleDelay": {
            "type": "string",
            "example": "ReasonForScheduleDelay",
            "description": "Reason for Schedule Performance Delays/Extensions",
            "maxLength": 8000
          },
          "ScheduleComments": {
            "type": "string",
            "example": "ScheduleComments",
            "description": "Construction Schedule Comments",
            "maxLength": 8000
          }
        }
      },
      "ProjectConstructionScheduleResponse": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "ProjectId": {
                "type": "integer",
                "format": "int32",
                "example": 95613
              }
            }
          },
          {
            "$ref": "#/components/schemas/ProjectConstructionScheduleRequest"
          },
          {
            "type": "object",
            "properties": {
              "MidTermFollowUpDate": {
                "type": "string",
                "format": "date-time",
                "example": "2022-09-01T12:31:10",
                "description": "Mid-Term Follow-Up Date"
              },
              "TenMonthFollowUpDate": {
                "type": "string",
                "format": "date-time",
                "example": "2022-09-01T12:31:10",
                "description": "10-Month Follow-Up Date"
              },
              "OriginalScheduleInDays": {
                "type": "integer",
                "format": "int32",
                "example": 295,
                "description": "Original Schedule in Days"
              },
              "DaysAheadBehind": {
                "type": "integer",
                "format": "int32",
                "example": 54,
                "description": "Days Ahead/Behind"
              },
              "PercentAheadBehind": {
                "type": "number",
                "format": "float",
                "description": "Percent Ahead/Behind",
                "example": 4.22
              },
              "CalculatedStartDate": {
                "type": "string",
                "format": "date-time",
                "example": "2022-09-01T12:31:10",
                "description": "Calculated Start Date"
              },
              "CalculatedCompletionDate": {
                "type": "string",
                "format": "date-time",
                "example": "2022-09-01T12:31:10",
                "description": "Calculated Completion Date"
              }
            }
          }
        ]
      },
      "ProjectConstructionTypeRequest": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32",
            "example": 58625,
            "description": "Id"
          },
          "Name": {
            "type": "string",
            "example": "Name",
            "description": "Name"
          }
        }
      },
      "ProjectConstructionTypeResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ProjectConstructionTypeRequest"
          },
          {
            "type": "object",
            "properties": {
              "Description": {
                "type": "string",
                "example": "Description",
                "description": "Description"
              },
              "IsRemoved": {
                "type": "boolean",
                "description": "Is Removed"
              },
              "IsDeleted": {
                "type": "boolean",
                "description": "Is Deleted"
              }
            }
          }
        ]
      },
      "CreateProjectConsultantContactRequest": {
        "type": "object",
        "properties": {
          "Contact": {
            "$ref": "#/components/schemas/ProjectContactRequest"
          },
          "ContactRole": {
            "$ref": "#/components/schemas/ProjectContactRoleRequest"
          },
          "Comments": {
            "type": "string",
            "description": "Comments",
            "maxLength": 1000
          }
        }
      },
      "ProjectConsultantContactResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/UpdateProjectConsultantContactRequest"
          },
          {
            "type": "object",
            "properties": {
              "Contact": {
                "$ref": "#/components/schemas/ProjectContactResponse"
              },
              "ContactRole": {
                "$ref": "#/components/schemas/ProjectContactRoleResponse"
              }
            }
          }
        ]
      },
      "UpdateProjectConsultantContactRequest": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "Id": {
                "type": "integer",
                "format": "int32",
                "description": "Project Consultant Contact Id"
              }
            }
          },
          {
            "$ref": "#/components/schemas/UpdateSingleProjectConsultantContactRequest"
          }
        ]
      },
      "UpdateSingleProjectConsultantContactRequest": {
        "type": "object",
        "properties": {
          "Comments": {
            "type": "string",
            "description": "Comments",
            "maxLength": 1000
          }
        }
      },
      "ProjectContactRequest": {
        "type": "object",
        "properties": {
          "ContactId": {
            "type": "integer",
            "format": "int32",
            "description": "Contact Id"
          }
        }
      },
      "ProjectContactResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ProjectContactRequest"
          },
          {
            "type": "object",
            "properties": {
              "Prefix": {
                "type": "string",
                "description": "Prefix",
                "maxLength": 50
              },
              "FirstName": {
                "type": "string",
                "description": "First Name",
                "maxLength": 255
              },
              "MiddleName": {
                "type": "string",
                "description": "Middle Name",
                "maxLength": 50
              },
              "LastName": {
                "type": "string",
                "description": "Last Name",
                "maxLength": 255
              },
              "Suffix": {
                "type": "string",
                "description": "Suffix",
                "maxLength": 50
              },
              "Title": {
                "type": "string",
                "description": "Title",
                "maxLength": 255
              },
              "FormalName": {
                "type": "string",
                "description": "Formal Name",
                "maxLength": 255
              },
              "CompanyName": {
                "type": "string",
                "description": "Company Name",
                "maxLength": 255
              }
            }
          }
        ]
      },
      "ProjectContactRoleRequest": {
        "type": "object",
        "properties": {
          "ContactRoleId": {
            "type": "integer",
            "format": "int32",
            "description": "Contact RoleId"
          }
        }
      },
      "ProjectContactRoleResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ProjectContactRoleRequest"
          },
          {
            "type": "object",
            "properties": {
              "ContactRoleName": {
                "type": "string",
                "description": "Contact Role Name",
                "maxLength": 100
              }
            }
          }
        ]
      },
      "ProjectContractTypeRequest": {
        "type": "object",
        "properties": {
          "ContractTypeId": {
            "type": "integer",
            "format": "int32",
            "description": "Contract Type Id",
            "example": 187374
          },
          "ContractTypeName": {
            "type": "string",
            "description": "Contract Type Name",
            "example": "Example Contract Type"
          }
        }
      },
      "ProjectContractTypeResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ProjectContractTypeRequest"
          },
          {
            "type": "object",
            "properties": {
              "Description": {
                "type": "string",
                "description": "Description"
              },
              "AvailableType": {
                "type": "integer",
                "format": "int32",
                "description": "Available Type"
              },
              "ContractTypeOrder": {
                "type": "integer",
                "format": "int32",
                "description": "Contract Type Order"
              },
              "DeleteRecord": {
                "type": "integer",
                "format": "int32",
                "description": "Is Deleted (1=Yes/0=No)"
              },
              "CreateDate": {
                "type": "string",
                "format": "date-time",
                "example": "2022-09-01T12:31:10",
                "description": "Created Date"
              },
              "Old_ID": {
                "type": "integer",
                "format": "int32",
                "description": "Old Id"
              },
              "ROW_VERSION": {
                "type": "string",
                "format": "byte",
                "description": "Row Version"
              },
              "contractCode": {
                "type": "string",
                "description": "Contract Code"
              }
            }
          }
        ]
      },
      "ProjectDescriptionRequest": {
        "type": "object",
        "properties": {
          "DescriptionTypeId": {
            "type": "integer",
            "format": "int32",
            "example": 60662,
            "description": "Description Type Id"
          },
          "DescriptionType": {
            "type": "string",
            "example": "Description Type",
            "description": "Description Type Name",
            "maxLength": 255
          },
          "Header": {
            "type": "string",
            "example": "Header",
            "description": "Header",
            "maxLength": 100
          },
          "Description": {
            "type": "string",
            "example": "Description",
            "description": "Description",
            "maxLength": 4000
          },
          "Comments": {
            "type": "string",
            "example": "Comments",
            "description": "Comments",
            "maxLength": 4000
          },
          "IsTimeSensitive": {
            "type": "boolean",
            "description": "Is Time Sensitive"
          },
          "IsWebsite": {
            "type": "boolean",
            "description": "Is Website Description"
          },
          "IsResume": {
            "type": "boolean",
            "description": "Is Resume Description"
          },
          "IsSf330": {
            "type": "boolean",
            "description": "Is Sf330 Description"
          }
        }
      },
      "ProjectDescriptionResponse": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "DescriptionId": {
                "type": "integer",
                "format": "int32",
                "example": 60662,
                "description": "Description Id"
              }
            }
          },
          {
            "$ref": "#/components/schemas/ProjectDescriptionRequest"
          }
        ]
      },
      "ProjectFeeBreakdownRequest": {
        "type": "object",
        "properties": {
          "GrossFees_OwnerBudgetedFee": {
            "type": "number",
            "format": "float",
            "example": 53.15,
            "description": "Gross Fees - Owner Budgeted Fee"
          },
          "GrossFees_EstimatedFee": {
            "type": "number",
            "format": "float",
            "example": 39.41,
            "description": "Gross Fees - Estimated Fee"
          },
          "GrossFees_ContractedFee": {
            "type": "number",
            "format": "float",
            "example": 59.96,
            "description": "Gross Fees - Contracted Fee"
          },
          "GrossFees_ChangeOrderFee": {
            "type": "number",
            "format": "float",
            "example": 84.24,
            "description": "Gross Fees - Change Order Fee"
          },
          "GrossFees_PublishedFee": {
            "type": "number",
            "format": "float",
            "example": 29.44,
            "description": "Gross Fees - Published Fee"
          },
          "SubConsultantFees_OwnerBudgetedFee": {
            "type": "number",
            "format": "float",
            "example": 2.57,
            "description": "Sub Consultant Fees - Owner Budgeted Fee"
          },
          "SubConsultantFees_EstimatedFee": {
            "type": "number",
            "format": "float",
            "example": 12.16,
            "description": "Sub Consultant Fees - Estimated Fee"
          },
          "SubConsultantFees_ContractedFee": {
            "type": "number",
            "format": "float",
            "example": 63.81,
            "description": "Sub Consultant Fees - Contracted Fee"
          },
          "SubConsultantFees_ChangeOrderFee": {
            "type": "number",
            "format": "float",
            "example": 49.01,
            "description": "Sub Consultant Fees - Change Order Fee"
          },
          "SubConsultantFees_PublishedFee": {
            "type": "number",
            "format": "float",
            "example": 56.81,
            "description": "Sub Consultant Fees - Published Fee"
          },
          "DirectExpenses_ContractedFee": {
            "type": "number",
            "format": "float",
            "example": 18.58,
            "description": "Direct Expenses - Contracted Fee"
          },
          "DirectExpenses_PublishedFee": {
            "type": "number",
            "format": "float",
            "example": 77.59,
            "description": "Direct Expenses - Published Fee"
          }
        }
      },
      "ProjectFeeBreakdownResponse": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "ProjectId": {
                "type": "integer",
                "format": "int32",
                "example": 64854
              }
            }
          },
          {
            "$ref": "#/components/schemas/ProjectFeeBreakdownRequest"
          },
          {
            "type": "object",
            "properties": {
              "GrossFees_FinalFee": {
                "type": "number",
                "format": "float",
                "example": 63.11,
                "description": "Gross Fees - Final Fee"
              },
              "SubConsultantFees_FinalFee": {
                "type": "number",
                "format": "float",
                "example": 60.22,
                "description": "Sub Consultant Fees - Final Fee"
              },
              "DirectExpenses_FinalFee": {
                "type": "number",
                "format": "float",
                "example": 55.68,
                "description": "Direct Expenses - Final Fee"
              },
              "NetFee_OwnerBudgetedFee": {
                "type": "number",
                "format": "float",
                "example": 11.71,
                "description": "Net Fee - Owner Budgeted Fee"
              },
              "NetFee_EstimatedFee": {
                "type": "number",
                "format": "float",
                "example": 91.33,
                "description": "Net Fee - Estimated Fee"
              },
              "NetFee_ContractedFee": {
                "type": "number",
                "format": "float",
                "example": 7.84,
                "description": "Net Fee - Contracted Fee"
              },
              "NetFee_ChangeOrderFee": {
                "type": "number",
                "format": "float",
                "example": 4.28,
                "description": "Net Fee - Change Order Fee"
              },
              "NetFee_FinalFee": {
                "type": "number",
                "format": "float",
                "example": 22.67,
                "description": "Net Fee - Final Fee"
              },
              "NetFee_PublishedFee": {
                "type": "number",
                "format": "float",
                "example": 15.55,
                "description": "Net Fee - Published Fee"
              }
            }
          }
        ]
      },
      "ProjectOpportunityRequest": {
        "type": "object",
        "properties": {
          "OpportunityId": {
            "type": "integer",
            "format": "int32",
            "example": 35630,
            "description": "Opportunity ID"
          }
        }
      },
      "CreateProjectOwnerClientRequest": {
        "type": "object",
        "properties": {
          "Company": {
            "$ref": "#/components/schemas/ProjectCompanyRequest"
          },
          "Comments": {
            "type": "string",
            "example": "Comments",
            "description": "Comments",
            "maxLength": 1000
          },
          "LegacyRole": {
            "type": "string",
            "nullable": true,
            "enum": [
              "Client",
              "Owner",
              "OwnersRepresentative"
            ],
            "maxLength": 20,
            "description": "Role Type"
          }
        }
      },
      "ProjectOwnerClientResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/UpdateProjectOwnerClientRequest"
          },
          {
            "type": "object",
            "properties": {
              "Company": {
                "$ref": "#/components/schemas/ProjectCompanyResponse"
              },
              "LegacyRole": {
                "type": "string",
                "nullable": true,
                "enum": [
                  "Client",
                  "Owner",
                  "OwnersRepresentative"
                ],
                "maxLength": 20,
                "description": "Role Type"
              }
            }
          }
        ]
      },
      "UpdateProjectOwnerClientRequest": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "Id": {
                "type": "integer",
                "format": "int32",
                "description": "Project Owner Client Id"
              }
            }
          },
          {
            "$ref": "#/components/schemas/UpdateSingleProjectOwnerClientRequest"
          }
        ]
      },
      "UpdateSingleProjectOwnerClientRequest": {
        "type": "object",
        "properties": {
          "Comments": {
            "type": "string",
            "description": "Comments",
            "maxLength": 1000
          }
        }
      },
      "CreateProjectOwnerClientContactRequest": {
        "type": "object",
        "properties": {
          "Contact": {
            "$ref": "#/components/schemas/ProjectContactRequest"
          },
          "ContactRole": {
            "$ref": "#/components/schemas/ProjectContactRoleRequest"
          },
          "Comments": {
            "type": "string",
            "description": "Comments",
            "maxLength": 1000
          }
        }
      },
      "ProjectOwnerClientContactResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/UpdateProjectOwnerClientContactRequest"
          },
          {
            "type": "object",
            "properties": {
              "Contact": {
                "$ref": "#/components/schemas/ProjectContactResponse"
              },
              "ContactRole": {
                "$ref": "#/components/schemas/ProjectContactRoleResponse"
              }
            }
          }
        ]
      },
      "UpdateProjectOwnerClientContactRequest": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "Id": {
                "type": "integer",
                "format": "int32",
                "description": "Project OwnerClient Contact Id"
              }
            }
          },
          {
            "$ref": "#/components/schemas/UpdateSingleProjectOwnerClientContactRequest"
          }
        ]
      },
      "UpdateSingleProjectOwnerClientContactRequest": {
        "type": "object",
        "properties": {
          "Comments": {
            "type": "string",
            "description": "Comments",
            "maxLength": 1000
          }
        }
      },
      "ProjectRequest": {
        "type": "object",
        "properties": {
          "ProjectName": {
            "type": "string",
            "maxLength": 255,
            "description": "Project Name - Main"
          },
          "OtherProjectName": {
            "type": "string",
            "maxLength": 255,
            "description": "Project Name - Other"
          },
          "ProjectNumber": {
            "type": "string",
            "maxLength": 50,
            "description": "Project Number"
          },
          "ProjAddress": {
            "type": "string",
            "maxLength": 50,
            "description": "Project Address"
          },
          "ProjCity": {
            "type": "string",
            "maxLength": 50,
            "description": "Project City"
          },
          "ProjState": {
            "type": "string",
            "maxLength": 50,
            "description": "Project State",
            "example": "NY"
          },
          "ProjZip": {
            "type": "string",
            "maxLength": 10,
            "description": "Project Zip",
            "example": "12345"
          },
          "ProjCounty": {
            "type": "string",
            "maxLength": 50,
            "description": "Project County"
          },
          "ProjCountry": {
            "type": "string",
            "maxLength": 50,
            "description": "Project Country Name",
            "example": "United States"
          },
          "MetroArea": {
            "type": "string",
            "maxLength": 100,
            "description": "Project MetroArea"
          },
          "CompletionDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Completion Date"
          },
          "FederalWork": {
            "type": "string",
            "nullable": true,
            "enum": [
              "Federal Work",
              "Other Domestic",
              "Other Foreign"
            ],
            "maxLength": 30,
            "description": "Federal Work Type"
          },
          "Preferred": {
            "type": "boolean",
            "description": "Preferred"
          },
          "Prominent": {
            "type": "boolean",
            "description": "Prominent"
          },
          "DescriptionBrief": {
            "type": "string",
            "maxLength": 4000
          },
          "Comments": {
            "type": "string",
            "maxLength": 50000
          },
          "ProposalNumber": {
            "type": "string",
            "maxLength": 500,
            "description": "Proposal Number"
          },
          "SitePhoneNumber": {
            "type": "string",
            "maxLength": 25,
            "description": "Project Site Phone",
            "example": "(123) 456-7890"
          },
          "WorkCompletionDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10"
          },
          "PercentComplete": {
            "type": "number",
            "format": "float",
            "description": "Percent Complete"
          },
          "ConstructionType": {
            "type": "string",
            "maxLength": 255
          },
          "ProjectAuthorization": {
            "type": "string",
            "nullable": true,
            "enum": [
              "Verbal",
              "Signed Notice to Proceed",
              "Signed Contract",
              "Email"
            ],
            "description": "Project Authorization",
            "maxLength": 50
          },
          "ClientComments": {
            "type": "string",
            "maxLength": 4000
          },
          "OwnerComments": {
            "type": "string",
            "maxLength": 4000
          },
          "AccountExecutiveComments": {
            "type": "string",
            "maxLength": 4000
          },
          "CostConfidential": {
            "type": "boolean"
          },
          "Phase": {
            "type": "string",
            "maxLength": 50
          },
          "AwardedDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Date Awarded"
          },
          "ContractSignedDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Date Contract Signed"
          },
          "DesignStartDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10"
          },
          "DesignCompleteDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10"
          },
          "ConstructionStartDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10"
          },
          "ActualCompletionDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10"
          },
          "EstCompletionDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10"
          },
          "EstConstructionStartDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10"
          },
          "CertOfOccDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10"
          },
          "AccountingClosedDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10"
          },
          "ScheduleComments": {
            "type": "string",
            "maxLength": 4000
          },
          "BuildingSize": {
            "type": "integer",
            "format": "int32",
            "description": "Size of Building"
          },
          "SizeType": {
            "type": "string",
            "nullable": true,
            "enum": [
              "SF",
              "SM"
            ],
            "description": "Size Type (SF/SM)",
            "maxLength": 10
          },
          "NumFloors": {
            "type": "integer",
            "format": "int32",
            "description": "Size Number of Floors"
          },
          "NumRooms": {
            "type": "integer",
            "format": "int32",
            "description": "Size Number of Rooms"
          },
          "NumBeds": {
            "type": "integer",
            "format": "int32",
            "description": "Size Number of Beds"
          },
          "NumUnits": {
            "type": "integer",
            "format": "int32",
            "description": "Size Number of Units"
          },
          "SiteSize": {
            "type": "string",
            "maxLength": 20,
            "description": "Site Size"
          },
          "NewSize": {
            "type": "string",
            "maxLength": 20,
            "description": "Size New"
          },
          "RenovationSize": {
            "type": "integer",
            "format": "int32",
            "description": "Size Renovation"
          },
          "AdditionSize": {
            "type": "integer",
            "format": "int32",
            "description": "Size Addition"
          },
          "ParkingSpaces": {
            "type": "integer",
            "format": "int32",
            "description": "Size Parking Spaces"
          },
          "ParkingSize": {
            "type": "integer",
            "format": "int32",
            "description": "Size Parking"
          },
          "ProjectNameFor2545": {
            "type": "string",
            "maxLength": 150
          },
          "ResponsibilityFor2545": {
            "type": "string",
            "maxLength": 150
          },
          "CostDisplayType": {
            "type": "string",
            "maxLength": 20
          },
          "Reference2558": {
            "type": "string",
            "maxLength": 20
          },
          "ExperienceType2545": {
            "type": "string",
            "maxLength": 10
          },
          "ProjAddress2": {
            "type": "string",
            "maxLength": 50,
            "description": "Project Address2"
          },
          "LogoFile": {
            "type": "string",
            "maxLength": 50
          },
          "Enabled": {
            "type": "boolean"
          },
          "SubCatsEnabled": {
            "type": "boolean"
          },
          "ProjLocation": {
            "type": "string",
            "maxLength": 100
          },
          "ConstructionCompletionDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10"
          },
          "Subsidiary": {
            "type": "string",
            "maxLength": 50,
            "description": "Subsidiary"
          },
          "DeleteRecord": {
            "type": "integer",
            "format": "int32"
          },
          "SizeComments": {
            "type": "string",
            "maxLength": 8000,
            "description": "Size Comments"
          },
          "Project_Approved": {
            "type": "boolean"
          },
          "ProfileCodeId": {
            "type": "integer",
            "format": "int32"
          },
          "Naics": {
            "type": "integer",
            "format": "int32"
          },
          "Bonded": {
            "type": "integer",
            "format": "int32",
            "description": "Bonded (1=Yes/0=No)"
          },
          "SelfPerform": {
            "type": "integer",
            "format": "int32"
          },
          "Notes": {
            "type": "string",
            "maxLength": 50000,
            "description": "Notes"
          },
          "OwnerType": {
            "type": "string",
            "maxLength": 255
          },
          "FileStatus": {
            "type": "string",
            "maxLength": 255
          },
          "ProjectSpeed": {
            "type": "string",
            "maxLength": 255
          },
          "Procurement": {
            "type": "string",
            "maxLength": 255
          },
          "ProjectsShortText1": {
            "type": "string",
            "maxLength": 4000
          },
          "ProjectsShortText2": {
            "type": "string",
            "maxLength": 4000
          },
          "ProjectsShortText3": {
            "type": "string",
            "maxLength": 4000
          },
          "ProjectsShortText4": {
            "type": "string",
            "maxLength": 4000
          },
          "ProjectsShortText5": {
            "type": "string",
            "maxLength": 4000
          },
          "ProjectsNumber1": {
            "type": "integer",
            "format": "int32"
          },
          "ProjectsNumber2": {
            "type": "integer",
            "format": "int32"
          },
          "ProjectsNumber3": {
            "type": "integer",
            "format": "int32"
          },
          "ProjectsNumber4": {
            "type": "integer",
            "format": "int32"
          },
          "ProjectsNumber5": {
            "type": "integer",
            "format": "int32"
          },
          "ProjectsDate1": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10"
          },
          "ProjectsDate2": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10"
          },
          "ProjectsDate3": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10"
          },
          "ProjectsDate4": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10"
          },
          "ProjectsDate5": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10"
          },
          "ProjectsLongText1": {
            "type": "string",
            "maxLength": 50000
          },
          "ProjectsLongText2": {
            "type": "string",
            "maxLength": 50000
          },
          "ProjectsLongText3": {
            "type": "string",
            "maxLength": 50000
          },
          "ProjectsLongText4": {
            "type": "string",
            "maxLength": 50000
          },
          "ProjectsLongText5": {
            "type": "string",
            "maxLength": 50000
          },
          "ProjectsValueListID1": {
            "type": "integer",
            "format": "int32"
          },
          "ProjectsValueListID2": {
            "type": "integer",
            "format": "int32"
          },
          "ProjectsValueListID3": {
            "type": "integer",
            "format": "int32"
          },
          "ProjectsValueListID4": {
            "type": "integer",
            "format": "int32"
          },
          "ProjectsValueListID5": {
            "type": "integer",
            "format": "int32"
          },
          "ProjectsMoney1": {
            "type": "number",
            "format": "float"
          },
          "ProjectsMoney2": {
            "type": "number",
            "format": "float"
          },
          "ProjectsMoney3": {
            "type": "number",
            "format": "float"
          },
          "ProjectsMoney4": {
            "type": "number",
            "format": "float"
          },
          "ProjectsMoney5": {
            "type": "number",
            "format": "float"
          },
          "Contract_Name": {
            "type": "string",
            "description": "Contract Name",
            "maxLength": 255
          },
          "Accounting_ID": {
            "type": "string",
            "maxLength": 255,
            "description": "Accounting ID"
          },
          "UsesExternalData": {
            "type": "boolean"
          },
          "ArchiveStatus": {
            "type": "string",
            "maxLength": 15
          },
          "FeeBasisFee": {
            "type": "number",
            "format": "float"
          },
          "FeeBasisRate": {
            "type": "number",
            "format": "float"
          },
          "FeeBasisUpset": {
            "type": "number",
            "format": "float"
          },
          "ProjectLink": {
            "type": "boolean"
          },
          "TotalContract": {
            "type": "number",
            "format": "float"
          },
          "InternalLabor": {
            "type": "number",
            "format": "float"
          },
          "FeesEarned": {
            "type": "number",
            "format": "float"
          },
          "BillingInformation": {
            "type": "string",
            "maxLength": 255
          },
          "SiteFax": {
            "type": "string",
            "maxLength": 20,
            "description": "Site Fax",
            "example": "(123) 456-7890"
          },
          "BillingAddress1": {
            "type": "string",
            "maxLength": 50,
            "description": "Billing Address1"
          },
          "BillingAddress2": {
            "type": "string",
            "maxLength": 50,
            "description": "Billing Address2"
          },
          "BillingCity": {
            "type": "string",
            "maxLength": 50,
            "description": "Billing City"
          },
          "BillingState": {
            "type": "string",
            "maxLength": 50,
            "description": "Billing State Name",
            "example": "NY"
          },
          "BillingZip": {
            "type": "string",
            "maxLength": 10,
            "description": "Billing Zip",
            "example": "12345"
          },
          "BillingCountry": {
            "type": "string",
            "maxLength": 50,
            "description": "Billing Country Name",
            "example": "United States"
          },
          "BillingCounty": {
            "type": "string",
            "maxLength": 50,
            "description": "Billing County Name"
          },
          "BillingPhone": {
            "type": "string",
            "maxLength": 20,
            "description": "Billing Phone",
            "example": "(123) 456-7890"
          },
          "BillingFax": {
            "type": "string",
            "maxLength": 20,
            "description": "Billing Fax",
            "example": "(123) 456-7890"
          },
          "BillWithMainJob": {
            "type": "boolean"
          },
          "ProjNumberRequest": {
            "type": "boolean"
          },
          "ProjectsPercent1": {
            "type": "number",
            "format": "float"
          },
          "ProjectsPercent2": {
            "type": "number",
            "format": "float"
          },
          "ProjectsPercent3": {
            "type": "number",
            "format": "float"
          },
          "ProjectsPercent4": {
            "type": "number",
            "format": "float"
          },
          "ProjectsPercent5": {
            "type": "number",
            "format": "float"
          },
          "CreatedDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10"
          },
          "CreatedByUser": {
            "type": "integer",
            "format": "int32"
          },
          "ModifiedDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10"
          },
          "ModifiedUser": {
            "type": "integer",
            "format": "int32"
          },
          "DeletedDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10"
          },
          "DeletedByUser": {
            "type": "integer",
            "format": "int32"
          },
          "ContractTypeID": {
            "type": "integer",
            "format": "int32"
          },
          "ScheduleScheduleComments": {
            "type": "string",
            "maxLength": 500
          },
          "ScheduleContingency": {
            "type": "number",
            "format": "float"
          },
          "ScheduleFactor": {
            "type": "number",
            "format": "float"
          },
          "ScheduleProfitGoal": {
            "type": "number",
            "format": "float"
          },
          "ScheduleConstCompletionDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10"
          },
          "ProjStatus": {
            "type": "string",
            "maxLength": 100
          },
          "ProjectStatusID": {
            "type": "integer",
            "format": "int32"
          },
          "PublishToWebsite": {
            "type": "boolean"
          },
          "OpportunityId": {
            "type": "integer",
            "format": "int32"
          },
          "ProjectDisplayName": {
            "type": "string",
            "maxLength": 500,
            "description": "Project Name - Published"
          },
          "MasterID": {
            "type": "integer",
            "format": "int32"
          },
          "isMarketingProject": {
            "type": "boolean",
            "description": "Marketing Project"
          },
          "isSubMarketingProject": {
            "type": "boolean"
          },
          "ProjLat": {
            "type": "number",
            "format": "float",
            "description": "Project Latitude"
          },
          "ProjLong": {
            "type": "number",
            "format": "float",
            "description": "Project Longitude"
          },
          "isPublishableProject": {
            "type": "boolean",
            "description": "Is Project Publishable"
          },
          "ProjAuthorizeID": {
            "type": "integer",
            "format": "int32"
          },
          "MWDBERequired": {
            "type": "integer",
            "format": "int32",
            "description": "MWDBE Required"
          },
          "MetMWBE": {
            "type": "boolean",
            "description": "Met MWBE"
          },
          "MWBEComments": {
            "type": "string",
            "description": "MWBE Comments",
            "maxLength": 1000
          }
        }
      },
      "ProjectResponse": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "ProjectId": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "$ref": "#/components/schemas/ProjectRequest"
          },
          {
            "type": "object",
            "properties": {
              "ROW_VERSION": {
                "type": "string",
                "nullable": true,
                "format": "byte",
                "maxLength": 8,
                "example": null
              }
            }
          }
        ]
      },
      "CreateProjectStaffTeamRequest": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "Personnel": {
                "$ref": "#/components/schemas/AssociatePersonnelRequest"
              },
              "StaffRole": {
                "$ref": "#/components/schemas/AssociateStaffRoleRequest"
              }
            }
          },
          {
            "$ref": "#/components/schemas/ProjectStaffTeamDetails"
          }
        ]
      },
      "ProjectStaffTeamDetails": {
        "type": "object",
        "properties": {
          "PercentInvolved": {
            "type": "integer",
            "format": "int32",
            "example": 75,
            "description": "Percent Involved"
          },
          "Description": {
            "type": "string",
            "example": "Description",
            "description": "Description",
            "maxLength": 4000
          },
          "PccAccess": {
            "type": "boolean",
            "description": "Pcc Access"
          },
          "StaffTeamHours": {
            "type": "number",
            "format": "float",
            "example": 12.78,
            "description": "Staff Team Hours",
            "minimum": 0
          },
          "InvolvementStartDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Involvement Start Date"
          },
          "InvolvementEndDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Involvement End Date"
          }
        }
      },
      "ProjectStaffTeamResponse": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "Id": {
                "type": "integer",
                "format": "int32",
                "example": 25648,
                "description": "Unique ID for a staff team"
              },
              "Personnel": {
                "$ref": "#/components/schemas/PersonnelSummaryResponse"
              },
              "StaffRole": {
                "$ref": "#/components/schemas/StaffRoleResponse"
              }
            }
          },
          {
            "$ref": "#/components/schemas/ProjectStaffTeamDetails"
          },
          {
            "type": "object",
            "properties": {
              "ModifyDateTime": {
                "type": "string",
                "format": "date-time",
                "example": "2022-09-01T12:31:10",
                "description": "Modify Date Time"
              }
            }
          }
        ]
      },
      "UpdateProjectStaffTeamRequest": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ProjectStaffTeamDetails"
          },
          {
            "type": "object",
            "properties": {
              "IsWorksheetEnabled": {
                "type": "boolean",
                "description": "Is Worksheet Enabled"
              },
              "ExcludeFromPublisher": {
                "type": "boolean",
                "description": "Exclude From Publisher"
              }
            }
          }
        ]
      },
      "ProjectStatusRequest": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32",
            "example": 82546,
            "description": "Status Id"
          },
          "Name": {
            "type": "string",
            "example": "Name",
            "description": "Name"
          }
        }
      },
      "ProjectStatusResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ProjectStatusRequest"
          },
          {
            "type": "object",
            "properties": {
              "IsAvailable": {
                "type": "boolean",
                "description": "Is Available?"
              },
              "IsDeleted": {
                "type": "boolean",
                "description": "Is Deleted?"
              }
            }
          }
        ]
      },
      "AssociateStaffRoleRequest": {
        "type": "object",
        "properties": {
          "StaffRoleId": {
            "type": "integer",
            "format": "int32",
            "description": "Staff RoleId",
            "example": 48387
          }
        }
      },
      "StaffRoleResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/AssociateStaffRoleRequest"
          },
          {
            "type": "object",
            "properties": {
              "StaffRoleName": {
                "type": "string",
                "example": "StaffRoleName",
                "description": "Staff Role Name",
                "maxLength": 200
              },
              "StaffRoleType": {
                "type": "string",
                "nullable": true,
                "enum": [
                  "Executive",
                  "Manager",
                  "Marketing/Biz Dev",
                  "Admin/Support",
                  "Project Team"
                ],
                "description": "Staff Role Type"
              },
              "Description": {
                "type": "string",
                "example": "Description",
                "description": "Description",
                "maxLength": 4000
              },
              "HourlyRate": {
                "type": "number",
                "format": "float",
                "example": 98.2,
                "description": "Hourly Rate"
              },
              "IsAvailable": {
                "type": "boolean",
                "description": "Is Available"
              },
              "IsDeleted": {
                "type": "boolean",
                "description": "Is Deleted"
              },
              "ExternalId": {
                "type": "integer",
                "format": "int32",
                "example": 33093,
                "description": "ExternalId"
              }
            }
          }
        ]
      },
      "AssociateStudioRequest": {
        "type": "object",
        "properties": {
          "StudioID": {
            "type": "integer",
            "format": "int32",
            "example": 33122,
            "description": "Studio ID"
          },
          "StudioName": {
            "type": "string",
            "example": "StudioName",
            "description": "Studio Name",
            "maxLength": 500
          }
        }
      },
      "StudioRequest": {
        "type": "object",
        "required": [
          "StudioName"
        ],
        "properties": {
          "StudioName": {
            "type": "string",
            "example": "StudioName",
            "description": "Studio Name",
            "maxLength": 50
          },
          "StudioAcronym": {
            "type": "string",
            "example": "StudioAcronym",
            "description": "Studio Acronym",
            "maxLength": 50
          },
          "StudioAddress1": {
            "type": "string",
            "example": "StudioAddress1",
            "description": "Studio Address1",
            "maxLength": 150
          },
          "StudioAddress2": {
            "type": "string",
            "example": "StudioAddress2",
            "description": "Studio Address2",
            "maxLength": 150
          },
          "StudioCity": {
            "type": "string",
            "example": "StudioCity",
            "description": "Studio City",
            "maxLength": 100
          },
          "StudioStateID": {
            "type": "integer",
            "format": "int32",
            "example": 41,
            "description": "Studio State ID"
          },
          "StudioZip": {
            "type": "string",
            "example": "18363",
            "description": "Studio Zip",
            "maxLength": 20
          },
          "StudioCountryID": {
            "type": "integer",
            "format": "int32",
            "example": 1,
            "description": "Studio Country ID"
          },
          "StudioPhone": {
            "type": "string",
            "example": "(123) 456-7890",
            "description": "Studio Phone",
            "maxLength": 20
          },
          "StudioFax": {
            "type": "string",
            "example": "(123) 456-7890",
            "description": "Studio Fax",
            "maxLength": 20
          },
          "StudioEmail": {
            "type": "string",
            "example": "example@example.com",
            "description": "Studio Email",
            "maxLength": 100
          },
          "StudioUrl": {
            "type": "string",
            "example": "Studio Url",
            "description": "Studio Url",
            "maxLength": 100
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Create Date"
          },
          "ModifyDate": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Modify Date"
          },
          "DeleteRecord": {
            "type": "boolean",
            "description": "Delete Record"
          },
          "Available": {
            "type": "boolean",
            "description": "Available"
          },
          "UserID": {
            "type": "integer",
            "format": "int32",
            "example": 32640,
            "description": "User ID"
          },
          "old_studioid": {
            "type": "string",
            "example": "old_studioid",
            "description": "Old Studio ID",
            "maxLength": 50
          },
          "StudioSalesGoal": {
            "type": "number",
            "format": "float",
            "example": 1.08,
            "description": "Studio Sales Goal"
          },
          "MarginPercentage": {
            "type": "number",
            "format": "float",
            "example": 65.95,
            "description": "Margin Percentage"
          },
          "AssessmentPercentage": {
            "type": "number",
            "format": "float",
            "example": 84.63,
            "description": "Assessment Percentage"
          },
          "AssociatedServices": {
            "type": "string",
            "example": "AssociatedServices",
            "description": "Associated Services",
            "maxLength": 100
          }
        }
      },
      "StudioResponse": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "StudioID": {
                "type": "integer",
                "format": "int32",
                "example": 88086,
                "description": "Studio ID"
              }
            }
          },
          {
            "$ref": "#/components/schemas/StudioRequest"
          },
          {
            "type": "object",
            "properties": {
              "ROW_VERSION": {
                "type": "string",
                "nullable": true,
                "format": "byte",
                "maxLength": 8,
                "example": null
              }
            }
          }
        ]
      },
      "CompanyRequest": {
        "type": "object",
        "properties": {
          "Name": {
            "type": "string",
            "example": "Name",
            "description": "Name",
            "maxLength": 255
          },
          "Acronym": {
            "type": "string",
            "example": "Acronym",
            "description": "Acronym",
            "maxLength": 50
          },
          "Website": {
            "type": "string",
            "example": "Website",
            "description": "Website",
            "maxLength": 300
          },
          "ExternalId": {
            "type": "string",
            "example": "ExternalId",
            "description": "The external company ID",
            "maxLength": 255
          },
          "FPISImportId": {
            "type": "string",
            "example": "FPISImportId",
            "description": "Legacy ID, does not display in Company record.",
            "maxLength": 255
          },
          "ParentCompanyName": {
            "type": "string",
            "example": "ParentCompanyName",
            "description": "ParentCompanyName",
            "maxLength": 255
          },
          "TickerSymbol": {
            "type": "string",
            "example": "TickerSymbol",
            "description": "TickerSymbol",
            "maxLength": 20
          },
          "SalesTarget": {
            "type": "number",
            "format": "float",
            "example": 35.14,
            "description": "SalesTarget"
          },
          "AnnualRevenue": {
            "type": "number",
            "format": "float",
            "example": 55.01,
            "description": "AnnualRevenue"
          },
          "NumberOfEmployees": {
            "type": "integer",
            "format": "int32",
            "example": 34635,
            "description": "NumberOfEmployees"
          },
          "IsHeadquarters": {
            "type": "boolean",
            "description": "IsHeadquarters"
          },
          "ContactFirmsShortText1": {
            "type": "string",
            "example": "ContactFirmsShortText1",
            "description": "Company Short Text Field",
            "maxLength": 50
          },
          "ContactFirmsShortText2": {
            "type": "string",
            "example": "ContactFirmsShortText2",
            "description": "Company Short Text Field",
            "maxLength": 50
          },
          "ContactFirmsShortText3": {
            "type": "string",
            "example": "ContactFirmsShortText3",
            "description": "Company Short Text Field",
            "maxLength": 50
          },
          "ContactFirmsShortText4": {
            "type": "string",
            "example": "ContactFirmsShortText4",
            "description": "Company Short Text Field",
            "maxLength": 50
          },
          "ContactFirmsShortText5": {
            "type": "string",
            "example": "ContactFirmsShortText5",
            "description": "Company Short Text Field",
            "maxLength": 50
          },
          "ContactFirmsLongText1": {
            "type": "string",
            "example": "ContactFirmsLongText1",
            "description": "Company Custom Long Text Field",
            "maxLength": 8000
          },
          "ContactFirmsLongText2": {
            "type": "string",
            "example": "ContactFirmsLongText2",
            "description": "Company Custom Long Text Field",
            "maxLength": 8000
          },
          "ContactFirmsLongText3": {
            "type": "string",
            "example": "ContactFirmsLongText3",
            "description": "Company Custom Long Text Field",
            "maxLength": 8000
          },
          "ContactFirmsLongText4": {
            "type": "string",
            "example": "ContactFirmsLongText4",
            "description": "Company Custom Long Text Field",
            "maxLength": 8000
          },
          "ContactFirmsLongText5": {
            "type": "string",
            "example": "ContactFirmsLongText5",
            "description": "Company Custom Long Text Field",
            "maxLength": 8000
          },
          "ContactFirmsNumber1": {
            "type": "integer",
            "format": "int32",
            "example": 96594,
            "description": "Company Custom Number Field"
          },
          "ContactFirmsNumber2": {
            "type": "integer",
            "format": "int32",
            "example": 26921,
            "description": "Company Custom Number Field"
          },
          "ContactFirmsNumber3": {
            "type": "integer",
            "format": "int32",
            "example": 55219,
            "description": "Company Custom Number Field"
          },
          "ContactFirmsNumber4": {
            "type": "integer",
            "format": "int32",
            "example": 22869,
            "description": "Company Custom Number Field"
          },
          "ContactFirmsNumber5": {
            "type": "integer",
            "format": "int32",
            "example": 28107,
            "description": "Company Custom Number Field"
          },
          "ContactFirmsDate1": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Company Custom Date Field"
          },
          "ContactFirmsDate2": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Company Custom Date Field"
          },
          "ContactFirmsDate3": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Company Custom Date Field"
          },
          "ContactFirmsDate4": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Company Custom Date Field"
          },
          "ContactFirmsDate5": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "Company Custom Date Field"
          },
          "ContactFirmsValueListID1": {
            "type": "integer",
            "format": "int32",
            "nullable": true,
            "description": "Company Value List Field"
          },
          "ContactFirmsValueListID2": {
            "type": "integer",
            "format": "int32",
            "nullable": true,
            "description": "Company Value List Field"
          },
          "ContactFirmsValueListID3": {
            "type": "integer",
            "format": "int32",
            "nullable": true,
            "description": "Company Value List Field"
          },
          "ContactFirmsValueListID4": {
            "type": "integer",
            "format": "int32",
            "nullable": true,
            "description": "Company Value List Field"
          },
          "ContactFirmsValueListID5": {
            "type": "integer",
            "format": "int32",
            "nullable": true,
            "description": "Company Value List Field"
          },
          "ContactFirmsMoney1": {
            "type": "number",
            "format": "float",
            "example": 98.05,
            "description": "Company Custom Money Field"
          },
          "ContactFirmsMoney2": {
            "type": "number",
            "format": "float",
            "example": 35.94,
            "description": "Company Custom Money Field"
          },
          "ContactFirmsMoney3": {
            "type": "number",
            "format": "float",
            "example": 88.55,
            "description": "Company Custom Money Field"
          },
          "ContactFirmsMoney4": {
            "type": "number",
            "format": "float",
            "example": 52.14,
            "description": "Company Custom Money Field"
          },
          "ContactFirmsMoney5": {
            "type": "number",
            "format": "float",
            "example": 81.8,
            "description": "Company Custom Money Field"
          },
          "ContactFirmsPercent1": {
            "type": "number",
            "format": "float",
            "example": 9.61,
            "description": "Company Custom Percent Field"
          },
          "ContactFirmsPercent2": {
            "type": "number",
            "format": "float",
            "example": 95.12,
            "description": "Company Custom Percent Field"
          },
          "ContactFirmsPercent3": {
            "type": "number",
            "format": "float",
            "example": 39.45,
            "description": "Company Custom Percent Field"
          },
          "ContactFirmsPercent4": {
            "type": "number",
            "format": "float",
            "example": 25.06,
            "description": "Company Custom Percent Field"
          },
          "ContactFirmsPercent5": {
            "type": "number",
            "format": "float",
            "example": 41.04,
            "description": "Company Custom Percent Field"
          },
          "DUNSNumber": {
            "type": "string",
            "example": "DUNSNumber",
            "description": "DUNSNumber",
            "maxLength": 20
          },
          "OtherCompanyName": {
            "type": "string",
            "example": "OtherCompanyName",
            "description": "OtherCompanyName",
            "maxLength": 200
          },
          "Division": {
            "type": "string",
            "example": "Division",
            "description": "Company Division - NOT FIRM ORG",
            "maxLength": 100
          },
          "IsDeleted": {
            "type": "boolean",
            "description": "IsDeleted"
          },
          "Notes": {
            "type": "string",
            "example": "Notes",
            "description": "Notes",
            "maxLength": 8000
          },
          "CreateDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "CreateDateTime"
          },
          "CreatedByUserId": {
            "type": "integer",
            "format": "int32",
            "example": 32538,
            "description": "CreatedByUserId"
          },
          "LastModifiedDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "LastModifiedDateTime"
          },
          "LastModifiedByUserId": {
            "type": "integer",
            "format": "int32",
            "example": 48104,
            "description": "LastModifiedByUserId"
          },
          "LastDeletedDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2022-09-01T12:31:10",
            "description": "LastDeletedDateTime"
          },
          "LastDeletedByUserId": {
            "type": "integer",
            "format": "int32",
            "example": 60169,
            "description": "LastDeletedByUserId"
          },
          "ParentCompanyId": {
            "type": "integer",
            "format": "int32",
            "example": 39241,
            "description": "ParentCompanyId"
          },
          "Services": {
            "type": "string",
            "example": "Services",
            "description": "Services",
            "maxLength": 250
          },
          "Sector": {
            "type": "string",
            "example": "Sector",
            "description": "Sector",
            "maxLength": 250
          },
          "version_userName": {
            "type": "string",
            "example": "version_userName",
            "description": "version_userName",
            "maxLength": 250
          },
          "version_device": {
            "type": "string",
            "example": "version_device",
            "description": "version_device",
            "maxLength": 250
          },
          "AddrLat": {
            "type": "number",
            "format": "float",
            "example": 17.43,
            "description": "AddrLat"
          },
          "AddrLong": {
            "type": "number",
            "format": "float",
            "example": 8.2,
            "description": "AddrLong"
          },
          "isConfidential": {
            "type": "boolean",
            "description": "isConfidential"
          }
        }
      },
      "CompanyFullResponse": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "CompanyId": {
                "type": "integer",
                "format": "int32",
                "example": 41895,
                "description": "Cosential Backend ID, does not display in Company record."
              }
            }
          },
          {
            "$ref": "#/components/schemas/CompanyRequest"
          },
          {
            "type": "object",
            "properties": {
              "ROW_VERSION": {
                "type": "string",
                "nullable": true,
                "format": "byte",
                "maxLength": 8,
                "example": null
              }
            }
          }
        ]
      },
      "CompanySummaryResponse": {
        "type": "object",
        "properties": {
          "CompanyId": {
            "type": "integer",
            "format": "int32",
            "example": 41895,
            "description": "Cosential Backend ID, does not display in Company record."
          },
          "Name": {
            "type": "string",
            "example": "Name",
            "description": "Name",
            "maxLength": 255
          },
          "Acronym": {
            "type": "string",
            "example": "Acronym",
            "description": "Acronym",
            "maxLength": 50
          },
          "ExternalId": {
            "type": "string",
            "example": "ExternalId",
            "description": "The external company ID",
            "maxLength": 255
          },
          "ParentCompanyName": {
            "type": "string",
            "example": "ParentCompanyName",
            "description": "ParentCompanyName",
            "maxLength": 255
          },
          "IsHeadquarters": {
            "type": "boolean",
            "description": "IsHeadquarters"
          },
          "ParentCompanyId": {
            "type": "integer",
            "format": "int32",
            "example": 39241,
            "description": "ParentCompanyId"
          },
          "AddrLat": {
            "type": "number",
            "format": "float",
            "example": 17.43,
            "description": "AddrLat"
          },
          "AddrLong": {
            "type": "number",
            "format": "float",
            "example": 8.2,
            "description": "AddrLong"
          },
          "ChildCount": {
            "type": "number",
            "format": "integer",
            "nullable": true,
            "description": "Number of child companies"
          },
          "Address1": {
            "type": "string",
            "example": "123 Main Street",
            "description": "Address Line 1 for the location of the Company.",
            "maxLength": 255
          },
          "Address2": {
            "type": "string",
            "example": "Suite 762",
            "description": "Address Line 2 for the location of the Company.",
            "maxLength": 255
          },
          "Address3": {
            "type": "string",
            "description": "Address Line 3 for the location of the Company.",
            "maxLength": 255
          },
          "City": {
            "type": "string",
            "example": "Richmond",
            "description": "City of the company's address.",
            "maxLength": 100
          },
          "State": {
            "type": "string",
            "example": "Texas",
            "description": "State of the company's address.",
            "maxLength": 100
          },
          "zip": {
            "type": "string",
            "example": 20121,
            "description": "Postal/zip code of the company's address.",
            "maxLength": 20
          },
          "Country": {
            "type": "string",
            "example": "United States",
            "description": "Country of the project's address."
          }
        }
      }
    },
    "parameters": {
      "DivisionIdPathParam": {
        "description": "Division ID",
        "name": "divisionId",
        "in": "path",
        "schema": {
          "type": "integer",
          "format": "int32"
        },
        "required": true,
        "example": 463743
      },
      "FromQueryParam": {
        "name": "from",
        "in": "query",
        "description": "The number of items to skip before starting to collect the return set.",
        "required": false,
        "schema": {
          "type": "integer",
          "format": "int32",
          "default": 0,
          "example": 0
        }
      },
      "OfficeIdPathParam": {
        "description": "Office ID",
        "name": "officeId",
        "in": "path",
        "schema": {
          "type": "integer",
          "format": "int32"
        },
        "required": true,
        "example": 33212
      },
      "PracticeAreaIdPathParam": {
        "description": "Practice Area ID",
        "name": "practiceAreaId",
        "in": "path",
        "schema": {
          "type": "integer",
          "format": "int32"
        },
        "required": true,
        "example": 143829
      },
      "AEScheduleItemIdPathParam": {
        "description": "AE Schedule Item Id",
        "name": "aeScheduleItemId",
        "in": "path",
        "schema": {
          "type": "integer",
          "format": "int32"
        },
        "required": true,
        "example": 8654175
      },
      "ConstructionTypeIdPathParam": {
        "description": "Construction Type ID",
        "name": "constructionTypeId",
        "in": "path",
        "schema": {
          "type": "integer",
          "format": "int32"
        },
        "required": true,
        "example": 6451
      },
      "ConsultantContactIdPathParam": {
        "description": "Consultant Contact ID",
        "name": "consultantContactId",
        "in": "path",
        "schema": {
          "type": "integer",
          "format": "int32"
        },
        "required": true,
        "example": 8654175
      },
      "ContractTypeIdPathParam": {
        "description": "Contract Type ID",
        "name": "contractTypeId",
        "in": "path",
        "schema": {
          "type": "integer",
          "format": "int32"
        },
        "required": true,
        "example": 3568
      },
      "DescriptionIdPathParam": {
        "description": "Description ID",
        "name": "descriptionId",
        "in": "path",
        "schema": {
          "type": "integer",
          "format": "int32"
        },
        "required": true,
        "example": 84734
      },
      "OwnerClientContactIdPathParam": {
        "description": "Owner / Client Contact ID",
        "name": "ownerClientContactId",
        "in": "path",
        "schema": {
          "type": "integer",
          "format": "int32"
        },
        "required": true,
        "example": 484683
      },
      "OwnerClientIdPathParam": {
        "description": "Owner Client ID",
        "name": "ownerClientId",
        "in": "path",
        "schema": {
          "type": "integer",
          "format": "int32"
        },
        "required": true,
        "example": 383648
      },
      "ProjectIdPathParam": {
        "description": "Project ID",
        "name": "projectId",
        "in": "path",
        "schema": {
          "type": "integer",
          "format": "int32"
        },
        "required": true,
        "example": 8876318
      },
      "StaffTeamIdPathParam": {
        "description": "Staff Team ID",
        "name": "staffTeamId",
        "in": "path",
        "schema": {
          "type": "integer",
          "format": "int32"
        },
        "required": true,
        "example": 483638
      },
      "SizeQueryParam": {
        "name": "size",
        "in": "query",
        "description": "The number of items to return.",
        "required": false,
        "schema": {
          "type": "integer",
          "format": "int32",
          "default": 50,
          "example": 50,
          "maximum": 500
        }
      },
      "StudioIdPathParam": {
        "description": "Studio ID",
        "name": "studioId",
        "in": "path",
        "schema": {
          "type": "integer",
          "format": "int32"
        },
        "required": true,
        "example": 28374
      }
    },
    "securitySchemes": {
      "Bearer": {
        "type": "http",
        "scheme": "bearer",
        "description": "JWT Authorization header using the Bearer scheme. Obtain a token via `POST /v2/api/token/auth`."
      },
      "x-compass-api-key": {
        "type": "apiKey",
        "in": "header",
        "name": "x-compass-api-key",
        "description": "Compass API Key"
      },
      "BasicAuth": {
        "type": "http",
        "scheme": "basic",
        "description": "**⚠️ DEPRECATED** — Basic authentication (username/password) is deprecated and will be removed in a future release. Use `POST /v2/api/token/auth` to obtain a Bearer token instead.\n"
      },
      "LegacyTokenAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "x-compass-token",
        "description": "**⚠️ DEPRECATED** — Legacy token authentication via the `x-compass-token` header is deprecated and will be removed in a future release. Use `POST /v2/api/token/auth` to obtain a Bearer token, or `POST /v2/api/token/auth/refresh` to refresh an existing token.\n"
      }
    }
  },
  "security": [
    {
      "Bearer": [],
      "x-compass-api-key": []
    }
  ]
}
